Add additional tables for compatibility with earlier android_jank_cuj.
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 21c1d33..f0dfffb 100644 --- a/src/trace_processor/metrics/sql/android/android_jank_cuj.sql +++ b/src/trace_processor/metrics/sql/android/android_jank_cuj.sql
@@ -172,6 +172,23 @@ ROW_NUMBER() OVER (PARTITION BY cuj_id ORDER BY vsync ASC) AS frame_number FROM android_jank_cuj_sf_frame_base; +-- Intermediate table to keep the ts and dur in sync with the original implementation +-- in android_jank_cuj_boundary, which was earlier used for metric calculation. +DROP TABLE IF EXISTS android_jank_cuj_legacy_boundary; +CREATE PERFETTO TABLE android_jank_cuj_legacy_boundary AS +WITH cuj_frame_based_boundary AS ( +SELECT cuj_id, + min(ts) AS ts, + MAX(ts_end) AS ts_end +FROM android_jank_cuj_frame_trace_data +GROUP BY cuj_id) +SELECT frame_boundary.cuj_id, + frame_boundary.ts, + MAX(frame_boundary.ts_end, cuj.ts_end) AS ts_end, + (MAX(frame_boundary.ts_end, cuj.ts_end) - frame_boundary.ts) AS dur +FROM cuj_frame_based_boundary frame_boundary +JOIN android_jank_cuj cuj USING(cuj_id); + -- Table captures various missed frames and callbacks counters from counter tracks in a process. DROP TABLE IF EXISTS android_jank_cuj_counter_metrics; CREATE PERFETTO TABLE android_jank_cuj_counter_metrics AS @@ -195,7 +212,7 @@ ELSE MAX(ts, ts_end - 4000000) END AS ts_earliest_allowed_counter, LEAD(ts_end) OVER (PARTITION BY cuj_name ORDER BY ts_end ASC) AS ts_end_next_cuj - FROM android_sysui_jank_cujs + FROM android_jank_cuj ) SELECT cuj_id, @@ -221,8 +238,8 @@ 'name', cuj_name, 'process', process_metadata_proto(cuj.upid), 'layer_name', layer_name, - 'ts', cuj.ts, - 'dur', cuj.dur, + 'ts', COALESCE(boundary.ts, cuj.ts), + 'dur', COALESCE(boundary.dur, cuj.dur), 'counter_metrics', ( SELECT AndroidJankCujMetric_Metrics( 'total_frames', total_frames, @@ -303,5 +320,7 @@ WHERE f.cuj_id = cuj.cuj_id ORDER BY frame_number ASC) )) - FROM android_sysui_jank_cujs cuj + FROM android_jank_cuj cuj + LEFT JOIN android_jank_cuj_legacy_boundary boundary USING(cuj_id) + LEFT JOIN _android_jank_cuj_layer USING(cuj_id) ORDER BY cuj.cuj_id ASC));
diff --git a/src/trace_processor/perfetto_sql/stdlib/android/cujs/base.sql b/src/trace_processor/perfetto_sql/stdlib/android/cujs/base.sql index bc1dc15..135e267 100644 --- a/src/trace_processor/perfetto_sql/stdlib/android/cujs/base.sql +++ b/src/trace_processor/perfetto_sql/stdlib/android/cujs/base.sql
@@ -367,3 +367,18 @@ ) ORDER BY ts ASC; + +-- Captures the layer information associated with a CUJ. +CREATE PERFETTO VIEW _android_jank_cuj_layer AS +SELECT + cuj_id, + layer_id, + layer_name +FROM android_jank_cuj AS cujs +JOIN actual_frame_timeline_slice AS timeline + USING (upid) +WHERE + cujs.layer_id = CAST(str_split(timeline.layer_name, '#', 1) AS INTEGER) +GROUP BY + cuj_id, + layer_id;
diff --git a/test/trace_processor/diff_tests/metrics/graphics/android_jank_cuj.out b/test/trace_processor/diff_tests/metrics/graphics/android_jank_cuj.out index 8da2a2e..ab4cbbb 100644 --- a/test/trace_processor/diff_tests/metrics/graphics/android_jank_cuj.out +++ b/test/trace_processor/diff_tests/metrics/graphics/android_jank_cuj.out
@@ -16,7 +16,7 @@ is_kernel_task: false } ts: 0 - dur: 115000000 + dur: 123000000 frame { frame_number: 1 vsync: 10 @@ -194,7 +194,7 @@ is_kernel_task: false } ts: 0 - dur: 702000000 + dur: 901000010 frame { frame_number: 1 vsync: 10