Add frametime logging for tracking performance over time

Co-Authored-By: jroweboy <jroweboy@gmail.com>
This commit is contained in:
fearlessTobi 2019-08-26 17:29:08 +02:00 committed by FearlessTobi
parent 07a0242535
commit 684b616f0d
7 changed files with 90 additions and 10 deletions

View file

@ -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();
@ -35,6 +40,11 @@ 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.
@ -42,7 +52,15 @@ public:
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();