mirror of
https://github.com/WinampDesktop/winamp.git
synced 2025-06-10 17:55:47 -04:00
Frontends: Add frame time performance counters
This commit is contained in:
@ -433,26 +433,43 @@ void HostInterface::UpdateSpeedLimiterState()
|
||||
m_last_throttle_time = 0;
|
||||
}
|
||||
|
||||
void HostInterface::OnPerformanceCountersUpdated() {}
|
||||
|
||||
void HostInterface::RunFrame()
|
||||
{
|
||||
m_frame_timer.Reset();
|
||||
m_system->RunFrame();
|
||||
UpdatePerformanceCounters();
|
||||
}
|
||||
|
||||
void HostInterface::UpdatePerformanceCounters()
|
||||
{
|
||||
if (!m_system)
|
||||
return;
|
||||
const float frame_time = static_cast<float>(m_frame_timer.GetTimeMilliseconds());
|
||||
m_average_frame_time_accumulator += frame_time;
|
||||
m_worst_frame_time_accumulator = std::max(m_worst_frame_time_accumulator, frame_time);
|
||||
|
||||
// update fps counter
|
||||
const double time = m_fps_timer.GetTimeSeconds();
|
||||
if (time >= 0.25f)
|
||||
{
|
||||
m_vps = static_cast<float>(static_cast<double>(m_system->GetFrameNumber() - m_last_frame_number) / time);
|
||||
m_last_frame_number = m_system->GetFrameNumber();
|
||||
m_fps =
|
||||
static_cast<float>(static_cast<double>(m_system->GetInternalFrameNumber() - m_last_internal_frame_number) / time);
|
||||
m_last_internal_frame_number = m_system->GetInternalFrameNumber();
|
||||
m_speed = static_cast<float>(static_cast<double>(m_system->GetGlobalTickCounter() - m_last_global_tick_counter) /
|
||||
(static_cast<double>(MASTER_CLOCK) * time)) *
|
||||
100.0f;
|
||||
m_last_global_tick_counter = m_system->GetGlobalTickCounter();
|
||||
m_fps_timer.Reset();
|
||||
}
|
||||
const float time = static_cast<float>(m_fps_timer.GetTimeSeconds());
|
||||
if (time < 1.0f)
|
||||
return;
|
||||
|
||||
const float frames_presented = static_cast<float>(m_system->GetFrameNumber() - m_last_frame_number);
|
||||
|
||||
m_worst_frame_time = m_worst_frame_time_accumulator;
|
||||
m_worst_frame_time_accumulator = 0.0f;
|
||||
m_average_frame_time = m_average_frame_time_accumulator / frames_presented;
|
||||
m_average_frame_time_accumulator = 0.0f;
|
||||
m_vps = static_cast<float>(frames_presented / time);
|
||||
m_last_frame_number = m_system->GetFrameNumber();
|
||||
m_fps = static_cast<float>(m_system->GetInternalFrameNumber() - m_last_internal_frame_number) / time;
|
||||
m_last_internal_frame_number = m_system->GetInternalFrameNumber();
|
||||
m_speed = static_cast<float>(static_cast<double>(m_system->GetGlobalTickCounter() - m_last_global_tick_counter) /
|
||||
(static_cast<double>(MASTER_CLOCK) * time)) *
|
||||
100.0f;
|
||||
m_last_global_tick_counter = m_system->GetGlobalTickCounter();
|
||||
m_fps_timer.Reset();
|
||||
|
||||
OnPerformanceCountersUpdated();
|
||||
}
|
||||
|
||||
void HostInterface::ResetPerformanceCounters()
|
||||
@ -469,5 +486,7 @@ void HostInterface::ResetPerformanceCounters()
|
||||
m_last_internal_frame_number = 0;
|
||||
m_last_global_tick_counter = 0;
|
||||
}
|
||||
m_average_frame_time_accumulator = 0.0f;
|
||||
m_worst_frame_time_accumulator = 0.0f;
|
||||
m_fps_timer.Reset();
|
||||
}
|
||||
|
@ -72,6 +72,10 @@ protected:
|
||||
float duration;
|
||||
};
|
||||
|
||||
virtual void OnPerformanceCountersUpdated();
|
||||
|
||||
void RunFrame();
|
||||
|
||||
/// Throttles the system, i.e. sleeps until it's time to execute the next frame.
|
||||
void Throttle();
|
||||
|
||||
@ -95,18 +99,24 @@ protected:
|
||||
Common::Timer m_throttle_timer;
|
||||
Common::Timer m_speed_lost_time_timestamp;
|
||||
|
||||
bool m_paused = false;
|
||||
bool m_speed_limiter_temp_disabled = false;
|
||||
bool m_speed_limiter_enabled = false;
|
||||
|
||||
float m_average_frame_time_accumulator = 0.0f;
|
||||
float m_worst_frame_time_accumulator = 0.0f;
|
||||
|
||||
float m_vps = 0.0f;
|
||||
float m_fps = 0.0f;
|
||||
float m_speed = 0.0f;
|
||||
float m_worst_frame_time = 0.0f;
|
||||
float m_average_frame_time = 0.0f;
|
||||
u32 m_last_frame_number = 0;
|
||||
u32 m_last_internal_frame_number = 0;
|
||||
u32 m_last_global_tick_counter = 0;
|
||||
Common::Timer m_fps_timer;
|
||||
Common::Timer m_frame_timer;
|
||||
|
||||
std::deque<OSDMessage> m_osd_messages;
|
||||
std::mutex m_osd_messages_lock;
|
||||
|
||||
bool m_paused = false;
|
||||
bool m_speed_limiter_temp_disabled = false;
|
||||
bool m_speed_limiter_enabled = false;
|
||||
};
|
||||
|
Reference in New Issue
Block a user