diff options
Diffstat (limited to 'src/common/profiler.cpp')
| -rw-r--r-- | src/common/profiler.cpp | 101 |
1 files changed, 0 insertions, 101 deletions
diff --git a/src/common/profiler.cpp b/src/common/profiler.cpp deleted file mode 100644 index b40e7205d..000000000 --- a/src/common/profiler.cpp +++ /dev/null | |||
| @@ -1,101 +0,0 @@ | |||
| 1 | // Copyright 2015 Citra Emulator Project | ||
| 2 | // Licensed under GPLv2 or any later version | ||
| 3 | // Refer to the license.txt file included. | ||
| 4 | |||
| 5 | #include <algorithm> | ||
| 6 | #include <cstddef> | ||
| 7 | #include <vector> | ||
| 8 | #include "common/assert.h" | ||
| 9 | #include "common/profiler_reporting.h" | ||
| 10 | #include "common/synchronized_wrapper.h" | ||
| 11 | |||
| 12 | namespace Common { | ||
| 13 | namespace Profiling { | ||
| 14 | |||
| 15 | ProfilingManager::ProfilingManager() | ||
| 16 | : last_frame_end(Clock::now()), this_frame_start(Clock::now()) {} | ||
| 17 | |||
| 18 | void ProfilingManager::BeginFrame() { | ||
| 19 | this_frame_start = Clock::now(); | ||
| 20 | } | ||
| 21 | |||
| 22 | void ProfilingManager::FinishFrame() { | ||
| 23 | Clock::time_point now = Clock::now(); | ||
| 24 | |||
| 25 | results.interframe_time = now - last_frame_end; | ||
| 26 | results.frame_time = now - this_frame_start; | ||
| 27 | |||
| 28 | last_frame_end = now; | ||
| 29 | } | ||
| 30 | |||
| 31 | TimingResultsAggregator::TimingResultsAggregator(size_t window_size) | ||
| 32 | : max_window_size(window_size), window_size(0) { | ||
| 33 | interframe_times.resize(window_size, Duration::zero()); | ||
| 34 | frame_times.resize(window_size, Duration::zero()); | ||
| 35 | } | ||
| 36 | |||
| 37 | void TimingResultsAggregator::Clear() { | ||
| 38 | window_size = cursor = 0; | ||
| 39 | } | ||
| 40 | |||
| 41 | void TimingResultsAggregator::AddFrame(const ProfilingFrameResult& frame_result) { | ||
| 42 | interframe_times[cursor] = frame_result.interframe_time; | ||
| 43 | frame_times[cursor] = frame_result.frame_time; | ||
| 44 | |||
| 45 | ++cursor; | ||
| 46 | if (cursor == max_window_size) | ||
| 47 | cursor = 0; | ||
| 48 | if (window_size < max_window_size) | ||
| 49 | ++window_size; | ||
| 50 | } | ||
| 51 | |||
| 52 | static AggregatedDuration AggregateField(const std::vector<Duration>& v, size_t len) { | ||
| 53 | AggregatedDuration result; | ||
| 54 | result.avg = Duration::zero(); | ||
| 55 | result.min = result.max = (len == 0 ? Duration::zero() : v[0]); | ||
| 56 | |||
| 57 | for (size_t i = 0; i < len; ++i) { | ||
| 58 | Duration value = v[i]; | ||
| 59 | result.avg += value; | ||
| 60 | result.min = std::min(result.min, value); | ||
| 61 | result.max = std::max(result.max, value); | ||
| 62 | } | ||
| 63 | if (len != 0) | ||
| 64 | result.avg /= len; | ||
| 65 | |||
| 66 | return result; | ||
| 67 | } | ||
| 68 | |||
| 69 | static float tof(Common::Profiling::Duration dur) { | ||
| 70 | using FloatMs = std::chrono::duration<float, std::chrono::milliseconds::period>; | ||
| 71 | return std::chrono::duration_cast<FloatMs>(dur).count(); | ||
| 72 | } | ||
| 73 | |||
| 74 | AggregatedFrameResult TimingResultsAggregator::GetAggregatedResults() const { | ||
| 75 | AggregatedFrameResult result; | ||
| 76 | |||
| 77 | result.interframe_time = AggregateField(interframe_times, window_size); | ||
| 78 | result.frame_time = AggregateField(frame_times, window_size); | ||
| 79 | |||
| 80 | if (result.interframe_time.avg != Duration::zero()) { | ||
| 81 | result.fps = 1000.0f / tof(result.interframe_time.avg); | ||
| 82 | } else { | ||
| 83 | result.fps = 0.0f; | ||
| 84 | } | ||
| 85 | |||
| 86 | return result; | ||
| 87 | } | ||
| 88 | |||
| 89 | ProfilingManager& GetProfilingManager() { | ||
| 90 | // Takes advantage of "magic" static initialization for race-free initialization. | ||
| 91 | static ProfilingManager manager; | ||
| 92 | return manager; | ||
| 93 | } | ||
| 94 | |||
| 95 | SynchronizedRef<TimingResultsAggregator> GetTimingResultsAggregator() { | ||
| 96 | static SynchronizedWrapper<TimingResultsAggregator> aggregator(30); | ||
| 97 | return SynchronizedRef<TimingResultsAggregator>(aggregator); | ||
| 98 | } | ||
| 99 | |||
| 100 | } // namespace Profiling | ||
| 101 | } // namespace Common | ||