1 #ifndef CORE_Profiler_H
2 #define CORE_Profiler_H
5 #include "functions_type.h"
16 typedef std::tuple<tInteger,tReal,std::vector<tWallTime>> tRoutineCall;
39 static std::map<tString,tRoutineCall> mProfiledRoutines;
63 auto iter=mProfiledRoutines.find(routineName);
64 if (iter==mProfiledRoutines.end()) {
71 std::get<2>(call).push_back(std::chrono::high_resolution_clock::now());
73 std::cout<<routineName<<
" start called :"<<std::get<0>(call)<<
" calls \n";
75 mProfiledRoutines[routineName]=call;
77 tRoutineCall &call=iter->second;
80 std::get<2>(call).push_back(std::chrono::high_resolution_clock::now());
82 std::cout<<routineName<<
" start called :"<<std::get<0>(call)<<
" calls \n";
93 auto iter=mProfiledRoutines.find(routineName);
94 if (iter!=mProfiledRoutines.end()) {
95 tRoutineCall &call=iter->second;
97 tWallTime timer=std::chrono::high_resolution_clock::now();
98 tWallTime& start=std::get<2>(call).back();
100 std::chrono::duration<tReal,std::milli> duration=(timer-start);
102 std::get<1>(call)+=duration.count();
104 std::get<2>(call).pop_back();
106 std::cout<<routineName<<
" end called :"<<std::get<0>(call)<<
" calls, duration:"<<(std::get<1>(call)/1000.0L)<<
" (s) \n";
118 out<<
"Called profiles Routines : \n";
119 for(
const auto& routines: mProfiledRoutines) {
120 out<<
"\t"<<routines.first<<
" : ";
121 const tRoutineCall &call=routines.second;
122 out<<
"\t nCalls:"<<std::get<0>(call);
123 out<<
"\t time:"<<(std::get<1>(call)/1000.0L)<<
" (s)";
124 out<<
"\t number of not ended calls:"<<(std::get<2>(call).size())<<
"\n";
abstract base class for most classes.
Definition: CORE_Profiler.h:26
virtual ~CORE_Profiler()
destroy the instance of object std
Definition: CORE_Profiler.h:52
static void PrintCallRoutines(std::ostream &out)
print the routine called
Definition: CORE_Profiler.h:115
static void EndCallRoutine(const tString &routineName)
end calling routine
Definition: CORE_Profiler.h:91
CORE_Profiler()
build an instance of the object
Definition: CORE_Profiler.h:46
static tBoolean IS_PROFILING_ROUTINE_PRINTED
indicates if the enter & leaving of method is printed on screen
Definition: CORE_Profiler.h:33
static void StartCallRoutine(const tString &routineName)
start calling routine
Definition: CORE_Profiler.h:61