Loading services/surfaceflinger/SurfaceFlinger.cpp +11 −4 Original line number Diff line number Diff line Loading @@ -1931,6 +1931,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()); Loading @@ -1942,10 +1943,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 Loading Loading @@ -1998,6 +1996,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 Loading Loading @@ -2304,6 +2303,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; } Loading services/surfaceflinger/SurfaceFlinger.h +2 −0 Original line number Diff line number Diff line Loading @@ -1287,6 +1287,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; Loading Loading
services/surfaceflinger/SurfaceFlinger.cpp +11 −4 Original line number Diff line number Diff line Loading @@ -1931,6 +1931,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()); Loading @@ -1942,10 +1943,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 Loading Loading @@ -1998,6 +1996,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 Loading Loading @@ -2304,6 +2303,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; } Loading
services/surfaceflinger/SurfaceFlinger.h +2 −0 Original line number Diff line number Diff line Loading @@ -1287,6 +1287,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; Loading