/* PCSX2 - PS2 Emulator for PCs * Copyright (C) 2002-2021 PCSX2 Dev Team * * PCSX2 is free software: you can redistribute it and/or modify it under the terms * of the GNU Lesser General Public License as published by the Free Software Found- * ation, either version 3 of the License, or (at your option) any later version. * * PCSX2 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 for more details. * * You should have received a copy of the GNU General Public License along with PCSX2. * If not, see . */ #pragma once #include #include "common/Threading.h" namespace PerformanceMetrics { enum class InternalFPSMethod { None, GSPrivilegedRegister, DISPFBBlit }; static constexpr u32 NUM_FRAME_TIME_SAMPLES = 150; using FrameTimeHistory = std::array; void Clear(); void Reset(); void Update(bool gs_register_write, bool fb_blit, bool is_skipping_present); void OnGPUPresent(float gpu_time); /// Sets the EE thread for CPU usage calculations. void SetCPUThread(Threading::ThreadHandle thread); /// Sets timers for GS software threads. void SetGSSWThreadCount(u32 count); void SetGSSWThread(u32 index, Threading::ThreadHandle thread); /// Sets the vertical frequency, used in speed calculations. void SetVerticalFrequency(float rate); u64 GetFrameNumber(); InternalFPSMethod GetInternalFPSMethod(); bool IsInternalFPSValid(); float GetFPS(); float GetInternalFPS(); float GetSpeed(); float GetAverageFrameTime(); float GetWorstFrameTime(); double GetCPUThreadUsage(); double GetCPUThreadAverageTime(); float GetGSThreadUsage(); float GetGSThreadAverageTime(); float GetVUThreadUsage(); float GetVUThreadAverageTime(); u32 GetGSSWThreadCount(); double GetGSSWThreadUsage(u32 index); double GetGSSWThreadAverageTime(u32 index); float GetGPUUsage(); float GetGPUAverageTime(); const FrameTimeHistory& GetFrameTimeHistory(); u32 GetFrameTimeHistoryPos(); } // namespace PerformanceMetrics