summaryrefslogtreecommitdiffstats
path: root/src/core/perf_stats.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/perf_stats.h')
-rw-r--r--src/core/perf_stats.h43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/core/perf_stats.h b/src/core/perf_stats.h
new file mode 100644
index 000000000..566a1419a
--- /dev/null
+++ b/src/core/perf_stats.h
@@ -0,0 +1,43 @@
+// Copyright 2017 Citra Emulator Project
+// Licensed under GPLv2 or any later version
+// Refer to the license.txt file included.
+
+#pragma once
+
+#include <chrono>
+#include "common/common_types.h"
+
+namespace Core {
+
+class PerfStats {
+public:
+ using Clock = std::chrono::high_resolution_clock;
+
+ struct Results {
+ /// System FPS (LCD VBlanks) in Hz
+ double system_fps;
+ /// Game FPS (GSP frame submissions) in Hz
+ double game_fps;
+ /// Walltime per system frame, in seconds, excluding any waits
+ double frametime;
+ /// Ratio of walltime / emulated time elapsed
+ double emulation_speed;
+ };
+
+ void BeginSystemFrame();
+ void EndSystemFrame();
+ void EndGameFrame();
+
+ Results GetAndResetStats(u64 current_system_time_us);
+
+private:
+ Clock::time_point reset_point = Clock::now();
+
+ Clock::time_point frame_begin;
+ Clock::duration accumulated_frametime = Clock::duration::zero();
+ u64 reset_point_system_us = 0;
+ u32 system_frames = 0;
+ u32 game_frames = 0;
+};
+
+} // namespace Core