Skip to content

Commit 7e84455

Browse files
nairvis-beepHung-ying Tyan
authored andcommitted
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 Bug: 349741485 Bug: 352267188 Test: presubmit (cherry picked from https://googleplex-android-review.googlesource.com/q/commit:5aadd249f326b21e5ef6cadfebc15b6a0a016816) Merged-In: Ibf038ad6db3e87c84508d3e101ca1eb144836d7c Change-Id: Ibf038ad6db3e87c84508d3e101ca1eb144836d7c
1 parent 2000746 commit 7e84455

2 files changed

Lines changed: 4 additions & 6 deletions

File tree

services/surfaceflinger/RegionSamplingThread.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -356,7 +356,7 @@ void RegionSamplingThread::captureSample() {
356356

357357
FenceResult fenceResult;
358358
if (FlagManager::getInstance().single_hop_screenshot() &&
359-
FlagManager::getInstance().ce_fence_promise()) {
359+
FlagManager::getInstance().ce_fence_promise() && mFlinger.mRenderEngine->isThreaded()) {
360360
std::vector<sp<LayerFE>> layerFEs;
361361
auto displayState =
362362
mFlinger.getDisplayAndLayerSnapshotsFromMainThread(renderAreaBuilder,

services/surfaceflinger/SurfaceFlinger.cpp

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8184,7 +8184,7 @@ void SurfaceFlinger::captureScreenCommon(RenderAreaBuilderVariant renderAreaBuil
81848184
}
81858185

81868186
if (FlagManager::getInstance().single_hop_screenshot() &&
8187-
FlagManager::getInstance().ce_fence_promise()) {
8187+
FlagManager::getInstance().ce_fence_promise() && mRenderEngine->isThreaded()) {
81888188
std::vector<sp<LayerFE>> layerFEs;
81898189
auto displayState =
81908190
getDisplayAndLayerSnapshotsFromMainThread(renderAreaBuilder, getLayerSnapshotsFn,
@@ -8558,10 +8558,8 @@ ftl::SharedFuture<FenceResult> SurfaceFlinger::renderScreenImpl(
85588558
// to CompositionEngine::present.
85598559
ftl::SharedFuture<FenceResult> presentFuture;
85608560
if (FlagManager::getInstance().single_hop_screenshot() &&
8561-
FlagManager::getInstance().ce_fence_promise()) {
8562-
presentFuture = mRenderEngine->isThreaded()
8563-
? ftl::yield(present()).share()
8564-
: mScheduler->schedule(std::move(present)).share();
8561+
FlagManager::getInstance().ce_fence_promise() && mRenderEngine->isThreaded()) {
8562+
presentFuture = ftl::yield(present()).share();
85658563
} else {
85668564
presentFuture = mRenderEngine->isThreaded() ? ftl::defer(std::move(present)).share()
85678565
: ftl::yield(present()).share();

0 commit comments

Comments
 (0)