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

Commit 1b6a60c8 authored by Alec Mouri's avatar Alec Mouri
Browse files

Move stats push off of critical path

Collected a field trace where pushing the atom cost ~500 microseconds,
which is too long.

Bug: 158601958
Test: builds
Change-Id: Id2c67f6fd6a12bb62d4e7b5da382cec78f3ac1c6
parent 983e568b
Loading
Loading
Loading
Loading
+11 −4
Original line number Diff line number Diff line
@@ -1933,6 +1933,7 @@ void SurfaceFlinger::onMessageInvalidate(nsecs_t expectedVSyncTime) {
    // ...but if it's larger than 1s then we missed the trace cutoff.
    static constexpr nsecs_t kMaxJankyDuration =
            std::chrono::duration_cast<std::chrono::nanoseconds>(1s).count();
    nsecs_t jankDurationToUpload = -1;
    // If we're in a user build then don't push any atoms
    if (!mIsUserBuild && mMissedFrameJankCount > 0) {
        const auto display = ON_MAIN_THREAD(getDefaultDisplayDeviceLocked());
@@ -1944,10 +1945,7 @@ void SurfaceFlinger::onMessageInvalidate(nsecs_t expectedVSyncTime) {
            const nsecs_t currentTime = systemTime();
            const nsecs_t jankDuration = currentTime - mMissedFrameJankStart;
            if (jankDuration > kMinJankyDuration && jankDuration < kMaxJankyDuration) {
                ATRACE_NAME("Jank detected");
                const int32_t jankyDurationMillis = jankDuration / (1000 * 1000);
                android::util::stats_write(android::util::DISPLAY_JANK_REPORTED,
                                           jankyDurationMillis, mMissedFrameJankCount);
                jankDurationToUpload = jankDuration;
            }

            // We either reported a jank event or we missed the trace
@@ -2000,6 +1998,7 @@ void SurfaceFlinger::onMessageInvalidate(nsecs_t expectedVSyncTime) {

    refreshNeeded |= mRepaintEverything;
    if (refreshNeeded && CC_LIKELY(mBootStage != BootStage::BOOTLOADER)) {
        mLastJankDuration = jankDurationToUpload;
        // Signal a refresh if a transaction modified the window state,
        // a new buffer was latched, or if HWC has requested a full
        // repaint
@@ -2306,6 +2305,14 @@ void SurfaceFlinger::postComposition()
    const size_t appConnections = mScheduler->getEventThreadConnectionCount(mAppConnectionHandle);
    mTimeStats->recordDisplayEventConnectionCount(sfConnections + appConnections);

    if (mLastJankDuration > 0) {
        ATRACE_NAME("Jank detected");
        const int32_t jankyDurationMillis = mLastJankDuration / (1000 * 1000);
        android::util::stats_write(android::util::DISPLAY_JANK_REPORTED, jankyDurationMillis,
                                   mMissedFrameJankCount);
        mLastJankDuration = -1;
    }

    if (isDisplayConnected && !display->isPoweredOn()) {
        return;
    }
+2 −0
Original line number Diff line number Diff line
@@ -1281,6 +1281,8 @@ private:
    // janky frames there are.
    nsecs_t mMissedFrameJankStart = 0;
    int32_t mMissedFrameJankCount = 0;
    // Positive if jank should be uploaded in postComposition
    nsecs_t mLastJankDuration = -1;

    int mFrameRateFlexibilityTokenCount = 0;