diff options
author | 2024-06-29 01:17:02 +0000 | |
---|---|---|
committer | 2024-06-29 01:19:15 +0000 | |
commit | 5aadd249f326b21e5ef6cadfebc15b6a0a016816 (patch) | |
tree | 1c43ae833d2a646e636ac079705f9389b07e90be | |
parent | 20f86107d6bab7cc810700550b779bf5734b332f (diff) |
Enable single hop screenshots for only threaded re
Fixes a deadlock where screenshot requests are blocked
on the main thread which inturn is blocked by the
screenshot request finishing.
Flag: EXEMPT bug fix
Bug: 349776684
Test: presubmit
Change-Id: Ibf038ad6db3e87c84508d3e101ca1eb144836d7c
-rw-r--r-- | services/surfaceflinger/RegionSamplingThread.cpp | 2 | ||||
-rw-r--r-- | services/surfaceflinger/SurfaceFlinger.cpp | 8 |
2 files changed, 4 insertions, 6 deletions
diff --git a/services/surfaceflinger/RegionSamplingThread.cpp b/services/surfaceflinger/RegionSamplingThread.cpp index 1eb865d600..cd3c638d7c 100644 --- a/services/surfaceflinger/RegionSamplingThread.cpp +++ b/services/surfaceflinger/RegionSamplingThread.cpp @@ -354,7 +354,7 @@ void RegionSamplingThread::captureSample() { FenceResult fenceResult; if (FlagManager::getInstance().single_hop_screenshot() && - FlagManager::getInstance().ce_fence_promise()) { + FlagManager::getInstance().ce_fence_promise() && mFlinger.mRenderEngine->isThreaded()) { std::vector<sp<LayerFE>> layerFEs; auto displayState = mFlinger.getSnapshotsFromMainThread(renderAreaBuilder, getLayerSnapshotsFn, layerFEs); diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index a65ef4e623..fc288c562b 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -8193,7 +8193,7 @@ void SurfaceFlinger::captureScreenCommon(RenderAreaBuilderVariant renderAreaBuil } if (FlagManager::getInstance().single_hop_screenshot() && - FlagManager::getInstance().ce_fence_promise()) { + FlagManager::getInstance().ce_fence_promise() && mRenderEngine->isThreaded()) { std::vector<sp<LayerFE>> layerFEs; auto displayState = getSnapshotsFromMainThread(renderAreaBuilder, getLayerSnapshotsFn, layerFEs); @@ -8566,10 +8566,8 @@ ftl::SharedFuture<FenceResult> SurfaceFlinger::renderScreenImpl( // to CompositionEngine::present. ftl::SharedFuture<FenceResult> presentFuture; if (FlagManager::getInstance().single_hop_screenshot() && - FlagManager::getInstance().ce_fence_promise()) { - presentFuture = mRenderEngine->isThreaded() - ? ftl::yield(present()).share() - : mScheduler->schedule(std::move(present)).share(); + FlagManager::getInstance().ce_fence_promise() && mRenderEngine->isThreaded()) { + presentFuture = ftl::yield(present()).share(); } else { presentFuture = mRenderEngine->isThreaded() ? ftl::defer(std::move(present)).share() : ftl::yield(present()).share(); |