|
Gaudi Framework, version v23r2 |
| Home | Generated: Thu Jun 28 2012 |
Simple auditor which uses SequencerTimerTool for *ALL* algorithms, including the algorithm from main Gaudi "TopAlg" list and algorithms managed by Data-On-Demand Service. More...


Public Member Functions | |
| virtual void | before (StandardEventType evt, INamedInterface *alg) |
| The following methods are meant to be implemented by the child class... | |
| virtual void | after (StandardEventType evt, INamedInterface *alg, const StatusCode &sc) |
| virtual void | before (CustomEventTypeRef evt, const std::string &name) |
| virtual void | after (CustomEventTypeRef evt, const std::string &name, const StatusCode &sc) |
| virtual void | handle (const Incident &) |
| Inform that a new incident has occurred. | |
| virtual StatusCode | initialize () |
| factory: | |
| virtual StatusCode | finalize () |
| TimingAuditor (const std::string &name, ISvcLocator *pSvc) | |
| standard constructor | |
| virtual | ~TimingAuditor () |
| virtual destructor | |
Private Types | |
| typedef GaudiUtils::VectorMap < const INamedInterface *, int > | Map |
| typedef GaudiUtils::HashMap < std::string, int > | MapUser |
Private Member Functions | |
| void | i_beforeInitialize (INamedInterface *alg) |
| void | i_afterInitialize (INamedInterface *alg) |
| void | i_beforeExecute (INamedInterface *alg) |
| void | i_afterExecute (INamedInterface *alg) |
| TimingAuditor () | |
| TimingAuditor (const TimingAuditor &) | |
| TimingAuditor & | operator= (const TimingAuditor &) |
Private Attributes | |
| IToolSvc * | m_toolSvc |
| tool service | |
| IIncidentSvc * | m_incSvc |
| incident service | |
| ISequencerTimerTool * | m_timer |
| the timer tool | |
| INamedInterface * | m_appMgr |
| ApplicationManager. | |
| Map | m_map |
| int | m_indent |
| indentation level | |
| bool | m_inEvent |
| "In event" flag | |
| bool | m_goodForDOD |
| "optimized for DOD" | |
| MapUser | m_mapUser |
| map used to record user timing events | |
Simple auditor which uses SequencerTimerTool for *ALL* algorithms, including the algorithm from main Gaudi "TopAlg" list and algorithms managed by Data-On-Demand Service.
Definition at line 33 of file TimingAuditor.cpp.
typedef GaudiUtils::VectorMap<const INamedInterface*,int> TimingAuditor::Map [private] |
Definition at line 97 of file TimingAuditor.cpp.
typedef GaudiUtils::HashMap<std::string,int> TimingAuditor::MapUser [private] |
Definition at line 106 of file TimingAuditor.cpp.
| TimingAuditor::TimingAuditor | ( | const std::string & | name, |
| ISvcLocator * | pSvc | ||
| ) | [inline] |
standard constructor
Definition at line 59 of file TimingAuditor.cpp.
: base_class ( name , pSvc ) // , m_toolSvc ( 0 ) , m_incSvc ( 0 ) // , m_timer ( 0 ) // , m_appMgr ( 0 ) // , m_map ( ) , m_indent ( 0 ) , m_inEvent ( false ) , m_goodForDOD ( false ) , m_mapUser ( ) { declareProperty ( "OptimizedForDOD" , m_goodForDOD ) ; } ;
| virtual TimingAuditor::~TimingAuditor | ( | ) | [inline, virtual] |
| TimingAuditor::TimingAuditor | ( | ) | [private] |
| TimingAuditor::TimingAuditor | ( | const TimingAuditor & | ) | [private] |
| void TimingAuditor::after | ( | StandardEventType | evt, |
| INamedInterface * | alg, | ||
| const StatusCode & | sc | ||
| ) | [virtual] |
Reimplemented from Auditor.
Definition at line 211 of file TimingAuditor.cpp.
{
switch (evt) {
case IAuditor::Initialize : i_afterInitialize( alg ); break;
case IAuditor::Execute : i_afterExecute( alg ); break;
default: break;
}
}
| void TimingAuditor::after | ( | CustomEventTypeRef | evt, |
| const std::string & | name, | ||
| const StatusCode & | sc | ||
| ) | [virtual] |
Reimplemented from Auditor.
Definition at line 307 of file TimingAuditor.cpp.
{
// Ignore obvious mistakes
if ( name.empty() && evt.empty() ) { return; }
// look for the user timer in the map
std::string nick = name + ":" + evt;
MapUser::iterator found = m_mapUser.find( nick );
// We cannot do much if the timer is not available
if ( m_mapUser.end() == found ) {
MsgStream log(msgSvc(), this->name());
log << MSG::WARNING << "Trying to stop the measure of the timing for '"
<< nick << "' but it was never started. Check the code"
<< endmsg;
return;
}
m_timer->stop( found->second );
}
| void TimingAuditor::before | ( | StandardEventType | evt, |
| INamedInterface * | obj | ||
| ) | [virtual] |
The following methods are meant to be implemented by the child class...
Reimplemented from Auditor.
Definition at line 202 of file TimingAuditor.cpp.
{
switch (evt) {
case IAuditor::Initialize : i_beforeInitialize( alg ); break;
case IAuditor::Execute : i_beforeExecute( alg ); break;
default: break;
}
}
| void TimingAuditor::before | ( | CustomEventTypeRef | evt, |
| const std::string & | name | ||
| ) | [virtual] |
Reimplemented from Auditor.
Definition at line 285 of file TimingAuditor.cpp.
{
// Ignore obvious mistakes
if ( name.empty() && evt.empty() ) { return; }
// look for the user timer in the map
int timer = 0;
std::string nick = name + ":" + evt;
MapUser::iterator found = m_mapUser.find( nick );
if ( m_mapUser.end() == found ) {
// add a new timer if not yet available
timer = m_timer->addTimer( nick ) ;
m_mapUser[nick] = timer;
}
else {
timer = found->second;
}
m_timer->start( timer );
}
| StatusCode TimingAuditor::finalize | ( | ) | [virtual] |
Reimplemented from Auditor.
Definition at line 176 of file TimingAuditor.cpp.
{
if ( 0 != m_incSvc )
{
m_incSvc -> removeListener ( this , IncidentType::BeginEvent ) ;
m_incSvc -> removeListener ( this , IncidentType::EndEvent ) ;
m_incSvc -> release () ;
m_incSvc = 0 ;
}
if ( 0 != m_toolSvc )
{
// the 2 following line are commented out: it is
// is a temporary hack which prevent a crash due to a problem in
// the reference counting
// if ( 0 != m_timer )
// { m_toolSvc -> releaseTool ( m_timer ) . ignore() ; m_timer = 0 ; }
m_toolSvc -> release () ;
m_toolSvc = 0 ;
}
if ( 0 != m_appMgr ) { m_appMgr -> release () ; m_appMgr = 0 ; }
// clear the map
m_map.clear() ;
// finalize the base class
return Auditor::finalize () ;
}
| void TimingAuditor::handle | ( | const Incident & | i ) | [virtual] |
Inform that a new incident has occurred.
Implements IIncidentListener.
Definition at line 327 of file TimingAuditor.cpp.
| void TimingAuditor::i_afterExecute | ( | INamedInterface * | alg ) | [private] |
Definition at line 276 of file TimingAuditor.cpp.
| void TimingAuditor::i_afterInitialize | ( | INamedInterface * | alg ) | [private] |
Definition at line 245 of file TimingAuditor.cpp.
{
if ( m_goodForDOD ) { return ; }
if ( 0 == alg ) { return ; }
--m_indent ;
}
| void TimingAuditor::i_beforeExecute | ( | INamedInterface * | alg ) | [private] |
Definition at line 252 of file TimingAuditor.cpp.
{
if ( 0 == alg ) { return ; }
++m_indent ;
Map::iterator found = m_map.find( alg ) ;
if ( m_map.end() == found )
{
MsgStream log( msgSvc() , name() ) ;
log << MSG::DEBUG
<< "Insert non-structural component '"
<< alg->name() << "' of type '"
<< System::typeinfoName(typeid(*alg)) << "' at level "
<< m_indent << endmsg ;
std::string nick = alg->name() ;
if ( 0 < m_indent ) { nick = std::string ( m_indent , ' ') + nick ; }
if ( !m_goodForDOD ) { nick[0]='*' ;}
int timer = m_timer->addTimer( nick ) ;
m_map.insert ( alg , timer ) ;
m_timer->start( timer ) ;
return ;
}
m_timer->start( found->second ) ;
}
| void TimingAuditor::i_beforeInitialize | ( | INamedInterface * | alg ) | [private] |
Definition at line 220 of file TimingAuditor.cpp.
{
if ( m_goodForDOD ) { return ; }
//
if ( 0 == alg ) { return ; }
Map::iterator found = m_map.find( alg ) ;
if ( m_map.end() != found ) { return ; }
++m_indent ;
std::string nick = alg->name() ;
if ( 0 < m_indent ) { nick = std::string ( m_indent , ' ') + nick ; }
if ( m_inEvent )
{
nick[0] = '*' ;
MsgStream log( msgSvc() , name() ) ;
log << MSG::DEBUG
<< "Insert non-structural component '"
<< alg->name() << "' of type '"
<< System::typeinfoName(typeid(*alg)) << "' at level "
<< m_indent << endmsg ;
}
int timer = m_timer->addTimer( nick ) ;
m_map.insert ( alg , timer ) ;
m_timer->start( timer ) ;
}
| StatusCode TimingAuditor::initialize | ( | ) | [virtual] |
factory:
Reimplemented from Auditor.
Definition at line 115 of file TimingAuditor.cpp.
{
StatusCode sc = Auditor::initialize() ;
if ( sc.isFailure() ) { return sc ; } // RETURN
MsgStream log ( msgSvc() , name() ) ;
// get tool service
if ( 0 == m_toolSvc )
{
sc = Auditor::service ( "ToolSvc" , m_toolSvc ) ;
if ( sc.isFailure() )
{
log << "Could not retrieve 'ToolSvc' " << sc << endmsg ;
return sc ; // RETURN
}
if ( 0 == m_timer )
{
sc = m_toolSvc->retrieveTool
( "SequencerTimerTool/TIMER" , m_timer , this , true ) ;
if ( sc.isFailure() )
{
log << MSG::ERROR
<< "Could not retrieve ISequencerTimerTool" << endmsg ;
return sc ;
}
}
}
// get incident service
if ( 0 == m_incSvc )
{
sc = Auditor::service ( "IncidentSvc" , m_incSvc ) ;
if ( sc.isFailure() )
{
log << MSG::ERROR
<< "Could not retrieve 'IncidentSvc'" << sc << endmsg ;
return sc ;
}
m_incSvc -> addListener ( this , IncidentType::BeginEvent ) ;
m_incSvc -> addListener ( this , IncidentType::EndEvent ) ;
}
// get the application manager
if ( 0 == m_appMgr )
{
sc = Auditor::service ( "ApplicationMgr" , m_appMgr ) ;
if ( sc.isFailure() )
{
log << MSG::ERROR
<< "Could not retrieve 'ApplicationMgr'" << sc << endmsg ;
return sc ;
}
if ( m_map.end() == m_map.find( m_appMgr ) )
{
int timer = m_timer->addTimer( "EVENT LOOP" ) ;
m_map.insert ( m_appMgr , timer ) ;
}
}
//
return StatusCode::SUCCESS ;
}
| TimingAuditor& TimingAuditor::operator= | ( | const TimingAuditor & | ) | [private] |
INamedInterface* TimingAuditor::m_appMgr [private] |
ApplicationManager.
Definition at line 95 of file TimingAuditor.cpp.
bool TimingAuditor::m_goodForDOD [private] |
"optimized for DOD"
Definition at line 104 of file TimingAuditor.cpp.
IIncidentSvc* TimingAuditor::m_incSvc [private] |
incident service
Definition at line 91 of file TimingAuditor.cpp.
int TimingAuditor::m_indent [private] |
indentation level
Definition at line 100 of file TimingAuditor.cpp.
bool TimingAuditor::m_inEvent [private] |
"In event" flag
Definition at line 102 of file TimingAuditor.cpp.
Map TimingAuditor::m_map [private] |
Definition at line 98 of file TimingAuditor.cpp.
MapUser TimingAuditor::m_mapUser [private] |
map used to record user timing events
Definition at line 107 of file TimingAuditor.cpp.
ISequencerTimerTool* TimingAuditor::m_timer [private] |
the timer tool
Definition at line 93 of file TimingAuditor.cpp.
IToolSvc* TimingAuditor::m_toolSvc [private] |
tool service
Definition at line 89 of file TimingAuditor.cpp.