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

Commit 5aadd249 authored by Vishnu Nair's avatar Vishnu Nair
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
Change-Id: Ibf038ad6db3e87c84508d3e101ca1eb144836d7c
parent 20f86107
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.getSnapshotsFromMainThread(renderAreaBuilder,
                                                                getLayerSnapshotsFn, layerFEs);
+3 −5
Original line number Diff line number Diff line
@@ -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();