Add chrome slice names metric
Use cases include deobfuscating slice names by getting the output of this metric,
generating, and prepending a translation table to the trace.
Bug: 223172259
Change-Id: Ic8c48d1e172e7fba24c8ea1ae2efdf1f240fd215
diff --git a/Android.bp b/Android.bp
index 7938adb..033a182 100644
--- a/Android.bp
+++ b/Android.bp
@@ -3738,6 +3738,7 @@
"protos/perfetto/metrics/chrome/performance_mark_hashes.proto",
"protos/perfetto/metrics/chrome/reported_by_page.proto",
"protos/perfetto/metrics/chrome/scroll_jank.proto",
+ "protos/perfetto/metrics/chrome/slice_names.proto",
"protos/perfetto/metrics/chrome/test_chrome_metric.proto",
"protos/perfetto/metrics/chrome/touch_jank.proto",
"protos/perfetto/metrics/chrome/user_event_hashes.proto",
@@ -8415,6 +8416,7 @@
"src/trace_processor/metrics/sql/chrome/chrome_histogram_hashes.sql",
"src/trace_processor/metrics/sql/chrome/chrome_performance_mark_hashes.sql",
"src/trace_processor/metrics/sql/chrome/chrome_processes.sql",
+ "src/trace_processor/metrics/sql/chrome/chrome_slice_names.sql",
"src/trace_processor/metrics/sql/chrome/chrome_thread_slice.sql",
"src/trace_processor/metrics/sql/chrome/chrome_user_event_hashes.sql",
"src/trace_processor/metrics/sql/chrome/cpu_time_by_category.sql",
diff --git a/BUILD b/BUILD
index 23acff1..7bd6250 100644
--- a/BUILD
+++ b/BUILD
@@ -1120,6 +1120,7 @@
"src/trace_processor/metrics/sql/chrome/chrome_histogram_hashes.sql",
"src/trace_processor/metrics/sql/chrome/chrome_performance_mark_hashes.sql",
"src/trace_processor/metrics/sql/chrome/chrome_processes.sql",
+ "src/trace_processor/metrics/sql/chrome/chrome_slice_names.sql",
"src/trace_processor/metrics/sql/chrome/chrome_thread_slice.sql",
"src/trace_processor/metrics/sql/chrome/chrome_user_event_hashes.sql",
"src/trace_processor/metrics/sql/chrome/cpu_time_by_category.sql",
@@ -2842,6 +2843,7 @@
"protos/perfetto/metrics/chrome/performance_mark_hashes.proto",
"protos/perfetto/metrics/chrome/reported_by_page.proto",
"protos/perfetto/metrics/chrome/scroll_jank.proto",
+ "protos/perfetto/metrics/chrome/slice_names.proto",
"protos/perfetto/metrics/chrome/test_chrome_metric.proto",
"protos/perfetto/metrics/chrome/touch_jank.proto",
"protos/perfetto/metrics/chrome/user_event_hashes.proto",
diff --git a/protos/perfetto/metrics/chrome/BUILD.gn b/protos/perfetto/metrics/chrome/BUILD.gn
index 314e235..e88997f 100644
--- a/protos/perfetto/metrics/chrome/BUILD.gn
+++ b/protos/perfetto/metrics/chrome/BUILD.gn
@@ -31,6 +31,7 @@
"performance_mark_hashes.proto",
"reported_by_page.proto",
"scroll_jank.proto",
+ "slice_names.proto",
"test_chrome_metric.proto",
"touch_jank.proto",
"user_event_hashes.proto",
diff --git a/protos/perfetto/metrics/chrome/all_chrome_metrics.proto b/protos/perfetto/metrics/chrome/all_chrome_metrics.proto
index b9802c3..a0b8763 100644
--- a/protos/perfetto/metrics/chrome/all_chrome_metrics.proto
+++ b/protos/perfetto/metrics/chrome/all_chrome_metrics.proto
@@ -27,6 +27,7 @@
import "protos/perfetto/metrics/chrome/media_metric.proto";
import "protos/perfetto/metrics/chrome/performance_mark_hashes.proto";
import "protos/perfetto/metrics/chrome/reported_by_page.proto";
+import "protos/perfetto/metrics/chrome/slice_names.proto";
import "protos/perfetto/metrics/chrome/scroll_jank.proto";
import "protos/perfetto/metrics/chrome/test_chrome_metric.proto";
import "protos/perfetto/metrics/chrome/touch_jank.proto";
@@ -46,4 +47,5 @@
optional ChromeHistogramHashes chrome_histogram_hashes = 1010;
optional ChromeUserEventHashes chrome_user_event_hashes = 1011;
optional ChromePerformanceMarkHashes chrome_performance_mark_hashes = 1012;
+ optional ChromeSliceNames chrome_slice_names = 1013;
}
diff --git a/protos/perfetto/metrics/chrome/slice_names.proto b/protos/perfetto/metrics/chrome/slice_names.proto
new file mode 100644
index 0000000..c0a1665
--- /dev/null
+++ b/protos/perfetto/metrics/chrome/slice_names.proto
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+syntax = "proto2";
+
+package perfetto.protos;
+
+// The list of slice names in a trace.
+// Use cases include deobfuscating slice names by getting this list,
+// generating, and prepending a translation table to the trace.
+message ChromeSliceNames {
+ repeated int64 chrome_version_code = 1;
+ repeated string slice_name = 2;
+}
diff --git a/src/trace_processor/metrics/sql/BUILD.gn b/src/trace_processor/metrics/sql/BUILD.gn
index b8fff75..28f36d1 100644
--- a/src/trace_processor/metrics/sql/BUILD.gn
+++ b/src/trace_processor/metrics/sql/BUILD.gn
@@ -89,6 +89,7 @@
"chrome/chrome_histogram_hashes.sql",
"chrome/chrome_performance_mark_hashes.sql",
"chrome/chrome_processes.sql",
+ "chrome/chrome_slice_names.sql",
"chrome/chrome_thread_slice.sql",
"chrome/chrome_user_event_hashes.sql",
"chrome/cpu_time_by_category.sql",
diff --git a/src/trace_processor/metrics/sql/chrome/chrome_slice_names.sql b/src/trace_processor/metrics/sql/chrome/chrome_slice_names.sql
new file mode 100644
index 0000000..95ea995
--- /dev/null
+++ b/src/trace_processor/metrics/sql/chrome/chrome_slice_names.sql
@@ -0,0 +1,32 @@
+--
+-- Copyright 2022 The Android Open Source Project
+--
+-- Licensed under the Apache License, Version 2.0 (the "License");
+-- you may not use this file except in compliance with the License.
+-- You may obtain a copy of the License at
+--
+-- https://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+
+
+DROP VIEW IF EXISTS chrome_slice_names_output;
+
+CREATE VIEW chrome_slice_names_output AS
+SELECT ChromeSliceNames(
+ 'chrome_version_code', (
+ SELECT RepeatedField(int_value)
+ FROM metadata
+ WHERE name = 'cr-playstore_version_code'
+ ORDER BY int_value
+ ),
+ 'slice_name', (
+ SELECT RepeatedField(DISTINCT(name))
+ FROM slice
+ ORDER BY name
+ )
+);
diff --git a/test/trace_processor/chrome/chrome_slice_names.out b/test/trace_processor/chrome/chrome_slice_names.out
new file mode 100644
index 0000000..b6890d2
--- /dev/null
+++ b/test/trace_processor/chrome/chrome_slice_names.out
@@ -0,0 +1,5 @@
+[perfetto.protos.chrome_slice_names]: {
+ chrome_version_code: 123
+ slice_name: "Looper.Dispatch: class1"
+ slice_name: "name2"
+}
diff --git a/test/trace_processor/chrome/chrome_slice_names.textproto b/test/trace_processor/chrome/chrome_slice_names.textproto
new file mode 100644
index 0000000..f864416
--- /dev/null
+++ b/test/trace_processor/chrome/chrome_slice_names.textproto
@@ -0,0 +1,23 @@
+packet {
+ trusted_packet_sequence_id: 1
+ timestamp: 1000
+ track_event {
+ categories: "cat"
+ name: "Looper.Dispatch: class1"
+ type: 3
+ }
+}
+packet {
+ trusted_packet_sequence_id: 1
+ timestamp: 2000
+ track_event {
+ categories: "cat"
+ name: "name2"
+ type: 3
+ }
+}
+packet {
+ chrome_metadata {
+ chrome_version_code: 123
+ }
+}
diff --git a/test/trace_processor/chrome/index b/test/trace_processor/chrome/index
index dc152a5..800f169 100644
--- a/test/trace_processor/chrome/index
+++ b/test/trace_processor/chrome/index
@@ -63,3 +63,6 @@
# Chrome performance mark
chrome_performance_mark_hashes.textproto chrome_performance_mark_hashes chrome_performance_mark_hashes.out
+
+# Chrome slices
+chrome_slice_names.textproto chrome_slice_names chrome_slice_names.out