summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAllen Hair <allenhair@google.com>2015-03-09 15:43:51 -0700
committerAllen Hair <allenhair@google.com>2015-03-09 15:43:51 -0700
commitef392f05649f7ea72b6e9e29f46b0ad10f845bf0 (patch)
tree0cea237a21a3e5a510afb25efb1dc81a9b63fd71
parent0777807782445cf073cc83ffc242777ca6ab3328 (diff)
downloadjanktesthelper-ef392f05649f7ea72b6e9e29f46b0ad10f845bf0.tar.gz
Update JankTestHelper to track frame percentile metrics.
Change-Id: I0b0808d2fe8f9a74605bd680004ac6457206408f
-rw-r--r--src/android/support/test/jank/GfxMonitor.java6
-rw-r--r--src/android/support/test/jank/internal/GfxMonitorImpl.java44
2 files changed, 50 insertions, 0 deletions
diff --git a/src/android/support/test/jank/GfxMonitor.java b/src/android/support/test/jank/GfxMonitor.java
index f60c5d1..71ede73 100644
--- a/src/android/support/test/jank/GfxMonitor.java
+++ b/src/android/support/test/jank/GfxMonitor.java
@@ -40,4 +40,10 @@ public @interface GfxMonitor {
public static final String KEY_MAX_SLOW_BITMAP_UPLOADS = "gfx-max-slow-bitmap-uploads";
public static final String KEY_AVG_SLOW_DRAW = "gfx-avg-slow-draw";
public static final String KEY_MAX_SLOW_DRAW = "gfx-max-slow-draw";
+ public static final String KEY_AVG_FRAME_TIME_90TH_PERCENTILE = "gfx-avg-frame-time-90";
+ public static final String KEY_MAX_FRAME_TIME_90TH_PERCENTILE = "gfx-max-frame-time-90";
+ public static final String KEY_AVG_FRAME_TIME_95TH_PERCENTILE = "gfx-avg-frame-time-95";
+ public static final String KEY_MAX_FRAME_TIME_95TH_PERCENTILE = "gfx-max-frame-time-95";
+ public static final String KEY_AVG_FRAME_TIME_99TH_PERCENTILE = "gfx-avg-frame-time-99";
+ public static final String KEY_MAX_FRAME_TIME_99TH_PERCENTILE = "gfx-max-frame-time-99";
}
diff --git a/src/android/support/test/jank/internal/GfxMonitorImpl.java b/src/android/support/test/jank/internal/GfxMonitorImpl.java
index 0878847..bc1abd5 100644
--- a/src/android/support/test/jank/internal/GfxMonitorImpl.java
+++ b/src/android/support/test/jank/internal/GfxMonitorImpl.java
@@ -55,6 +55,12 @@ class GfxMonitorImpl implements JankMonitor {
Pattern.compile("\\s*Number Slow bitmap uploads: (\\d+)");
private static final Pattern SLOW_DRAW_PATTERN =
Pattern.compile("\\s*Number Slow draw: (\\d+)");
+ private static final Pattern FRAME_TIME_90TH_PERCENTILE_PATTERN =
+ Pattern.compile("\\s*90th percentile: (\\d+)ms");
+ private static final Pattern FRAME_TIME_95TH_PERCENTILE_PATTERN =
+ Pattern.compile("\\s*95th percentile: (\\d+)ms");
+ private static final Pattern FRAME_TIME_99TH_PERCENTILE_PATTERN =
+ Pattern.compile("\\s*99th percentile: (\\d+)ms");
// Used to invoke dumpsys gfxinfo
private UiAutomation mUiAutomation;
@@ -67,6 +73,9 @@ class GfxMonitorImpl implements JankMonitor {
private List<Integer> slowUiThread = new ArrayList<Integer>();
private List<Integer> slowBitmapUploads = new ArrayList<Integer>();
private List<Integer> slowDraw = new ArrayList<Integer>();
+ private List<Integer> frameTime90thPercentile = new ArrayList<Integer>();
+ private List<Integer> frameTime95thPercentile = new ArrayList<Integer>();
+ private List<Integer> frameTime99thPercentile = new ArrayList<Integer>();
public GfxMonitorImpl(UiAutomation automation, String process) {
@@ -108,6 +117,9 @@ class GfxMonitorImpl implements JankMonitor {
// Frame stats:
// Total frames rendered: ###
// Janky frames: ### (##.##%)
+ // 90th percentile: ##ms
+ // 95th percentile: ##ms
+ // 99th percentile: ##ms
// Number Missed Vsync: #
// Number High input latency: #
// Number Slow UI thread: #
@@ -127,6 +139,24 @@ class GfxMonitorImpl implements JankMonitor {
}
jankyFrames.add(Integer.parseInt(part));
+ // Get 90th percentile
+ if ((part = getMatchGroup(stream.readLine(), FRAME_TIME_90TH_PERCENTILE_PATTERN, 1)) == null) {
+ Assert.fail("Failed to parse 90th percentile");
+ }
+ frameTime90thPercentile.add(Integer.parseInt(part));
+
+ // Get 95th percentile
+ if ((part = getMatchGroup(stream.readLine(), FRAME_TIME_95TH_PERCENTILE_PATTERN, 1)) == null) {
+ Assert.fail("Failed to parse 95th percentile");
+ }
+ frameTime95thPercentile.add(Integer.parseInt(part));
+
+ // Get 99th percentile
+ if ((part = getMatchGroup(stream.readLine(), FRAME_TIME_99TH_PERCENTILE_PATTERN, 1)) == null) {
+ Assert.fail("Failed to parse 99th percentile");
+ }
+ frameTime99thPercentile.add(Integer.parseInt(part));
+
// Get Missed Vsync
if ((part = getMatchGroup(stream.readLine(), MISSED_VSYNC_PATTERN, 1)) == null) {
Assert.fail("Failed to parse number missed vsync");
@@ -168,6 +198,20 @@ class GfxMonitorImpl implements JankMonitor {
MetricsHelper.computeAverageInt(jankyFrames));
metrics.putInt(GfxMonitor.KEY_MAX_NUM_JANKY, Collections.max(jankyFrames));
+ // Store average and max percentile frame times
+ metrics.putDouble(GfxMonitor.KEY_AVG_FRAME_TIME_90TH_PERCENTILE,
+ MetricsHelper.computeAverageInt(frameTime90thPercentile));
+ metrics.putInt(GfxMonitor.KEY_MAX_FRAME_TIME_90TH_PERCENTILE,
+ Collections.max(frameTime90thPercentile));
+ metrics.putDouble(GfxMonitor.KEY_AVG_FRAME_TIME_95TH_PERCENTILE,
+ MetricsHelper.computeAverageInt(frameTime95thPercentile));
+ metrics.putInt(GfxMonitor.KEY_MAX_FRAME_TIME_95TH_PERCENTILE,
+ Collections.max(frameTime95thPercentile));
+ metrics.putDouble(GfxMonitor.KEY_AVG_FRAME_TIME_99TH_PERCENTILE,
+ MetricsHelper.computeAverageInt(frameTime99thPercentile));
+ metrics.putInt(GfxMonitor.KEY_MAX_FRAME_TIME_99TH_PERCENTILE,
+ Collections.max(frameTime99thPercentile));
+
// Store average and max missed vsync
metrics.putDouble(GfxMonitor.KEY_AVG_MISSED_VSYNC,
MetricsHelper.computeAverageInt(missedVsync));