From 9db4d03a5f1f8b935b8d24a4ed5e8fbdac55661d Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Thu, 22 Dec 2022 15:35:45 +0100 Subject: [PATCH] RegressionTests: Fix performance issues related to DockManager::restoreState * Performance: Disable DockManager::restoreState when running regression tests * Set parent to Qt widgets to avoid memory leak * Change singleton pattern to avoid memory leak --- .../UserInterface/RiuMainWindowBase.cpp | 26 ++++++++++++------- .../RiuSummaryQuantityNameInfoProvider.cpp | 5 ++-- .../cafPdmUiComboBoxEditor.cpp | 2 +- .../cafUserInterface/cafPdmUiLineEditor.cpp | 2 +- 4 files changed, 22 insertions(+), 13 deletions(-) diff --git a/ApplicationLibCode/UserInterface/RiuMainWindowBase.cpp b/ApplicationLibCode/UserInterface/RiuMainWindowBase.cpp index 64ce4f4502..8e15de0cf0 100644 --- a/ApplicationLibCode/UserInterface/RiuMainWindowBase.cpp +++ b/ApplicationLibCode/UserInterface/RiuMainWindowBase.cpp @@ -21,6 +21,7 @@ #include "RiaApplication.h" #include "RiaDefines.h" #include "RiaPreferences.h" +#include "RiaRegressionTestRunner.h" #include "RiaVersionInfo.h" #include "RiuDockWidgetTools.h" @@ -151,7 +152,6 @@ void RiuMainWindowBase::loadWinGeoAndDockToolBarLayout() QVariant winGeo = settings.value( QString( "%1/winGeometry" ).arg( registryFolderName() ) ); QVariant toolbarLayout = settings.value( QString( "%1/toolBarLayout" ).arg( registryFolderName() ) ); - QVariant dockState = settings.value( QString( "%1/dockLayout" ).arg( registryFolderName() ) ); if ( winGeo.isValid() ) { @@ -164,16 +164,24 @@ void RiuMainWindowBase::loadWinGeoAndDockToolBarLayout() } } - bool dockingOk = false; - - if ( dockState.isValid() ) + if ( !RiaRegressionTestRunner::instance()->isRunningRegressionTests() ) { - dockingOk = m_dockManager->restoreState( dockState.toByteArray(), DOCKSTATE_VERSION ); - } + // Performance of m_dockManager->restoreState() is very bad is degrading as more and more regression tests are + // launched. Disable restore of state for regression test. - if ( !dockingOk ) - { - m_dockManager->restoreState( RiuDockWidgetTools::defaultDockState( defaultDockStateNames()[0] ), DOCKSTATE_VERSION ); + bool dockingOk = false; + QVariant dockState = settings.value( QString( "%1/dockLayout" ).arg( registryFolderName() ) ); + + if ( dockState.isValid() ) + { + dockingOk = m_dockManager->restoreState( dockState.toByteArray(), DOCKSTATE_VERSION ); + } + + if ( !dockingOk ) + { + m_dockManager->restoreState( RiuDockWidgetTools::defaultDockState( defaultDockStateNames()[0] ), + DOCKSTATE_VERSION ); + } } settings.beginGroup( registryFolderName() ); diff --git a/ApplicationLibCode/UserInterface/RiuSummaryQuantityNameInfoProvider.cpp b/ApplicationLibCode/UserInterface/RiuSummaryQuantityNameInfoProvider.cpp index c7c779dd9c..fb448e5d0b 100644 --- a/ApplicationLibCode/UserInterface/RiuSummaryQuantityNameInfoProvider.cpp +++ b/ApplicationLibCode/UserInterface/RiuSummaryQuantityNameInfoProvider.cpp @@ -54,8 +54,9 @@ bool is_region_to_region( const std::string& keyword ) //-------------------------------------------------------------------------------------------------- RiuSummaryQuantityNameInfoProvider* RiuSummaryQuantityNameInfoProvider::instance() { - static auto* singleton = new RiuSummaryQuantityNameInfoProvider; - return singleton; + static RiuSummaryQuantityNameInfoProvider theInstance; + + return &theInstance; } //-------------------------------------------------------------------------------------------------- diff --git a/Fwk/AppFwk/cafUserInterface/cafPdmUiComboBoxEditor.cpp b/Fwk/AppFwk/cafUserInterface/cafPdmUiComboBoxEditor.cpp index 58f994f22f..1f51f29ec4 100644 --- a/Fwk/AppFwk/cafUserInterface/cafPdmUiComboBoxEditor.cpp +++ b/Fwk/AppFwk/cafUserInterface/cafPdmUiComboBoxEditor.cpp @@ -386,7 +386,7 @@ QWidget* PdmUiComboBoxEditor::createEditorWidget( QWidget* parent ) connect( m_comboBox, SIGNAL( activated( int ) ), this, SLOT( slotIndexActivated( int ) ) ); - m_autoValueToolButton = new QToolButton(); + m_autoValueToolButton = new QToolButton( m_placeholder ); m_autoValueToolButton->setCheckable( true ); m_autoValueToolButton->setToolButtonStyle( Qt::ToolButtonIconOnly ); diff --git a/Fwk/AppFwk/cafUserInterface/cafPdmUiLineEditor.cpp b/Fwk/AppFwk/cafUserInterface/cafPdmUiLineEditor.cpp index cee18b48d1..6f6e08721e 100644 --- a/Fwk/AppFwk/cafUserInterface/cafPdmUiLineEditor.cpp +++ b/Fwk/AppFwk/cafUserInterface/cafPdmUiLineEditor.cpp @@ -98,7 +98,7 @@ QWidget* PdmUiLineEditor::createEditorWidget( QWidget* parent ) m_layout->setSpacing( 0 ); m_layout->addWidget( m_lineEdit ); - m_autoValueToolButton = new QToolButton(); + m_autoValueToolButton = new QToolButton( m_placeholder ); m_autoValueToolButton->setCheckable( true ); m_autoValueToolButton->setToolButtonStyle( Qt::ToolButtonIconOnly );