From 957265ba5271aef0b14c3bc39fb015c9d1ae7805 Mon Sep 17 00:00:00 2001 From: JosJuice Date: Sat, 29 Mar 2025 15:00:33 +0100 Subject: Common: Make Profiler thread safe --- Source/Core/Common/Profiler.cpp | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) (limited to 'Source/Core/Common/Profiler.cpp') diff --git a/Source/Core/Common/Profiler.cpp b/Source/Core/Common/Profiler.cpp index f3903629e6..34aafd38fd 100644 --- a/Source/Core/Common/Profiler.cpp +++ b/Source/Core/Common/Profiler.cpp @@ -29,10 +29,8 @@ std::string Profiler::s_lazy_result; int Profiler::s_lazy_delay = 0; Profiler::Profiler(const std::string& name) - : m_name(name), m_usecs(0), m_usecs_min(UINT64_MAX), m_usecs_max(0), m_usecs_quad(0), - m_calls(0), m_depth(0) + : m_name(name), m_usecs(0), m_usecs_min(UINT64_MAX), m_usecs_max(0), m_usecs_quad(0), m_calls(0) { - m_time = Common::Timer::NowUs(); s_max_length = std::max(s_max_length, u32(m_name.length())); std::lock_guard lk(s_mutex); @@ -97,22 +95,23 @@ std::string Profiler::ToString() return s_lazy_result; } -void Profiler::Start() +void Profiler::Start(u64* time, int* depth) { - if (!m_depth++) + if ((*depth)++ == 0) { - m_time = Common::Timer::NowUs(); + *time = Common::Timer::NowUs(); } } -void Profiler::Stop() +void Profiler::Stop(u64* time, int* depth) { - if (!--m_depth) + if (--(*depth) == 0) { u64 end = Common::Timer::NowUs(); - u64 diff = end - m_time; + u64 diff = end - *time; + std::lock_guard lk(m_mutex); m_usecs += diff; m_usecs_min = std::min(m_usecs_min, diff); m_usecs_max = std::max(m_usecs_max, diff); @@ -123,6 +122,8 @@ void Profiler::Stop() std::string Profiler::Read() { + std::lock_guard lk(m_mutex); + double avg = 0; double stdev = 0; double time_rel = 0; -- cgit v1.2.3