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

Commit ea2bb822 authored by ramindani's avatar ramindani
Browse files

Returns min of minTime or presentTime instead of minTime or endTime.

Test: atest libsurfaceflinger_unittest
BUG: 237113799
Change-Id: I83f270faf2f3872095723854d9bce7b50581cdee
parent fc821138
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -289,7 +289,7 @@ nsecs_t getMinTime(PredictionState predictionState, TimelineItem predictions,
        minTime = std::min(minTime, actuals.endTime);
    }
    if (actuals.presentTime != 0) {
        minTime = std::min(minTime, actuals.endTime);
        minTime = std::min(minTime, actuals.presentTime);
    }
    return minTime;
}
+34 −0
Original line number Diff line number Diff line
@@ -2342,4 +2342,38 @@ TEST_F(FrameTimelineTest, computeFps_averagesOverMultipleFrames) {
    EXPECT_EQ(mFrameTimeline->computeFps({sLayerIdOne}), 5.0f);
}

TEST_F(FrameTimelineTest, getMinTime) {
    // Use SurfaceFrame::getBaseTime to test the getMinTime.
    FrameTimelineInfo ftInfo;

    // Valid prediction state test.
    ftInfo.vsyncId = 0L;
    mTokenManager->generateTokenForPredictions({10});
    auto surfaceFrame =
            mFrameTimeline->createSurfaceFrameForToken(ftInfo, sPidOne, sUidOne, sLayerIdOne,
                                                       sLayerNameOne, sLayerNameOne,
                                                       /*isBuffer*/ true, sGameMode);
    ASSERT_EQ(surfaceFrame->getBaseTime(), 10);

    // Test prediction state which is not valid.
    ftInfo.vsyncId = FrameTimelineInfo::INVALID_VSYNC_ID;
    surfaceFrame = mFrameTimeline->createSurfaceFrameForToken(ftInfo, sPidOne, sUidOne, sLayerIdOne,
                                                              sLayerNameOne, sLayerNameOne,
                                                              /*isBuffer*/ true, sGameMode);
    // Start time test.
    surfaceFrame->setActualStartTime(200);
    ASSERT_EQ(surfaceFrame->getBaseTime(), 200);

    // End time test.
    surfaceFrame->setAcquireFenceTime(100);
    ASSERT_EQ(surfaceFrame->getBaseTime(), 100);

    // Present time test.
    auto presentFence = fenceFactory.createFenceTimeForTest(Fence::NO_FENCE);
    surfaceFrame->setPresentState(SurfaceFrame::PresentState::Presented);
    mFrameTimeline->addSurfaceFrame(surfaceFrame);
    presentFence->signalForTest(std::chrono::nanoseconds(50ns).count());
    mFrameTimeline->setSfPresent(50, presentFence);
    ASSERT_EQ(surfaceFrame->getBaseTime(), 50);
}
} // namespace android::frametimeline