Count the overall number of missed frames
A frame might be missed in both app and SF so adding a separate counter to keep track of the overall number. Test: manual Bug: 185897790 Change-Id: I0ed4e0dc4ef949f40ba612b68860a2da3d0e7e91
This commit is contained in:
@@ -394,8 +394,9 @@ public class FrameTracker extends SurfaceControl.OnJankDataListener
|
||||
|
||||
int totalFramesCount = 0;
|
||||
long maxFrameTimeNanos = 0;
|
||||
int missedFramesCount = 0;
|
||||
int missedAppFramesCount = 0;
|
||||
int missedSfFramesCounts = 0;
|
||||
int missedSfFramesCount = 0;
|
||||
|
||||
for (int i = 0; i <= indexOnOrAfterEnd; i++) {
|
||||
JankInfo info = mJankInfos.valueAt(i);
|
||||
@@ -404,17 +405,23 @@ public class FrameTracker extends SurfaceControl.OnJankDataListener
|
||||
}
|
||||
if (info.surfaceControlCallbackFired) {
|
||||
totalFramesCount++;
|
||||
boolean missedFrame = false;
|
||||
if ((info.jankType & PREDICTION_ERROR) != 0
|
||||
|| ((info.jankType & JANK_APP_DEADLINE_MISSED) != 0)) {
|
||||
Log.w(TAG, "Missed App frame:" + info.jankType);
|
||||
missedAppFramesCount++;
|
||||
missedFrame = true;
|
||||
}
|
||||
if ((info.jankType & DISPLAY_HAL) != 0
|
||||
|| (info.jankType & JANK_SURFACEFLINGER_DEADLINE_MISSED) != 0
|
||||
|| (info.jankType & JANK_SURFACEFLINGER_GPU_DEADLINE_MISSED) != 0
|
||||
|| (info.jankType & SURFACE_FLINGER_SCHEDULING) != 0) {
|
||||
Log.w(TAG, "Missed SF frame:" + info.jankType);
|
||||
missedSfFramesCounts++;
|
||||
missedSfFramesCount++;
|
||||
missedFrame = true;
|
||||
}
|
||||
if (missedFrame) {
|
||||
missedFramesCount++;
|
||||
}
|
||||
// TODO (b/174755489): Early latch currently gets fired way too often, so we have
|
||||
// to ignore it for now.
|
||||
@@ -431,10 +438,12 @@ public class FrameTracker extends SurfaceControl.OnJankDataListener
|
||||
}
|
||||
|
||||
// Log the frame stats as counters to make them easily accessible in traces.
|
||||
Trace.traceCounter(Trace.TRACE_TAG_APP, mSession.getName() + "#missedFrames",
|
||||
missedFramesCount);
|
||||
Trace.traceCounter(Trace.TRACE_TAG_APP, mSession.getName() + "#missedAppFrames",
|
||||
missedAppFramesCount);
|
||||
Trace.traceCounter(Trace.TRACE_TAG_APP, mSession.getName() + "#missedSfFrames",
|
||||
missedSfFramesCounts);
|
||||
missedSfFramesCount);
|
||||
Trace.traceCounter(Trace.TRACE_TAG_APP, mSession.getName() + "#totalFrames",
|
||||
totalFramesCount);
|
||||
Trace.traceCounter(Trace.TRACE_TAG_APP, mSession.getName() + "#maxFrameTimeMillis",
|
||||
@@ -442,7 +451,7 @@ public class FrameTracker extends SurfaceControl.OnJankDataListener
|
||||
|
||||
// Trigger perfetto if necessary.
|
||||
boolean overMissedFramesThreshold = mTraceThresholdMissedFrames != -1
|
||||
&& missedAppFramesCount + missedSfFramesCounts >= mTraceThresholdMissedFrames;
|
||||
&& missedFramesCount >= mTraceThresholdMissedFrames;
|
||||
boolean overFrameTimeThreshold = mTraceThresholdFrameTimeMillis != -1
|
||||
&& maxFrameTimeNanos >= mTraceThresholdFrameTimeMillis * NANOS_IN_MILLISECOND;
|
||||
if (overMissedFramesThreshold || overFrameTimeThreshold) {
|
||||
@@ -453,9 +462,10 @@ public class FrameTracker extends SurfaceControl.OnJankDataListener
|
||||
FrameworkStatsLog.UI_INTERACTION_FRAME_INFO_REPORTED,
|
||||
mSession.getStatsdInteractionType(),
|
||||
totalFramesCount,
|
||||
missedAppFramesCount + missedSfFramesCounts,
|
||||
missedFramesCount,
|
||||
maxFrameTimeNanos,
|
||||
missedSfFramesCounts);
|
||||
missedSfFramesCount,
|
||||
missedAppFramesCount);
|
||||
if (mListener != null) {
|
||||
mListener.onCujEvents(mSession, ACTION_METRICS_LOGGED);
|
||||
}
|
||||
@@ -465,7 +475,8 @@ public class FrameTracker extends SurfaceControl.OnJankDataListener
|
||||
+ " (" + mBeginVsyncId + "," + mEndVsyncId + ")"
|
||||
+ " totalFrames=" + totalFramesCount
|
||||
+ " missedAppFrames=" + missedAppFramesCount
|
||||
+ " missedSfFrames=" + missedSfFramesCounts
|
||||
+ " missedSfFrames=" + missedSfFramesCount
|
||||
+ " missedFrames=" + missedFramesCount
|
||||
+ " maxFrameTimeMillis=" + maxFrameTimeNanos / NANOS_IN_MILLISECOND);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user