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

Commit 8d0c6101 authored by Rachel Lee's avatar Rachel Lee
Browse files

Send multiple scheduler frame timelines (fix).

Fix the revert and added extra unit test asserts (fail on previous CL
but passes on this CL!!).

Bug: 198192508
Bug: 204941507
Test: atest EventThreadTest; atest ChoreographerNativeTest

Change-Id: Ib9d8df901fab72cae2cee86692d983c6e02d9c2c
parent 3f028660
Loading
Loading
Loading
Loading
+3 −3
Original line number Original line Diff line number Diff line
@@ -560,8 +560,8 @@ bool EventThread::shouldConsumeEvent(const DisplayEventReceiver::Event& event,
    }
    }
}
}


int64_t EventThread::generateToken(nsecs_t timestamp, nsecs_t expectedVSyncTimestamp,
int64_t EventThread::generateToken(nsecs_t timestamp, nsecs_t deadlineTimestamp,
                                   nsecs_t deadlineTimestamp) const {
                                   nsecs_t expectedVSyncTimestamp) const {
    if (mTokenManager != nullptr) {
    if (mTokenManager != nullptr) {
        return mTokenManager->generateTokenForPredictions(
        return mTokenManager->generateTokenForPredictions(
                {timestamp, deadlineTimestamp, expectedVSyncTimestamp});
                {timestamp, deadlineTimestamp, expectedVSyncTimestamp});
@@ -586,7 +586,7 @@ void EventThread::generateFrameTimeline(DisplayEventReceiver::Event& event) cons
                nsecs_t expectedVSync =
                nsecs_t expectedVSync =
                        event.vsync.expectedVSyncTimestamp + multiplier * event.vsync.frameInterval;
                        event.vsync.expectedVSyncTimestamp + multiplier * event.vsync.frameInterval;
                event.vsync.frameTimelines[currentIndex] =
                event.vsync.frameTimelines[currentIndex] =
                        {.vsyncId = generateToken(event.header.timestamp, expectedVSync, deadline),
                        {.vsyncId = generateToken(event.header.timestamp, deadline, expectedVSync),
                         .deadlineTimestamp = deadline,
                         .deadlineTimestamp = deadline,
                         .expectedVSyncTimestamp = expectedVSync};
                         .expectedVSyncTimestamp = expectedVSync};
            }
            }
+2 −2
Original line number Original line Diff line number Diff line
@@ -204,8 +204,8 @@ private:
    void onVSyncEvent(nsecs_t timestamp, nsecs_t expectedVSyncTimestamp,
    void onVSyncEvent(nsecs_t timestamp, nsecs_t expectedVSyncTimestamp,
                      nsecs_t deadlineTimestamp) override;
                      nsecs_t deadlineTimestamp) override;


    int64_t generateToken(nsecs_t timestamp, nsecs_t expectedVSyncTimestamp,
    int64_t generateToken(nsecs_t timestamp, nsecs_t deadlineTimestamp,
                          nsecs_t deadlineTimestamp) const;
                          nsecs_t expectedVSyncTimestamp) const;
    void generateFrameTimeline(DisplayEventReceiver::Event& event) const;
    void generateFrameTimeline(DisplayEventReceiver::Event& event) const;


    const std::unique_ptr<VSyncSource> mVSyncSource GUARDED_BY(mMutex);
    const std::unique_ptr<VSyncSource> mVSyncSource GUARDED_BY(mMutex);
+9 −0
Original line number Original line Diff line number Diff line
@@ -258,6 +258,15 @@ void EventThreadTest::expectVsyncEventFrameTimelinesCorrect(nsecs_t expectedTime
                                  << expectedTimestamp;
                                  << expectedTimestamp;
    const auto& event = std::get<0>(args.value());
    const auto& event = std::get<0>(args.value());
    for (int i = 0; i < DisplayEventReceiver::kFrameTimelinesLength; i++) {
    for (int i = 0; i < DisplayEventReceiver::kFrameTimelinesLength; i++) {
        auto prediction =
                mTokenManager->getPredictionsForToken(event.vsync.frameTimelines[i].vsyncId);
        EXPECT_TRUE(prediction.has_value());
        EXPECT_EQ(prediction.value().endTime, event.vsync.frameTimelines[i].deadlineTimestamp)
                << "Deadline timestamp does not match cached value";
        EXPECT_EQ(prediction.value().presentTime,
                  event.vsync.frameTimelines[i].expectedVSyncTimestamp)
                << "Expected vsync timestamp does not match cached value";

        if (i > 0) {
        if (i > 0) {
            EXPECT_GT(event.vsync.frameTimelines[i].deadlineTimestamp,
            EXPECT_GT(event.vsync.frameTimelines[i].deadlineTimestamp,
                      event.vsync.frameTimelines[i - 1].deadlineTimestamp)
                      event.vsync.frameTimelines[i - 1].deadlineTimestamp)