ChronoStatSvc Class Reference

The Chrono & Stat Sservice: service implements the IChronoStatSvc interface and provides the basic chronometry and some statistical counts needed by all applications. More...

#include <src/ChronoStatSvc.h>

Inheritance diagram for ChronoStatSvc:
Collaboration diagram for ChronoStatSvc:

Public Types

typedef std::map< IChronoStatSvc::ChronoTag, ChronoEntityChronoMap
 some useful typedefs More...
 
typedef std::map< IChronoStatSvc::StatTag, StatEntityStatMap
 
- Public Types inherited from extends< Service, IChronoStatSvc, IIncidentListener >
using base_class = extends
 Typedef to this class. More...
 
using extend_interfaces_base = extend_interfaces< Interfaces... >
 Typedef to the base of this class. More...
 
- Public Types inherited from Service
typedef Gaudi::PluginService::Factory< IService *, const std::string &, ISvcLocator * > Factory
 
- Public Types inherited from PropertyHolder< CommonMessaging< implements< IService, IProperty, IStateful > > >
using PropertyHolderImpl = PropertyHolder< CommonMessaging< implements< IService, IProperty, IStateful > > >
 Typedef used to refer to this class from derived classes, as in. More...
 
- Public Types inherited from CommonMessaging< implements< IService, IProperty, IStateful > >
using base_class = CommonMessaging
 
- Public Types inherited from extend_interfaces< Interfaces... >
using ext_iids = typename Gaudi::interface_list_cat< typename Interfaces::ext_iids... >::type
 take union of the ext_iids of all Interfaces... More...
 

Public Member Functions

StatusCode initialize () override
 Implementation of IService::initialize() More...
 
StatusCode finalize () override
 Implementation of IService::finalize() More...
 
virtual ChronoEntitychronoStart (const IChronoStatSvc::ChronoTag &chronoTag) override
 Implementation of IChronoStatSvc::chronoStart. More...
 
virtual const ChronoEntitychronoStop (const IChronoStatSvc::ChronoTag &chronoTag) override
 Implementation of IChronoStatSvc::chronoStop. More...
 
virtual IChronoStatSvc::ChronoTime chronoDelta (const IChronoStatSvc::ChronoTag &chronoTag, IChronoStatSvc::ChronoType theType) override
 Implementation of IchronoStatSvc::chronoDelta. More...
 
virtual void chronoPrint (const IChronoStatSvc::ChronoTag &chronoTag) override
 Implementation of IChronoStatSvc::chronoPrint. More...
 
virtual ChronoStatus chronoStatus (const IChronoStatSvc::ChronoTag &chronoTag) override
 Implementation of IChronoStatSvc::chronoStatus. More...
 
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. More...
 
virtual void statPrint (const IChronoStatSvc::ChronoTag &statTag) override
 prints (using message service) info about statistical entity, tagged by its name More...
 
virtual const ChronoEntitychrono (const IChronoStatSvc::ChronoTag &t) const override
 extract the chrono entity for the given tag (name) More...
 
virtual const StatEntitystat (const IChronoStatSvc::StatTag &t) const override
 extract the stat entity for the given tag (name) More...
 
 ChronoStatSvc (const std::string &name, ISvcLocator *svcloc)
 Default constructor. More...
 
void merge (const ChronoStatSvc &css)
 Compound assignment operator. More...
 
 ~ChronoStatSvc () override=default
 Destructor. More...
 
void handle (const Incident &incident) override
 
- Public Member Functions inherited from extends< Service, IChronoStatSvc, IIncidentListener >
void * i_cast (const InterfaceID &tid) const override
 Implementation of IInterface::i_cast. More...
 
StatusCode queryInterface (const InterfaceID &ti, void **pp) override
 Implementation of IInterface::queryInterface. More...
 
std::vector< std::stringgetInterfaceNames () const override
 Implementation of IInterface::getInterfaceNames. More...
 
 ~extends () override=default
 Virtual destructor. More...
 
- Public Member Functions inherited from Service
const std::stringname () const override
 Retrieve name of the service. More...
 
StatusCode configure () override
 
StatusCode initialize () override
 
StatusCode start () override
 
StatusCode stop () override
 
StatusCode finalize () override
 
StatusCode terminate () override
 
Gaudi::StateMachine::State FSMState () const override
 
Gaudi::StateMachine::State targetFSMState () const override
 
StatusCode reinitialize () override
 
StatusCode restart () override
 
StatusCode sysInitialize () override
 Initialize Service. More...
 
StatusCode sysStart () override
 Initialize Service. More...
 
StatusCode sysStop () override
 Initialize Service. More...
 
StatusCode sysFinalize () override
 Finalize Service. More...
 
StatusCode sysReinitialize () override
 Re-initialize the Service. More...
 
StatusCode sysRestart () override
 Re-initialize the Service. More...
 
 Service (std::string name, ISvcLocator *svcloc)
 Standard Constructor. More...
 
SmartIF< ISvcLocator > & serviceLocator () const override
 Retrieve pointer to service locator. More...
 
StatusCode setProperties ()
 Method for setting declared properties to the values specified for the job. More...
 
template<class T >
StatusCode service (const std::string &name, const T *&psvc, bool createIf=true) const
 Access a service by name, creating it if it doesn't already exist. More...
 
template<class T >
StatusCode service (const std::string &name, T *&psvc, bool createIf=true) const
 
template<typename IFace = IService>
SmartIF< IFace > service (const std::string &name, bool createIf=true) const
 
template<class T >
StatusCode service (const std::string &svcType, const std::string &svcName, T *&psvc) const
 Access a service by name and type, creating it if it doesn't already exist. More...
 
template<class T >
StatusCode declarePrivateTool (ToolHandle< T > &handle, std::string toolTypeAndName="", bool createIf=true)
 Declare used Private tool. More...
 
template<class T >
StatusCode declarePublicTool (ToolHandle< T > &handle, std::string toolTypeAndName="", bool createIf=true)
 Declare used Public tool. More...
 
SmartIF< IAuditorSvc > & auditorSvc () const
 The standard auditor service.May not be invoked before sysInitialize() has been invoked. More...
 
- Public Member Functions inherited from PropertyHolder< CommonMessaging< implements< IService, IProperty, IStateful > > >
 PropertyHolder ()=default
 
 ~PropertyHolder () override=default
 
Gaudi::Details::PropertyBasedeclareProperty (Gaudi::Details::PropertyBase &prop)
 Declare a property. More...
 
Gaudi::Details::PropertyBasedeclareProperty (const std::string &name, TYPE &value, const std::string &doc="none")
 Helper to wrap a regular data member and use it as a regular property. More...
 
Gaudi::Details::PropertyBasedeclareProperty (const std::string &name, TYPE &value, const std::string &doc="none") const
 
Gaudi::Details::PropertyBasedeclareProperty (const std::string &name, Gaudi::Property< TYPE, VERIFIER, HANDLERS > &prop, const std::string &doc="none")
 Declare a PropertyBase instance setting name and documentation. More...
 
Gaudi::Details::PropertyBasedeclareRemoteProperty (const std::string &name, IProperty *rsvc, const std::string &rname="")
 Declare a remote property. More...
 
StatusCode setProperty (const Gaudi::Details::PropertyBase &p) override
 set the property form another property More...
 
StatusCode setProperty (const std::string &s) override
 set the property from the formatted string More...
 
StatusCode setProperty (const std::string &n, const std::string &v) override
 set the property from name and the value More...
 
StatusCode setProperty (const std::string &name, const TYPE &value)
 set the property form the value More...
 
StatusCode getProperty (Gaudi::Details::PropertyBase *p) const override
 get the property More...
 
const Gaudi::Details::PropertyBasegetProperty (const std::string &name) const override
 get the property by name More...
 
StatusCode getProperty (const std::string &n, std::string &v) const override
 convert the property to the string More...
 
const std::vector< Gaudi::Details::PropertyBase * > & getProperties () const override
 get all properties More...
 
bool hasProperty (const std::string &name) const override
 Return true if we have a property with the given name. More...
 
 PropertyHolder (const PropertyHolder &)=delete
 
PropertyHolderoperator= (const PropertyHolder &)=delete
 
Gaudi::Details::PropertyBasedeclareProperty (const std::string &name, GaudiHandleBase &ref, const std::string &doc="none")
 Specializations for various GaudiHandles. More...
 
Gaudi::Details::PropertyBasedeclareProperty (const std::string &name, GaudiHandleArrayBase &ref, const std::string &doc="none")
 
Gaudi::Details::PropertyBasedeclareProperty (const std::string &name, DataObjectHandleBase &ref, const std::string &doc="none")
 
- Public Member Functions inherited from CommonMessagingBase
virtual ~CommonMessagingBase ()=default
 Virtual destructor. More...
 
SmartIF< IMessageSvc > & msgSvc () const
 The standard message service. More...
 
MsgStreammsgStream () const
 Return an uninitialized MsgStream. More...
 
MsgStreammsgStream (const MSG::Level level) const
 Predefined configurable message stream for the efficient printouts. More...
 
MsgStreamalways () const
 shortcut for the method msgStream(MSG::ALWAYS) More...
 
MsgStreamfatal () const
 shortcut for the method msgStream(MSG::FATAL) More...
 
MsgStreamerr () const
 shortcut for the method msgStream(MSG::ERROR) More...
 
MsgStreamerror () const
 shortcut for the method msgStream(MSG::ERROR) More...
 
MsgStreamwarning () const
 shortcut for the method msgStream(MSG::WARNING) More...
 
MsgStreaminfo () const
 shortcut for the method msgStream(MSG::INFO) More...
 
MsgStreamdebug () const
 shortcut for the method msgStream(MSG::DEBUG) More...
 
MsgStreamverbose () const
 shortcut for the method msgStream(MSG::VERBOSE) More...
 
MsgStreammsg () const
 shortcut for the method msgStream(MSG::INFO) More...
 
MSG::Level msgLevel () const
 get the output level from the embedded MsgStream More...
 
MSG::Level outputLevel () const __attribute__((deprecated))
 Backward compatibility function for getting the output level. More...
 
bool msgLevel (MSG::Level lvl) const
 get the output level from the embedded MsgStream More...
 
- Public Member Functions inherited from extend_interfaces< Interfaces... >
 ~extend_interfaces () override=default
 Virtual destructor. More...
 

Protected Member Functions

void printStats ()
 
- Protected Member Functions inherited from Service
 ~Service () override
 Standard Destructor. More...
 
int outputLevel () const
 get the Service's output level More...
 
- Protected Member Functions inherited from PropertyHolder< CommonMessaging< implements< IService, IProperty, IStateful > > >
Gaudi::Details::PropertyBaseproperty (const std::string &name) const
 
- Protected Member Functions inherited from CommonMessaging< implements< IService, IProperty, IStateful > >
void updateMsgStreamOutputLevel (int level)
 Update the output level of the cached MsgStream. More...
 

Private Types

typedef std::map< ChronoTag, std::vector< IChronoSvc::ChronoTime > > TimeMap
 

Private Member Functions

 ChronoStatSvc ()=delete
 
 ChronoStatSvc (const ChronoStatSvc &)=delete
 
ChronoStatSvcoperator= (const ChronoStatSvc &)=delete
 
void saveStats ()
 dump the statistics into an ASCII file for offline processing More...
 

Private Attributes

ChronoMap m_chronoEntities
 chrono part More...
 
MSG::Level m_chronoPrintLevel = MSG::INFO
 level of info printing More...
 
StatMap m_statEntities
 stat part More...
 
MSG::Level m_statPrintLevel = MSG::INFO
 level of info printing More...
 
Gaudi::Property< bool > m_chronoTableFlag
 
Gaudi::Property< bool > m_chronoCoutFlag
 
Gaudi::Property< int > m_intChronoPrintLevel {this, "ChronoPrintLevel", MSG::INFO, "print level"}
 
Gaudi::Property< bool > m_chronoOrderFlag {this, "ChronoTableToBeOrdered", true, "should the printout be ordered"}
 
Gaudi::Property< bool > m_printUserTime {this, "PrintUserTime", true}
 
Gaudi::Property< bool > m_printSystemTime {this, "PrintSystemTime", false}
 
Gaudi::Property< bool > m_printEllapsedTime {this, "PrintEllapsedTime", false}
 
Gaudi::Property< bool > m_statTableFlag
 
Gaudi::Property< bool > m_statCoutFlag
 
Gaudi::Property< int > m_intStatPrintLevel {this, "StatPrintLevel", MSG::INFO, "print level"}
 
Gaudi::Property< bool > m_statOrderFlag {this, "StatTableToBeOrdered", true, "should the printout be ordered"}
 
Gaudi::Property< long > m_numberOfSkippedEventsForMemStat
 
Gaudi::Property< std::stringm_statsOutFileName
 
Gaudi::Property< std::stringm_header
 
Gaudi::Property< std::stringm_format1
 
Gaudi::Property< std::stringm_format2
 
Gaudi::Property< bool > m_useEffFormat
 
Gaudi::Property< std::stringm_perEventFile {this, "PerEventFile", "", "File name for per-event deltas"}
 
TimeMap m_perEvtTime
 
std::ofstream m_ofd
 

Additional Inherited Members

- Protected Attributes inherited from Service
Gaudi::StateMachine::State m_state = Gaudi::StateMachine::OFFLINE
 Service state. More...
 
Gaudi::StateMachine::State m_targetState = Gaudi::StateMachine::OFFLINE
 Service state. More...
 
Gaudi::Property< int > m_outputLevel {this, "OutputLevel", MSG::NIL, "output level"}
 
Gaudi::Property< bool > m_auditInit {this, "AuditServices", false, "[[deprecated]] unused"}
 
Gaudi::Property< bool > m_auditorInitialize {this, "AuditInitialize", false, "trigger auditor on initialize()"}
 
Gaudi::Property< bool > m_auditorStart {this, "AuditStart", false, "trigger auditor on start()"}
 
Gaudi::Property< bool > m_auditorStop {this, "AuditStop", false, "trigger auditor on stop()"}
 
Gaudi::Property< bool > m_auditorFinalize {this, "AuditFinalize", false, "trigger auditor on finalize()"}
 
Gaudi::Property< bool > m_auditorReinitialize {this, "AuditReinitialize", false, "trigger auditor on reinitialize()"}
 
Gaudi::Property< bool > m_auditorRestart {this, "AuditRestart", false, "trigger auditor on restart()"}
 
SmartIF< IAuditorSvcm_pAuditorSvc
 Auditor Service. More...
 

Detailed Description

The Chrono & Stat Sservice: service implements the IChronoStatSvc interface and provides the basic chronometry and some statistical counts needed by all applications.

Author
: Vanya BELYAEV Ivan..nosp@m.Bely.nosp@m.aev@i.nosp@m.tep..nosp@m.ru : December 1, 1999

Definition at line 33 of file ChronoStatSvc.h.

Member Typedef Documentation

typedef std::map<IChronoStatSvc::ChronoTag, ChronoEntity> ChronoStatSvc::ChronoMap

some useful typedefs

Definition at line 38 of file ChronoStatSvc.h.

typedef std::map<IChronoStatSvc::StatTag, StatEntity> ChronoStatSvc::StatMap

Definition at line 39 of file ChronoStatSvc.h.

Definition at line 183 of file ChronoStatSvc.h.

Constructor & Destructor Documentation

ChronoStatSvc::ChronoStatSvc ( const std::string name,
ISvcLocator svcloc 
)

Default constructor.

Parameters
nameservice instance name
svclocpointer to servcie locator

Definition at line 82 of file ChronoStatSvc.cpp.

82  : base_class( name, svcloc )
83 {
84  // basically limit the integer to MSG::Level range
85  auto int2level = []( int l ) -> MSG::Level {
86  return static_cast<MSG::Level>(
87  std::max( std::min( l, static_cast<int>( MSG::FATAL ) ), static_cast<int>( MSG::NIL ) ) );
88  };
89 
90  m_intStatPrintLevel.declareUpdateHandler(
91  [this, int2level]( Gaudi::Details::PropertyBase& ) { m_statPrintLevel = int2level( m_intStatPrintLevel ); } );
92  m_intChronoPrintLevel.declareUpdateHandler(
93  [this, int2level]( Gaudi::Details::PropertyBase& ) { m_chronoPrintLevel = int2level( m_intChronoPrintLevel ); } );
94 }
Gaudi::Property< int > m_intStatPrintLevel
extends base_class
Typedef to this class.
Definition: extends.h:14
T min(T...args)
Gaudi::Property< int > m_intChronoPrintLevel
PropertyBase base class allowing PropertyBase* collections to be "homogeneous".
Definition: Property.h:32
T max(T...args)
MSG::Level m_chronoPrintLevel
level of info printing
dictionary l
Definition: gaudirun.py:421
MSG::Level m_statPrintLevel
level of info printing
ChronoStatSvc::~ChronoStatSvc ( )
overridedefault

Destructor.

ChronoStatSvc::ChronoStatSvc ( )
privatedelete
ChronoStatSvc::ChronoStatSvc ( const ChronoStatSvc )
privatedelete

Member Function Documentation

const ChronoEntity * ChronoStatSvc::chrono ( const IChronoStatSvc::ChronoTag &  t) const
overridevirtual

extract the chrono entity for the given tag (name)

See also
IChronoStatSvc
Parameters
tchrono tag(name)
Returns
pointer to chrono entity

Definition at line 392 of file ChronoStatSvc.cpp.

393 {
394  auto it = m_chronoEntities.find( t );
395  return m_chronoEntities.end() != it ? &( it->second ) : nullptr;
396 }
T end(T...args)
T find(T...args)
ChronoMap m_chronoEntities
chrono part
IChronoStatSvc::ChronoTime ChronoStatSvc::chronoDelta ( const IChronoStatSvc::ChronoTag &  chronoTag,
IChronoStatSvc::ChronoType  theType 
)
overridevirtual

Implementation of IchronoStatSvc::chronoDelta.

See also
IChronoStatSvc

Definition at line 331 of file ChronoStatSvc.cpp.

333 {
334  return m_chronoEntities[chronoTag].delta( theType );
335 }
ChronoMap m_chronoEntities
chrono part
void ChronoStatSvc::chronoPrint ( const IChronoStatSvc::ChronoTag &  chronoTag)
overridevirtual

Implementation of IChronoStatSvc::chronoPrint.

See also
IChronoStatSvc

Definition at line 339 of file ChronoStatSvc.cpp.

340 {
341  MsgStream log( msgSvc(), chronoTag );
342  if ( m_printUserTime ) {
343  log << (MSG::Level)m_chronoPrintLevel << m_chronoEntities[chronoTag].outputUserTime() << endmsg;
344  }
345  if ( m_printSystemTime ) {
346  log << (MSG::Level)m_chronoPrintLevel << m_chronoEntities[chronoTag].outputSystemTime() << endmsg;
347  }
348 }
Definition of the MsgStream class used to transmit messages.
Definition: MsgStream.h:24
Gaudi::Property< bool > m_printUserTime
MSG::Level m_chronoPrintLevel
level of info printing
SmartIF< IMessageSvc > & msgSvc() const
The standard message service.
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
ChronoMap m_chronoEntities
chrono part
Gaudi::Property< bool > m_printSystemTime
ChronoEntity * ChronoStatSvc::chronoStart ( const IChronoStatSvc::ChronoTag &  chronoTag)
overridevirtual

Implementation of IChronoStatSvc::chronoStart.

See also
IChronoStatSvc

Definition at line 313 of file ChronoStatSvc.cpp.

314 {
315  ChronoEntity& entity = m_chronoEntities[chronoTag];
316  entity.start();
317  return &entity;
318 }
a small helper class for implementation of ChronoStatSvc service, It also could be used as some local...
Definition: ChronoEntity.h:21
IChronoSvc::ChronoStatus start()
start the current chrono
ChronoMap m_chronoEntities
chrono part
IChronoStatSvc::ChronoStatus ChronoStatSvc::chronoStatus ( const IChronoStatSvc::ChronoTag &  chronoTag)
overridevirtual

Implementation of IChronoStatSvc::chronoStatus.

See also
IChronoStatSvc

Definition at line 352 of file ChronoStatSvc.cpp.

353 {
354  return m_chronoEntities[chronoTag].status();
355 }
ChronoMap m_chronoEntities
chrono part
const ChronoEntity * ChronoStatSvc::chronoStop ( const IChronoStatSvc::ChronoTag &  chronoTag)
overridevirtual

Implementation of IChronoStatSvc::chronoStop.

See also
IChronoStatSvc

Definition at line 322 of file ChronoStatSvc.cpp.

323 {
324  ChronoEntity& entity = m_chronoEntities[chronoTag];
325  entity.stop();
326  return &entity;
327 }
a small helper class for implementation of ChronoStatSvc service, It also could be used as some local...
Definition: ChronoEntity.h:21
IChronoSvc::ChronoStatus stop()
stop the chrono
ChronoMap m_chronoEntities
chrono part
StatusCode ChronoStatSvc::finalize ( )
override

Implementation of IService::finalize()

stop its own chrono

Is the final chrono table to be printed?

decoration

CONTINUE

CONTINUE

stop chrono (if it is still in RUNNING status)

print to std::cout

print to MsgStream

decoration

CONTINUE

CONTINUE

stop chrono (if it is still in RUNNING status)

print to std::cout

print to MsgStream

decoration

CONTINUE

CONTINUE

stop chrono (if it is still in RUNNING status)

print to std::cout

print to MsgStream

clear the temporary container

the final decoration

Is the final stat table to be printed?

< finalize the base class

Definition at line 145 of file ChronoStatSvc.cpp.

146 {
147  std::string local = name() + ".finalize()";
149  MsgStream main_log( msgSvc(), local );
152  chronoStop( name() );
153 
154  if ( m_ofd.is_open() ) {
155  debug() << "writing per-event timing data to '" << m_perEventFile << "'" << endmsg;
156  for ( const auto& itr : m_perEvtTime ) {
157  m_ofd << itr.first.substr( 0, itr.first.length() - 8 ) << " ";
158  for ( const auto& itt : itr.second ) {
159  m_ofd << " " << (long int)( itt );
160  }
161  m_ofd << std::endl;
162  }
163 
164  m_ofd.close();
165  }
166 
171  MsgStream log( msgSvc(), "*****Chrono*****" );
172  const std::string stars( ( m_chronoCoutFlag ) ? 126 : 100, '*' );
173  if ( m_chronoCoutFlag ) {
174  std::cout << stars << std::endl;
175  std::cout << local << " The Final CPU consumption (Chrono) Table "
176  << ( m_chronoOrderFlag ? "(ordered)" : "(not ordered)" ) << std::endl;
177  std::cout << stars << std::endl;
178  } else {
179  log << (MSG::Level)m_chronoPrintLevel << stars << endmsg;
180  log << (MSG::Level)m_chronoPrintLevel << " The Final CPU consumption ( Chrono ) Table "
181  << ( m_chronoOrderFlag ? "(ordered)" : "(not ordered)" ) << endmsg;
182  log << (MSG::Level)m_chronoPrintLevel << stars << endmsg;
183  }
185  { // prepare container for printing
187  tmpCont.reserve( m_chronoEntities.size() );
188  for ( auto& it : m_chronoEntities ) {
189  tmpCont.emplace_back( &it.second, &it.first );
190  }
191  // sort it
192  if ( m_chronoOrderFlag ) std::sort( tmpCont.begin(), tmpCont.end(), CompareFirstOfPointerPair );
193  // print User Time statistics
194  if ( m_printUserTime ) {
195  for ( auto iter = tmpCont.begin(); tmpCont.end() != iter; ++iter ) {
196  //
197  ChronoEntity* entity = iter->first;
198  if ( !entity ) {
199  continue;
200  }
201  const ChronoTag* tag = iter->second;
202  if ( !tag ) {
203  continue;
204  }
205  entity->stop();
207  if ( m_chronoCoutFlag )
209  {
210  std::cout << *tag << "\t" << entity->outputUserTime() << std::endl;
211  } else
212  {
213  MsgStream( msgSvc(), *tag ) << m_chronoPrintLevel << entity->outputUserTime() << endmsg;
214  }
215  //
216  }
217  }
219  if ( m_printSystemTime ) {
223  std::cout << stars << std::endl;
224  } else if ( m_printUserTime && !m_chronoCoutFlag ) {
225  log << (MSG::Level)m_chronoPrintLevel << stars << endmsg;
226  }
228  for ( auto iter = tmpCont.begin(); tmpCont.end() != iter; ++iter ) {
230  ChronoEntity* entity = iter->first;
231  if ( !entity ) {
232  continue;
233  }
234  const ChronoTag* tag = iter->second;
235  if ( !tag ) {
236  continue;
237  }
238  entity->stop();
240  if ( m_chronoCoutFlag )
242  {
243  std::cout << *tag << "\t" << entity->outputSystemTime() << std::endl;
244  } else
245  {
246  MsgStream( msgSvc(), *tag ) << m_chronoPrintLevel << entity->outputSystemTime() << endmsg;
247  }
248  //
249  }
250  }
252  if ( m_printEllapsedTime ) {
256  std::cout << stars << std::endl;
257  } else if ( ( m_printUserTime || m_printSystemTime ) && !m_chronoCoutFlag ) {
258  log << (MSG::Level)m_chronoPrintLevel << stars << endmsg;
259  }
261  for ( const auto& i : tmpCont ) {
263  ChronoEntity* entity = i.first;
264  if ( !entity ) {
265  continue;
266  }
267  const ChronoTag* tag = i.second;
268  if ( !tag ) {
269  continue;
270  }
271  entity->stop();
273  if ( m_chronoCoutFlag )
275  {
276  std::cout << *tag << "\t" << entity->outputElapsedTime() << std::endl;
277  } else
278  {
279  MsgStream( msgSvc(), *tag ) << m_chronoPrintLevel << entity->outputElapsedTime() << endmsg;
280  }
281  //
282  }
283  }
285  tmpCont.clear();
286  }
288  if ( m_chronoCoutFlag ) {
289  std::cout << stars << std::endl;
290  } else {
291  log << m_chronoPrintLevel << stars << endmsg;
292  }
293  }
294 
296 
298  if ( m_statTableFlag ) {
299  printStats();
300  }
301 
302  if ( !m_statsOutFileName.value().empty() ) {
303  saveStats();
304  }
305 
306  main_log << MSG::INFO << " Service finalized successfully " << endmsg;
307 
308  return Service::finalize();
309 }
std::string outputElapsedTime() const
print the chrono ;
Definition of the MsgStream class used to transmit messages.
Definition: MsgStream.h:24
T empty(T...args)
const std::string & name() const override
Retrieve name of the service.
Definition: Service.cpp:289
StatusCode finalize() override
Definition: Service.cpp:174
a small helper class for implementation of ChronoStatSvc service, It also could be used as some local...
Definition: ChronoEntity.h:21
T endl(T...args)
Gaudi::Property< bool > m_chronoOrderFlag
Gaudi::Property< bool > m_printUserTime
T end(T...args)
std::string outputSystemTime() const
print the chrono ;
STL class.
void saveStats()
dump the statistics into an ASCII file for offline processing
constexpr struct CompareFirstOfPointerPair_t CompareFirstOfPointerPair
void clear(STATE_TYPE _i=std::ios_base::failbit)
Definition: MsgStream.h:222
TimeMap m_perEvtTime
T close(T...args)
virtual const ChronoEntity * chronoStop(const IChronoStatSvc::ChronoTag &chronoTag) override
Implementation of IChronoStatSvc::chronoStop.
Gaudi::Property< bool > m_chronoTableFlag
std::ofstream m_ofd
MSG::Level m_chronoPrintLevel
level of info printing
Gaudi::Property< bool > m_printEllapsedTime
std::string outputUserTime() const
print the chrono ;
T size(T...args)
STL class.
MsgStream & debug() const
shortcut for the method msgStream(MSG::DEBUG)
T begin(T...args)
Gaudi::Property< bool > m_statTableFlag
SmartIF< IMessageSvc > & msgSvc() const
The standard message service.
Gaudi::Property< std::string > m_statsOutFileName
Gaudi::Property< bool > m_chronoCoutFlag
T sort(T...args)
T is_open(T...args)
IChronoSvc::ChronoStatus stop()
stop the chrono
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
T reserve(T...args)
ChronoMap m_chronoEntities
chrono part
T emplace_back(T...args)
Gaudi::Property< bool > m_printSystemTime
Gaudi::Property< std::string > m_perEventFile
void ChronoStatSvc::handle ( const Incident incident)
override

Definition at line 550 of file ChronoStatSvc.cpp.

551 {
552 
553  if ( !m_ofd.is_open() ) return;
554 
555  for ( const auto& itr : m_chronoEntities ) {
556  if ( itr.first.find( ":Execute" ) == std::string::npos ) continue;
557 
558  auto itm = m_perEvtTime.find( itr.first );
559  if ( itm == m_perEvtTime.end() ) {
560  m_perEvtTime[itr.first] = {itr.second.delta( IChronoSvc::ELAPSED )};
561  } else {
562  itm->second.push_back( itr.second.delta( IChronoSvc::ELAPSED ) );
563  }
564  }
565 }
T end(T...args)
TimeMap m_perEvtTime
std::ofstream m_ofd
T find(T...args)
T is_open(T...args)
ChronoMap m_chronoEntities
chrono part
StatusCode ChronoStatSvc::initialize ( )
override

Implementation of IService::initialize()

start its own chrono

Definition at line 98 of file ChronoStatSvc.cpp.

99 {
101  if ( sc.isFailure() ) return sc;
103  // Set my own properties
104  sc = setProperties();
105 
106  if ( sc.isFailure() ) {
107  error() << "setting my properties" << endmsg;
108  return StatusCode::FAILURE;
109  }
110 
111  // only add an EndEvent listener if per-event output requested
112  if ( !m_perEventFile.empty() ) {
114  if ( !m_ofd.is_open() ) {
115  error() << "unable to open per-event output file \"" << m_perEventFile << "\"" << endmsg;
116  return StatusCode::FAILURE;
117  } else {
118  auto ii = serviceLocator()->service<IIncidentSvc>( "IncidentSvc" );
119  if ( !ii ) {
120  error() << "Unable to find IncidentSvc" << endmsg;
121  return StatusCode::FAILURE;
122  }
123  ii->addListener( this, IncidentType::EndEvent );
124  }
125  }
126 
127  info() << " Number of skipped events for MemStat" << m_numberOfSkippedEventsForMemStat.value() << endmsg;
128 
130  m_printUserTime = true;
131  }
134  m_chronoTableFlag = true;
135  }
138  chronoStart( name() );
140  return StatusCode::SUCCESS;
141 }
StatusCode initialize() override
Definition: Service.cpp:64
T open(T...args)
const std::string & name() const override
Retrieve name of the service.
Definition: Service.cpp:289
MsgStream & info() const
shortcut for the method msgStream(MSG::INFO)
Gaudi::Property< long > m_numberOfSkippedEventsForMemStat
Gaudi::Property< bool > m_printUserTime
bool isFailure() const
Test for a status code of FAILURE.
Definition: StatusCode.h:84
StatusCode service(const Gaudi::Utils::TypeNameString &name, T *&svc, bool createIf=true)
Templated method to access a service by name.
Definition: ISvcLocator.h:78
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
Gaudi::Property< bool > m_chronoTableFlag
std::ofstream m_ofd
StatusCode setProperties()
Method for setting declared properties to the values specified for the job.
Definition: Service.cpp:295
Gaudi::Property< bool > m_printEllapsedTime
virtual ChronoEntity * chronoStart(const IChronoStatSvc::ChronoTag &chronoTag) override
Implementation of IChronoStatSvc::chronoStart.
T is_open(T...args)
SmartIF< ISvcLocator > & serviceLocator() const override
Retrieve pointer to service locator.
Definition: Service.cpp:292
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
The interface implemented by the IncidentSvc service.
Definition: IIncidentSvc.h:23
Gaudi::Property< bool > m_printSystemTime
Gaudi::Property< std::string > m_perEventFile
void ChronoStatSvc::merge ( const ChronoStatSvc css)

Compound assignment operator.

Definition at line 57 of file ChronoStatSvc.cpp.

58 {
59 
60  // Add the content of the maps, leave the rest unchanged
61 
62  // Merge Chronomaps
63  for ( auto& item : css.m_chronoEntities ) {
64  const IChronoStatSvc::ChronoTag& key = item.first;
65  const ChronoEntity& val = item.second;
66  if ( m_chronoEntities.count( key ) )
67  m_chronoEntities[key] += val;
68  else
70  }
71 
72  // Merge StatMaps
73  for ( auto& item : css.m_statEntities ) {
74  const IChronoStatSvc::StatTag& key = item.first;
75  const StatEntity& val = item.second;
76  if ( m_statEntities.count( key ) )
77  m_statEntities[key] += val;
78  else
80  }
81 }
StatMap m_statEntities
stat part
a small helper class for implementation of ChronoStatSvc service, It also could be used as some local...
Definition: ChronoEntity.h:21
T count(T...args)
T insert(T...args)
The basic counter used for Monitoring purposes.
Definition: StatEntity.h:65
ChronoMap m_chronoEntities
chrono part
ChronoStatSvc& ChronoStatSvc::operator= ( const ChronoStatSvc )
privatedelete
void ChronoStatSvc::printStats ( )
protected

nothing to print?

CONTINUE

CONTINUE

decoration

Definition at line 481 of file ChronoStatSvc.cpp.

482 {
484  if ( m_statEntities.empty() ) {
485  return;
486  }
487 
488  MsgStream log( msgSvc(), "******Stat******" );
490  const std::string stars( ( m_statCoutFlag ) ? 126 : 100, '*' );
492  if ( m_statCoutFlag ) {
493  std::cout << stars << std::endl;
494  std::cout << " The Final stat Table " << ( m_statOrderFlag ? "(ordered)" : "(not ordered)" ) << std::endl;
495  std::cout << stars << std::endl;
496  } else {
497  log << m_statPrintLevel << stars << endmsg;
498  log << m_statPrintLevel << " The Final stat Table " << ( m_statOrderFlag ? "(ordered)" : "(not ordered)" )
499  << endmsg;
500  log << m_statPrintLevel << stars << endmsg;
501  }
502 
503  {
504  // prepare container for printing
506  typedef std::vector<SPair> SCont;
507  SCont tmpCont;
509  []( StatMap::const_reference i ) { return std::make_pair( &i.second, &i.first ); } );
510  // sort it
511  if ( m_statOrderFlag ) std::sort( tmpCont.begin(), tmpCont.end(), CompareFirstOfPointerPair );
512  // print the table header
513  if ( m_statCoutFlag ) {
514  std::cout << m_header.value() << std::endl;
515  } else {
516  log << m_statPrintLevel << m_header.value() << endmsg;
517  }
518 
519  // loop over counters and print them:
520  for ( const auto& iter : tmpCont ) {
522  const StatEntity* entity = iter.first;
523  if ( !entity ) {
524  continue;
525  }
526  const StatTag* tag = iter.second;
527  if ( !tag ) {
528  continue;
529  }
530  if ( m_statCoutFlag ) {
533  } else {
535  << endmsg;
536  }
537  }
538  tmpCont.clear();
539  }
541  if ( m_statCoutFlag ) {
542  std::cout << stars << std::endl;
543  } else {
544  log << m_statPrintLevel << stars << endmsg;
545  }
546 }
Definition of the MsgStream class used to transmit messages.
Definition: MsgStream.h:24
T empty(T...args)
Gaudi::Property< std::string > m_header
StatMap m_statEntities
stat part
Gaudi::Property< bool > m_statCoutFlag
T endl(T...args)
T end(T...args)
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
Definition: StatEntity.cpp:326
STL class.
Gaudi::Property< bool > m_useEffFormat
constexpr struct CompareFirstOfPointerPair_t CompareFirstOfPointerPair
void clear(STATE_TYPE _i=std::ios_base::failbit)
Definition: MsgStream.h:222
Gaudi::Property< std::string > m_format2
Gaudi::Property< bool > m_statOrderFlag
T make_pair(T...args)
Gaudi::Property< std::string > m_format1
STL class.
T begin(T...args)
T back_inserter(T...args)
SmartIF< IMessageSvc > & msgSvc() const
The standard message service.
MSG::Level m_statPrintLevel
level of info printing
T sort(T...args)
T transform(T...args)
The basic counter used for Monitoring purposes.
Definition: StatEntity.h:65
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
void ChronoStatSvc::saveStats ( )
private

dump the statistics into an ASCII file for offline processing

CONTINUE

CONTINUE

Definition at line 412 of file ChronoStatSvc.cpp.

413 {
414  std::ofstream out( m_statsOutFileName.value(), std::ios_base::out | std::ios_base::trunc );
415  if ( !out.good() ) {
416  info() << "Could not open the output file for writing chrono statistics [" << m_statsOutFileName.value() << "]"
417  << endmsg;
418  return;
419  } else {
420  // format it our way
421  out << std::scientific << std::setprecision( 8 );
422  }
423 
424  // ChronoEntity
426  chronos.reserve( m_chronoEntities.size() );
428  []( ChronoMap::const_reference i ) { return std::make_pair( &i.second, &i.first ); } );
429 
430  // sort it
431  std::sort( std::begin( chronos ), std::end( chronos ), CompareFirstOfPointerPair );
432 
433  // print User Time statistics
434  for ( const auto& iter : chronos ) {
435  //
436  const ChronoEntity* entity = iter.first;
437  if ( !entity ) {
438  continue;
439  }
440 
441  const ChronoTag* tag = iter.second;
442  if ( !tag ) {
443  continue;
444  }
445 
446  // create an entry in the .INI-like table
447  out << "\n[" << *tag << "]\n";
448 
449  // user
450  out << "cpu_user_total = " << entity->uTotalTime() << "\n";
451  out << "cpu_user_min = " << entity->uMinimalTime() << "\n";
452  out << "cpu_user_mean = " << entity->uMeanTime() << "\n";
453  out << "cpu_user_RMS = " << entity->uRMSTime() << "\n";
454  out << "cpu_user_max = " << entity->uMaximalTime() << "\n";
455  out << "cpu_user_nbr = " << entity->nOfMeasurements() << "\n";
456 
457  // system
458  out << "\n"; // just for clarity
459  out << "cpu_system_total = " << entity->kTotalTime() << "\n";
460  out << "cpu_system_min = " << entity->kMinimalTime() << "\n";
461  out << "cpu_system_mean = " << entity->kMeanTime() << "\n";
462  out << "cpu_system_RMS = " << entity->kRMSTime() << "\n";
463  out << "cpu_system_max = " << entity->kMaximalTime() << "\n";
464  out << "cpu_system_nbr = " << entity->nOfMeasurements() << "\n";
465 
466  // real
467  out << "\n"; // just for clarity
468  out << "cpu_real_total = " << entity->eTotalTime() << "\n";
469  out << "cpu_real_min = " << entity->eMinimalTime() << "\n";
470  out << "cpu_real_mean = " << entity->eMeanTime() << "\n";
471  out << "cpu_real_RMS = " << entity->eRMSTime() << "\n";
472  out << "cpu_real_max = " << entity->eMaximalTime() << "\n";
473  out << "cpu_real_nbr = " << entity->nOfMeasurements() << "\n";
474  }
475 
476  out << std::endl;
477 }
double kMaximalTime() const
maximal measurement for kernel time
Definition: ChronoEntity.h:219
double uMinimalTime() const
minimal measurement for user time
Definition: ChronoEntity.h:198
double uTotalTime() const
total user time
Definition: ChronoEntity.h:229
MsgStream & info() const
shortcut for the method msgStream(MSG::INFO)
a small helper class for implementation of ChronoStatSvc service, It also could be used as some local...
Definition: ChronoEntity.h:21
double kTotalTime() const
total Kernel time
Definition: ChronoEntity.h:234
T endl(T...args)
double uRMSTime() const
r.m.s User Time
Definition: ChronoEntity.h:270
T end(T...args)
double kMinimalTime() const
minimal measurement for kernel time
Definition: ChronoEntity.h:204
double eMinimalTime() const
minimal measurement for elapsed time
Definition: ChronoEntity.h:209
double kRMSTime() const
r.m.s Kernel Time
Definition: ChronoEntity.h:265
double kMeanTime() const
average Kernel Time
Definition: ChronoEntity.h:250
STL class.
double eMeanTime() const
average Elapsed Time
Definition: ChronoEntity.h:260
constexpr struct CompareFirstOfPointerPair_t CompareFirstOfPointerPair
T make_pair(T...args)
double eRMSTime() const
r.m.s Elapsed Time
Definition: ChronoEntity.h:275
T scientific(T...args)
double uMeanTime() const
average User Time
Definition: ChronoEntity.h:255
T size(T...args)
STL class.
T begin(T...args)
T back_inserter(T...args)
double eMaximalTime() const
maximal measurement for elapsed time
Definition: ChronoEntity.h:224
unsigned long nOfMeasurements() const
number of chrono measurements
Definition: ChronoEntity.h:194
Gaudi::Property< std::string > m_statsOutFileName
T sort(T...args)
T transform(T...args)
double uMaximalTime() const
maximal measurement for user time
Definition: ChronoEntity.h:214
T setprecision(T...args)
double eTotalTime() const
total Elapsed time
Definition: ChronoEntity.h:239
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
T reserve(T...args)
ChronoMap m_chronoEntities
chrono part
void ChronoStatSvc::stat ( const IChronoStatSvc::StatTag &  statTag,
const IChronoStatSvc::StatFlag &  statFlag 
)
overridevirtual

Implementation of IChronoStatSvc::stat add statistical information to the entity , tagged by its name.

See also
IChronoStatSvc

Definition at line 359 of file ChronoStatSvc.cpp.

360 {
361  auto theIter = m_statEntities.find( statTag );
362 
363  StatEntity* theStat = nullptr;
364  // if new entity, specify the number of events to be skipped
365  if ( theIter == m_statEntities.end() ) {
366  // new stat entity
367  StatEntity& theSe = m_statEntities[statTag];
368  theStat = &theSe;
370  } else {
371  // existing stat entity
372  theStat = &theIter->second;
373  }
374 
375  theStat->addFlag( statFlag );
376 }
StatMap m_statEntities
stat part
Gaudi::Property< long > m_numberOfSkippedEventsForMemStat
T end(T...args)
void setnEntriesBeforeReset(unsigned long nEntriesBeforeReset)
DR specify number of entry before reset.
Definition: StatEntity.cpp:246
unsigned long addFlag(const double Flag)
add a flag
Definition: StatEntity.h:417
T find(T...args)
The basic counter used for Monitoring purposes.
Definition: StatEntity.h:65
const StatEntity * ChronoStatSvc::stat ( const IChronoStatSvc::StatTag &  t) const
overridevirtual

extract the stat entity for the given tag (name)

See also
IChronoStatSvc
Parameters
tstat tag(name)
Returns
pointer to stat entity

Definition at line 404 of file ChronoStatSvc.cpp.

405 {
406  auto it = m_statEntities.find( t );
407  return m_statEntities.end() != it ? &( it->second ) : nullptr;
408 }
StatMap m_statEntities
stat part
T end(T...args)
T find(T...args)
void ChronoStatSvc::statPrint ( const IChronoStatSvc::ChronoTag &  statTag)
overridevirtual

prints (using message service) info about statistical entity, tagged by its name

See also
IChronoStatSvc

Definition at line 380 of file ChronoStatSvc.cpp.

381 {
382  MsgStream log( msgSvc(), statTag );
384 }
Definition of the MsgStream class used to transmit messages.
Definition: MsgStream.h:24
StatMap m_statEntities
stat part
SmartIF< IMessageSvc > & msgSvc() const
The standard message service.
MSG::Level m_statPrintLevel
level of info printing
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244

Member Data Documentation

Gaudi::Property<bool> ChronoStatSvc::m_chronoCoutFlag
private
Initial value:
{this, "ChronoDestinationCout", false,
"define the destination of the table to be printed"}

Definition at line 145 of file ChronoStatSvc.h.

ChronoMap ChronoStatSvc::m_chronoEntities
private

chrono part

Definition at line 134 of file ChronoStatSvc.h.

Gaudi::Property<bool> ChronoStatSvc::m_chronoOrderFlag {this, "ChronoTableToBeOrdered", true, "should the printout be ordered"}
private

Definition at line 148 of file ChronoStatSvc.h.

MSG::Level ChronoStatSvc::m_chronoPrintLevel = MSG::INFO
private

level of info printing

Definition at line 136 of file ChronoStatSvc.h.

Gaudi::Property<bool> ChronoStatSvc::m_chronoTableFlag
private
Initial value:
{this, "ChronoPrintOutTable", true,
"decide if the final printout should be performed"}

Definition at line 143 of file ChronoStatSvc.h.

Gaudi::Property<std::string> ChronoStatSvc::m_format1
private
Initial value:
{
this, "RegularRowFormat", " %|-15.15s|%|17t||%|10d| |%|11.7g| |%|#11.5g| |%|#11.5g| |%|#12.5g| |%|#12.5g| |",
"The format for the regular row in the output Stat-table"}

Definition at line 171 of file ChronoStatSvc.h.

Gaudi::Property<std::string> ChronoStatSvc::m_format2
private
Initial value:
{
this, "EfficiencyRowFormat",
"*%|-15.15s|%|17t||%|10d| |%|11.5g| |(%|#9.7g| +- %|-#9.7g|)%%| ------- | ------- |",
"The format for the regular row in the output Stat-table"}

Definition at line 174 of file ChronoStatSvc.h.

Gaudi::Property<std::string> ChronoStatSvc::m_header
private
Initial value:
{
this, "StatTableHeader",
" Counter | # | sum | mean/eff^* | rms/err^* | min | max |",
"The header row for the output Stat-table"}

Definition at line 167 of file ChronoStatSvc.h.

Gaudi::Property<int> ChronoStatSvc::m_intChronoPrintLevel {this, "ChronoPrintLevel", MSG::INFO, "print level"}
private

Definition at line 147 of file ChronoStatSvc.h.

Gaudi::Property<int> ChronoStatSvc::m_intStatPrintLevel {this, "StatPrintLevel", MSG::INFO, "print level"}
private

Definition at line 156 of file ChronoStatSvc.h.

Gaudi::Property<long> ChronoStatSvc::m_numberOfSkippedEventsForMemStat
private
Initial value:
{
this, "NumberOfSkippedEventsForMemStat", -1,
"specify the number of events to be skipped by the memory auditor in order to better spot memory leak"}

Definition at line 159 of file ChronoStatSvc.h.

std::ofstream ChronoStatSvc::m_ofd
private

Definition at line 185 of file ChronoStatSvc.h.

Gaudi::Property<std::string> ChronoStatSvc::m_perEventFile {this, "PerEventFile", "", "File name for per-event deltas"}
private

Definition at line 181 of file ChronoStatSvc.h.

TimeMap ChronoStatSvc::m_perEvtTime
private

Definition at line 184 of file ChronoStatSvc.h.

Gaudi::Property<bool> ChronoStatSvc::m_printEllapsedTime {this, "PrintEllapsedTime", false}
private

Definition at line 151 of file ChronoStatSvc.h.

Gaudi::Property<bool> ChronoStatSvc::m_printSystemTime {this, "PrintSystemTime", false}
private

Definition at line 150 of file ChronoStatSvc.h.

Gaudi::Property<bool> ChronoStatSvc::m_printUserTime {this, "PrintUserTime", true}
private

Definition at line 149 of file ChronoStatSvc.h.

Gaudi::Property<bool> ChronoStatSvc::m_statCoutFlag
private
Initial value:
{this, "StatDestinationCout", false,
"define the destination of the table to be printed"}

Definition at line 154 of file ChronoStatSvc.h.

StatMap ChronoStatSvc::m_statEntities
private

stat part

Definition at line 139 of file ChronoStatSvc.h.

Gaudi::Property<bool> ChronoStatSvc::m_statOrderFlag {this, "StatTableToBeOrdered", true, "should the printout be ordered"}
private

Definition at line 157 of file ChronoStatSvc.h.

MSG::Level ChronoStatSvc::m_statPrintLevel = MSG::INFO
private

level of info printing

Definition at line 141 of file ChronoStatSvc.h.

Gaudi::Property<std::string> ChronoStatSvc::m_statsOutFileName
private
Initial value:
{
this, "AsciiStatsOutputFile", "",
"Name of the output file storing the stats. If empty, no statistics will be saved (default)"}

Definition at line 163 of file ChronoStatSvc.h.

Gaudi::Property<bool> ChronoStatSvc::m_statTableFlag
private
Initial value:
{this, "StatPrintOutTable", true,
"decide if the final printout should be performed"}

Definition at line 152 of file ChronoStatSvc.h.

Gaudi::Property<bool> ChronoStatSvc::m_useEffFormat
private
Initial value:
{this, "UseEfficiencyRowFormat", true,
"Use the special format for printout of efficiency counters"}

Definition at line 178 of file ChronoStatSvc.h.


The documentation for this class was generated from the following files: