Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 454f7f27 authored by Vishnu Nair's avatar Vishnu Nair Committed by Android Build Coastguard Worker
Browse files

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
parent 4619b2a3
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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.getDisplayAndLayerSnapshotsFromMainThread(renderAreaBuilder,
+3 −5
Original line number Diff line number Diff line
@@ -8194,7 +8194,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 =
                getDisplayAndLayerSnapshotsFromMainThread(renderAreaBuilder, getLayerSnapshotsFn,
@@ -8568,10 +8568,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();