forked from eden-emu/eden
Merge pull request #6317 from ameerj/fps-fix
perf_stats: Rework FPS counter to be more accurate
This commit is contained in:
commit
7d86a6ff02
10 changed files with 26 additions and 14 deletions
|
@ -69,9 +69,7 @@ void PerfStats::EndSystemFrame() {
|
|||
}
|
||||
|
||||
void PerfStats::EndGameFrame() {
|
||||
std::lock_guard lock{object_mutex};
|
||||
|
||||
game_frames += 1;
|
||||
game_frames.fetch_add(1, std::memory_order_relaxed);
|
||||
}
|
||||
|
||||
double PerfStats::GetMeanFrametime() const {
|
||||
|
@ -94,10 +92,11 @@ PerfStatsResults PerfStats::GetAndResetStats(microseconds current_system_time_us
|
|||
const auto interval = duration_cast<DoubleSecs>(now - reset_point).count();
|
||||
|
||||
const auto system_us_per_second = (current_system_time_us - reset_point_system_us) / interval;
|
||||
|
||||
const auto current_frames = static_cast<double>(game_frames.load(std::memory_order_relaxed));
|
||||
const auto current_fps = current_frames / interval;
|
||||
const PerfStatsResults results{
|
||||
.system_fps = static_cast<double>(system_frames) / interval,
|
||||
.game_fps = static_cast<double>(game_frames) / interval,
|
||||
.average_game_fps = (current_fps + previous_fps) / 2.0,
|
||||
.frametime = duration_cast<DoubleSecs>(accumulated_frametime).count() /
|
||||
static_cast<double>(system_frames),
|
||||
.emulation_speed = system_us_per_second.count() / 1'000'000.0,
|
||||
|
@ -108,7 +107,8 @@ PerfStatsResults PerfStats::GetAndResetStats(microseconds current_system_time_us
|
|||
reset_point_system_us = current_system_time_us;
|
||||
accumulated_frametime = Clock::duration::zero();
|
||||
system_frames = 0;
|
||||
game_frames = 0;
|
||||
game_frames.store(0, std::memory_order_relaxed);
|
||||
previous_fps = current_fps;
|
||||
|
||||
return results;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue