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

Commit 0cd82348 authored by Dake Gu's avatar Dake Gu Committed by Automerger Merge Worker
Browse files

Merge "Revert "Recompute the mNextFrameStartUnstuffed on every frame"" into...

Merge "Revert "Recompute the mNextFrameStartUnstuffed on every frame"" into tm-qpr-dev am: 9e11648f

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/18822744



Change-Id: I2053817e4b88984e8d4fd6afa6642cdb03dfb39c
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 7c8e687c 9e11648f
Loading
Loading
Loading
Loading
+9 −14
Original line number Diff line number Diff line
@@ -206,7 +206,6 @@ void JankTracker::finishFrame(FrameInfo& frame, std::unique_ptr<FrameMetricsRepo
        frame.set(FrameInfoIndex::FrameDeadline) = deadline;
    }

    bool computeNextFrameStartUnstuffed = false;
    // If we hit the deadline, cool!
    if (frame[FrameInfoIndex::GpuCompleted] < deadline) {
        if (isTripleBuffered) {
@@ -214,8 +213,7 @@ void JankTracker::finishFrame(FrameInfo& frame, std::unique_ptr<FrameMetricsRepo
            (*mGlobalData)->reportJankType(JankType::kHighInputLatency);

            // Buffer stuffing state gets carried over to next frame, unless there is a "pause"
            // Instead of increase by frameInterval, recompute to catch up the drifting vsync
            computeNextFrameStartUnstuffed = true;
            mNextFrameStartUnstuffed += frameInterval;
        }
    } else {
        mData->reportJankType(JankType::kMissedDeadline);
@@ -224,7 +222,14 @@ void JankTracker::finishFrame(FrameInfo& frame, std::unique_ptr<FrameMetricsRepo
        (*mGlobalData)->reportJank();

        // Janked, store the adjust deadline to detect triple buffering in next frame correctly.
        computeNextFrameStartUnstuffed = true;
        nsecs_t jitterNanos = frame[FrameInfoIndex::GpuCompleted]
                - frame[FrameInfoIndex::Vsync];
        nsecs_t lastFrameOffset = jitterNanos % frameInterval;

        // Note the time when the next frame would start in an unstuffed situation. If it starts
        // earlier, we are in a stuffed situation.
        mNextFrameStartUnstuffed = frame[FrameInfoIndex::GpuCompleted]
                - lastFrameOffset + frameInterval;

        recomputeThresholds(frameInterval);
        for (auto& comparison : COMPARISONS) {
@@ -249,16 +254,6 @@ void JankTracker::finishFrame(FrameInfo& frame, std::unique_ptr<FrameMetricsRepo
        }
    }

    if (computeNextFrameStartUnstuffed) {
        nsecs_t jitterNanos = frame[FrameInfoIndex::GpuCompleted] - frame[FrameInfoIndex::Vsync];
        nsecs_t lastFrameOffset = jitterNanos % frameInterval;

        // Note the time when the next frame would start in an unstuffed situation. If it starts
        // earlier, we are in a stuffed situation.
        mNextFrameStartUnstuffed =
                frame[FrameInfoIndex::GpuCompleted] - lastFrameOffset + frameInterval;
    }

    int64_t totalGPUDrawTime = frame.gpuDrawTime();
    if (totalGPUDrawTime >= 0) {
        mData->reportGPUFrame(totalGPUDrawTime);