Files
ppsspp/Core/FrameTiming.h
T
libretroadmin 9f13f0f051 Remove sleeps and timed polling from the emulation and render paths
The core no longer sleeps to pace itself: the frontend runs retro_run at
its own rate, so the frame throttle, the idle-vblank delay and the real
clock sync event (and its core option) are gone, and a stepping CPU hands
straight back instead of waiting 2 ms. Waits that polled now park on a
lock-free eventcount through Common/Thread/ParkingLot and are woken by
whoever changes the state: a paused GL emu thread, which also queues a
marker behind its last frame so pausing runs the render queue up to it
instead of polling; async I/O results; the software renderer when its
queue is full; Vulkan pipeline compiles; and debugger requests once
stepping ends. Boot joins the loader thread, cache shutdown joins its
read-ahead thread, and the slow-I/O simulation is removed.

The path browser, the HTTP and WebSocket servers, the Windows console and
the game info cache are left out of the core build. libretro/test gains
lrgltest, which drives the GL backend on a surfaceless EGL context through
every path that pauses or stops the emu thread; run.sh and the image
checks CI job run it on llvmpipe.
2026-10-08 17:58:42 +02:00

29 lines
545 B
C++

#pragma once
#include "Common/GPU/thin3d.h"
// See big comment in the CPP file.
namespace Draw {
class DrawContext;
}
class FrameTiming {
public:
void ComputePresentMode(Draw::DrawContext *draw, bool fastForward);
bool FastForwardNeedsSkipFlip() const {
return fastForwardSkipFlip_;
}
Draw::PresentMode PresentMode() const {
return presentMode_;
}
private:
// For use on the next Present. These two are set by ComputePresentMode.
Draw::PresentMode presentMode_;
bool fastForwardSkipFlip_;
};
extern FrameTiming g_frameTiming;