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 | |
| 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')
| -rw-r--r-- | Source/Core/VideoCommon/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | Source/Core/VideoCommon/Src/FPSCounter.cpp | 64 | ||||
| -rw-r--r-- | Source/Core/VideoCommon/Src/FPSCounter.h | 28 | ||||
| -rw-r--r-- | Source/Core/VideoCommon/Src/VideoConfig.cpp | 2 | ||||
| -rw-r--r-- | Source/Core/VideoCommon/Src/VideoConfig.h | 1 | ||||
| -rw-r--r-- | Source/Core/VideoCommon/VideoCommon.vcxproj | 2 | ||||
| -rw-r--r-- | Source/Core/VideoCommon/VideoCommon.vcxproj.filters | 6 |
7 files changed, 104 insertions, 0 deletions
diff --git a/Source/Core/VideoCommon/CMakeLists.txt b/Source/Core/VideoCommon/CMakeLists.txt index d0e28f571c..6ed8e29c6b 100644 --- a/Source/Core/VideoCommon/CMakeLists.txt +++ b/Source/Core/VideoCommon/CMakeLists.txt @@ -6,6 +6,7 @@ set(SRCS Src/BPFunctions.cpp Src/DLCache.cpp Src/Debugger.cpp Src/Fifo.cpp + Src/FPSCounter.cpp Src/FramebufferManagerBase.cpp Src/HiresTextures.cpp Src/ImageWrite.cpp 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 diff --git a/Source/Core/VideoCommon/Src/FPSCounter.h b/Source/Core/VideoCommon/Src/FPSCounter.h new file mode 100644 index 0000000000..314f4b0fc7 --- /dev/null +++ b/Source/Core/VideoCommon/Src/FPSCounter.h @@ -0,0 +1,28 @@ +// 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/ + +#ifndef _FPS_COUNTER_H_ +#define _FPS_COUNTER_H_ + +// Initializes the FPS counter. +void InitFPSCounter(); + +// Called when a frame is rendered. Returns the value to be displayed on +// screen as the FPS counter (updated every second). +int UpdateFPSCounter(); + +#endif // _FPS_COUNTER_H_
\ No newline at end of file diff --git a/Source/Core/VideoCommon/Src/VideoConfig.cpp b/Source/Core/VideoCommon/Src/VideoConfig.cpp index c5628c19a1..6d240ba357 100644 --- a/Source/Core/VideoCommon/Src/VideoConfig.cpp +++ b/Source/Core/VideoCommon/Src/VideoConfig.cpp @@ -59,6 +59,7 @@ void VideoConfig::Load(const char *ini_file) iniFile.Get("Settings", "UseRealXFB", &bUseRealXFB, 0); iniFile.Get("Settings", "SafeTextureCacheColorSamples", &iSafeTextureCache_ColorSamples,128); iniFile.Get("Settings", "ShowFPS", &bShowFPS, false); // Settings + iniFile.Get("Settings", "LogFPSToFile", &bLogFPSToFile, false); iniFile.Get("Settings", "ShowInputDisplay", &bShowInputDisplay, false); iniFile.Get("Settings", "OverlayStats", &bOverlayStats, false); iniFile.Get("Settings", "OverlayProjStats", &bOverlayProjStats, false); @@ -186,6 +187,7 @@ void VideoConfig::Save(const char *ini_file) iniFile.Set("Settings", "UseRealXFB", bUseRealXFB); iniFile.Set("Settings", "SafeTextureCacheColorSamples", iSafeTextureCache_ColorSamples); iniFile.Set("Settings", "ShowFPS", bShowFPS); + iniFile.Set("Settings", "LogFPSToFile", bLogFPSToFile); iniFile.Set("Settings", "ShowInputDisplay", bShowInputDisplay); iniFile.Set("Settings", "OverlayStats", bOverlayStats); iniFile.Set("Settings", "OverlayProjStats", bOverlayProjStats); diff --git a/Source/Core/VideoCommon/Src/VideoConfig.h b/Source/Core/VideoCommon/Src/VideoConfig.h index 7653972ec8..e71c7356a9 100644 --- a/Source/Core/VideoCommon/Src/VideoConfig.h +++ b/Source/Core/VideoCommon/Src/VideoConfig.h @@ -97,6 +97,7 @@ struct VideoConfig bool bTexFmtOverlayEnable; bool bTexFmtOverlayCenter; bool bShowEFBCopyRegions; + bool bLogFPSToFile; // Render bool bWireFrame; diff --git a/Source/Core/VideoCommon/VideoCommon.vcxproj b/Source/Core/VideoCommon/VideoCommon.vcxproj index f53c18cb37..0869f33ff4 100644 --- a/Source/Core/VideoCommon/VideoCommon.vcxproj +++ b/Source/Core/VideoCommon/VideoCommon.vcxproj @@ -183,6 +183,7 @@ <ClCompile Include="Src\DLCache.cpp" /> <ClCompile Include="Src\EmuWindow.cpp" /> <ClCompile Include="Src\Fifo.cpp" /> + <ClCompile Include="Src\FPSCounter.cpp" /> <ClCompile Include="Src\FramebufferManagerBase.cpp" /> <ClCompile Include="Src\HiresTextures.cpp" /> <ClCompile Include="Src\ImageWrite.cpp" /> @@ -228,6 +229,7 @@ <ClInclude Include="Src\DLCache.h" /> <ClInclude Include="Src\EmuWindow.h" /> <ClInclude Include="Src\Fifo.h" /> + <ClInclude Include="Src\FPSCounter.h" /> <ClInclude Include="Src\FramebufferManagerBase.h" /> <ClInclude Include="Src\HiresTextures.h" /> <ClInclude Include="Src\ImageWrite.h" /> diff --git a/Source/Core/VideoCommon/VideoCommon.vcxproj.filters b/Source/Core/VideoCommon/VideoCommon.vcxproj.filters index c933fbc939..e7019f17ed 100644 --- a/Source/Core/VideoCommon/VideoCommon.vcxproj.filters +++ b/Source/Core/VideoCommon/VideoCommon.vcxproj.filters @@ -119,6 +119,9 @@ <ClCompile Include="Src\LightingShaderGen.cpp"> <Filter>Shader Generators</Filter> </ClCompile> + <ClCompile Include="Src\FPSCounter.cpp"> + <Filter>Util</Filter> + </ClCompile> </ItemGroup> <ItemGroup> <ClInclude Include="Src\CommandProcessor.h" /> @@ -246,6 +249,9 @@ <ClInclude Include="Src\LightingShaderGen.h"> <Filter>Shader Generators</Filter> </ClInclude> + <ClInclude Include="Src\FPSCounter.h"> + <Filter>Util</Filter> + </ClInclude> </ItemGroup> <ItemGroup> <None Include="CMakeLists.txt" /> |
