From 0b80c74300b73e937ee9a9cb58487bd126daa4d8 Mon Sep 17 00:00:00 2001 From: Melody Hsu Date: Tue, 29 Oct 2024 07:24:29 +0000 Subject: Reorder release fence attachment for non-threaded RE Changes when release fences are attached to layers for non-threaded RenderEngine to ensure that fences are added and fired in the same hop to the main thread. This removes the dependency on legacy screenshot code and prevents a deadlock where screenshot requests are blocked on the main thread while the main thread is blocked on the previous screenshot request finishing. Bug: b/351894825 Test: atest SurfaceFlinger_test Flag: EXEMPT refactor and for flag removal Change-Id: If9d4134aba1106484f94231c5104a57a605147b8 --- services/surfaceflinger/RegionSamplingThread.cpp | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) (limited to 'services/surfaceflinger/RegionSamplingThread.cpp') diff --git a/services/surfaceflinger/RegionSamplingThread.cpp b/services/surfaceflinger/RegionSamplingThread.cpp index 011fd9e20a..08f831c8e5 100644 --- a/services/surfaceflinger/RegionSamplingThread.cpp +++ b/services/surfaceflinger/RegionSamplingThread.cpp @@ -354,14 +354,13 @@ void RegionSamplingThread::captureSample() { RenderArea::Options::CAPTURE_SECURE_LAYERS); FenceResult fenceResult; - if (FlagManager::getInstance().single_hop_screenshot() && - mFlinger.mRenderEngine->isThreaded()) { - std::vector> layerFEs; - auto displayState = mFlinger.getSnapshotsFromMainThread(renderAreaBuilder, - getLayerSnapshotsFn, layerFEs); + if (FlagManager::getInstance().single_hop_screenshot()) { + std::vector>> layers; + auto displayState = + mFlinger.getSnapshotsFromMainThread(renderAreaBuilder, getLayerSnapshotsFn, layers); fenceResult = mFlinger.captureScreenshot(renderAreaBuilder, buffer, kRegionSampling, kGrayscale, kIsProtected, kAttachGainmap, nullptr, - displayState, layerFEs) + displayState, layers) .get(); } else { fenceResult = mFlinger.captureScreenshotLegacy(renderAreaBuilder, getLayerSnapshotsFn, -- cgit v1.2.3-59-g8ed1b