Add dur_ms to jank and frame_timeline metrics
Bug: 261731427
Change-Id: I9bf518e49b8c5da9954c8ab6ffb4b8279d73c9f7
diff --git a/protos/perfetto/metrics/android/android_frame_timeline_metric.proto b/protos/perfetto/metrics/android/android_frame_timeline_metric.proto
index d6be2ec..d0f4d50 100644
--- a/protos/perfetto/metrics/android/android_frame_timeline_metric.proto
+++ b/protos/perfetto/metrics/android/android_frame_timeline_metric.proto
@@ -35,6 +35,10 @@
optional int64 frame_dur_p90 = 11;
optional int64 frame_dur_p95 = 12;
optional int64 frame_dur_p99 = 13;
+ optional double frame_dur_ms_p50 = 14;
+ optional double frame_dur_ms_p90 = 15;
+ optional double frame_dur_ms_p95 = 16;
+ optional double frame_dur_ms_p99 = 17;
reserved 1, 2;
}
diff --git a/protos/perfetto/metrics/android/jank_cuj_metric.proto b/protos/perfetto/metrics/android/jank_cuj_metric.proto
index a2bb50d..10bb9a7 100644
--- a/protos/perfetto/metrics/android/jank_cuj_metric.proto
+++ b/protos/perfetto/metrics/android/jank_cuj_metric.proto
@@ -78,7 +78,7 @@
optional bool sf_missed = 6;
}
- // Next id: 12
+ // Next id: 16
message Metrics {
// Overall number of frames within the CUJ.
optional int64 total_frames = 1;
@@ -96,28 +96,43 @@
// Not available in timeline_metrics and trace_metrics.
optional int64 missed_frames_max_successive = 5;
- // Max frame duration.
- // Not available in counter_metrics.
+ // Max frame duration in nanoseconds.
optional int64 frame_dur_max = 6;
- // Average frame duration.
+ // Average frame duration in nanoseconds.
// Not available in counter_metrics.
optional int64 frame_dur_avg = 7;
- // Median frame duration.
+ // Median frame duration in nanoseconds.
// Not available in counter_metrics.
optional int64 frame_dur_p50 = 8;
- // P90 frame duration.
+ // P90 frame duration in nanoseconds.
// Not available in counter_metrics.
optional int64 frame_dur_p90 = 9;
- // P95 frame duration.
+ // P95 frame duration in nanoseconds.
// Not available in counter_metrics.
optional int64 frame_dur_p95 = 10;
- // P99 frame duration.
+ // P99 frame duration in nanoseconds.
// Not available in counter_metrics.
optional int64 frame_dur_p99 = 11;
+
+ // Median frame duration in milliseconds.
+ // Not available in counter_metrics.
+ optional double frame_dur_ms_p50 = 12;
+
+ // P90 frame duration in milliseconds.
+ // Not available in counter_metrics.
+ optional double frame_dur_ms_p90 = 13;
+
+ // P95 frame duration in milliseconds.
+ // Not available in counter_metrics.
+ optional double frame_dur_ms_p95 = 14;
+
+ // P99 frame duration in milliseconds.
+ // Not available in counter_metrics.
+ optional double frame_dur_ms_p99 = 15;
}
}
diff --git a/protos/perfetto/metrics/perfetto_merged_metrics.proto b/protos/perfetto/metrics/perfetto_merged_metrics.proto
index 1bb29ac..4db6c88 100644
--- a/protos/perfetto/metrics/perfetto_merged_metrics.proto
+++ b/protos/perfetto/metrics/perfetto_merged_metrics.proto
@@ -64,6 +64,10 @@
optional int64 frame_dur_p90 = 11;
optional int64 frame_dur_p95 = 12;
optional int64 frame_dur_p99 = 13;
+ optional double frame_dur_ms_p50 = 14;
+ optional double frame_dur_ms_p90 = 15;
+ optional double frame_dur_ms_p95 = 16;
+ optional double frame_dur_ms_p99 = 17;
reserved 1, 2;
}
@@ -785,7 +789,7 @@
optional bool sf_missed = 6;
}
- // Next id: 12
+ // Next id: 16
message Metrics {
// Overall number of frames within the CUJ.
optional int64 total_frames = 1;
@@ -803,29 +807,44 @@
// Not available in timeline_metrics and trace_metrics.
optional int64 missed_frames_max_successive = 5;
- // Max frame duration.
- // Not available in counter_metrics.
+ // Max frame duration in nanoseconds.
optional int64 frame_dur_max = 6;
- // Average frame duration.
+ // Average frame duration in nanoseconds.
// Not available in counter_metrics.
optional int64 frame_dur_avg = 7;
- // Median frame duration.
+ // Median frame duration in nanoseconds.
// Not available in counter_metrics.
optional int64 frame_dur_p50 = 8;
- // P90 frame duration.
+ // P90 frame duration in nanoseconds.
// Not available in counter_metrics.
optional int64 frame_dur_p90 = 9;
- // P95 frame duration.
+ // P95 frame duration in nanoseconds.
// Not available in counter_metrics.
optional int64 frame_dur_p95 = 10;
- // P99 frame duration.
+ // P99 frame duration in nanoseconds.
// Not available in counter_metrics.
optional int64 frame_dur_p99 = 11;
+
+ // Median frame duration in milliseconds.
+ // Not available in counter_metrics.
+ optional double frame_dur_ms_p50 = 12;
+
+ // P90 frame duration in milliseconds.
+ // Not available in counter_metrics.
+ optional double frame_dur_ms_p90 = 13;
+
+ // P95 frame duration in milliseconds.
+ // Not available in counter_metrics.
+ optional double frame_dur_ms_p95 = 14;
+
+ // P99 frame duration in milliseconds.
+ // Not available in counter_metrics.
+ optional double frame_dur_ms_p99 = 15;
}
}
diff --git a/python/perfetto/trace_processor/metrics.descriptor b/python/perfetto/trace_processor/metrics.descriptor
index bafcbbc..bf8b56e 100644
--- a/python/perfetto/trace_processor/metrics.descriptor
+++ b/python/perfetto/trace_processor/metrics.descriptor
Binary files differ
diff --git a/src/trace_processor/metrics/sql/android/android_frame_timeline_metric.sql b/src/trace_processor/metrics/sql/android/android_frame_timeline_metric.sql
index bbccaa8..44a55a2 100644
--- a/src/trace_processor/metrics/sql/android/android_frame_timeline_metric.sql
+++ b/src/trace_processor/metrics/sql/android/android_frame_timeline_metric.sql
@@ -35,6 +35,10 @@
CAST(PERCENTILE(dur, 90) AS INTEGER) AS frame_dur_p90,
CAST(PERCENTILE(dur, 95) AS INTEGER) AS frame_dur_p95,
CAST(PERCENTILE(dur, 99) AS INTEGER) AS frame_dur_p99,
+ PERCENTILE(dur / 1e6, 50) AS frame_dur_ms_p50,
+ PERCENTILE(dur / 1e6, 90) AS frame_dur_ms_p90,
+ PERCENTILE(dur / 1e6, 95) AS frame_dur_ms_p95,
+ PERCENTILE(dur / 1e6, 99) AS frame_dur_ms_p99,
CAST(AVG(dur) AS INTEGER) AS frame_dur_avg,
MAX(dur) AS frame_dur_max
FROM actual_frame_timeline_slice
diff --git a/src/trace_processor/metrics/sql/android/android_jank_cuj.sql b/src/trace_processor/metrics/sql/android/android_jank_cuj.sql
index caaac19..eec6435 100644
--- a/src/trace_processor/metrics/sql/android/android_jank_cuj.sql
+++ b/src/trace_processor/metrics/sql/android/android_jank_cuj.sql
@@ -115,7 +115,11 @@
'frame_dur_p50', CAST(PERCENTILE(f.dur, 50) AS INTEGER),
'frame_dur_p90', CAST(PERCENTILE(f.dur, 90) AS INTEGER),
'frame_dur_p95', CAST(PERCENTILE(f.dur, 95) AS INTEGER),
- 'frame_dur_p99', CAST(PERCENTILE(f.dur, 99) AS INTEGER))
+ 'frame_dur_p99', CAST(PERCENTILE(f.dur, 99) AS INTEGER),
+ 'frame_dur_ms_p50', PERCENTILE(f.dur / 1e6, 50),
+ 'frame_dur_ms_p90', PERCENTILE(f.dur / 1e6, 90),
+ 'frame_dur_ms_p95', PERCENTILE(f.dur / 1e6, 95),
+ 'frame_dur_ms_p99', PERCENTILE(f.dur / 1e6, 99))
FROM android_jank_cuj_frame f
WHERE f.cuj_id = cuj.cuj_id),
'timeline_metrics', (
@@ -129,7 +133,11 @@
'frame_dur_p50', CAST(PERCENTILE(f.dur, 50) AS INTEGER),
'frame_dur_p90', CAST(PERCENTILE(f.dur, 90) AS INTEGER),
'frame_dur_p95', CAST(PERCENTILE(f.dur, 95) AS INTEGER),
- 'frame_dur_p99', CAST(PERCENTILE(f.dur, 99) AS INTEGER))
+ 'frame_dur_p99', CAST(PERCENTILE(f.dur, 99) AS INTEGER),
+ 'frame_dur_ms_p50', PERCENTILE(f.dur / 1e6, 50),
+ 'frame_dur_ms_p90', PERCENTILE(f.dur / 1e6, 90),
+ 'frame_dur_ms_p95', PERCENTILE(f.dur / 1e6, 95),
+ 'frame_dur_ms_p99', PERCENTILE(f.dur / 1e6, 99))
FROM android_jank_cuj_frame_timeline f
WHERE f.cuj_id = cuj.cuj_id),
'frame', (
diff --git a/test/trace_processor/diff_tests/graphics/android_jank_cuj.out b/test/trace_processor/diff_tests/graphics/android_jank_cuj.out
index 063e02a..bdb6392 100644
--- a/test/trace_processor/diff_tests/graphics/android_jank_cuj.out
+++ b/test/trace_processor/diff_tests/graphics/android_jank_cuj.out
@@ -138,6 +138,10 @@
frame_dur_p90: 34000000
frame_dur_p95: 37000000
frame_dur_p99: 39400000
+ frame_dur_ms_p50: 24.0
+ frame_dur_ms_p90: 34.0
+ frame_dur_ms_p95: 37.0
+ frame_dur_ms_p99: 39.400000000000006
}
trace_metrics {
total_frames: 6
@@ -150,6 +154,10 @@
frame_dur_p90: 34000000
frame_dur_p95: 37000000
frame_dur_p99: 39400000
+ frame_dur_ms_p50: 24.0
+ frame_dur_ms_p90: 34.0
+ frame_dur_ms_p95: 37.0
+ frame_dur_ms_p99: 39.400000000000006
}
}
cuj {
@@ -354,6 +362,10 @@
frame_dur_p90: 58900000
frame_dur_p95: 61000000
frame_dur_p99: 61000000
+ frame_dur_ms_p50: 22.5
+ frame_dur_ms_p90: 58.900000000000006
+ frame_dur_ms_p95: 61.0
+ frame_dur_ms_p99: 61.0
}
trace_metrics {
total_frames: 12
@@ -366,6 +378,10 @@
frame_dur_p90: 60500000
frame_dur_p95: 61000000
frame_dur_p99: 61000000
+ frame_dur_ms_p50: 25.3
+ frame_dur_ms_p90: 60.5
+ frame_dur_ms_p95: 61.0
+ frame_dur_ms_p99: 61.0
}
}
}