From f413793f5efe6d6e84d566eceb0c1a9a15e70463 Mon Sep 17 00:00:00 2001 From: Alex Bilger Date: Tue, 21 Sep 2021 17:34:22 +0200 Subject: [PATCH] [Sofa.Helper] Fix and micro-optimize AdvancedTimer (#2349) * [Sofa.Helper] Store id as an id rather than the message used to find the id * [Sofa.Helper] Use map for constant complexity instead of a std::vector * [SofaCore] Missing include * [SofaCore] Missing include * [SofaCore] Missing include * [SofaCore] Missing include --- .../sofa/core/behavior/ConstraintSolver.cpp | 1 + .../src/SofaExplicitOdeSolver/EulerSolver.cpp | 1 + .../src/sofa/helper/AdvancedTimer.h | 25 ++++++++----------- .../src/sofa/helper/ScopedAdvancedTimer.cpp | 9 ++++--- .../src/sofa/helper/ScopedAdvancedTimer.h | 9 ++++--- .../SofaImplicitOdeSolver/StaticSolver.cpp | 2 +- .../src/sofa/simulation/SolveVisitor.cpp | 1 + .../ConstraintAnimationLoop.cpp | 1 + .../MultiStepAnimationLoop.cpp | 1 + .../MultiTagAnimationLoop.cpp | 1 + .../DirectSAPNarrowPhase.cpp | 2 +- 11 files changed, 29 insertions(+), 24 deletions(-) diff --git a/SofaKernel/modules/SofaCore/src/sofa/core/behavior/ConstraintSolver.cpp b/SofaKernel/modules/SofaCore/src/sofa/core/behavior/ConstraintSolver.cpp index 4c6a3e05f7c..c971c410bc7 100644 --- a/SofaKernel/modules/SofaCore/src/sofa/core/behavior/ConstraintSolver.cpp +++ b/SofaKernel/modules/SofaCore/src/sofa/core/behavior/ConstraintSolver.cpp @@ -23,6 +23,7 @@ #include #include #include +#include namespace sofa::core::behavior { diff --git a/SofaKernel/modules/SofaExplicitOdeSolver/src/SofaExplicitOdeSolver/EulerSolver.cpp b/SofaKernel/modules/SofaExplicitOdeSolver/src/SofaExplicitOdeSolver/EulerSolver.cpp index d6fd5fcab52..a7f35ebb17d 100644 --- a/SofaKernel/modules/SofaExplicitOdeSolver/src/SofaExplicitOdeSolver/EulerSolver.cpp +++ b/SofaKernel/modules/SofaExplicitOdeSolver/src/SofaExplicitOdeSolver/EulerSolver.cpp @@ -26,6 +26,7 @@ #include #include #include +#include #include using sofa::simulation::mechanicalvisitor::MechanicalGetNonDiagonalMassesCountVisitor; diff --git a/SofaKernel/modules/SofaHelper/src/sofa/helper/AdvancedTimer.h b/SofaKernel/modules/SofaHelper/src/sofa/helper/AdvancedTimer.h index ddac4fa316c..0e55c9e9a55 100644 --- a/SofaKernel/modules/SofaHelper/src/sofa/helper/AdvancedTimer.h +++ b/SofaKernel/modules/SofaHelper/src/sofa/helper/AdvancedTimer.h @@ -24,10 +24,8 @@ #include #include #include -#include #include -#include #include #include @@ -167,10 +165,12 @@ class SOFA_HELPER_API AdvancedTimer /// the list of the id names. the Ids are the indices in the vector std::vector idsList; + std::map idsMap; IdFactory() { - idsList.push_back(std::string("0")); // ID 0 == "0" or empty string + idsMap.insert({"0", 0}); + idsList.push_back("0"); } public: @@ -184,22 +184,17 @@ class SOFA_HELPER_API AdvancedTimer if (name.empty()) return 0; IdFactory& idfac = getInstance(); - std::vector::iterator it = idfac.idsList.begin(); - unsigned int i = 0; - while (it != idfac.idsList.end() && (*it) != name) - { - ++it; - i++; - } - - if (it!=idfac.idsList.end()) - return i; - else + const auto it = idfac.idsMap.find(name); + if (it == idfac.idsMap.end()) { + const auto idsMapSize = idfac.idsMap.size(); + idfac.idsMap.insert({name, idsMapSize}); idfac.idsList.push_back(name); - return i; + return idsMapSize; } + + return it->second; } static std::size_t getLastID() diff --git a/SofaKernel/modules/SofaHelper/src/sofa/helper/ScopedAdvancedTimer.cpp b/SofaKernel/modules/SofaHelper/src/sofa/helper/ScopedAdvancedTimer.cpp index bce0adcfc85..48314ed10c2 100644 --- a/SofaKernel/modules/SofaHelper/src/sofa/helper/ScopedAdvancedTimer.cpp +++ b/SofaKernel/modules/SofaHelper/src/sofa/helper/ScopedAdvancedTimer.cpp @@ -26,19 +26,20 @@ namespace sofa::helper { ScopedAdvancedTimer::ScopedAdvancedTimer(const std::string& message) - : ScopedAdvancedTimer(message.c_str()) + : m_id( message ) { + AdvancedTimer::stepBegin( m_id ); } ScopedAdvancedTimer::ScopedAdvancedTimer( const char* message ) - : message( message ) + : m_id( message ) { - AdvancedTimer::stepBegin( message ); + AdvancedTimer::stepBegin( m_id ); } ScopedAdvancedTimer::~ScopedAdvancedTimer() { - AdvancedTimer::stepEnd( message ); + AdvancedTimer::stepEnd( m_id ); } } /// sofa::helper diff --git a/SofaKernel/modules/SofaHelper/src/sofa/helper/ScopedAdvancedTimer.h b/SofaKernel/modules/SofaHelper/src/sofa/helper/ScopedAdvancedTimer.h index cdd96ae6c01..93a029178e5 100644 --- a/SofaKernel/modules/SofaHelper/src/sofa/helper/ScopedAdvancedTimer.h +++ b/SofaKernel/modules/SofaHelper/src/sofa/helper/ScopedAdvancedTimer.h @@ -24,6 +24,8 @@ #include #include +#include + namespace sofa::helper { @@ -37,9 +39,10 @@ namespace sofa::helper /// measurement recorded. struct SOFA_HELPER_API ScopedAdvancedTimer { - const char* message; - ScopedAdvancedTimer(const std::string& message); - ScopedAdvancedTimer( const char* message ); + AdvancedTimer::IdStep m_id; + + explicit ScopedAdvancedTimer(const std::string& message); + explicit ScopedAdvancedTimer( const char* message ); ~ScopedAdvancedTimer(); }; diff --git a/SofaKernel/modules/SofaImplicitOdeSolver/src/SofaImplicitOdeSolver/StaticSolver.cpp b/SofaKernel/modules/SofaImplicitOdeSolver/src/SofaImplicitOdeSolver/StaticSolver.cpp index 6e42867880e..a4eceec8bb5 100644 --- a/SofaKernel/modules/SofaImplicitOdeSolver/src/SofaImplicitOdeSolver/StaticSolver.cpp +++ b/SofaKernel/modules/SofaImplicitOdeSolver/src/SofaImplicitOdeSolver/StaticSolver.cpp @@ -22,7 +22,7 @@ #include #include -#include +#include #include #include #include diff --git a/SofaKernel/modules/SofaSimulationCore/src/sofa/simulation/SolveVisitor.cpp b/SofaKernel/modules/SofaSimulationCore/src/sofa/simulation/SolveVisitor.cpp index 8cf4a9917b3..847faa2755b 100644 --- a/SofaKernel/modules/SofaSimulationCore/src/sofa/simulation/SolveVisitor.cpp +++ b/SofaKernel/modules/SofaSimulationCore/src/sofa/simulation/SolveVisitor.cpp @@ -24,6 +24,7 @@ #include #include #include +#include namespace sofa::simulation { diff --git a/modules/SofaConstraint/src/SofaConstraint/ConstraintAnimationLoop.cpp b/modules/SofaConstraint/src/SofaConstraint/ConstraintAnimationLoop.cpp index 2786f07a415..54d5bb4ea38 100644 --- a/modules/SofaConstraint/src/SofaConstraint/ConstraintAnimationLoop.cpp +++ b/modules/SofaConstraint/src/SofaConstraint/ConstraintAnimationLoop.cpp @@ -38,6 +38,7 @@ #include #include #include +#include #include diff --git a/modules/SofaGeneralAnimationLoop/src/SofaGeneralAnimationLoop/MultiStepAnimationLoop.cpp b/modules/SofaGeneralAnimationLoop/src/SofaGeneralAnimationLoop/MultiStepAnimationLoop.cpp index e5e2bb49616..e8cb712d8ad 100644 --- a/modules/SofaGeneralAnimationLoop/src/SofaGeneralAnimationLoop/MultiStepAnimationLoop.cpp +++ b/modules/SofaGeneralAnimationLoop/src/SofaGeneralAnimationLoop/MultiStepAnimationLoop.cpp @@ -32,6 +32,7 @@ #include #include #include +#include #include #include diff --git a/modules/SofaGeneralAnimationLoop/src/SofaGeneralAnimationLoop/MultiTagAnimationLoop.cpp b/modules/SofaGeneralAnimationLoop/src/SofaGeneralAnimationLoop/MultiTagAnimationLoop.cpp index f2083cd74c8..965fa63c0dd 100644 --- a/modules/SofaGeneralAnimationLoop/src/SofaGeneralAnimationLoop/MultiTagAnimationLoop.cpp +++ b/modules/SofaGeneralAnimationLoop/src/SofaGeneralAnimationLoop/MultiTagAnimationLoop.cpp @@ -32,6 +32,7 @@ #include #include #include +#include #include #include diff --git a/modules/SofaGeneralMeshCollision/src/SofaGeneralMeshCollision/DirectSAPNarrowPhase.cpp b/modules/SofaGeneralMeshCollision/src/SofaGeneralMeshCollision/DirectSAPNarrowPhase.cpp index 548c7b3301c..13a1dfbd65e 100644 --- a/modules/SofaGeneralMeshCollision/src/SofaGeneralMeshCollision/DirectSAPNarrowPhase.cpp +++ b/modules/SofaGeneralMeshCollision/src/SofaGeneralMeshCollision/DirectSAPNarrowPhase.cpp @@ -21,7 +21,7 @@ ******************************************************************************/ #include #include -#include +#include #include #include #include