screencopy: Handle explicit sync failure (#10050)

This commit is contained in:
Lee Bousfield
2025-04-12 09:38:46 -05:00
committed by GitHub
parent 382f0f23f1
commit 0399e64274

View File

@@ -231,17 +231,18 @@ void CScreencopyFrame::copyDmabuf(std::function<void(bool)> callback) {
auto explicitOptions = g_pHyprRenderer->getExplicitSyncSettings(pMonitor->output); auto explicitOptions = g_pHyprRenderer->getExplicitSyncSettings(pMonitor->output);
if (pMonitor->inTimeline && explicitOptions.explicitEnabled) { if (pMonitor->inTimeline && explicitOptions.explicitEnabled) {
pMonitor->inTimeline->addWaiter( if (pMonitor->inTimeline->addWaiter(
[callback]() { [callback, sync = pMonitor->eglSync]() {
LOGM(TRACE, "Copied frame via dma with explicit sync"); LOGM(TRACE, "Copied frame via dma with explicit sync");
callback(true); callback(true);
}, },
pMonitor->inTimelinePoint, 0); pMonitor->inTimelinePoint, 0))
} else { return;
// on explicit sync failure, fallthrough to immediate callback
}
LOGM(TRACE, "Copied frame via dma"); LOGM(TRACE, "Copied frame via dma");
callback(true); callback(true);
} }
}
bool CScreencopyFrame::copyShm() { bool CScreencopyFrame::copyShm() {
const auto PERM = g_pDynamicPermissionManager->clientPermissionMode(resource->client(), PERMISSION_TYPE_SCREENCOPY); const auto PERM = g_pDynamicPermissionManager->clientPermissionMode(resource->client(), PERMISSION_TYPE_SCREENCOPY);