#include "timer.hpp" #include "mpi.hpp" #include #include #include #include #include "tracer.hpp" using namespace ep_lib; namespace xios { std::map *CTimer::allTimer_ptr = 0; CTimer::CTimer(const std::string& name_) : name(name_) { reset(); } double CTimer::getTime(void) { return MPI_Wtime(); } void CTimer::suspend(void) { if (!suspended) { traceEnd(name); cumulatedTime += getTime() - lastTime; } suspended = true; } void CTimer::resume(void) { if (suspended) { lastTime = getTime(); traceBegin(name); } suspended = false; } void CTimer::reset(void) { cumulatedTime = 0.; suspended = true; } double CTimer::getCumulatedTime(void) { return cumulatedTime; } CTimer& CTimer::get(const std::string name) { if(allTimer_ptr == NULL) allTimer_ptr = new std::map; std::map::iterator it = allTimer_ptr->find(name); if (it == allTimer_ptr->end()) it = allTimer_ptr->insert(std::make_pair(name, CTimer(name))).first; return it->second; } string CTimer::getAllCumulatedTime(void) { std::ostringstream strOut ; if(allTimer_ptr == 0) allTimer_ptr = new std::map; for(std::map::iterator it=allTimer_ptr->begin();it!=allTimer_ptr->end();++it) strOut<<"Timer : "<first<<" --> cumulated time : "<second.getCumulatedTime()<