Go to the documentation of this file.00001 #ifdef __ICC
00002
00003
00004 #pragma warning(disable:654)
00005 #endif
00006
00007 #include "GaudiKernel/MsgStream.h"
00008 #include "GaudiKernel/AudFactory.h"
00009 #include "GaudiKernel/IChronoStatSvc.h"
00010
00011 #include "GaudiKernel/Stat.h"
00012
00014 #include "ProcStats.h"
00015 #include "MemStatAuditor.h"
00016
00017 DECLARE_AUDITOR_FACTORY(MemStatAuditor)
00018
00019 MemStatAuditor::MemStatAuditor(const std::string& name, ISvcLocator* pSvcLocator) :
00020 MemoryAuditor(name, pSvcLocator), m_vSize(-1.)
00021 {
00022 }
00023
00024 MemStatAuditor::~MemStatAuditor() {}
00025
00026 StatusCode MemStatAuditor::initialize() {
00027 StatusCode sc = CommonAuditor::initialize();
00028 if (UNLIKELY(sc.isFailure())) return sc;
00029
00030 m_stat = serviceLocator()->service("ChronoStatSvc");
00031 if (UNLIKELY(!m_stat.get())) {
00032 MsgStream log(msgSvc(), name());
00033 log << MSG::ERROR << "Cannot get ChronoStatSvc" << endmsg;
00034 return StatusCode::FAILURE;
00035 }
00036 return StatusCode::SUCCESS;
00037 }
00038
00039 void MemStatAuditor::i_before(CustomEventTypeRef , const std::string& ) {
00040
00041 }
00042
00043 void MemStatAuditor::i_printinfo(const std::string& msg, CustomEventTypeRef evt, const std::string& caller) {
00044
00045 double deltaVSize = 0.00001;
00046
00047 procInfo info;
00048 if (getProcInfo(info)) {
00049 MsgStream log(msgSvc(), name());
00050
00051 if (info.vsize > 0) {
00052 if (m_vSize > 0){
00053 deltaVSize = info.vsize - m_vSize;
00054 }
00055
00056 m_vSize = info.vsize;
00057 }
00058
00059 log << MSG::INFO << msg << " " << caller << " " << evt <<
00060 " \tvirtual size = " << info.vsize << " MB" <<
00061 " \tresident set size = " << info.rss << " MB" <<
00062 " deltaVsize = " << deltaVSize << " MB" << endmsg;
00063 }
00064
00065
00066
00067
00068 Stat sts(statSvc(), caller + ":VMem", deltaVSize);
00069 }