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< BASE, Interfaces >
typedef extends base_class
 Typedef to this class. More...
 
typedef extend_interfaces< Interfaces...> extend_interfaces_base
 Typedef to the base of this class. More...
 
typedef extends base_class
 Typedef to this class. More...
 
typedef extend_interfaces< Interfaces...> extend_interfaces_base
 Typedef to the base of this class. More...
 
- 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...
 
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...
 
 ~ChronoStatSvc () override=default
 Destructor. More...
 
void handle (const Incident &incident) override
 
- Public Member Functions inherited from extends< BASE, Interfaces >
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::string > getInterfaceNames () const override
 Implementation of IInterface::getInterfaceNames. More...
 
 ~extends () override=default
 Virtual destructor. More...
 
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::string > getInterfaceNames () const override
 Implementation of IInterface::getInterfaceNames. More...
 
 ~extends () override=default
 Virtual destructor. More...
 
- Public Member Functions inherited from extend_interfaces< Interfaces...>
 ~extend_interfaces () override=default
 Virtual destructor. More...
 
 ~extend_interfaces () override=default
 Virtual destructor. More...
 

Protected Member Functions

void printStats ()
 

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...
 
int m_intChronoPrintLevel
 level of info printing More...
 
MSG::Level m_chronoPrintLevel = MSG::INFO
 
bool m_chronoTableFlag
 flag for printing the final table More...
 
bool m_chronoCoutFlag
 flag for destination of the the final table More...
 
bool m_chronoOrderFlag
 flag for formattion the final statistic table More...
 
bool m_printUserTime
 flag for printing User quantities More...
 
bool m_printSystemTime
 flag for printing System quantities More...
 
bool m_printEllapsedTime
 flag for printing Ellapsed quantities More...
 
long m_numberOfSkippedEventsForMemStat
 
StatMap m_statEntities
 stat part More...
 
int m_intStatPrintLevel
 level of info printing More...
 
MSG::Level m_statPrintLevel = MSG::INFO
 
bool m_statTableFlag
 flag for printing the final table More...
 
bool m_statCoutFlag
 flag for destination of the t he final table More...
 
bool m_statOrderFlag
 flag for formattion the final statistic table More...
 
StringProperty m_statsOutFileName
 Name of the output file where we'll dump the stats. More...
 
std::string m_header
 the header row More...
 
std::string m_format1
 format for regular statistical printout rows More...
 
std::string m_format2
 format for "efficiency" statistical printout rows More...
 
bool m_useEffFormat = true
 flag to use the special "efficiency" format More...
 
TimeMap m_perEvtTime
 
std::string m_perEventFile
 
std::ofstream m_ofd
 

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.

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

Definition at line 189 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

decide if the final printout should be performed

define the destination of the table to be printed

print level

if printout is to be performed, should one take care about some ordering?

if User Time information to be printed?

if System Time information to be printed?

if Ellapsed Time information to be printed?

deside if the final printout should be performed

define the destination of the table to be printed

print level

if printout is to be performed, should one take care about some ordering?

Definition at line 60 of file ChronoStatSvc.cpp.

61  : base_class( name , svcloc )
62  //
63  // the header row
64  , m_header ( " Counter | # | sum | mean/eff^* | rms/err^* | min | max |")
65  // format for regular statistical printout rows
66  , m_format1 ( " %|-15.15s|%|17t||%|10d| |%|11.7g| |%|#11.5g| |%|#11.5g| |%|#12.5g| |%|#12.5g| |" )
67  // format for "efficiency" statistical printout rows
68  , m_format2 ( "*%|-15.15s|%|17t||%|10d| |%|11.5g| |(%|#9.7g| +- %|-#9.7g|)%%| ------- | ------- |" )
69 {
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 );
106 
107  // specify the number of events to be skipped by the memory auditor
108  // in order to better spot memory leak
109  declareProperty ( "NumberOfSkippedEventsForMemStat" ,
111 
112  declareProperty( "AsciiStatsOutputFile",
113  m_statsOutFileName = "",
114  "Name of the output file storing the stats. If empty, no"
115  " statistics will be saved (default)" );
116 
117  declareProperty
118  ( "StatTableHeader" , m_header ,
119  "The header row for the output Stat-table" ) ;
120  declareProperty
121  ( "RegularRowFormat" , m_format1 ,
122  "The format for the regular row in the output Stat-table" ) ;
123  declareProperty
124  ( "EfficiencyRowFormat" , m_format2 ,
125  "The format for the regular row in the output Stat-table" ) ;
126  declareProperty
127  ( "UseEfficiencyRowFormat" , m_useEffFormat ,
128  "Use the special format for printout of efficiency counters" ) ;
129 
130  declareProperty
131  ( "PerEventFile", m_perEventFile="",
132  "File name for per-event deltas" );
133 
134 }
bool m_useEffFormat
flag to use the special "efficiency" format
int m_intStatPrintLevel
level of info printing
bool m_chronoOrderFlag
flag for formattion the final statistic table
bool m_printUserTime
flag for printing User quantities
bool m_printEllapsedTime
flag for printing Ellapsed quantities
std::string m_header
the header row
StringProperty m_statsOutFileName
Name of the output file where we'll dump the stats.
long m_numberOfSkippedEventsForMemStat
std::string m_format2
format for "efficiency" statistical printout rows
bool m_chronoTableFlag
flag for printing the final table
int m_intChronoPrintLevel
level of info printing
extends base_class
Typedef to this class.
Definition: extends.h:14
bool m_statOrderFlag
flag for formattion the final statistic table
bool m_statTableFlag
flag for printing the final table
bool m_statCoutFlag
flag for destination of the t he final table
bool m_printSystemTime
flag for printing System quantities
std::string m_perEventFile
bool m_chronoCoutFlag
flag for destination of the the final table
std::string m_format1
format for regular statistical printout rows
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 457 of file ChronoStatSvc.cpp.

458 {
459  auto it = m_chronoEntities.find ( t ) ;
460  return m_chronoEntities.end() != it ? &(it->second) : nullptr;
461 }
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 385 of file ChronoStatSvc.cpp.

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

Implementation of IChronoStatSvc::chronoPrint.

See also
IChronoStatSvc

Definition at line 394 of file ChronoStatSvc.cpp.

395 {
396  MsgStream log ( msgSvc() , chronoTag );
397  if( m_printUserTime ) {
399  << m_chronoEntities[ chronoTag ].outputUserTime ()
400  << endmsg;
401  }
402  if( m_printSystemTime ) {
404  << m_chronoEntities[ chronoTag ].outputSystemTime()
405  << endmsg;
406  }
407 }
Definition of the MsgStream class used to transmit messages.
Definition: MsgStream.h:24
bool m_printUserTime
flag for printing User quantities
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
MSG::Level m_chronoPrintLevel
bool m_printSystemTime
flag for printing System quantities
ChronoMap m_chronoEntities
chrono part
ChronoEntity * ChronoStatSvc::chronoStart ( const IChronoStatSvc::ChronoTag &  chronoTag)
overridevirtual

Implementation of IChronoStatSvc::chronoStart.

See also
IChronoStatSvc

Definition at line 363 of file ChronoStatSvc.cpp.

364 {
365  ChronoEntity& entity = m_chronoEntities [ chronoTag ] ;
366  entity.start() ;
367  return &entity ;
368 }
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 413 of file ChronoStatSvc.cpp.

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

Implementation of IChronoStatSvc::chronoStop.

See also
IChronoStatSvc

Definition at line 374 of file ChronoStatSvc.cpp.

375 {
376  ChronoEntity& entity = m_chronoEntities [ chronoTag ] ;
377  entity.stop() ;
378  return &entity ;
379 }
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 203 of file ChronoStatSvc.cpp.

204 {
205  std::string local = name()+".finalize()";
207  MsgStream main_log( msgSvc() , local );
210  chronoStop( name() ) ;
211 
212  if (m_ofd.is_open()) {
213  MsgStream log(msgSvc(), name());
214  log << MSG::DEBUG << "writing per-event timing data to '" << m_perEventFile << "'" << endmsg;
215  for (const auto& itr:m_perEvtTime) {
216  m_ofd << itr.first.substr(0,itr.first.length()-8 ) << " ";
217  for (const auto& itt:itr.second) {
218  m_ofd << " " << (long int)(itt);
219  }
220  m_ofd << std::endl;
221  }
222 
223  m_ofd.close();
224  }
225 
228  if ( m_chronoTableFlag &&
229  !m_chronoEntities.empty() &&
231  {
233  MsgStream log( msgSvc() , "*****Chrono*****" );
234  const std::string stars( ( m_chronoCoutFlag ) ? 126 : 100 , '*' );
235  if( m_chronoCoutFlag )
236  {
237  std::cout << stars << std::endl;
238  std::cout << local << " The Final CPU consumption (Chrono) Table "
239  << ( m_chronoOrderFlag ? "(ordered)" : "(not ordered)" ) << std::endl;
240  std::cout << stars << std::endl;
241  }
242  else
243  {
245  << stars << endmsg;
247  << " The Final CPU consumption ( Chrono ) Table "
248  << ( m_chronoOrderFlag ? "(ordered)" : "(not ordered)" ) << endmsg;
249  log << (MSG::Level) m_chronoPrintLevel << stars << endmsg;
250  }
252  { // prepare container for printing
253  std::vector<std::pair<ChronoEntity*,const ChronoTag*>> tmpCont;
254  tmpCont.reserve(m_chronoEntities.size());
255  for( auto& it : m_chronoEntities )
256  { tmpCont.emplace_back( &it.second , &it.first ) ; }
257  // sort it
258  if( m_chronoOrderFlag ) std::sort( tmpCont.begin(), tmpCont.end(),
260  // print User Time statistics
261  if( m_printUserTime )
262  {
263  for( auto iter = tmpCont.begin() ; tmpCont.end() != iter ; ++iter )
264  {
265  //
266  ChronoEntity* entity = iter->first ; if( !entity ) { continue ; }
267  const ChronoTag* tag = iter->second ; if( !tag ) { continue ; }
268  entity->stop();
270  if ( m_chronoCoutFlag )
272  { std::cout << *tag << "\t" << entity->outputUserTime () << std::endl ; }
273  else
274  {
275  MsgStream(msgSvc(), *tag)
276  << m_chronoPrintLevel << entity->outputUserTime () << endmsg ;
277  }
278  //
279  }
280  }
282  if( m_printSystemTime )
283  {
287  { std::cout << stars << std::endl; }
288  else if ( m_printUserTime && !m_chronoCoutFlag )
289  { log << (MSG::Level) m_chronoPrintLevel << stars << endmsg; }
291  for( auto iter = tmpCont.begin() ; tmpCont.end() != iter ; ++iter )
292  {
294  ChronoEntity* entity = iter->first ; if( !entity ) { continue ; }
295  const ChronoTag* tag = iter->second ; if( !tag ) { continue ; }
296  entity->stop();
298  if ( m_chronoCoutFlag )
300  { std::cout << *tag << "\t" << entity->outputSystemTime() << std::endl ; }
301  else
302  {
303  MsgStream(msgSvc(), *tag)
304  << m_chronoPrintLevel << entity->outputSystemTime() << endmsg ;
305  }
306  //
307  }
308  }
310  if( m_printEllapsedTime )
311  {
315  { std::cout << stars << std::endl; }
316  else if ( ( m_printUserTime || m_printSystemTime ) && !m_chronoCoutFlag )
317  { log << (MSG::Level) m_chronoPrintLevel << stars << endmsg; }
319  for( const auto& i : tmpCont )
320  {
322  ChronoEntity* entity = i.first ; if( !entity ) { continue ; }
323  const ChronoTag* tag = i.second ; if( !tag ) { continue ; }
324  entity->stop();
326  if ( m_chronoCoutFlag )
328  { std::cout << *tag << "\t" << entity->outputElapsedTime() << std::endl ; }
329  else
330  {
331  MsgStream(msgSvc(), *tag)
332  << m_chronoPrintLevel << entity->outputElapsedTime() << endmsg ;
333  }
334  //
335  }
336  }
338  tmpCont.clear();
339  }
341  if( m_chronoCoutFlag ) { std::cout << stars << std::endl; }
342  else { log << m_chronoPrintLevel << stars << endmsg; }
343  }
344 
346 
348  if ( m_statTableFlag ) { printStats () ; }
349 
350  if ( !m_statsOutFileName.value().empty() ) {
351  saveStats();
352  }
353 
354  main_log << MSG::INFO << " Service finalized successfully " << endmsg;
355 
356  return Service::finalize();
357 }
std::string outputElapsedTime() const
print the chrono ;
Definition of the MsgStream class used to transmit messages.
Definition: MsgStream.h:24
bool m_chronoOrderFlag
flag for formattion the final statistic table
bool m_printUserTime
flag for printing User quantities
StatusCode finalize() override
Definition: Service.cpp:187
bool m_printEllapsedTime
flag for printing Ellapsed quantities
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
a small helper class for implementation of ChronoStatSvc service, It also could be used as some local...
Definition: ChronoEntity.h:21
StringProperty m_statsOutFileName
Name of the output file where we'll dump the stats.
std::string outputSystemTime() const
print the chrono ;
bool m_chronoTableFlag
flag for printing the final table
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
virtual const ChronoEntity * chronoStop(const IChronoStatSvc::ChronoTag &chronoTag) override
Implementation of IChronoStatSvc::chronoStop.
std::ofstream m_ofd
bool m_statTableFlag
flag for printing the final table
const TYPE & value() const
explicit conversion
Definition: Property.h:341
MSG::Level m_chronoPrintLevel
std::string outputUserTime() const
print the chrono ;
bool m_printSystemTime
flag for printing System quantities
std::string m_perEventFile
bool m_chronoCoutFlag
flag for destination of the the final table
IChronoSvc::ChronoStatus stop()
stop the chrono
list i
Definition: ana.py:128
ChronoMap m_chronoEntities
chrono part
void ChronoStatSvc::handle ( const Incident incident)
override

Definition at line 625 of file ChronoStatSvc.cpp.

625  {
626 
627  if (! m_ofd.is_open()) return;
628 
629  for (const auto& itr:m_chronoEntities) {
630  if (itr.first.find(":Execute") == std::string::npos) continue;
631 
632  auto itm = m_perEvtTime.find(itr.first);
633  if (itm == m_perEvtTime.end()) {
634  m_perEvtTime[itr.first] = { itr.second.delta(IChronoSvc::ELAPSED) };
635  } else {
636  itm->second.push_back( itr.second.delta(IChronoSvc::ELAPSED) );
637  }
638  }
639 }
tuple itm
Definition: ana.py:57
TimeMap m_perEvtTime
std::ofstream m_ofd
ChronoMap m_chronoEntities
chrono part
StatusCode ChronoStatSvc::initialize ( )
override

Implementation of IService::initialize()

redefine some "properties"

start its own chrono

Definition at line 138 of file ChronoStatSvc.cpp.

139 {
141  if ( sc.isFailure() ) return sc;
143  MsgStream log( msgSvc() , this->name() );
144 
145  // Set my own properties
146  sc = setProperties();
147 
148  if (sc.isFailure()) {
149  log << MSG::ERROR << "setting my properties" << endmsg;
150  return StatusCode::FAILURE;
151  }
152 
153  // only add an EndEvent listener if per-event output requested
154  if (!m_perEventFile.empty()) {
155  m_ofd.open(m_perEventFile);
156  if (!m_ofd.is_open()) {
157  log << MSG::ERROR << "unable to open per-event output file \""
158  << m_perEventFile << "\"" << endmsg;
159  return StatusCode::FAILURE;
160  } else {
161  auto ii = serviceLocator()->service<IIncidentSvc>("IncidentSvc");
162  if ( !ii) {
163  log << MSG::ERROR << "Unable to find IncidentSvc" << endmsg;
164  return StatusCode::FAILURE;
165  }
166  ii->addListener(this, IncidentType::EndEvent);
167  }
168  }
169 
170  log << MSG::INFO << " Number of skipped events for MemStat"
172 
186  if( m_chronoTableFlag &&
187  !m_printUserTime &&
189  !m_printEllapsedTime ) { m_printUserTime = true ; }
191  if( m_printUserTime ||
196  chronoStart( name() ) ;
198  return StatusCode::SUCCESS;
199 }
int m_intStatPrintLevel
level of info printing
Definition of the MsgStream class used to transmit messages.
Definition: MsgStream.h:24
StatusCode initialize() override
Definition: Service.cpp:62
bool m_printUserTime
flag for printing User quantities
bool m_printEllapsedTime
flag for printing Ellapsed quantities
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
long m_numberOfSkippedEventsForMemStat
bool isFailure() const
Test for a status code of FAILURE.
Definition: StatusCode.h:86
bool m_chronoTableFlag
flag for printing the final table
int m_intChronoPrintLevel
level of info printing
const std::string EndEvent
Processing of the last event has finished.
Definition: Incident.h:61
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
std::ofstream m_ofd
MSG::Level m_chronoPrintLevel
bool m_printSystemTime
flag for printing System quantities
virtual ChronoEntity * chronoStart(const IChronoStatSvc::ChronoTag &chronoTag) override
Implementation of IChronoStatSvc::chronoStart.
std::string m_perEventFile
MSG::Level m_statPrintLevel
The interface implemented by the IncidentSvc service.
Definition: IIncidentSvc.h:21
ChronoStatSvc& ChronoStatSvc::operator= ( const ChronoStatSvc )
privatedelete
void ChronoStatSvc::printStats ( )
protected

nothing to print?

CONTINUE

CONTINUE

decoration

Definition at line 552 of file ChronoStatSvc.cpp.

553 {
555  if ( m_statEntities.empty() ) { return ; }
556 
557  MsgStream log ( msgSvc() , "******Stat******" ) ;
559  const std::string stars( ( m_statCoutFlag ) ? 126 : 100 , '*' ) ;
561  if ( m_statCoutFlag )
562  {
563  std::cout << stars << std::endl;
564  std::cout << " The Final stat Table "
565  << ( m_statOrderFlag ? "(ordered)" : "(not ordered)" ) << std::endl;
566  std::cout << stars << std::endl;
567  }
568  else
569  {
570  log << m_statPrintLevel << stars << endmsg;
571  log << m_statPrintLevel << " The Final stat Table "
572  << ( m_statOrderFlag ? "(ordered)" : "(not ordered)" ) << endmsg;
573  log << m_statPrintLevel << stars << endmsg;
574  }
575 
576  {
577  // prepare container for printing
578  typedef std::pair<const StatEntity*,const StatTag*> SPair;
579  typedef std::vector<SPair> SCont;
580  SCont tmpCont;
582  std::back_inserter(tmpCont),
583  [](StatMap::const_reference i)
584  { return std::make_pair( &i.second, &i.first); } );
585  // sort it
586  if ( m_statOrderFlag ) std::sort( tmpCont.begin(), tmpCont.end(),
588  // print the table header
589  if ( m_statCoutFlag ) { std::cout << m_header << std::endl ; }
590  else { log << m_statPrintLevel << m_header << endmsg ; }
591 
592  // loop over counters and print them:
593  for ( const auto& iter : tmpCont ) {
595  const StatEntity* entity = iter.first ;
596  if ( !entity ) { continue ; }
597  const StatTag* tag = iter.second ;
598  if ( !tag ) { continue ; }
599  if ( m_statCoutFlag )
601  {
602  std::cout
604  ( *tag , *entity , m_useEffFormat , m_format1 , m_format2 )
605  << std::endl;
606  }
607  else
608  {
609  log
612  ( *tag , *entity , m_useEffFormat , m_format1 , m_format2 )
613  << endmsg ;
614  }
615  }
616  tmpCont.clear();
617  }
619  if ( m_statCoutFlag ) { std::cout << stars << std::endl; }
620  else { log << m_statPrintLevel << stars << endmsg; }
621 }
bool m_useEffFormat
flag to use the special "efficiency" format
Definition of the MsgStream class used to transmit messages.
Definition: MsgStream.h:24
StatMap m_statEntities
stat part
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
std::string m_header
the header row
auto begin(reverse_wrapper< T > &w)
Definition: reverse.h:45
std::string m_format2
format for "efficiency" statistical printout rows
bool m_statOrderFlag
flag for formattion the final statistic table
auto end(reverse_wrapper< T > &w)
Definition: reverse.h:47
constexpr struct CompareFirstOfPointerPair_t CompareFirstOfPointerPair
void clear(STATE_TYPE _i=std::ios_base::failbit)
Definition: MsgStream.h:222
bool m_statCoutFlag
flag for destination of the t he final table
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:299
MSG::Level m_statPrintLevel
The basic counter used for Monitoring purposes.
Definition: StatEntity.h:64
list i
Definition: ana.py:128
std::string m_format1
format for regular statistical printout rows
void ChronoStatSvc::saveStats ( )
private

dump the statistics into an ASCII file for offline processing

CONTINUE

CONTINUE

Definition at line 478 of file ChronoStatSvc.cpp.

479 {
480  std::ofstream out( m_statsOutFileName.value(),
481  std::ios_base::out | std::ios_base::trunc );
482  if ( !out.good() ) {
483  MsgStream msg( msgSvc() , name() );
484  msg << MSG::INFO
485  << "Could not open the output file for writing chrono statistics ["
486  << m_statsOutFileName.value() << "]"
487  << endmsg;
488  return;
489  } else {
490  // format it our way
491  out << std::scientific << std::setprecision(8) ;
492  }
493 
494  // ChronoEntity
495  std::vector<std::pair<const ChronoEntity*, const ChronoTag*> > chronos;
496  chronos.reserve(m_chronoEntities.size() );
498  std::back_inserter(chronos),
499  [](ChronoMap::const_reference i)
500  { return std::make_pair( &i.second, &i.first ); } );
501 
502  // sort it
503  std::sort( std::begin(chronos) ,
504  std::end(chronos) ,
506 
507  // print User Time statistics
508  for( const auto& iter : chronos ) {
509  //
510  const ChronoEntity* entity = iter.first;
511  if( !entity ) { continue ; }
512 
513  const ChronoTag* tag = iter.second ;
514  if( !tag ) { continue ; }
515 
516  // create an entry in the .INI-like table
517  out << "\n[" << *tag << "]\n";
518 
519  // user
520  out << "cpu_user_total = " << entity->uTotalTime() << "\n";
521  out << "cpu_user_min = " << entity->uMinimalTime() << "\n";
522  out << "cpu_user_mean = " << entity->uMeanTime() << "\n";
523  out << "cpu_user_RMS = " << entity->uRMSTime() << "\n";
524  out << "cpu_user_max = " << entity->uMaximalTime() << "\n";
525  out << "cpu_user_nbr = " << entity->nOfMeasurements() << "\n";
526 
527  // system
528  out << "\n"; // just for clarity
529  out << "cpu_system_total = " << entity->kTotalTime() << "\n";
530  out << "cpu_system_min = " << entity->kMinimalTime() << "\n";
531  out << "cpu_system_mean = " << entity->kMeanTime() << "\n";
532  out << "cpu_system_RMS = " << entity->kRMSTime() << "\n";
533  out << "cpu_system_max = " << entity->kMaximalTime() << "\n";
534  out << "cpu_system_nbr = " << entity->nOfMeasurements() << "\n";
535 
536  // real
537  out << "\n"; // just for clarity
538  out << "cpu_real_total = " << entity->eTotalTime() << "\n";
539  out << "cpu_real_min = " << entity->eMinimalTime() << "\n";
540  out << "cpu_real_mean = " << entity->eMeanTime() << "\n";
541  out << "cpu_real_RMS = " << entity->eRMSTime() << "\n";
542  out << "cpu_real_max = " << entity->eMaximalTime() << "\n";
543  out << "cpu_real_nbr = " << entity->nOfMeasurements() << "\n";
544 
545  }
546 
547  out << std::endl;
548 }
double kMaximalTime() const
maximal measurement for kernel time
Definition: ChronoEntity.h:216
Definition of the MsgStream class used to transmit messages.
Definition: MsgStream.h:24
double uMinimalTime() const
minimal measurement for user time
Definition: ChronoEntity.h:195
double uTotalTime() const
total user time
Definition: ChronoEntity.h:226
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
a small helper class for implementation of ChronoStatSvc service, It also could be used as some local...
Definition: ChronoEntity.h:21
auto begin(reverse_wrapper< T > &w)
Definition: reverse.h:45
double kTotalTime() const
total Kernel time
Definition: ChronoEntity.h:231
StringProperty m_statsOutFileName
Name of the output file where we'll dump the stats.
double uRMSTime() const
r.m.s User Time
Definition: ChronoEntity.h:267
double kMinimalTime() const
minimal measurement for kernel time
Definition: ChronoEntity.h:201
double eMinimalTime() const
minimal measurement for elapsed time
Definition: ChronoEntity.h:206
double kRMSTime() const
r.m.s Kernel Time
Definition: ChronoEntity.h:262
double kMeanTime() const
average Kernel Time
Definition: ChronoEntity.h:247
double eMeanTime() const
average Elapsed Time
Definition: ChronoEntity.h:257
auto end(reverse_wrapper< T > &w)
Definition: reverse.h:47
constexpr struct CompareFirstOfPointerPair_t CompareFirstOfPointerPair
double eRMSTime() const
r.m.s Elapsed Time
Definition: ChronoEntity.h:272
const TYPE & value() const
explicit conversion
Definition: Property.h:341
double uMeanTime() const
average User Time
Definition: ChronoEntity.h:252
double eMaximalTime() const
maximal measurement for elapsed time
Definition: ChronoEntity.h:221
unsigned long nOfMeasurements() const
number of chrono measurements
Definition: ChronoEntity.h:191
double uMaximalTime() const
maximal measurement for user time
Definition: ChronoEntity.h:211
list i
Definition: ana.py:128
double eTotalTime() const
total Elapsed time
Definition: ChronoEntity.h:236
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 419 of file ChronoStatSvc.cpp.

421 {
422  auto theIter=m_statEntities.find(statTag);
423 
424  StatEntity * theStat=nullptr ;
425  // if new entity, specify the number of events to be skipped
426  if (theIter==m_statEntities.end()){
427  // new stat entity
428  StatEntity& theSe = m_statEntities[ statTag ];
429  theStat=& theSe;
431  }
432  else
433  {
434  //existing stat entity
435  theStat=&theIter->second;
436  }
437 
438  theStat->addFlag ( statFlag ) ;
439 }
StatMap m_statEntities
stat part
long m_numberOfSkippedEventsForMemStat
void setnEntriesBeforeReset(unsigned long nEntriesBeforeReset)
DR specify number of entry before reset.
Definition: StatEntity.cpp:219
unsigned long addFlag(const double Flag)
add a flag
Definition: StatEntity.h:412
The basic counter used for Monitoring purposes.
Definition: StatEntity.h:64
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 470 of file ChronoStatSvc.cpp.

471 {
472  auto it = m_statEntities.find ( t ) ;
473  return m_statEntities.end() != it ? &(it->second) : nullptr;
474 }
StatMap m_statEntities
stat part
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 444 of file ChronoStatSvc.cpp.

445 {
446  MsgStream log ( msgSvc() , statTag ) ;
447  log << (MSG::Level) m_statPrintLevel << m_statEntities[ statTag ] << endmsg;
448 }
Definition of the MsgStream class used to transmit messages.
Definition: MsgStream.h:24
StatMap m_statEntities
stat part
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
MSG::Level m_statPrintLevel

Member Data Documentation

bool ChronoStatSvc::m_chronoCoutFlag
private

flag for destination of the the final table

Definition at line 150 of file ChronoStatSvc.h.

ChronoMap ChronoStatSvc::m_chronoEntities
private

chrono part

Definition at line 143 of file ChronoStatSvc.h.

bool ChronoStatSvc::m_chronoOrderFlag
private

flag for formattion the final statistic table

Definition at line 152 of file ChronoStatSvc.h.

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

Definition at line 146 of file ChronoStatSvc.h.

bool ChronoStatSvc::m_chronoTableFlag
private

flag for printing the final table

Definition at line 148 of file ChronoStatSvc.h.

std::string ChronoStatSvc::m_format1
private

format for regular statistical printout rows

Definition at line 183 of file ChronoStatSvc.h.

std::string ChronoStatSvc::m_format2
private

format for "efficiency" statistical printout rows

Definition at line 185 of file ChronoStatSvc.h.

std::string ChronoStatSvc::m_header
private

the header row

Definition at line 181 of file ChronoStatSvc.h.

int ChronoStatSvc::m_intChronoPrintLevel
private

level of info printing

Definition at line 145 of file ChronoStatSvc.h.

int ChronoStatSvc::m_intStatPrintLevel
private

level of info printing

Definition at line 167 of file ChronoStatSvc.h.

long ChronoStatSvc::m_numberOfSkippedEventsForMemStat
private

Definition at line 161 of file ChronoStatSvc.h.

std::ofstream ChronoStatSvc::m_ofd
private

Definition at line 192 of file ChronoStatSvc.h.

std::string ChronoStatSvc::m_perEventFile
private

Definition at line 191 of file ChronoStatSvc.h.

TimeMap ChronoStatSvc::m_perEvtTime
private

Definition at line 190 of file ChronoStatSvc.h.

bool ChronoStatSvc::m_printEllapsedTime
private

flag for printing Ellapsed quantities

Definition at line 158 of file ChronoStatSvc.h.

bool ChronoStatSvc::m_printSystemTime
private

flag for printing System quantities

Definition at line 156 of file ChronoStatSvc.h.

bool ChronoStatSvc::m_printUserTime
private

flag for printing User quantities

Definition at line 154 of file ChronoStatSvc.h.

bool ChronoStatSvc::m_statCoutFlag
private

flag for destination of the t he final table

Definition at line 172 of file ChronoStatSvc.h.

StatMap ChronoStatSvc::m_statEntities
private

stat part

Definition at line 164 of file ChronoStatSvc.h.

bool ChronoStatSvc::m_statOrderFlag
private

flag for formattion the final statistic table

Definition at line 174 of file ChronoStatSvc.h.

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

Definition at line 168 of file ChronoStatSvc.h.

StringProperty ChronoStatSvc::m_statsOutFileName
private

Name of the output file where we'll dump the stats.

Definition at line 178 of file ChronoStatSvc.h.

bool ChronoStatSvc::m_statTableFlag
private

flag for printing the final table

Definition at line 170 of file ChronoStatSvc.h.

bool ChronoStatSvc::m_useEffFormat = true
private

flag to use the special "efficiency" format

Definition at line 187 of file ChronoStatSvc.h.


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