diff options
author | Yuri Kunde Schlesner <yuriks@yuriks.net> | 2017-02-19 14:34:47 -0800 |
---|---|---|
committer | Yuri Kunde Schlesner <yuriks@yuriks.net> | 2017-02-26 17:22:03 -0800 |
commit | c75ae6c585f651a1b7c162c2e1ecccd22a1c587d (patch) | |
tree | 30d51f39c6b57244e1ede29820c3f5d98ca38451 /src/core/perf_stats.h | |
parent | 21f4f49c7aebbd3c716a4065a6d5b2c94c022008 (diff) |
Add performance statistics to status bar
Diffstat (limited to 'src/core/perf_stats.h')
-rw-r--r-- | src/core/perf_stats.h | 43 |
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 0000000000..566a1419a0 --- /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 |