2022-12-23 19:52:53 -05:00
|
|
|
// Copyright 2022 Dolphin Emulator Project
|
|
|
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
2025-03-04 21:32:31 -06:00
|
|
|
#include <atomic>
|
2025-03-07 19:26:47 -06:00
|
|
|
#include <deque>
|
2023-01-06 17:21:17 -05:00
|
|
|
|
|
|
|
#include "Common/CommonTypes.h"
|
2022-12-23 19:52:53 -05:00
|
|
|
#include "VideoCommon/PerformanceTracker.h"
|
|
|
|
|
2023-01-06 17:21:17 -05:00
|
|
|
namespace Core
|
|
|
|
{
|
|
|
|
class System;
|
|
|
|
}
|
|
|
|
|
2022-12-23 19:52:53 -05:00
|
|
|
class PerformanceMetrics
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
PerformanceMetrics() = default;
|
|
|
|
~PerformanceMetrics() = default;
|
|
|
|
|
|
|
|
PerformanceMetrics(const PerformanceMetrics&) = delete;
|
|
|
|
PerformanceMetrics& operator=(const PerformanceMetrics&) = delete;
|
|
|
|
PerformanceMetrics(PerformanceMetrics&&) = delete;
|
|
|
|
PerformanceMetrics& operator=(PerformanceMetrics&&) = delete;
|
|
|
|
|
|
|
|
void Reset();
|
2025-03-07 19:26:47 -06:00
|
|
|
|
2022-12-23 19:52:53 -05:00
|
|
|
void CountFrame();
|
|
|
|
void CountVBlank();
|
|
|
|
|
2025-03-07 19:26:47 -06:00
|
|
|
// Call from CPU thread.
|
2023-01-06 17:21:17 -05:00
|
|
|
void CountThrottleSleep(DT sleep);
|
2025-03-07 19:26:47 -06:00
|
|
|
void AdjustClockSpeed(s64 ticks, u32 new_ppc_clock, u32 old_ppc_clock);
|
|
|
|
void CountPerformanceMarker(s64 ticks, u32 ticks_per_second);
|
2023-01-06 17:21:17 -05:00
|
|
|
|
2025-03-07 19:26:47 -06:00
|
|
|
// Getter Functions. May be called from any thread.
|
2022-12-23 19:52:53 -05:00
|
|
|
double GetFPS() const;
|
|
|
|
double GetVPS() const;
|
|
|
|
double GetSpeed() const;
|
2023-01-06 17:21:17 -05:00
|
|
|
double GetMaxSpeed() const;
|
2022-12-23 19:52:53 -05:00
|
|
|
|
2022-12-23 20:13:01 -05:00
|
|
|
// ImGui Functions
|
2023-01-06 17:21:17 -05:00
|
|
|
void DrawImGuiStats(const float backbuffer_scale);
|
2022-12-23 19:52:53 -05:00
|
|
|
|
2022-12-23 20:13:01 -05:00
|
|
|
private:
|
2022-12-23 19:52:53 -05:00
|
|
|
PerformanceTracker m_fps_counter{"render_times.txt"};
|
|
|
|
PerformanceTracker m_vps_counter{"vblank_times.txt"};
|
2023-01-06 17:21:17 -05:00
|
|
|
|
|
|
|
double m_graph_max_time = 0.0;
|
|
|
|
|
2025-03-07 19:26:47 -06:00
|
|
|
std::atomic<double> m_speed{};
|
2025-03-04 21:32:31 -06:00
|
|
|
std::atomic<double> m_max_speed{};
|
2025-03-07 19:26:47 -06:00
|
|
|
|
|
|
|
struct PerfSample
|
|
|
|
{
|
|
|
|
TimePoint clock_time;
|
|
|
|
TimePoint work_time;
|
|
|
|
s64 core_ticks;
|
|
|
|
};
|
|
|
|
|
|
|
|
std::deque<PerfSample> m_samples;
|
2023-02-15 19:18:39 -08:00
|
|
|
DT m_time_sleeping{};
|
2022-12-23 19:52:53 -05:00
|
|
|
};
|
|
|
|
|
|
|
|
extern PerformanceMetrics g_perf_metrics;
|