← Back to team overview

kicad-developers team mailing list archive

MacOSX - A profiling session.

 

I've noted a strange poor performance in the eeschema zooming code and i'vedecited to do a small profiling session to see what happens.
I've used coldfire developer kit schematics and board zooming in and out near the Automatic Zoom parameter to have the maximum number of items to "refresh" and Shark an Apple bundled profiling tool.

>From Shark data seems that eeschema's OnZoom refreshes the schematics then calls UpdateStatusBar() that forces a redraw of the Frame and its childs (invoking another schematics refresh again).

This doesn't happens on the pcbnew OnZoom that doesn't have UpdateStatusBar()

Now i don't know if is a MacOSX caracteristics of if is a common thing, buti suggest to do benchmarks on other platforms with and without a comment on eeredraw.cpp:86 to have some comparisons.

I post under some extracts from the session. 

--
Marco

== EESCHEMA ==
100.0%	eeschema	WinEDA_DrawFrame::OnZoom(wxCommandEvent&)	
52.5%	eeschema	WinEDA_DrawFrame::UpdateStatusBar()	
52.5%	eeschema	wxFrameBase::SetStatusText(wxString const&, int)	
52.5%	eeschema	wxStatusBar::SetStatusText(wxString const&, int)	
51.8%	eeschema	wxStatusBarGeneric::SetStatusText(wxString const&, int)	
51.8%	eeschema	wxWindow::Update()	
0.0%	eeschema	wxStatusBarBase::SetStatusText(wxString const&, int)	
0.6%	eeschema	wxWindow::Update()	
0.0%	eeschema	wxWindow::Refresh(bool, wxRect const*)	
0.0%	eeschema	wxStatusBarGeneric::GetFieldRect(int, wxRect&) const	
0.0%	eeschema	wxString::~wxString()	
0.0%	eeschema	wxFormatString::wxFormatString(wchar_t const*)	
0.0%	eeschema	int wxString::Printf<double, double>(wxFormatString const&,double, double)	
47.5%	eeschema	WinEDA_DrawFrame::Recadre_Trace(bool)	

== PCBNEW ==
100.0%	pcbnew	WinEDA_DrawFrame::OnZoom(wxCommandEvent&)	
90.8%	pcbnew	WinEDA_DrawFrame::Recadre_Trace(bool)	
90.8%	pcbnew	WinEDA_DrawFrame::ReDrawPanel()	
90.8%	pcbnew	WinEDA_DrawPanel::ReDraw(wxDC*, bool)	
90.4%	pcbnew	WinEDA_PcbFrame::RedrawActiveWindow(wxDC*, bool)	
89.8%	pcbnew	BOARD::Draw(WinEDA_DrawPanel*, wxDC*, int, wxPoint const&)	
33.2%	pcbnew	TRACK::Draw(WinEDA_DrawPanel*, wxDC*, int, wxPoint const&)	
30.7%	pcbnew	ZONE_CONTAINER::DrawFilledArea(WinEDA_DrawPanel*, wxDC*,int, wxPoint const&)	
21.8%	pcbnew	MODULE::Draw(WinEDA_DrawPanel*, wxDC*, int, wxPoint const&)	
2.1%	pcbnew	ZONE_CONTAINER::Draw(WinEDA_DrawPanel*, wxDC*, int, wxPoint const&)	
1.6%	pcbnew	SEGVIA::Draw(WinEDA_DrawPanel*, wxDC*, int, wxPoint const&)	
0.2%	pcbnew	TEXTE_PCB::Draw(WinEDA_DrawPanel*, wxDC*, int, wxPoint const&)	
0.0%	pcbnew	WinEDA_DrawPanel::GetScreen()	
0.0%	pcbnew	std::vector<wxPoint, std::allocator<wxPoint> >::operator[](unsigned long)	
0.0%	pcbnew	ShowClearance(TRACK const*)	
0.0%	pcbnew	DRAWSEGMENT::Draw(WinEDA_DrawPanel*, wxDC*, int, wxPoint const&)	
0.0%	pcbnew	D_PAD::Next()	
0.4%	pcbnew	WinEDA_DrawPanel::EraseScreen(wxDC*)	
0.2%	pcbnew	WinEDA_DrawFrame::TraceWorkSheet(wxDC*, BASE_SCREEN*, int)	
0.0%	pcbnew	WinEDA_DrawPanel::Trace_Curseur(wxDC*, int)	
0.0%	pcbnew	WinEDA_DrawPanel::DrawBackGround(wxDC*)	
0.4%	pcbnew	WinEDA_DrawPanel::EraseScreen(wxDC*)	
0.0%	pcbnew	wxClientDC::wxClientDC(wxWindow*)	
9.2%	pcbnew	WinEDA_BasePcbFrame::UpdateStatusBar()	
9.2%	pcbnew	WinEDA_DrawFrame::UpdateStatusBar()	
9.2%	pcbnew	wxFrameBase::SetStatusText(wxString const&, int)	
0.0%	pcbnew	int wxString::Printf<int>(wxFormatString const&, int)	
0.0%	pcbnew	int wxString::Printf<double, double>(wxFormatString const&, double, double)