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

Commit 8de697ed authored by Alec Mouri's avatar Alec Mouri Committed by Wei Wang
Browse files

[SurfaceFlinger] Add refresh rate counts to TimeStats

This count will be exposed to lab tests as a breakdown metric for
uncovering jank.

Bug: 144526027
Test: dumpsys SurfaceFlinger --timestats -dump
Test: libsurfaceflinger_unittest
Change-Id: I921e147e96212ad6a08fa14d6e3d7a98893a8602
parent 89290018
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -990,6 +990,9 @@ void SurfaceFlinger::setActiveConfigInternal() {
        return;
    }

    auto& oldRefreshRate =
            mRefreshRateConfigs->getRefreshRateFromConfigId(display->getActiveConfig());

    std::lock_guard<std::mutex> lock(mActiveConfigLock);
    mRefreshRateConfigs->setCurrentConfigId(mUpcomingActiveConfig.configId);
    mRefreshRateStats->setConfigMode(mUpcomingActiveConfig.configId);
@@ -997,6 +1000,9 @@ void SurfaceFlinger::setActiveConfigInternal() {

    auto& refreshRate =
            mRefreshRateConfigs->getRefreshRateFromConfigId(mUpcomingActiveConfig.configId);
    if (refreshRate.vsyncPeriod != oldRefreshRate.vsyncPeriod) {
        mTimeStats->incrementRefreshRateSwitches();
    }
    mPhaseConfiguration->setRefreshRateFps(refreshRate.fps);
    mVSyncModulator->setPhaseOffsets(mPhaseConfiguration->getCurrentOffsets());
    ATRACE_INT("ActiveConfigFPS", refreshRate.fps);
+10 −0
Original line number Diff line number Diff line
@@ -282,6 +282,15 @@ void TimeStats::incrementClientCompositionReusedFrames() {
    mTimeStats.clientCompositionReusedFrames++;
}

void TimeStats::incrementRefreshRateSwitches() {
    if (!mEnabled.load()) return;

    ATRACE_CALL();

    std::lock_guard<std::mutex> lock(mMutex);
    mTimeStats.refreshRateSwitches++;
}

void TimeStats::recordDisplayEventConnectionCount(int32_t count) {
    if (!mEnabled.load()) return;

@@ -835,6 +844,7 @@ void TimeStats::clearGlobalLocked() {
    mTimeStats.missedFrames = 0;
    mTimeStats.clientCompositionFrames = 0;
    mTimeStats.clientCompositionReusedFrames = 0;
    mTimeStats.refreshRateSwitches = 0;
    mTimeStats.displayEventConnectionsCount = 0;
    mTimeStats.displayOnTime = 0;
    mTimeStats.presentToPresent.hist.clear();
+3 −0
Original line number Diff line number Diff line
@@ -52,6 +52,8 @@ public:
    virtual void incrementMissedFrames() = 0;
    virtual void incrementClientCompositionFrames() = 0;
    virtual void incrementClientCompositionReusedFrames() = 0;
    // Increments the number of times the display refresh rate changed.
    virtual void incrementRefreshRateSwitches() = 0;
    // Records the most up-to-date count of display event connections.
    // The stored count will be the maximum ever recoded.
    virtual void recordDisplayEventConnectionCount(int32_t count) = 0;
@@ -215,6 +217,7 @@ public:
    void incrementMissedFrames() override;
    void incrementClientCompositionFrames() override;
    void incrementClientCompositionReusedFrames() override;
    void incrementRefreshRateSwitches() override;
    void recordDisplayEventConnectionCount(int32_t count) override;

    void recordFrameDuration(nsecs_t startTime, nsecs_t endTime) override;
+1 −0
Original line number Diff line number Diff line
@@ -105,6 +105,7 @@ std::string TimeStatsHelper::TimeStatsGlobal::toString(std::optional<uint32_t> m
    StringAppendF(&result, "missedFrames = %d\n", missedFrames);
    StringAppendF(&result, "clientCompositionFrames = %d\n", clientCompositionFrames);
    StringAppendF(&result, "clientCompositionReusedFrames = %d\n", clientCompositionReusedFrames);
    StringAppendF(&result, "refreshRateSwitches = %d\n", refreshRateSwitches);
    StringAppendF(&result, "displayOnTime = %" PRId64 " ms\n", displayOnTime);
    StringAppendF(&result, "displayConfigStats is as below:\n");
    for (const auto& [fps, duration] : refreshRateStats) {
+1 −0
Original line number Diff line number Diff line
@@ -62,6 +62,7 @@ public:
        int32_t missedFrames = 0;
        int32_t clientCompositionFrames = 0;
        int32_t clientCompositionReusedFrames = 0;
        int32_t refreshRateSwitches = 0;
        int32_t displayEventConnectionsCount = 0;
        int64_t displayOnTime = 0;
        Histogram presentToPresent;
Loading