summaryrefslogtreecommitdiff
path: root/Source/Core/VideoCommon/Src/FPSCounter.cpp
diff options
context:
space:
mode:
authorPierre Bourdon <delroth@lse.epita.fr>2012-10-04 05:41:02 +0200
committerPierre Bourdon <delroth@lse.epita.fr>2012-10-04 05:41:02 +0200
commit8cefcaa94cd02c3bd6d735b620c1e7797597c204 (patch)
treee8370fb00c6c403881a5f1a32e548001b7092276 /Source/Core/VideoCommon/Src/FPSCounter.cpp
parentac2ce8b16ee5216de2670470b11f7e52ce0b4ce1 (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.cpp64
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