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

Commit 025e1266 authored by Dan Stoza's avatar Dan Stoza Committed by Gerrit - the friendly Code Review server
Browse files

HWC2: Skip validate/present if display is off

Adds checks to ensure that the display is still on before attempting
to call into prepareFrame/commit (which in turn call into
validate/present).

Test: Cherry-pick from internal branch
Bug: 28596387
Change-Id: Iad87f02c3e44e86db43a15c258ee66b0cde14faa
(cherry picked from commit 00ac359a)
parent 1fe98fa6
Loading
Loading
Loading
Loading
+15 −2
Original line number Diff line number Diff line
@@ -1009,7 +1009,12 @@ void SurfaceFlinger::doDebugFlashRegions()
    }

    for (size_t displayId = 0; displayId < mDisplays.size(); ++displayId) {
        status_t result = mDisplays[displayId]->prepareFrame(*mHwc);
        auto& displayDevice = mDisplays[displayId];
        if (!displayDevice->isDisplayOn()) {
            continue;
        }

        status_t result = displayDevice->prepareFrame(*mHwc);
        ALOGE_IF(result != NO_ERROR, "prepareFrame for display %zd failed:"
                " %d (%s)", displayId, result, strerror(-result));
    }
@@ -1235,7 +1240,12 @@ void SurfaceFlinger::setUpHWComposer() {
    }

    for (size_t displayId = 0; displayId < mDisplays.size(); ++displayId) {
        status_t result = mDisplays[displayId]->prepareFrame(*mHwc);
        auto& displayDevice = mDisplays[displayId];
        if (!displayDevice->isDisplayOn()) {
            continue;
        }

        status_t result = displayDevice->prepareFrame(*mHwc);
        ALOGE_IF(result != NO_ERROR, "prepareFrame for display %zd failed:"
                " %d (%s)", displayId, result, strerror(-result));
    }
@@ -1273,6 +1283,9 @@ void SurfaceFlinger::postFramebuffer()

    for (size_t displayId = 0; displayId < mDisplays.size(); ++displayId) {
        auto& displayDevice = mDisplays[displayId];
        if (!displayDevice->isDisplayOn()) {
            continue;
        }
        const auto hwcId = displayDevice->getHwcDisplayId();
        if (hwcId >= 0) {
            mHwc->commit(hwcId);