summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorSam Belliveau <sam.belliveau@gmail.com>2022-12-30 14:56:08 -0500
committerAdmiral H. Curtiss <pikachu025@gmail.com>2023-01-06 20:27:25 +0100
commitbc46089ab0ca7963ca3b5507969a3df0f2afca6c (patch)
treef07ae2bccf2c7096b467175b0fc04b03aec1ac58 /Source/Core
parent9143eb00fb167e14dfb2d64a959df3fb8d8f0f55 (diff)
PerformanceTracker: Use shared_mutex instead of mutex so multiple threads can read at the same time.
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/VideoCommon/PerformanceTracker.cpp20
-rw-r--r--Source/Core/VideoCommon/PerformanceTracker.h4
2 files changed, 13 insertions, 11 deletions
diff --git a/Source/Core/VideoCommon/PerformanceTracker.cpp b/Source/Core/VideoCommon/PerformanceTracker.cpp
index ffde157883..305fb35598 100644
--- a/Source/Core/VideoCommon/PerformanceTracker.cpp
+++ b/Source/Core/VideoCommon/PerformanceTracker.cpp
@@ -5,8 +5,10 @@
#include <algorithm>
#include <cmath>
-#include <implot.h>
#include <iomanip>
+#include <mutex>
+
+#include <implot.h>
#include "Common/CommonTypes.h"
#include "Common/FileUtil.h"
@@ -36,7 +38,7 @@ PerformanceTracker::~PerformanceTracker()
void PerformanceTracker::Reset()
{
- std::lock_guard lock{m_mutex};
+ std::unique_lock lock{m_mutex};
QueueClear();
m_last_time = Clock::now();
@@ -47,7 +49,7 @@ void PerformanceTracker::Reset()
void PerformanceTracker::Count()
{
- std::lock_guard lock{m_mutex};
+ std::unique_lock lock{m_mutex};
if (m_paused)
return;
@@ -97,19 +99,19 @@ DT PerformanceTracker::GetSampleWindow() const
double PerformanceTracker::GetHzAvg() const
{
- std::lock_guard lock{m_mutex};
+ std::shared_lock lock{m_mutex};
return m_hz_avg;
}
DT PerformanceTracker::GetDtAvg() const
{
- std::lock_guard lock{m_mutex};
+ std::shared_lock lock{m_mutex};
return m_dt_avg;
}
DT PerformanceTracker::GetDtStd() const
{
- std::lock_guard lock{m_mutex};
+ std::unique_lock lock{m_mutex};
if (m_dt_std)
return *m_dt_std;
@@ -130,7 +132,7 @@ DT PerformanceTracker::GetDtStd() const
DT PerformanceTracker::GetLastRawDt() const
{
- std::lock_guard lock{m_mutex};
+ std::shared_lock lock{m_mutex};
if (QueueEmpty())
return DT::zero();
@@ -142,7 +144,7 @@ void PerformanceTracker::ImPlotPlotLines(const char* label) const
{
static std::array<float, MAX_DT_QUEUE_SIZE + 2> x, y;
- std::lock_guard lock{m_mutex};
+ std::shared_lock lock{m_mutex};
if (QueueEmpty())
return;
@@ -238,7 +240,7 @@ void PerformanceTracker::LogRenderTimeToFile(DT val)
void PerformanceTracker::SetPaused(bool paused)
{
- std::lock_guard lock{m_mutex};
+ std::unique_lock lock{m_mutex};
m_paused = paused;
if (m_paused)
diff --git a/Source/Core/VideoCommon/PerformanceTracker.h b/Source/Core/VideoCommon/PerformanceTracker.h
index e253f83352..4136664981 100644
--- a/Source/Core/VideoCommon/PerformanceTracker.h
+++ b/Source/Core/VideoCommon/PerformanceTracker.h
@@ -6,8 +6,8 @@
#include <array>
#include <chrono>
#include <fstream>
-#include <mutex>
#include <optional>
+#include <shared_mutex>
#include "Common/CommonTypes.h"
@@ -100,5 +100,5 @@ private: // Functions for managing dt queue
mutable std::optional<DT> m_dt_std = std::nullopt;
// Used to enable thread safety with the performance tracker
- mutable std::mutex m_mutex;
+ mutable std::shared_mutex m_mutex;
};