2 #pragma warning( disable : 4786 )
47 template <
typename S,
typename T>
64 , m_header (
" Counter | # | sum | mean/eff^* | rms/err^* | min | max |")
66 , m_format1 (
" %|-15.15s|%|17t||%|10d| |%|11.7g| |%|#11.5g| |%|#11.5g| |%|#12.5g| |%|#12.5g| |" )
68 , m_format2 (
"*%|-15.15s|%|17t||%|10d| |%|11.5g| |(%|#9.7g| +- %|-#9.7g|)%%| ------- | ------- |" )
71 declareProperty (
"ChronoPrintOutTable" ,
72 m_chronoTableFlag =
true );
74 declareProperty (
"ChronoDestinationCout" ,
75 m_chronoCoutFlag =
false );
77 declareProperty (
"ChronoPrintLevel" ,
81 declareProperty (
"ChronoTableToBeOrdered" ,
82 m_chronoOrderFlag =
true );
84 declareProperty (
"PrintUserTime" ,
85 m_printUserTime =
true );
87 declareProperty (
"PrintSystemTime" ,
88 m_printSystemTime =
false );
90 declareProperty (
"PrintEllapsedTime" ,
91 m_printEllapsedTime =
false );
94 declareProperty (
"StatPrintOutTable" ,
95 m_statTableFlag =
true );
97 declareProperty (
"StatDestinationCout" ,
98 m_statCoutFlag =
false );
100 declareProperty (
"StatPrintLevel" ,
104 declareProperty (
"StatTableToBeOrdered" ,
105 m_statOrderFlag =
true );
109 declareProperty (
"NumberOfSkippedEventsForMemStat" ,
110 m_numberOfSkippedEventsForMemStat = -1 ) ;
112 declareProperty(
"AsciiStatsOutputFile",
113 m_statsOutFileName =
"",
114 "Name of the output file storing the stats. If empty, no"
115 " statistics will be saved (default)" );
118 (
"StatTableHeader" , m_header ,
119 "The header row for the output Stat-table" ) ;
121 (
"RegularRowFormat" , m_format1 ,
122 "The format for the regular row in the output Stat-table" ) ;
124 (
"EfficiencyRowFormat" , m_format2 ,
125 "The format for the regular row in the output Stat-table" ) ;
127 (
"UseEfficiencyRowFormat" , m_useEffFormat ,
128 "Use the special format for printout of efficiency counters" ) ;
131 (
"PerEventFile", m_perEventFile=
"",
132 "File name for per-event deltas" );
144 const IChronoStatSvc::ChronoTag& key =
item.first;
154 const IChronoStatSvc::StatTag& key =
item.first;
183 error() <<
"unable to open per-event output file \""
192 ii->addListener(
this, IncidentType::EndEvent);
196 info() <<
" Number of skipped events for MemStat"
241 m_ofd << itr.first.substr(0,itr.first.length()-8 ) <<
" ";
242 for (
const auto& itt:itr.second) {
243 m_ofd <<
" " << (
long int)(itt);
263 std::cout << local <<
" The Final CPU consumption (Chrono) Table "
272 <<
" The Final CPU consumption ( Chrono ) Table "
288 for(
auto iter = tmpCont.
begin() ; tmpCont.
end() != iter ; ++iter )
291 ChronoEntity* entity = iter->first ;
if( !entity ) { continue ; }
292 const ChronoTag* tag = iter->second ;
if( !tag ) { continue ; }
316 for(
auto iter = tmpCont.
begin() ; tmpCont.
end() != iter ; ++iter )
319 ChronoEntity* entity = iter->first ;
if( !entity ) { continue ; }
320 const ChronoTag* tag = iter->second ;
if( !tag ) { continue ; }
344 for(
const auto&
i : tmpCont )
347 ChronoEntity* entity =
i.first ;
if( !entity ) { continue ; }
348 const ChronoTag* tag =
i.second ;
if( !tag ) { continue ; }
388 (
const ChronoTag& chronoTag )
399 (
const IChronoStatSvc::ChronoTag& chronoTag )
408 IChronoStatSvc::ChronoTime
410 (
const IChronoStatSvc::ChronoTag& chronoTag,
411 IChronoStatSvc::ChronoType theType )
413 return m_chronoEntities[ chronoTag ].delta( theType );
419 (
const IChronoStatSvc::ChronoTag& chronoTag )
422 if( m_printUserTime ) {
424 << m_chronoEntities[ chronoTag ].outputUserTime ()
427 if( m_printSystemTime ) {
429 << m_chronoEntities[ chronoTag ].outputSystemTime()
436 IChronoStatSvc::ChronoStatus
438 (
const IChronoStatSvc::ChronoTag& chronoTag )
439 {
return m_chronoEntities[ chronoTag ].status(); }
444 (
const IChronoStatSvc::StatTag & statTag ,
445 const IChronoStatSvc::StatFlag & statFlag )
447 auto theIter=m_statEntities.find(statTag);
451 if (theIter==m_statEntities.end()){
453 StatEntity& theSe = m_statEntities[ statTag ];
460 theStat=&theIter->second;
463 theStat->
addFlag ( statFlag ) ;
469 (
const IChronoStatSvc::StatTag& statTag )
472 log << (
MSG::Level) m_statPrintLevel << m_statEntities[ statTag ] <<
endmsg;
482 (
const IChronoStatSvc::ChronoTag& t )
const
484 auto it = m_chronoEntities.find ( t ) ;
485 return m_chronoEntities.end() != it ? &(it->second) :
nullptr;
495 (
const IChronoStatSvc::StatTag& t )
const
497 auto it = m_statEntities.find ( t ) ;
498 return m_statEntities.end() != it ? &(it->second) :
nullptr;
506 std::ios_base::out | std::ios_base::trunc );
509 <<
"Could not open the output file for writing chrono statistics ["
523 [](ChronoMap::const_reference
i)
532 for(
const auto& iter : chronos ) {
535 if( !entity ) { continue ; }
537 const ChronoTag* tag = iter.second ;
538 if( !tag ) { continue ; }
541 out <<
"\n[" << *tag <<
"]\n";
544 out <<
"cpu_user_total = " << entity->
uTotalTime() <<
"\n";
545 out <<
"cpu_user_min = " << entity->
uMinimalTime() <<
"\n";
546 out <<
"cpu_user_mean = " << entity->
uMeanTime() <<
"\n";
547 out <<
"cpu_user_RMS = " << entity->
uRMSTime() <<
"\n";
548 out <<
"cpu_user_max = " << entity->
uMaximalTime() <<
"\n";
553 out <<
"cpu_system_total = " << entity->
kTotalTime() <<
"\n";
554 out <<
"cpu_system_min = " << entity->
kMinimalTime() <<
"\n";
555 out <<
"cpu_system_mean = " << entity->
kMeanTime() <<
"\n";
556 out <<
"cpu_system_RMS = " << entity->
kRMSTime() <<
"\n";
557 out <<
"cpu_system_max = " << entity->
kMaximalTime() <<
"\n";
562 out <<
"cpu_real_total = " << entity->
eTotalTime() <<
"\n";
563 out <<
"cpu_real_min = " << entity->
eMinimalTime() <<
"\n";
564 out <<
"cpu_real_mean = " << entity->
eMeanTime() <<
"\n";
565 out <<
"cpu_real_RMS = " << entity->
eRMSTime() <<
"\n";
566 out <<
"cpu_real_max = " << entity->
eMaximalTime() <<
"\n";
607 [](StatMap::const_reference
i)
617 for (
const auto& iter : tmpCont ) {
620 if ( !entity ) { continue ; }
621 const StatTag* tag = iter.second ;
622 if ( !tag ) { continue ; }
654 if (itr.first.find(
":Execute") == std::string::npos)
continue;
std::string outputElapsedTime() const
print the chrono ;
bool m_useEffFormat
flag to use the special "efficiency" format
int m_intStatPrintLevel
level of info printing
double kMaximalTime() const
maximal measurement for kernel time
Definition of the MsgStream class used to transmit messages.
StatusCode initialize() override
SmartIF< ISvcLocator > & serviceLocator() const override
Retrieve pointer to service locator.
double uMinimalTime() const
minimal measurement for user time
bool m_chronoOrderFlag
flag for formattion the final statistic table
The ISvcLocator is the interface implemented by the Service Factory in the Application Manager to loc...
bool m_printUserTime
flag for printing User quantities
double uTotalTime() const
total user time
virtual ChronoStatus chronoStatus(const IChronoStatSvc::ChronoTag &chronoTag) override
Implementation of IChronoStatSvc::chronoStatus.
StatusCode finalize() override
MsgStream & info() const
shortcut for the method msgStream(MSG::INFO)
StatMap m_statEntities
stat part
bool m_printEllapsedTime
flag for printing Ellapsed quantities
a small helper class for implementation of ChronoStatSvc service, It also could be used as some local...
std::string m_header
the header row
virtual IChronoStatSvc::ChronoTime chronoDelta(const IChronoStatSvc::ChronoTag &chronoTag, IChronoStatSvc::ChronoType theType) override
Implementation of IchronoStatSvc::chronoDelta.
double kTotalTime() const
total Kernel time
StringProperty m_statsOutFileName
Name of the output file where we'll dump the stats.
virtual void stat(const IChronoStatSvc::StatTag &statTag, const IChronoStatSvc::StatFlag &statFlag) override
Implementation of IChronoStatSvc::stat add statistical information to the entity , tagged by its name.
double uRMSTime() const
r.m.s User Time
double kMinimalTime() const
minimal measurement for kernel time
double eMinimalTime() const
minimal measurement for elapsed time
double kRMSTime() const
r.m.s Kernel Time
virtual void statPrint(const IChronoStatSvc::ChronoTag &statTag) override
prints (using message service) info about statistical entity, tagged by its name
long m_numberOfSkippedEventsForMemStat
std::string outputSystemTime() const
print the chrono ;
IChronoSvc::ChronoStatus start()
start the current chrono
std::string m_format2
format for "efficiency" statistical printout rows
bool isFailure() const
Test for a status code of FAILURE.
bool m_chronoTableFlag
flag for printing the final table
#define DECLARE_COMPONENT(type)
GAUDI_API std::string formatAsTableRow(const StatEntity &counter, const bool flag, const std::string &format1=" |%|7d| |%|11.7g| |%|#11.5g| |%|#10.5g| |%|#10.5g| |%|#10.5g| |", const std::string &format2="*|%|7d| |%|11.5g| |(%|#9.7g| +- %|-#8.6g|)%%| ----- | ----- |")
print the counter in a form of the table row
int m_intChronoPrintLevel
level of info printing
void setnEntriesBeforeReset(unsigned long nEntriesBeforeReset)
DR specify number of entry before reset.
double kMeanTime() const
average Kernel Time
StatusCode service(const Gaudi::Utils::TypeNameString &name, T *&svc, bool createIf=true)
Templated method to access a service by name.
const std::string & name() const override
Retrieve name of the service.
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
double eMeanTime() const
average Elapsed Time
void merge(const ChronoStatSvc &css)
Compound assignment operator.
void saveStats()
dump the statistics into an ASCII file for offline processing
bool m_statOrderFlag
flag for formattion the final statistic table
constexpr struct CompareFirstOfPointerPair_t CompareFirstOfPointerPair
This class is used for returning status codes from appropriate routines.
void clear(STATE_TYPE _i=std::ios_base::failbit)
virtual const ChronoEntity * chronoStop(const IChronoStatSvc::ChronoTag &chronoTag) override
Implementation of IChronoStatSvc::chronoStop.
double eRMSTime() const
r.m.s Elapsed Time
bool m_statTableFlag
flag for printing the final table
const TYPE & value() const
explicit conversion
unsigned long addFlag(const double Flag)
add a flag
StatusCode setProperties()
Method for setting declared properties to the values specified for the job.
MSG::Level m_chronoPrintLevel
StatusCode initialize() override
Implementation of IService::initialize()
double uMeanTime() const
average User Time
std::string outputUserTime() const
print the chrono ;
HepRndm::Engine< TripleRand > e2
bool m_statCoutFlag
flag for destination of the t he final table
MsgStream & debug() const
shortcut for the method msgStream(MSG::DEBUG)
bool m_printSystemTime
flag for printing System quantities
void handle(const Incident &incident) override
T back_inserter(T...args)
double eMaximalTime() const
maximal measurement for elapsed time
Base class for all Incidents (computing events).
virtual ChronoEntity * chronoStart(const IChronoStatSvc::ChronoTag &chronoTag) override
Implementation of IChronoStatSvc::chronoStart.
std::string m_perEventFile
SmartIF< IMessageSvc > & msgSvc() const
The standard message service.
unsigned long nOfMeasurements() const
number of chrono measurements
MSG::Level m_statPrintLevel
bool m_chronoCoutFlag
flag for destination of the the final table
The basic counter used for Monitoring purposes.
IChronoSvc::ChronoStatus stop()
stop the chrono
double uMaximalTime() const
maximal measurement for user time
double eTotalTime() const
total Elapsed time
virtual void chronoPrint(const IChronoStatSvc::ChronoTag &chronoTag) override
Implementation of IChronoStatSvc::chronoPrint.
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
The interface implemented by the IncidentSvc service.
std::string m_format1
format for regular statistical printout rows
The Chrono & Stat Sservice: service implements the IChronoStatSvc interface and provides the basic ch...
ChronoMap m_chronoEntities
chrono part
StatusCode finalize() override
Implementation of IService::finalize()
virtual const ChronoEntity * chrono(const IChronoStatSvc::ChronoTag &t) const override
extract the chrono entity for the given tag (name)