From 5f2aaba0ddff3d13188034d423a0a4646e3dbb41 Mon Sep 17 00:00:00 2001 From: Tomasz Wlostowski Date: Sun, 28 Nov 2021 21:52:42 +0100 Subject: [PATCH] qa/pns: added trivial PCB rendering performance test program --- qa/pns/pns_log_viewer.cpp | 58 +++++++++++++++++++++++++++++++++- qa/pns/pns_log_viewer_frame.h | 2 ++ qa/qa_utils/pcb_test_frame.cpp | 12 ++++++- 3 files changed, 70 insertions(+), 2 deletions(-) diff --git a/qa/pns/pns_log_viewer.cpp b/qa/pns/pns_log_viewer.cpp index 98b44fae13..84dd89ec23 100644 --- a/qa/pns/pns_log_viewer.cpp +++ b/qa/pns/pns_log_viewer.cpp @@ -31,6 +31,7 @@ #include #include +#include #include @@ -290,7 +291,7 @@ PNS_LOG_VIEWER_FRAME::PNS_LOG_VIEWER_FRAME( wxFrame* frame ) : PNS_LOG_VIEWER_FR auto settings = static_cast( m_galPanel->GetView()->GetPainter()->GetSettings() ); - settings->SetZoneDisplayMode( ZONE_DISPLAY_MODE::SHOW_ZONE_OUTLINE ); + settings->SetZoneDisplayMode( ZONE_DISPLAY_MODE::SHOW_FILLED ); m_listPopupMenu = new wxMenu( wxT( "" ) ); m_listPopupMenu->Append( ID_LIST_COPY, wxT( "Copy selected geometry" ), wxT( "" ), @@ -481,6 +482,22 @@ void PNS_LOG_VIEWER_FRAME::SetLogFile( PNS_LOG_FILE* aLog ) } + +void PNS_LOG_VIEWER_FRAME::SetBoard2( std::shared_ptr aBoard ) +{ + SetBoard( aBoard ); + + auto extents = m_board->GetBoundingBox(); + + BOX2D bbd; + bbd.SetOrigin( extents.GetOrigin() ); + bbd.SetWidth( extents.GetWidth() ); + bbd.SetHeight( extents.GetHeight() ); + bbd.Inflate( std::min( bbd.GetWidth(), bbd.GetHeight() ) / 5 ); + + m_galPanel->GetView()->SetViewport( bbd ); +} + void PNS_LOG_VIEWER_FRAME::onReload( wxCommandEvent& event ) { event.Skip(); @@ -775,3 +792,42 @@ static bool registered2 = UTILITY_REGISTRY::Register( { "PNS Log Player", replay_main_func, } ); + + + +int render_perftest_main_func( int argc, char* argv[] ) +{ + auto frame = new PNS_LOG_VIEWER_FRAME( nullptr ); + + // drcCreateTestsProviderClearance(); + // drcCreateTestsProviderEdgeClearance(); + + if( argc >= 2 && std::string( argv[1] ) == "-h" ) + { + printf( "PCB render performance test. Just renders a board without UI update overhead.\n" ); + return 0; + } + + if( argc < 2 ) + { + printf( "Expected parameters: board_file\n" ); + return 0; + } + + PROF_COUNTER cnt("load-board"); + std::shared_ptr brd ( loadBoard( argv[1] ) ); + cnt.Stop(); + + KI_TRACE( traceGalProfile, "%s\n", cnt.to_string() ); + + frame->SetBoard2( brd ); + + return 0; +} + + +static bool registered3 = UTILITY_REGISTRY::Register( { + "render_perftest", + "Renderer performance test", + render_perftest_main_func, +} ); diff --git a/qa/pns/pns_log_viewer_frame.h b/qa/pns/pns_log_viewer_frame.h index db2ba53a22..39ea3eda3a 100644 --- a/qa/pns/pns_log_viewer_frame.h +++ b/qa/pns/pns_log_viewer_frame.h @@ -47,6 +47,8 @@ public: virtual ~PNS_LOG_VIEWER_FRAME(); void SetLogFile( PNS_LOG_FILE* aLog ); + void SetBoard2( std::shared_ptr aBoard ); + std::shared_ptr GetOverlay() const { return m_overlay; } private: diff --git a/qa/qa_utils/pcb_test_frame.cpp b/qa/qa_utils/pcb_test_frame.cpp index 5392dfc069..02f9af80cb 100644 --- a/qa/qa_utils/pcb_test_frame.cpp +++ b/qa/qa_utils/pcb_test_frame.cpp @@ -30,7 +30,7 @@ #include #include #include - +#include #include #include @@ -68,6 +68,7 @@ #include "pcb_test_frame.h" +#include using namespace KIGFX; @@ -76,10 +77,19 @@ void PCB_TEST_FRAME_BASE::SetBoard( std::shared_ptr b ) { m_board = b; + PROF_COUNTER cntConnectivity( "connectivity-build" ); m_board->GetConnectivity()->Build( m_board.get() ); + cntConnectivity.Stop(); + + PROF_COUNTER cntView("view-build"); m_galPanel->DisplayBoard( m_board.get() ); + cntView.Stop(); + m_galPanel->UpdateColors(); + KI_TRACE( traceGalProfile, "%s\n", cntConnectivity.to_string() ); + KI_TRACE( traceGalProfile, "%s\n", cntView.to_string() ); + #ifdef USE_TOOL_MANAGER m_toolManager->SetEnvironment( m_board.get(), m_galPanel->GetView(), m_galPanel->GetViewControls(), nullptr );