2 # pragma warning( disable : 4786 ) 46 template <
typename S,
typename T>
65 const IChronoStatSvc::ChronoTag& key = item.first;
75 const IChronoStatSvc::StatTag& key = item.first;
110 ii->addListener(
this, IncidentType::EndEvent );
137 m_ofd << itr.first.substr( 0, itr.first.length() - 8 ) <<
" ";
138 for (
const auto& itt : itr.second ) {
m_ofd <<
" " << (
long int)( itt ); }
154 std::cout << local <<
" The Final CPU consumption (Chrono) Table " 173 for (
auto iter = tmpCont.
begin(); tmpCont.
end() != iter; ++iter ) {
176 if ( !entity ) {
continue; }
177 const ChronoTag* tag = iter->second;
178 if ( !tag ) {
continue; }
202 for (
auto iter = tmpCont.
begin(); tmpCont.
end() != iter; ++iter ) {
205 if ( !entity ) {
continue; }
206 const ChronoTag* tag = iter->second;
207 if ( !tag ) {
continue; }
231 for (
const auto& i : tmpCont ) {
234 if ( !entity ) {
continue; }
235 const ChronoTag* tag = i.second;
236 if ( !tag ) {
continue; }
292 IChronoStatSvc::ChronoType theType ) {
312 void ChronoStatSvc::stat(
const IChronoStatSvc::StatTag& statTag,
const IChronoStatSvc::StatFlag& statFlag ) {
323 theStat = &theIter->second;
364 info() <<
"Could not open the output file for writing chrono statistics [" <<
m_statsOutFileName.value() <<
"]" 378 []( ChronoMap::const_reference i ) {
return std::make_pair( &i.second, &i.first ); } );
385 for (
const auto& iter : chronos ) {
388 if ( !entity ) {
continue; }
390 const ChronoTag* tag = iter.second;
391 if ( !tag ) {
continue; }
394 out <<
"\n[" << *tag <<
"]\n";
397 out <<
"cpu_user_total = " << entity->
uTotalTime() <<
"\n";
398 out <<
"cpu_user_min = " << entity->
uMinimalTime() <<
"\n";
399 out <<
"cpu_user_mean = " << entity->
uMeanTime() <<
"\n";
400 out <<
"cpu_user_RMS = " << entity->
uRMSTime() <<
"\n";
401 out <<
"cpu_user_max = " << entity->
uMaximalTime() <<
"\n";
406 out <<
"cpu_system_total = " << entity->
kTotalTime() <<
"\n";
407 out <<
"cpu_system_min = " << entity->
kMinimalTime() <<
"\n";
408 out <<
"cpu_system_mean = " << entity->
kMeanTime() <<
"\n";
409 out <<
"cpu_system_RMS = " << entity->
kRMSTime() <<
"\n";
410 out <<
"cpu_system_max = " << entity->
kMaximalTime() <<
"\n";
415 out <<
"cpu_real_total = " << entity->
eTotalTime() <<
"\n";
416 out <<
"cpu_real_min = " << entity->
eMinimalTime() <<
"\n";
417 out <<
"cpu_real_mean = " << entity->
eMeanTime() <<
"\n";
418 out <<
"cpu_real_RMS = " << entity->
eRMSTime() <<
"\n";
419 out <<
"cpu_real_max = " << entity->
eMaximalTime() <<
"\n";
431 error() <<
"Cannot retrieve HiveWhiteBoardSvc";
435 if ( wb && wb->getNumberOfStores() > 1 ) { isMT =
true; }
469 []( StatMap::const_reference i ) {
return std::make_pair( &i.second, &i.first ); } );
480 for (
const auto& iter : tmpCont ) {
483 if ( !entity ) {
continue; }
484 const StatTag* tag = iter.second;
485 if ( !tag ) {
continue; }
513 if ( itr.first.find(
":Execute" ) == std::string::npos )
continue;
std::string outputElapsedTime() const
print the chrono ;
ChronoEntity & getEntity(const ChronoTag &chronoTag)
double kMaximalTime() const
maximal measurement for kernel time
Definition of the MsgStream class used to transmit messages.
StatusCode initialize() override
double uMinimalTime() const
minimal measurement for user time
const std::string & name() const override
Retrieve name of the service.
double uTotalTime() const
total user time
ChronoStatus chronoStatus(const IChronoStatSvc::ChronoTag &chronoTag) override
Implementation of IChronoStatSvc::chronoStatus.
Gaudi::Property< std::string > m_header
StatusCode finalize() override
MsgStream & info() const
shortcut for the method msgStream(MSG::INFO)
StatMap m_statEntities
stat part
a small helper class for implementation of ChronoStatSvc service, It also could be used as some local...
Gaudi::Property< bool > m_statCoutFlag
T * get() const
Release the Service.
IChronoStatSvc::ChronoTime chronoDelta(const IChronoStatSvc::ChronoTag &chronoTag, IChronoStatSvc::ChronoType theType) override
Implementation of IchronoStatSvc::chronoDelta.
double kTotalTime() const
total Kernel time
Gaudi::Property< bool > m_chronoOrderFlag
constexpr static const auto SUCCESS
Gaudi::Property< bool > m_printUserTime
std::mutex m_mutex
Mutex protecting m_chronoEntities.
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
void statPrint(const IChronoStatSvc::ChronoTag &statTag) override
prints (using message service) info about statistical entity, tagged by its name
std::string outputSystemTime() const
print the chrono ;
IChronoSvc::ChronoStatus start()
start the current chrono
#define DECLARE_COMPONENT(type)
const ChronoEntity * chrono(const IChronoStatSvc::ChronoTag &t) const override
extract the chrono entity for the given tag (name)
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.
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
double eMeanTime() const
average Elapsed Time
void merge(const ChronoStatSvc &css)
Compound assignment operator.
bool operator()(const std::pair< S *, T * > &p1, const std::pair< S *, T * > &p2) const
Gaudi::Property< bool > m_useEffFormat
void saveStats()
dump the statistics into an ASCII file for offline processing
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)
IChronoSvc::ChronoStatus status() const
return the status of chrono
const ChronoEntity * chronoStop(const IChronoStatSvc::ChronoTag &chronoTag) override
Implementation of IChronoStatSvc::chronoStop.
StatusCode retrieve() const
Retrieve the Service.
Gaudi::Property< bool > m_statOrderFlag
double eRMSTime() const
r.m.s Elapsed Time
std::ostream & print(std::ostream &o, bool tableFormat, const std::string &name, bool flag=true, std::string fmtHead="%|-48.48s|%|27t|") const
Gaudi::Property< bool > m_chronoTableFlag
const SmartIF< IMessageSvc > & msgSvc() const
The standard message service.
ServiceHandle< IInterface > m_hiveWhiteBoardSvc
StatusCode setProperties()
Method for setting declared properties to the values specified for the job.
MSG::Level m_chronoPrintLevel
level of info printing
StatusCode initialize() override
Implementation of IService::initialize()
Gaudi::Property< bool > m_printEllapsedTime
double uMeanTime() const
average User Time
std::string outputUserTime() const
print the chrono ;
HepRndm::Engine< TripleRand > e2
MsgStream & debug() const
shortcut for the method msgStream(MSG::DEBUG)
void handle(const Incident &incident) override
T back_inserter(T...args)
Gaudi::Property< bool > m_statTableFlag
double eMaximalTime() const
maximal measurement for elapsed time
Base class for all Incidents (computing events).
ChronoEntity * chronoStart(const IChronoStatSvc::ChronoTag &chronoTag) override
Implementation of IChronoStatSvc::chronoStart.
unsigned long addFlag(const double v)
constexpr static const auto FAILURE
unsigned long nOfMeasurements() const
number of chrono measurements
Gaudi::Property< std::string > m_statsOutFileName
MSG::Level m_statPrintLevel
level of info printing
Gaudi::Property< bool > m_chronoCoutFlag
backward compatible StatEntity class.
IChronoSvc::ChronoStatus stop()
stop the chrono
double uMaximalTime() const
maximal measurement for user time
double eTotalTime() const
total Elapsed time
void chronoPrint(const IChronoStatSvc::ChronoTag &chronoTag) override
Implementation of IChronoStatSvc::chronoPrint.
SmartIF< ISvcLocator > & serviceLocator() const override
Retrieve pointer to service locator.
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
The interface implemented by the IncidentSvc service.
The Chrono & Stat Sservice: service implements the IChronoStatSvc interface and provides the basic ch...
ChronoMap m_chronoEntities
chrono part
IChronoSvc::ChronoTime delta(IChronoSvc::ChronoType type) const
return the last delta-time of type "type"
Gaudi::Property< bool > m_printSystemTime
StatusCode finalize() override
Implementation of IService::finalize()
Gaudi::Property< std::string > m_perEventFile