| # Gaudi Framework, version v23r0 |

Home |  | Generated: Mon Jan 30 2012

Public Types | Public Member Functions | Protected Member Functions | Private Member Functions | Private Attributes

# 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 <ChronoStatSvc.h>`

Inheritance diagram for ChronoStatSvc:
[legend]
Collaboration diagram for ChronoStatSvc:
[legend]

List of all members.

## Public Types
typedef std::map < IChronoStatSvc::ChronoTag, ChronoEntity > | ChronoMap
| some useful typedefs
typedef std::map < IChronoStatSvc::StatTag, StatEntity > | StatMap
## Public Member Functions
virtual StatusCode | initialize ()
| Implementation of IService::initialize()
virtual StatusCode | finalize ()
| Implementation of IService::finalize()
virtual ChronoEntity * | chronoStart (const IChronoStatSvc::ChronoTag &chronoTag)
| Implementation of IChronoStatSvc::chronoStart.
virtual const ChronoEntity * | chronoStop (const IChronoStatSvc::ChronoTag &chronoTag)
| Implementation of IChronoStatSvc::chronoStop.
virtual IChronoStatSvc::ChronoTime | chronoDelta (const IChronoStatSvc::ChronoTag &chronoTag, IChronoStatSvc::ChronoType theType)
| Implementation of IchronoStatSvc::chronoDelta.
virtual void | chronoPrint (const IChronoStatSvc::ChronoTag &chronoTag)
| Implementation of IChronoStatSvc::chronoPrint.
virtual ChronoStatus | chronoStatus (const IChronoStatSvc::ChronoTag &chronoTag)
| Implementation of IChronoStatSvc::chronoStatus.
virtual void | stat (const IChronoStatSvc::StatTag &statTag, const IChronoStatSvc::StatFlag &statFlag)
| Implementation of IChronoStatSvc::stat add statistical information to the entity , tagged by its name.
virtual void | statPrint (const IChronoStatSvc::ChronoTag &statTag)
| prints (using message service) info about statistical entity, tagged by its name
virtual const ChronoEntity * | chrono (const IChronoStatSvc::ChronoTag &t) const
| extract the chrono entity for the given tag (name)
virtual const StatEntity * | stat (const IChronoStatSvc::StatTag &t) const
| extract the stat entity for the given tag (name)
| ChronoStatSvc (const std::string &name, ISvcLocator *svcloc)
| Default constructor.
virtual | ~ChronoStatSvc ()
| Destructor.
## Protected Member Functions
void | printStats ()
## Private Member Functions
| ChronoStatSvc ()
| ChronoStatSvc (const ChronoStatSvc &)
ChronoStatSvc & | operator= (const ChronoStatSvc &)
void | saveStats ()
| dump the statistics into an ASCII file for offline processing
## Private Attributes
ChronoMap | m_chronoEntities
| chrono part
int | m_intChronoPrintLevel
| level of info printing
MSG::Level | m_chronoPrintLevel
bool | m_chronoTableFlag
| flag for printing the final table
bool | m_chronoCoutFlag
| flag for destination of the the final table
bool | m_chronoOrderFlag
| flag for formattion the final statistic table
bool | m_printUserTime
| flag for printing User quantities
bool | m_printSystemTime
| flag for printing System quantities
bool | m_printEllapsedTime
| flag for printing Ellapsed quantities
long | m_numberOfSkippedEventsForMemStat
StatMap | m_statEntities
| stat part
int | m_intStatPrintLevel
| level of info printing
MSG::Level | m_statPrintLevel
bool | m_statTableFlag
| flag for printing the final table
bool | m_statCoutFlag
| flag for destination of the t he final table
bool | m_statOrderFlag
| flag for formattion the final statistic table
StringProperty | m_statsOutFileName
| Name of the output file where we'll dump the stats.
std::string | m_header
| the header row
std::string | m_format1
| format for regular statistical printout rows
std::string | m_format2
| format for "efficiency" statistical printout rows
bool | m_useEffFormat
| flag to use the special "efficiency" format

## 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.Belyaev@itep.ru : December 1, 1999

Definition at line 36 of file ChronoStatSvc.h.

## Member Typedef Documentation

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

some useful typedefs

Definition at line 40 of file ChronoStatSvc.h.

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

Definition at line 41 of file ChronoStatSvc.h.

## Constructor & Destructor Documentation

ChronoStatSvc::ChronoStatSvc | ( | const std::string & | name,
|  | ISvcLocator * | svcloc
| ) |  |

Default constructor.

Parameters:

  name | service instance name
  svcloc | pointer 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 91 of file ChronoStatSvc.cpp.

      : base_class( name , svcloc )
      , m_chronoEntities   ()
      , m_chronoPrintLevel ( MSG::INFO )
      , m_statEntities     ()
      , m_statPrintLevel   ( MSG::INFO )
      //
      // the header row
      , m_header  ( "     Counter     |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |")
      // format for regular statistical printout rows
      , m_format1 ( " %|-15.15s|%|17t||%|10d| |%|11.7g| |%|#11.5g| |%|#11.5g| |%|#12.5g| |%|#12.5g| |" )
      // format for "efficiency" statistical printout rows
      , m_format2 ( "*%|-15.15s|%|17t||%|10d| |%|11.5g| |(%|#9.7g| +- %|-#9.7g|)%%|   -------   |   -------   |" )
      // flag to use the special "efficiency" format
      , m_useEffFormat ( true )
    {
      declareProperty ( "ChronoPrintOutTable"    ,
                        m_chronoTableFlag      = true      );
      declareProperty ( "ChronoDestinationCout"  ,
                        m_chronoCoutFlag       = false     );
      declareProperty ( "ChronoPrintLevel"       ,
                        m_intChronoPrintLevel  = MSG::INFO );
      declareProperty ( "ChronoTableToBeOrdered" ,
                        m_chronoOrderFlag      = true      );
      declareProperty ( "PrintUserTime"          ,
                        m_printUserTime        = true      );
      declareProperty ( "PrintSystemTime"        ,
                        m_printSystemTime      = false     );
      declareProperty ( "PrintEllapsedTime"      ,
                        m_printEllapsedTime    = false     );
      declareProperty ( "StatPrintOutTable"      ,
                        m_statTableFlag        = true      );
      declareProperty ( "StatDestinationCout"    ,
                        m_statCoutFlag         = false     );
      declareProperty ( "StatPrintLevel"         ,
                        m_intStatPrintLevel    = MSG::INFO );
      declareProperty ( "StatTableToBeOrdered"   ,
                        m_statOrderFlag        = true      );

      // specify the number of events to be skipped by the memory auditor
      // in order to better spot memory leak
      declareProperty ( "NumberOfSkippedEventsForMemStat"      ,
                        m_numberOfSkippedEventsForMemStat = -1 ) ;

      declareProperty( "AsciiStatsOutputFile",
                       m_statsOutFileName = "",
                       "Name of the output file storing the stats. If empty, no"
                       " statistics will be saved (default)" );

      declareProperty
        ( "StatTableHeader"        , m_header                          ,
          "The header row for the output Stat-table"                   ) ;
      declareProperty
        ( "RegularRowFormat"       , m_format1                         ,
          "The format for the regular row in the output Stat-table"    ) ;
      declareProperty
        ( "EfficiencyRowFormat"    , m_format2                         ,
          "The format for the regular row in the outptu Stat-table"    ) ;
      declareProperty
        ( "UseEfficiencyRowFormat" , m_useEffFormat                    ,
          "Use the special format for printout of efficiency counters" ) ;
    }

ChronoStatSvc::~ChronoStatSvc | ( | ) | `[virtual]`

Destructor.

Definition at line 170 of file ChronoStatSvc.cpp.

    {
      // clear the container of chrono entities
      m_chronoEntities.clear();
      // clear the container of stat   entities
      m_statEntities.clear();
    }

ChronoStatSvc::ChronoStatSvc | ( | ) | `[private]`

ChronoStatSvc::ChronoStatSvc | ( | const ChronoStatSvc & | ) | `[private]`

## Member Function Documentation

const ChronoEntity * ChronoStatSvc::chrono | ( | const IChronoStatSvc::ChronoTag & | t ) | const`[virtual]`

extract the chrono entity for the given tag (name)

See also:
  IChronoStatSvc

Parameters:

  t | chrono tag(name)

Returns:
  pointer to chrono entity

Implements IChronoSvc.

Definition at line 472 of file ChronoStatSvc.cpp.

    {
      ChronoMap::const_iterator it = m_chronoEntities.find ( t ) ;
      if ( m_chronoEntities.end() != it ) { return &(it->second) ; }
      return 0 ;
    }

IChronoStatSvc::ChronoTime ChronoStatSvc::chronoDelta | ( | const IChronoStatSvc::ChronoTag & | chronoTag,
|  | IChronoStatSvc::ChronoType | theType
| ) |  | `[virtual]`

Implementation of IchronoStatSvc::chronoDelta.

See also:
  IChronoStatSvc

Implements IChronoSvc.

Definition at line 400 of file ChronoStatSvc.cpp.

    {
      return m_chronoEntities[ chronoTag ].delta( theType );
    }

void ChronoStatSvc::chronoPrint | ( | const IChronoStatSvc::ChronoTag & | chronoTag ) | `[virtual]`

Implementation of IChronoStatSvc::chronoPrint.

See also:
  IChronoStatSvc

Implements IChronoSvc.

Definition at line 409 of file ChronoStatSvc.cpp.

    {
      MsgStream log ( msgSvc() , chronoTag );
      if( m_printUserTime   ) {
        log << (MSG::Level) m_chronoPrintLevel
            << m_chronoEntities[ chronoTag ].outputUserTime  ()
            << endmsg;
      }
      if( m_printSystemTime ) {
        log << (MSG::Level) m_chronoPrintLevel
            << m_chronoEntities[ chronoTag ].outputSystemTime()
            << endmsg;
      }
    }

ChronoEntity * ChronoStatSvc::chronoStart | ( | const IChronoStatSvc::ChronoTag & | chronoTag ) | `[virtual]`

Implementation of IChronoStatSvc::chronoStart.

See also:
  IChronoStatSvc

Implements IChronoSvc.

Definition at line 378 of file ChronoStatSvc.cpp.

    {
      ChronoEntity& entity = m_chronoEntities [ chronoTag ] ;
      entity.start() ;
      return &entity ;
    }

IChronoStatSvc::ChronoStatus ChronoStatSvc::chronoStatus | ( | const IChronoStatSvc::ChronoTag & | chronoTag ) | `[virtual]`

Implementation of IChronoStatSvc::chronoStatus.

See also:
  IChronoStatSvc

Implements IChronoSvc.

Definition at line 428 of file ChronoStatSvc.cpp.

    { return m_chronoEntities[ chronoTag ].status(); }

const ChronoEntity * ChronoStatSvc::chronoStop | ( | const IChronoStatSvc::ChronoTag & | chronoTag ) | `[virtual]`

Implementation of IChronoStatSvc::chronoStop.

See also:
  IChronoStatSvc

Implements IChronoSvc.

Definition at line 389 of file ChronoStatSvc.cpp.

    {
      ChronoEntity& entity = m_chronoEntities [ chronoTag ] ;
      entity.stop() ;
      return &entity ;
    }

StatusCode ChronoStatSvc::finalize | ( | ) | `[virtual]`

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

Reimplemented from Service.

Definition at line 228 of file ChronoStatSvc.cpp.

    {
      std::string local = name()+".finalize()";
      MsgStream main_log( msgSvc() , local );
      chronoStop( name() ) ;

      if ( m_chronoTableFlag &&
           !m_chronoEntities.empty() &&
           ( m_printUserTime || m_printSystemTime ) )
        {
          MsgStream log( msgSvc() , "*****Chrono*****" );
          const std::string stars( ( m_chronoCoutFlag ) ? 126 : 100  , '*' );
          if( m_chronoCoutFlag  )
            {
              std::cout << stars << std::endl;
              std::cout << local <<  " The Final CPU consumption (Chrono) Table "
                        << ( m_chronoOrderFlag ? "(ordered)" : "(not ordered)" ) << std::endl;
              std::cout << stars << std::endl;
            }
          else
            {
              log << (MSG::Level) m_chronoPrintLevel
            << stars << endmsg;
              log << (MSG::Level) m_chronoPrintLevel
            << " The Final CPU consumption ( Chrono ) Table "
                  << ( m_chronoOrderFlag ? "(ordered)" : "(not ordered)" ) << endmsg;
              log << (MSG::Level) m_chronoPrintLevel << stars << endmsg;
            }
          {  // prepare container for printing
            typedef std::pair<ChronoEntity*,const ChronoTag*>        MPair;
            typedef std::vector<MPair>                               MCont;
            MCont tmpCont;
            for( ChronoMap::iterator it = m_chronoEntities.begin() ;
           m_chronoEntities.end() != it ;  ++it )
              { tmpCont.push_back( MPair( &(it->second) , &(it->first) ) ) ; }
            // sort it
            if( m_chronoOrderFlag )
      { std::sort( tmpCont.begin() ,
                   tmpCont.end()   ,
                   ComparePairOfChronoEntityAndChronoTag() ); }
            // print User Time statistics
            if( m_printUserTime   )
              {
                for( MCont::iterator iter = tmpCont.begin() ;  tmpCont.end() != iter ; ++iter )
                  {
                    //
                    ChronoEntity*    entity = iter->first  ; if( 0 == entity ) { continue ; }
                    const ChronoTag* tag    = iter->second ; if( 0 == tag    ) { continue ; }

                    entity->stop();

                    if     ( m_chronoCoutFlag )
                      { std::cout << *tag << "\t"  << entity->outputUserTime  () << std::endl ; }
                    else
                      {
                        MsgStream(msgSvc(), *tag)
              << m_chronoPrintLevel << entity->outputUserTime  () << endmsg ;
                      }
                    //
                  }
              }
            if( m_printSystemTime )
              {
                if      ( m_printUserTime && m_chronoCoutFlag   )
                  { std::cout << stars << std::endl;                           }
                else if ( m_printUserTime && !m_chronoCoutFlag  )
                  { log << (MSG::Level) m_chronoPrintLevel << stars << endmsg; }
                for( MCont::iterator iter = tmpCont.begin() ;  tmpCont.end() != iter ; ++iter )
                  {
                    ChronoEntity*    entity = iter->first  ; if( 0 == entity ) { continue ; }
                    const ChronoTag* tag    = iter->second ; if( 0 == tag    ) { continue ; }

                    entity->stop();

                    if     ( m_chronoCoutFlag )
                      { std::cout << *tag << "\t"  << entity->outputSystemTime() << std::endl ; }
                    else
                      {
                        MsgStream(msgSvc(), *tag)
              << m_chronoPrintLevel << entity->outputSystemTime() << endmsg ;
                      }
                    //
                  }
              }
            if( m_printEllapsedTime )
              {
                if      ( ( m_printUserTime || m_printSystemTime ) &&  m_chronoCoutFlag  )
                  { std::cout << stars << std::endl;                           }
                else if ( ( m_printUserTime || m_printSystemTime ) && !m_chronoCoutFlag  )
                  { log << (MSG::Level) m_chronoPrintLevel << stars << endmsg; }
                for( MCont::iterator iter = tmpCont.begin() ;  tmpCont.end() != iter ; ++iter )
                  {
                    ChronoEntity*    entity = iter->first  ; if( 0 == entity ) { continue ; }
                    const ChronoTag* tag    = iter->second ; if( 0 == tag    ) { continue ; }

                    entity->stop();

                    if     ( m_chronoCoutFlag )
                      { std::cout << *tag << "\t"  << entity->outputElapsedTime() << std::endl ; }
                    else
                      {
                        MsgStream(msgSvc(), *tag)
              << m_chronoPrintLevel << entity->outputElapsedTime() << endmsg ;
                      }
                    //
                  }
              }
            tmpCont.clear();
          }
          if( m_chronoCoutFlag  ) { std::cout << stars << std::endl;              }
          else                    { log << m_chronoPrintLevel << stars << endmsg; }
        }

      if ( m_statTableFlag ) { printStats () ; }

      if ( !m_statsOutFileName.value().empty() ) {
        saveStats();
      }

      main_log << MSG::INFO << " Service finalized successfully " << endmsg;

      return Service::finalize();
    }

StatusCode ChronoStatSvc::initialize | ( | ) | `[virtual]`

Implementation of IService::initialize()

redefine some "properties"

start its own chrono

Reimplemented from Service.

Definition at line 180 of file ChronoStatSvc.cpp.

    {
      StatusCode sc = Service::initialize();
      if ( sc.isFailure() ) return sc;
      MsgStream log( msgSvc() , this->name() );

      // Set my own properties
      sc = setProperties();

      if (sc.isFailure()) {
        log << MSG::ERROR << "setting my properties" << endmsg;
        return StatusCode::FAILURE;
      }

      log << MSG::INFO << " Number of skipped events for MemStat"
          << m_numberOfSkippedEventsForMemStat << endmsg ;

      m_statPrintLevel =
        ( MSG::FATAL < m_intStatPrintLevel   ) ? MSG::FATAL :
        ( MSG::NIL   > m_intStatPrintLevel   ) ? MSG::NIL   :
        ( MSG::Level ) m_intStatPrintLevel  ;
      m_chronoPrintLevel =
        ( MSG::FATAL < m_intChronoPrintLevel ) ? MSG::FATAL :
        ( MSG::NIL   > m_intChronoPrintLevel ) ? MSG::NIL   :
        ( MSG::Level ) m_intChronoPrintLevel ;
      if( m_chronoTableFlag  &&
          !m_printUserTime   &&
          !m_printSystemTime &&
          !m_printEllapsedTime ) { m_printUserTime   = true ; }
      if(  m_printUserTime    ||
           m_printSystemTime  ||
           m_printEllapsedTime ) { m_chronoTableFlag = true ; }
      chronoStart( name() ) ;
      return StatusCode::SUCCESS;
    }

ChronoStatSvc& ChronoStatSvc::operator= | ( | const ChronoStatSvc & | ) | `[private]`

void ChronoStatSvc::printStats | ( | ) | `[protected]`

nothing to print?

CONTINUE

CONTINUE

decoration

Definition at line 573 of file ChronoStatSvc.cpp.

    {
      if ( m_statEntities.empty() ) { return ; }

      MsgStream log ( msgSvc() , "******Stat******" ) ;
      const std::string stars( ( m_statCoutFlag ) ? 126 : 100  , '*' ) ;
      if ( m_statCoutFlag  )
            {
              std::cout << stars << std::endl;
              std::cout <<  " The Final stat Table "
                  << ( m_statOrderFlag ? "(ordered)" : "(not ordered)" ) << std::endl;
              std::cout << stars << std::endl;
            }
      else
      {
              log << m_statPrintLevel << stars << endmsg;
              log <<  m_statPrintLevel << " The Final stat Table "
                  << ( m_statOrderFlag ? "(ordered)" : "(not ordered)" ) << endmsg;
              log << m_statPrintLevel << stars << endmsg;
            }

      {
        // prepare container for printing
        typedef std::pair<const StatEntity*,const StatTag*>  SPair;
        typedef std::vector<SPair>                           SCont;
        SCont tmpCont;
        for( StatMap::const_iterator it = m_statEntities.begin();
             it != m_statEntities.end(); it++ )
        { tmpCont.push_back( SPair( &(it->second) , &(it->first) ) ) ; }
        // sort it
        if ( m_statOrderFlag )
        { std::sort( tmpCont.begin() ,
                     tmpCont.end()   ,
                     ComparePairOfStatEntityAndStatTag() ); }

        {
          // print the table header
          if ( m_statCoutFlag ) { std::cout <<                     m_header << std::endl ; }
          else                  { log       << m_statPrintLevel << m_header << endmsg    ; }
        }
        // loop over counters and print them:
        for ( SCont::iterator iter = tmpCont.begin() ; tmpCont.end() != iter ; ++iter )
              {
          const StatEntity* entity = iter->first  ;
          if ( 0 == entity ) { continue ; }
          const StatTag*    tag    = iter->second ;
          if ( 0 == tag    ) { continue ; }

                if ( m_statCoutFlag )
          {
            std::cout
              << Gaudi::Utils::formatAsTableRow
              ( *tag , *entity , m_useEffFormat , m_format1 , m_format2 )
              << std::endl;
          }
                else
          {
            log
              << m_statPrintLevel
              << Gaudi::Utils::formatAsTableRow
              ( *tag , *entity , m_useEffFormat , m_format1 , m_format2 )
              << endmsg ;
          }
              }
        tmpCont.clear();
      }
      if ( m_statCoutFlag  ) { std::cout << stars << std::endl;            }
      else                   { log << m_statPrintLevel << stars << endmsg; }
    }

void ChronoStatSvc::saveStats | ( | ) | `[private]`

dump the statistics into an ASCII file for offline processing

CONTINUE

CONTINUE

Definition at line 495 of file ChronoStatSvc.cpp.

    {
      std::ofstream out( m_statsOutFileName.value().c_str(),
                         std::ios_base::out | std::ios_base::trunc );
      if ( !out.good() ) {
        MsgStream msg( msgSvc() , name() );
        msg << MSG::INFO
            << "Could not open the output file for writing chrono statistics ["
            << m_statsOutFileName.value() << "]"
            << endmsg;
        return;
      } else {
        // format it our way
        out << std::scientific << std::setprecision(8) ;
      }

      // ChronoEntity
      typedef std::pair<ChronoEntity*, const ChronoTag*> MPair;
      typedef std::vector<MPair>                         MCont;
      MCont chronos;

      for( ChronoMap::iterator it = m_chronoEntities.begin() ;
           m_chronoEntities.end() != it ;  ++it ) {
        chronos.push_back( MPair( &(it->second) , &(it->first) ) ) ;
      }

      // sort it
      std::sort( chronos.begin() ,
                 chronos.end()   ,
                 ComparePairOfChronoEntityAndChronoTag() );

      // print User Time statistics
      for( MCont::iterator iter = chronos.begin() ;
           chronos.end() != iter;
           ++iter ) {
        //
        const ChronoEntity*    entity = iter->first;
        if( 0 == entity ) { continue ; }

        const ChronoTag* tag    = iter->second ;
        if( 0 == tag    ) { continue ; }

        // create an entry in the .INI-like table
        out << "\n[" << *tag << "]\n";

        // user
        out << "cpu_user_total = " << entity->uTotalTime() << "\n";
        out << "cpu_user_min = "   << entity->uMinimalTime() << "\n";
        out << "cpu_user_mean = "  << entity->uMeanTime() << "\n";
        out << "cpu_user_RMS = "   << entity->uRMSTime() << "\n";
        out << "cpu_user_max = "   << entity->uMaximalTime() << "\n";
        out << "cpu_user_nbr = "   << entity->nOfMeasurements() << "\n";

        // system
        out << "\n"; // just for clarity
        out << "cpu_system_total = " << entity->kTotalTime() << "\n";
        out << "cpu_system_min = "   << entity->kMinimalTime() << "\n";
        out << "cpu_system_mean = "  << entity->kMeanTime() << "\n";
        out << "cpu_system_RMS = "   << entity->kRMSTime() << "\n";
        out << "cpu_system_max = "   << entity->kMaximalTime() << "\n";
        out << "cpu_system_nbr = "   << entity->nOfMeasurements() << "\n";

        // real
        out << "\n"; // just for clarity
        out << "cpu_real_total = " << entity->eTotalTime() << "\n";
        out << "cpu_real_min = "   << entity->eMinimalTime() << "\n";
        out << "cpu_real_mean = "  << entity->eMeanTime() << "\n";
        out << "cpu_real_RMS = "   << entity->eRMSTime() << "\n";
        out << "cpu_real_max = "   << entity->eMaximalTime() << "\n";
        out << "cpu_real_nbr = "   << entity->nOfMeasurements() << "\n";

      }

      out << std::endl;
    }

void ChronoStatSvc::stat | ( | const IChronoStatSvc::StatTag & | statTag,
|  | const IChronoStatSvc::StatFlag & | statFlag
| ) |  | `[virtual]`

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

See also:
  IChronoStatSvc

Implements IStatSvc.

Definition at line 434 of file ChronoStatSvc.cpp.

    {
      StatMap::iterator theIter=m_statEntities.find(statTag);

      StatEntity * theStat=0 ;
      // if new entity, specify the neumber of events to be skipped
      if (theIter==m_statEntities.end()){
        // new stat entity
        StatEntity& theSe = m_statEntities[ statTag ];
        theStat=& theSe;
        theStat->setnEntriesBeforeReset(m_numberOfSkippedEventsForMemStat);
      }
      else
      {
        //existing stat entity
        theStat=&((*theIter).second);
      }

      theStat->addFlag ( statFlag ) ;
    }

const StatEntity * ChronoStatSvc::stat | ( | const IChronoStatSvc::StatTag & | t ) | const`[virtual]`

extract the stat entity for the given tag (name)

See also:
  IChronoStatSvc

Parameters:

  t | stat tag(name)

Returns:
  pointer to stat entity

Implements IStatSvc.

Definition at line 486 of file ChronoStatSvc.cpp.

    {
      StatMap::const_iterator it = m_statEntities.find ( t ) ;
      if ( m_statEntities.end() != it ) { return &(it->second) ; }
      return 0 ;
    }

void ChronoStatSvc::statPrint | ( | const IChronoStatSvc::ChronoTag & | statTag ) | `[virtual]`

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

See also:
  IChronoStatSvc

Implements IStatSvc.

Definition at line 459 of file ChronoStatSvc.cpp.

    {
      MsgStream log ( msgSvc() , statTag ) ;
      log << (MSG::Level) m_statPrintLevel << m_statEntities[ statTag ] << endmsg;
    }

## Member Data Documentation

bool ChronoStatSvc::m_chronoCoutFlag`[private]`

flag for destination of the the final table

Definition at line 149 of file ChronoStatSvc.h.

ChronoMap ChronoStatSvc::m_chronoEntities`[private]`

chrono part

Definition at line 142 of file ChronoStatSvc.h.

bool ChronoStatSvc::m_chronoOrderFlag`[private]`

flag for formattion the final statistic table

Definition at line 151 of file ChronoStatSvc.h.

MSG::Level ChronoStatSvc::m_chronoPrintLevel`[private]`

Definition at line 145 of file ChronoStatSvc.h.

bool ChronoStatSvc::m_chronoTableFlag`[private]`

flag for printing the final table

Definition at line 147 of file ChronoStatSvc.h.

std::string ChronoStatSvc::m_format1`[private]`

format for regular statistical printout rows

Definition at line 182 of file ChronoStatSvc.h.

std::string ChronoStatSvc::m_format2`[private]`

format for "efficiency" statistical printout rows

Definition at line 184 of file ChronoStatSvc.h.

std::string ChronoStatSvc::m_header`[private]`

the header row

Definition at line 180 of file ChronoStatSvc.h.

int ChronoStatSvc::m_intChronoPrintLevel`[private]`

level of info printing

Definition at line 144 of file ChronoStatSvc.h.

int ChronoStatSvc::m_intStatPrintLevel`[private]`

level of info printing

Definition at line 166 of file ChronoStatSvc.h.

long ChronoStatSvc::m_numberOfSkippedEventsForMemStat`[private]`

Definition at line 160 of file ChronoStatSvc.h.

bool ChronoStatSvc::m_printEllapsedTime`[private]`

flag for printing Ellapsed quantities

Definition at line 157 of file ChronoStatSvc.h.

bool ChronoStatSvc::m_printSystemTime`[private]`

flag for printing System quantities

Definition at line 155 of file ChronoStatSvc.h.

bool ChronoStatSvc::m_printUserTime`[private]`

flag for printing User quantities

Definition at line 153 of file ChronoStatSvc.h.

bool ChronoStatSvc::m_statCoutFlag`[private]`

flag for destination of the t he final table

Definition at line 171 of file ChronoStatSvc.h.

StatMap ChronoStatSvc::m_statEntities`[private]`

stat part

Definition at line 163 of file ChronoStatSvc.h.

bool ChronoStatSvc::m_statOrderFlag`[private]`

flag for formattion the final statistic table

Definition at line 173 of file ChronoStatSvc.h.

MSG::Level ChronoStatSvc::m_statPrintLevel`[private]`

Definition at line 167 of file ChronoStatSvc.h.

StringProperty ChronoStatSvc::m_statsOutFileName`[private]`

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

Definition at line 177 of file ChronoStatSvc.h.

bool ChronoStatSvc::m_statTableFlag`[private]`

flag for printing the final table

Definition at line 169 of file ChronoStatSvc.h.

bool ChronoStatSvc::m_useEffFormat`[private]`

flag to use the special "efficiency" format

Definition at line 186 of file ChronoStatSvc.h.

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

- /afs/cern.ch/sw/Gaudi/releases/GAUDI/GAUDI_v23r0/GaudiCommonSvc/src/ChronoStatSvc.h
- /afs/cern.ch/sw/Gaudi/releases/GAUDI/GAUDI_v23r0/GaudiCommonSvc/src/ChronoStatSvc.cpp

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines