diff --git a/src/OpenFOAM/db/Time/Time.C b/src/OpenFOAM/db/Time/Time.C index af7bd280a2cb472da8bca0027a6f2d119be08dbc..6089aadbd7d015854675ee7b95f6ff7865827553 100644 --- a/src/OpenFOAM/db/Time/Time.C +++ b/src/OpenFOAM/db/Time/Time.C @@ -28,6 +28,7 @@ License #include "argList.H" #include "HashSet.H" #include "profiling.H" +#include "demandDrivenData.H" #include <sstream> @@ -414,6 +415,7 @@ Foam::Time::Time objectRegistry(*this), + loopProfiling_(nullptr), libs_(), controlDict_ @@ -482,6 +484,7 @@ Foam::Time::Time objectRegistry(*this), + loopProfiling_(nullptr), libs_(), controlDict_ @@ -559,6 +562,7 @@ Foam::Time::Time objectRegistry(*this), + loopProfiling_(nullptr), libs_(), controlDict_ @@ -629,6 +633,7 @@ Foam::Time::Time objectRegistry(*this), + loopProfiling_(nullptr), libs_(), controlDict_ @@ -672,6 +677,8 @@ Foam::Time::Time Foam::Time::~Time() { + deleteDemandDrivenData(loopProfiling_); + forAllReverse(controlDict_.watchIndices(), i) { removeWatch(controlDict_.watchIndices()[i]); @@ -910,6 +917,8 @@ Foam::dimensionedScalar Foam::Time::endTime() const bool Foam::Time::run() const { + deleteDemandDrivenData(loopProfiling_); + bool isRunning = value() < (endTime_ - 0.5*deltaT_); if (!subCycling_) @@ -962,6 +971,13 @@ bool Foam::Time::run() const // Update the "is-running" status following the // possible side-effects from functionObjects isRunning = value() < (endTime_ - 0.5*deltaT_); + + // (re)trigger profiling + if (profiling::active()) + { + loopProfiling_ = + new profilingTrigger("time.run() " + objectRegistry::name()); + } } return isRunning; diff --git a/src/OpenFOAM/db/Time/Time.H b/src/OpenFOAM/db/Time/Time.H index 16cce3313f7080887b6c51765201af25471c7bc1..5f6dc17321121270684cb353cdc859d16c26c96d 100644 --- a/src/OpenFOAM/db/Time/Time.H +++ b/src/OpenFOAM/db/Time/Time.H @@ -62,6 +62,7 @@ namespace Foam // Forward declaration of classes class argList; +class profilingTrigger; /*---------------------------------------------------------------------------*\ Class Time Declaration @@ -80,6 +81,9 @@ class Time //- file-change monitor for all registered files mutable autoPtr<fileMonitor> monitorPtr_; + //- Profiling trigger for time-loop (for run, loop) + mutable profilingTrigger* loopProfiling_; + //- Any loaded dynamic libraries. Make sure to construct before // reading controlDict. dlLibraryTable libs_;