kicad-developers team mailing list archive
-
kicad-developers team
-
Mailing list archive
-
Message #02728
MacOSX - A profiling session.
-
To:
kicad-devel@xxxxxxxxxxxxxxx
-
From:
"Marco Serantoni" <marco.serantoni@...>
-
Date:
Sun, 14 Jun 2009 17:32:46 -0000
-
User-agent:
eGroups-EW/0.82
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)