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

Commit 7bdf55aa authored by Dan Stoza's avatar Dan Stoza
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).

Bug: 28596387
Change-Id: Iad87f02c3e44e86db43a15c258ee66b0cde14faa
parent b892b69e
Loading
Loading
Loading
Loading
+15 −2
Original line number Diff line number Diff line
@@ -1005,7 +1005,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));
    }
@@ -1229,7 +1234,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));
    }
@@ -1267,6 +1277,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);