summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/core/perf_stats.cpp20
-rw-r--r--src/core/perf_stats.h11
2 files changed, 16 insertions, 15 deletions
diff --git a/src/core/perf_stats.cpp b/src/core/perf_stats.cpp
index 29339ead7..b899ac884 100644
--- a/src/core/perf_stats.cpp
+++ b/src/core/perf_stats.cpp
@@ -74,15 +74,16 @@ void PerfStats::EndGameFrame() {
74 game_frames += 1; 74 game_frames += 1;
75} 75}
76 76
77double PerfStats::GetMeanFrametime() { 77double PerfStats::GetMeanFrametime() const {
78 std::lock_guard lock{object_mutex}; 78 std::lock_guard lock{object_mutex};
79 79
80 if (current_index <= IgnoreFrames) { 80 if (current_index <= IgnoreFrames) {
81 return 0; 81 return 0;
82 } 82 }
83
83 const double sum = std::accumulate(perf_history.begin() + IgnoreFrames, 84 const double sum = std::accumulate(perf_history.begin() + IgnoreFrames,
84 perf_history.begin() + current_index, 0.0); 85 perf_history.begin() + current_index, 0.0);
85 return sum / (current_index - IgnoreFrames); 86 return sum / static_cast<double>(current_index - IgnoreFrames);
86} 87}
87 88
88PerfStatsResults PerfStats::GetAndResetStats(microseconds current_system_time_us) { 89PerfStatsResults PerfStats::GetAndResetStats(microseconds current_system_time_us) {
@@ -94,12 +95,13 @@ PerfStatsResults PerfStats::GetAndResetStats(microseconds current_system_time_us
94 95
95 const auto system_us_per_second = (current_system_time_us - reset_point_system_us) / interval; 96 const auto system_us_per_second = (current_system_time_us - reset_point_system_us) / interval;
96 97
97 PerfStatsResults results{}; 98 const PerfStatsResults results{
98 results.system_fps = static_cast<double>(system_frames) / interval; 99 .system_fps = static_cast<double>(system_frames) / interval,
99 results.game_fps = static_cast<double>(game_frames) / interval; 100 .game_fps = static_cast<double>(game_frames) / interval,
100 results.frametime = duration_cast<DoubleSecs>(accumulated_frametime).count() / 101 .frametime = duration_cast<DoubleSecs>(accumulated_frametime).count() /
101 static_cast<double>(system_frames); 102 static_cast<double>(system_frames),
102 results.emulation_speed = system_us_per_second.count() / 1'000'000.0; 103 .emulation_speed = system_us_per_second.count() / 1'000'000.0,
104 };
103 105
104 // Reset counters 106 // Reset counters
105 reset_point = now; 107 reset_point = now;
@@ -111,7 +113,7 @@ PerfStatsResults PerfStats::GetAndResetStats(microseconds current_system_time_us
111 return results; 113 return results;
112} 114}
113 115
114double PerfStats::GetLastFrameTimeScale() { 116double PerfStats::GetLastFrameTimeScale() const {
115 std::lock_guard lock{object_mutex}; 117 std::lock_guard lock{object_mutex};
116 118
117 constexpr double FRAME_LENGTH = 1.0 / 60; 119 constexpr double FRAME_LENGTH = 1.0 / 60;
diff --git a/src/core/perf_stats.h b/src/core/perf_stats.h
index d9a64f072..69256b960 100644
--- a/src/core/perf_stats.h
+++ b/src/core/perf_stats.h
@@ -30,7 +30,6 @@ struct PerfStatsResults {
30class PerfStats { 30class PerfStats {
31public: 31public:
32 explicit PerfStats(u64 title_id); 32 explicit PerfStats(u64 title_id);
33
34 ~PerfStats(); 33 ~PerfStats();
35 34
36 using Clock = std::chrono::high_resolution_clock; 35 using Clock = std::chrono::high_resolution_clock;
@@ -42,18 +41,18 @@ public:
42 PerfStatsResults GetAndResetStats(std::chrono::microseconds current_system_time_us); 41 PerfStatsResults GetAndResetStats(std::chrono::microseconds current_system_time_us);
43 42
44 /** 43 /**
45 * Returns the Arthimetic Mean of all frametime values stored in the performance history. 44 * Returns the arithmetic mean of all frametime values stored in the performance history.
46 */ 45 */
47 double GetMeanFrametime(); 46 double GetMeanFrametime() const;
48 47
49 /** 48 /**
50 * Gets the ratio between walltime and the emulated time of the previous system frame. This is 49 * Gets the ratio between walltime and the emulated time of the previous system frame. This is
51 * useful for scaling inputs or outputs moving between the two time domains. 50 * useful for scaling inputs or outputs moving between the two time domains.
52 */ 51 */
53 double GetLastFrameTimeScale(); 52 double GetLastFrameTimeScale() const;
54 53
55private: 54private:
56 std::mutex object_mutex{}; 55 mutable std::mutex object_mutex;
57 56
58 /// Title ID for the game that is running. 0 if there is no game running yet 57 /// Title ID for the game that is running. 0 if there is no game running yet
59 u64 title_id{0}; 58 u64 title_id{0};
@@ -61,7 +60,7 @@ private:
61 std::size_t current_index{0}; 60 std::size_t current_index{0};
62 /// Stores an hour of historical frametime data useful for processing and tracking performance 61 /// Stores an hour of historical frametime data useful for processing and tracking performance
63 /// regressions with code changes. 62 /// regressions with code changes.
64 std::array<double, 216000> perf_history = {}; 63 std::array<double, 216000> perf_history{};
65 64
66 /// Point when the cumulative counters were reset 65 /// Point when the cumulative counters were reset
67 Clock::time_point reset_point = Clock::now(); 66 Clock::time_point reset_point = Clock::now();