diff options
author | fearlessTobi <thm.frey@gmail.com> | 2019-08-26 17:29:08 +0200 |
---|---|---|
committer | FearlessTobi <thm.frey@gmail.com> | 2019-09-10 12:44:19 +0200 |
commit | 684b616f0d6445b753dded31554e0b006b6d2c3e (patch) | |
tree | 6caaae05a26149df5919a3876c1b0b4b4789614d /src/core/perf_stats.h | |
parent | 07a0242535ff339b556629b34f5d3da6c4e3da69 (diff) |
Add frametime logging for tracking performance over time
Co-Authored-By: jroweboy <jroweboy@gmail.com>
Diffstat (limited to 'src/core/perf_stats.h')
-rw-r--r-- | src/core/perf_stats.h | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/src/core/perf_stats.h b/src/core/perf_stats.h index 222ac1a63..2db290c09 100644 --- a/src/core/perf_stats.h +++ b/src/core/perf_stats.h @@ -4,6 +4,7 @@ #pragma once +#include <array> #include <chrono> #include <mutex> #include "common/common_types.h" @@ -27,6 +28,10 @@ struct PerfStatsResults { */ class PerfStats { public: + explicit PerfStats(u64 title_id); + + ~PerfStats(); + using Clock = std::chrono::high_resolution_clock; void BeginSystemFrame(); @@ -36,13 +41,26 @@ public: PerfStatsResults GetAndResetStats(std::chrono::microseconds current_system_time_us); /** + * Returns the Arthimetic Mean of all frametime values stored in the performance history. + */ + double GetMeanFrametime(); + + /** * Gets the ratio between walltime and the emulated time of the previous system frame. This is * useful for scaling inputs or outputs moving between the two time domains. */ double GetLastFrameTimeScale(); private: - std::mutex object_mutex; + std::mutex object_mutex{}; + + /// Title ID for the game that is running. 0 if there is no game running yet + u64 title_id{0}; + /// Current index for writing to the perf_history array + std::size_t current_index{0}; + /// Stores an hour of historical frametime data useful for processing and tracking performance + /// regressions with code changes. + std::array<double, 216000> perf_history = {}; /// Point when the cumulative counters were reset Clock::time_point reset_point = Clock::now(); |