diff --git a/reco/eventbuilder/digis/CbmTaskBuildRawEvents.cxx b/reco/eventbuilder/digis/CbmTaskBuildRawEvents.cxx index 2bd074b70ad40a9fdcd7d2e72119c664e3a2e2b9..3cb8a028231972e52340a723713a31c31a7f2d29 100644 --- a/reco/eventbuilder/digis/CbmTaskBuildRawEvents.cxx +++ b/reco/eventbuilder/digis/CbmTaskBuildRawEvents.cxx @@ -20,6 +20,7 @@ #include <TH1.h> #include <TH2.h> #include <THttpServer.h> +#include <TStopwatch.h> #include <iomanip> @@ -64,6 +65,11 @@ void CbmTaskBuildRawEvents::AddSeedTimeFillerToList(RawEventBuilderDetector seed InitStatus CbmTaskBuildRawEvents::Init() { + if (fbGetTimings) { + fTimer = new TStopwatch; + fTimer->Start(); + } + /// Get a handle from the IO manager FairRootManager* ioman = FairRootManager::Instance(); @@ -146,6 +152,8 @@ InitStatus CbmTaskBuildRawEvents::Init() if (kTRUE == fpAlgo->InitAlgo()) return kSUCCESS; else return kFATAL; + + if (fTimer != nullptr) { fTimer->Stop(); } } @@ -153,6 +161,7 @@ InitStatus CbmTaskBuildRawEvents::ReInit() { return kSUCCESS; } void CbmTaskBuildRawEvents::Exec(Option_t* /*option*/) { + if (fTimer != nullptr) { fTimer->Start(kFALSE); } LOG(debug2) << "CbmTaskBuildRawEvents::Exec => Starting sequence"; //Warning: Int_t must be used for the loop counters instead of UInt_t, //as the digi manager can return -1, which would be casted to +1 @@ -258,6 +267,8 @@ void CbmTaskBuildRawEvents::Exec(Option_t* /*option*/) /// Save the resulting vector of events in TClonesArray FillOutput(); LOG(debug2) << "CbmTaskBuildRawEvents::Exec => Done"; + + if (fTimer != nullptr) { fTimer->Stop(); } } void CbmTaskBuildRawEvents::FillSeedTimesFromDetList() @@ -356,11 +367,22 @@ UInt_t CbmTaskBuildRawEvents::GetNofDigis(ECbmModuleId _system) return 0; } +void CbmTaskBuildRawEvents::PrintTimings() +{ + if (fTimer == nullptr) { LOG(fatal) << "Trying to print timings but timer not set"; } + else { + Double_t rtime = fTimer->RealTime(); + Double_t ctime = fTimer->CpuTime(); + LOG(info) << "CbmTaskBuildRawEvents: Real time " << rtime << " s, CPU time " << ctime << " s"; + } +} + void CbmTaskBuildRawEvents::Finish() { /// Call Algo finish method fpAlgo->Finish(); if (fbFillHistos) { SaveHistos(); } + if (fbGetTimings) { PrintTimings(); } } void CbmTaskBuildRawEvents::FillOutput() diff --git a/reco/eventbuilder/digis/CbmTaskBuildRawEvents.h b/reco/eventbuilder/digis/CbmTaskBuildRawEvents.h index deaf093bf6e8df7b23ec167dfb823d58e6dc7c53..7ec4cc99a74e735b3e080407c735db38d48f482b 100644 --- a/reco/eventbuilder/digis/CbmTaskBuildRawEvents.h +++ b/reco/eventbuilder/digis/CbmTaskBuildRawEvents.h @@ -33,6 +33,7 @@ class CbmDigiManager; class RawEventBuilderDetector; class TClonesArray; +class TStopwatch; enum class EOverlapModeRaw; @@ -118,8 +119,10 @@ public: void SetTimings(Bool_t bFlagIn = kTRUE) { if (nullptr != fpAlgo) fpAlgo->SetTimings(bFlagIn); + fbGetTimings = bFlagIn; } + void PrintTimings(); void SetSeedTimeFiller(RawEventBuilderDetector seedDet); void AddSeedTimeFillerToList(RawEventBuilderDetector seedDet); void DumpSeedTimesFromDetList(); @@ -150,12 +153,15 @@ private: void FillSeedTimesFromDetList(); + TStopwatch* fTimer = nullptr; //! is create when fbGetTimings is set before init + CbmAlgoBuildRawEvents* fpAlgo = nullptr; TClonesArray* fEvents = nullptr; //! output container of CbmEvents Bool_t fbFillHistos {kTRUE}; //! Switch ON/OFF filling of histograms Bool_t fbWriteHistosToFairSink {kTRUE}; //! Write histos to FairRootManager instead of separate file + Bool_t fbGetTimings = kFALSE; //! Measure CPU time using stopwatch /** Name of the histogram output file **/ TString fsOutFileName {"data/HistosEvtWin.root"};