diff --git a/ml_profiler.cpp b/ml_profiler.cpp index 873ec0a..bb88149 100644 --- a/ml_profiler.cpp +++ b/ml_profiler.cpp @@ -10,12 +10,18 @@ using namespace std::chrono; + void MlPerfMon::turnOn() { perfOn = true; start_time = std::chrono::high_resolution_clock::now(); } void MlPerfMon::add_method_call(const std::string &method) { + std::thread::id this_id = std::this_thread::get_id(); + // only main thread is logged, to prevent mixing from others threads so lock not needed + if (main_thread_id != this_id) + return; + call_stack.push_back(method); if (perfOn) { @@ -29,6 +35,11 @@ void MlPerfMon::add_method_call(const std::string &method) { } void MlPerfMon::end_method_call() { + std::thread::id this_id = std::this_thread::get_id(); + // only main thread is looged, to prevent mixing from others threads so lock not needed + if (main_thread_id != this_id) + return; + if (!call_stack.empty()){ call_stack.pop_back(); } diff --git a/ml_profiler.h b/ml_profiler.h index 31257b1..a4e45de 100644 --- a/ml_profiler.h +++ b/ml_profiler.h @@ -5,6 +5,9 @@ #include #include #include +#include +#include + static const int method_name_print_len = 15; static const int print_top_methods = 15; @@ -13,7 +16,9 @@ static const int call_stack_max_methods = 10; class MlPerfMon { private: - MlPerfMon() : perfOn(false) {}; + MlPerfMon() : perfOn(false) { + main_thread_id = std::this_thread::get_id(); + }; public: @@ -36,4 +41,5 @@ private: std::unordered_map calls_counter; std::chrono::time_point start_time; std::deque call_stack; + std::thread::id main_thread_id; };