mirror of
https://github.com/patchzyy/wiicompiled
synced 2026-10-24 14:56:35 -04:00
1d9cae387a
* fix ntsc-u map for vtable-only functions * add --race and --race-cpu boot options * add MKW_PERF_STATS frame busy timing and --race-cpu * fix race seeds for --race-cpu benchmarks * bind interrupt natives at compile time without register guards * inline fast path for unguarded indirect calls * batch gx worker head publishes * split cold paths out of translated functions * cache observed gx worker tail on the producer * print game id in fatal log * fix ntsc-u map verdict counts
29 lines
858 B
C++
29 lines
858 B
C++
#pragma once
|
|
|
|
#include <chrono>
|
|
|
|
// MKW_PERF_STATS=1: logs the game thread's busy time per presented frame, i.e. wall time minus the
|
|
// time it spends blocked on VI pacing, the GX worker or the audio mixer.
|
|
namespace PerfStats {
|
|
|
|
bool Enabled() noexcept;
|
|
void AddWait(std::chrono::steady_clock::duration wait) noexcept;
|
|
void OnFramePresented() noexcept;
|
|
|
|
class WaitScope {
|
|
public:
|
|
WaitScope() noexcept : m_start(Enabled() ? std::chrono::steady_clock::now() : std::chrono::steady_clock::time_point{}) {}
|
|
~WaitScope() {
|
|
if (m_start != std::chrono::steady_clock::time_point{}) {
|
|
AddWait(std::chrono::steady_clock::now() - m_start);
|
|
}
|
|
}
|
|
WaitScope(const WaitScope&) = delete;
|
|
WaitScope& operator=(const WaitScope&) = delete;
|
|
|
|
private:
|
|
std::chrono::steady_clock::time_point m_start;
|
|
};
|
|
|
|
} // namespace PerfStats
|