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

Commit a1501b97 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "[SurfaceFlinger] correct present time for negative phase offsets" into qt-r1-dev

parents f0ed7b29 aa61419b
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -143,7 +143,7 @@ bool BufferQueueLayer::framePresentTimeIsCurrent() const {
    }

    Mutex::Autolock lock(mQueueItemLock);
    return mQueueItems[0].mTimestamp <= mFlinger->mScheduler->expectedPresentTime();
    return mQueueItems[0].mTimestamp <= mFlinger->getExpectedPresentTime();
}

nsecs_t BufferQueueLayer::getDesiredPresentTime() {
+1 −1
Original line number Diff line number Diff line
@@ -380,7 +380,7 @@ bool BufferStateLayer::framePresentTimeIsCurrent() const {
        return true;
    }

    return mDesiredPresentTime <= mFlinger->mScheduler->expectedPresentTime();
    return mDesiredPresentTime <= mFlinger->getExpectedPresentTime();
}

nsecs_t BufferStateLayer::getDesiredPresentTime() {
+13 −2
Original line number Diff line number Diff line
@@ -1658,6 +1658,18 @@ bool SurfaceFlinger::previousFrameMissed() NO_THREAD_SAFETY_ANALYSIS {
    return fence != Fence::NO_FENCE && (fence->getStatus() == Fence::Status::Unsignaled);
}

nsecs_t SurfaceFlinger::getExpectedPresentTime() NO_THREAD_SAFETY_ANALYSIS {
    DisplayStatInfo stats;
    mScheduler->getDisplayStatInfo(&stats);
    const nsecs_t presentTime = mScheduler->expectedPresentTime();
    // Inflate the expected present time if we're targetting the next vsync.
    const nsecs_t correctedTime =
            mVsyncModulator.getOffsets().sf < mPhaseOffsets->getOffsetThresholdForNextVsync()
            ? presentTime
            : presentTime + stats.vsyncPeriod;
    return correctedTime;
}

void SurfaceFlinger::onMessageReceived(int32_t what) NO_THREAD_SAFETY_ANALYSIS {
    ATRACE_CALL();
    switch (what) {
@@ -3259,8 +3271,7 @@ bool SurfaceFlinger::handlePageFlip()
    mDrawingState.traverseInZOrder([&](Layer* layer) {
        if (layer->hasReadyFrame()) {
            frameQueued = true;
            nsecs_t expectedPresentTime;
            expectedPresentTime = mScheduler->expectedPresentTime();
            const nsecs_t expectedPresentTime = getExpectedPresentTime();
            if (layer->shouldPresentNow(expectedPresentTime)) {
                mLayersWithQueuedFrames.push_back(layer);
            } else {
+5 −0
Original line number Diff line number Diff line
@@ -301,6 +301,11 @@ public:
    // TODO: this should be made accessible only to MessageQueue
    void onMessageReceived(int32_t what);

    // Returns the expected present time for this frame.
    // When we are in negative offsets, we perform a correction so that the
    // predicted vsync for the *next* frame is used instead.
    nsecs_t getExpectedPresentTime();

    // for debugging only
    // TODO: this should be made accessible only to HWComposer
    const Vector<sp<Layer>>& getLayerSortedByZForHwcDisplay(DisplayId displayId);