summaryrefslogtreecommitdiff
path: root/graphics/java
diff options
context:
space:
mode:
authorJorim Jaggi <jjaggi@google.com>2021-01-19 00:08:02 +0100
committerJorim Jaggi <jjaggi@google.com>2021-04-13 15:18:27 +0000
commit10f328c580fe1e897b51a7e4b38ee4c341d970f1 (patch)
treeb5719df2aa8460ef2925440e72ecec07020557b1 /graphics/java
parenta373e1ed5a59997b2cc8ac86615963d8597e4a2b (diff)
Change hwui jank detection to use deadline & gpu completion (1/2)
- Use GPU finish time as well as actual deadline to determine jank rate. - Use dynamic interval to adjust for 60/90hz switching - Move frame metrics reporting into JankTracker to adjust the deadline communicated to the app when in stuffing scenario. - Adjust double-stuffing detection to be a bit more readable. Test: GraphicsStatsValidationTest.java Test: adb shell dumpsys gfxinfo Test: FrameMetricsListenerTest Test: Log output of FrameMetricsObserver Bug: 169858044 Change-Id: I3a6b8ed163e2cf9cf2b67667110340ebe35f98a1
Diffstat (limited to 'graphics/java')
-rw-r--r--graphics/java/android/graphics/FrameInfo.java8
-rw-r--r--graphics/java/android/graphics/HardwareRenderer.java2
2 files changed, 7 insertions, 3 deletions
diff --git a/graphics/java/android/graphics/FrameInfo.java b/graphics/java/android/graphics/FrameInfo.java
index 786c03ba5150..b9393fff8896 100644
--- a/graphics/java/android/graphics/FrameInfo.java
+++ b/graphics/java/android/graphics/FrameInfo.java
@@ -90,19 +90,23 @@ public final class FrameInfo {
// When frame actually started.
public static final int FRAME_START_TIME = 10;
+ // Interval between two consecutive frames
+ public static final int FRAME_INTERVAL = 11;
+
// Must be the last one
// This value must be in sync with `UI_THREAD_FRAME_INFO_SIZE` in FrameInfo.h
- private static final int FRAME_INFO_SIZE = FRAME_START_TIME + 1;
+ private static final int FRAME_INFO_SIZE = FRAME_INTERVAL + 1;
/** checkstyle */
public void setVsync(long intendedVsync, long usedVsync, long frameTimelineVsyncId,
- long frameDeadline, long frameStartTime) {
+ long frameDeadline, long frameStartTime, long frameInterval) {
frameInfo[FRAME_TIMELINE_VSYNC_ID] = frameTimelineVsyncId;
frameInfo[INTENDED_VSYNC] = intendedVsync;
frameInfo[VSYNC] = usedVsync;
frameInfo[FLAGS] = 0;
frameInfo[FRAME_DEADLINE] = frameDeadline;
frameInfo[FRAME_START_TIME] = frameStartTime;
+ frameInfo[FRAME_INTERVAL] = frameInterval;
}
/** checkstyle */
diff --git a/graphics/java/android/graphics/HardwareRenderer.java b/graphics/java/android/graphics/HardwareRenderer.java
index 7589435fc3b7..f3dba82287ab 100644
--- a/graphics/java/android/graphics/HardwareRenderer.java
+++ b/graphics/java/android/graphics/HardwareRenderer.java
@@ -367,7 +367,7 @@ public class HardwareRenderer {
public @NonNull FrameRenderRequest setVsyncTime(long vsyncTime) {
// TODO(b/168552873): populate vsync Id once available to Choreographer public API
mFrameInfo.setVsync(vsyncTime, vsyncTime, FrameInfo.INVALID_VSYNC_ID, Long.MAX_VALUE,
- vsyncTime);
+ vsyncTime, -1);
mFrameInfo.addFlags(FrameInfo.FLAG_SURFACE_CANVAS);
return this;
}