diff options
| author | Pierre Bourdon <delroth@lse.epita.fr> | 2012-10-04 05:41:02 +0200 |
|---|---|---|
| committer | Pierre Bourdon <delroth@lse.epita.fr> | 2012-10-04 05:41:02 +0200 |
| commit | 8cefcaa94cd02c3bd6d735b620c1e7797597c204 (patch) | |
| tree | e8370fb00c6c403881a5f1a32e548001b7092276 /Source/Core/VideoCommon/Src/FPSCounter.cpp | |
| parent | ac2ce8b16ee5216de2670470b11f7e52ce0b4ce1 (diff) | |
Implement a simple benchmarking mode which logs FPS to a file
Very useful to compare performance between two builds, check the impact of
a configuration option, etc. FPS log is stored in User/Logs/fps.txt and is
reset each time you launch a game. Only enabled if you check the "Log FPS
to file" option in your graphics settings.
Could be improved a bit: currently logs only every 1s (so you can't really
see small variations), maybe output more infos to the fps.txt like
average/stddev (but Excel/Libreoffice/Google Docs can compute that easily
too).
Diffstat (limited to 'Source/Core/VideoCommon/Src/FPSCounter.cpp')
| -rw-r--r-- | Source/Core/VideoCommon/Src/FPSCounter.cpp | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/Source/Core/VideoCommon/Src/FPSCounter.cpp b/Source/Core/VideoCommon/Src/FPSCounter.cpp new file mode 100644 index 0000000000..ea3f624c73 --- /dev/null +++ b/Source/Core/VideoCommon/Src/FPSCounter.cpp @@ -0,0 +1,64 @@ +// Copyright (C) 2003 Dolphin Project. + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#include "FPSCounter.h" +#include "FileUtil.h" +#include "Timer.h" +#include "VideoConfig.h" + +#define FPS_REFRESH_INTERVAL 1000 + +static unsigned int s_counter = 0; +static unsigned int s_fps = 0; +static unsigned int s_fps_last_counter = 0; +static unsigned long s_last_update_time = 0; +static File::IOFile s_bench_file; + +void InitFPSCounter() +{ + s_counter = s_fps_last_counter = 0; + s_fps = 0; + s_last_update_time = Common::Timer::GetTimeMs(); + + if (s_bench_file.IsOpen()) + s_bench_file.Close(); +} + +static void LogFPSToFile(unsigned long val) +{ + if (!s_bench_file.IsOpen()) + s_bench_file.Open(File::GetUserPath(D_LOGS_IDX) + "fps.txt", "w"); + + char buffer[256]; + snprintf(buffer, 256, "%ld\n", val); + s_bench_file.WriteArray(buffer, strlen(buffer)); +} + +int UpdateFPSCounter() +{ + if (Common::Timer::GetTimeMs() - s_last_update_time >= FPS_REFRESH_INTERVAL) + { + s_last_update_time = Common::Timer::GetTimeMs(); + s_fps = s_counter - s_fps_last_counter; + s_fps_last_counter = s_counter; + if (g_ActiveConfig.bLogFPSToFile) + LogFPSToFile(s_fps); + } + + s_counter++; + return s_fps; +}
\ No newline at end of file |
