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

Commit 39d5eeb5 authored by Ady Abraham's avatar Ady Abraham
Browse files

SF: BufferLayer::onPostComposition display might be nullptr

Check for nullptr before using display.

Test: SF unit tests
Bug: 187539899
Change-Id: I21d1ee356f9048790a90657ea0480f4008683885
parent ec5caebc
Loading
Loading
Loading
Loading
+28 −26
Original line number Diff line number Diff line
@@ -421,8 +421,10 @@ bool BufferLayer::onPostComposition(const DisplayDevice* display,
        mFrameTracker.setFrameReadyTime(desiredPresentTime);
    }

    if (display) {
        const Fps refreshRate = display->refreshRateConfigs().getCurrentRefreshRate().getFps();
    const std::optional<Fps> renderRate = mFlinger->mScheduler->getFrameRateOverride(getOwnerUid());
        const std::optional<Fps> renderRate =
                mFlinger->mScheduler->getFrameRateOverride(getOwnerUid());
        if (presentFence->isValid()) {
            mFlinger->mTimeStats->setPresentFence(layerId, mCurrentFrameNumber, presentFence,
                                                  refreshRate, renderRate,
@@ -430,10 +432,9 @@ bool BufferLayer::onPostComposition(const DisplayDevice* display,
                                                          mDrawingState.frameRate),
                                                  getGameMode());
            mFlinger->mFrameTracer->traceFence(layerId, getCurrentBufferId(), mCurrentFrameNumber,
                                           presentFence, FrameTracer::FrameEvent::PRESENT_FENCE);
                                               presentFence,
                                               FrameTracer::FrameEvent::PRESENT_FENCE);
            mFrameTracker.setActualPresentFence(std::shared_ptr<FenceTime>(presentFence));
    } else if (!display) {
        // Do nothing.
        } else if (const auto displayId = PhysicalDisplayId::tryCast(display->getId());
                   displayId && mFlinger->getHwComposer().isConnected(*displayId)) {
            // The HWC doesn't support present fences, so use the refresh
@@ -444,11 +445,12 @@ bool BufferLayer::onPostComposition(const DisplayDevice* display,
                                                 frameRateToSetFrameRateVotePayload(
                                                         mDrawingState.frameRate),
                                                 getGameMode());
        mFlinger->mFrameTracer->traceTimestamp(layerId, getCurrentBufferId(), mCurrentFrameNumber,
                                               actualPresentTime,
            mFlinger->mFrameTracer->traceTimestamp(layerId, getCurrentBufferId(),
                                                   mCurrentFrameNumber, actualPresentTime,
                                                   FrameTracer::FrameEvent::PRESENT_FENCE);
            mFrameTracker.setActualPresentTime(actualPresentTime);
        }
    }

    mFrameTracker.advanceFrame();
    mBufferInfo.mFrameLatencyNeeded = false;