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
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:5aadd249f326b21e5ef6cadfebc15b6a0a016816)
Merged-In: Ibf038ad6db3e87c84508d3e101ca1eb144836d7c
Change-Id: Ibf038ad6db3e87c84508d3e101ca1eb144836d7c
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index f38d2b6..b8dd34d 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -8194,7 +8194,7 @@
}
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 =
getDisplayAndLayerSnapshotsFromMainThread(renderAreaBuilder, getLayerSnapshotsFn,
@@ -8568,10 +8568,8 @@
// 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();