[client] scheduler: release ownership without live cadence

Renew the frame-schedule lease only while the display server is
producing real cadence callbacks. Release ownership after the cadence
stalls, and reacquire with an immediate reset when it resumes.

For non-JIT rendering, treat only a successful presentation as live
cadence.
This commit is contained in:
Geoffrey McRae
2026-08-06 16:37:19 +10:00
parent 3d1064001d
commit 903a8efe75
3 changed files with 24 additions and 8 deletions

View File

@@ -647,6 +647,9 @@ static int renderThread(void * unused)
if (g_state.jitRender)
{
const LG_DSWaitFrameResult waitResult = g_state.ds->waitFrame();
if (waitResult & LG_DS_WAIT_FRAME_CADENCE)
frameScheduler_observeCadence();
const LG_RendererFrameToken queuedAtWake =
waitResult == LG_DS_WAIT_FRAME_CADENCE ?
frameTimingQueuedToken() : LG_RENDERER_FRAME_TOKEN_NONE;
@@ -756,6 +759,9 @@ static int renderThread(void * unused)
const uint64_t renderEnd = nanotime();
LG_UNLOCK(g_state.lgrLock);
if (!g_state.jitRender)
frameScheduler_observeCadence();
if (rendererTiming.frameToken != LG_RENDERER_FRAME_TOKEN_NONE)
frameTimingFinishRender(
&rendererTiming, prepareStart, prepareTime, renderEnd,