stack trace at this moment only for main thread

This commit is contained in:
VaclavT 2021-05-03 18:31:26 +02:00
parent 0829f965be
commit c17d43724a
2 changed files with 18 additions and 1 deletions

View File

@ -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();
}

View File

@ -5,6 +5,9 @@
#include <unordered_map>
#include <deque>
#include <chrono>
#include <thread>
#include <mutex>
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<std::string, long> calls_counter;
std::chrono::time_point<std::chrono::high_resolution_clock> start_time;
std::deque<std::string> call_stack;
std::thread::id main_thread_id;
};