[client] scheduler: qualify presentation feedback

Track cadence, interruption, and calibration wake reasons independently
across X11 and Wayland. Feed phase correction back only when a pure
cadence wake renders the exact frame that was queued at that wake.

Propagate EGL swap results through the display-server boundary. Reject
failed presentations and keep pending Wayland HDR descriptions inactive
until the preceding surface commit succeeds.
This commit is contained in:
Geoffrey McRae
2026-08-06 16:17:23 +10:00
parent 515f4ba06f
commit 3d1064001d
12 changed files with 119 additions and 57 deletions

View File

@@ -1689,13 +1689,17 @@ static bool egl_render(LG_Renderer * renderer, LG_RendererRotate rotate,
const uint64_t composeEnd = nanotime();
timing->composeTime += composeEnd - postOverlayStart;
const uint64_t swapStart = nanotime();
app_eglSwapBuffers(this->display, this->surface, damage,
const uint64_t swapStart = nanotime();
const bool swapResult = app_eglSwapBuffers(
this->display, this->surface, damage,
this->noSwapDamage ? 0 : damageIdx);
const uint64_t swapEnd = nanotime();
const uint64_t swapEnd = nanotime();
timing->swapTime = swapEnd - swapStart;
return true;
if (!swapResult)
DEBUG_ERROR("Failed to swap EGL buffers (eglError: 0x%x)", eglGetError());
return swapResult;
}
static bool egl_capture(LG_Renderer * renderer, LG_RendererCapture * capture)