Add Chrome performance mark hashes metric

Bug: 227144379
Change-Id: I46db6481259b3036a54c7ed537e9eb91e4cbc0c7
diff --git a/Android.bp b/Android.bp
index 3c5e89b..5652bdb 100644
--- a/Android.bp
+++ b/Android.bp
@@ -3739,6 +3739,7 @@
         "protos/perfetto/metrics/chrome/histogram_hashes.proto",
         "protos/perfetto/metrics/chrome/long_latency.proto",
         "protos/perfetto/metrics/chrome/media_metric.proto",
+        "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/test_chrome_metric.proto",
@@ -8405,6 +8406,7 @@
         "src/trace_processor/metrics/sql/chrome/actual_power_by_rail_mode.sql",
         "src/trace_processor/metrics/sql/chrome/chrome_event_metadata.sql",
         "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_thread_slice.sql",
         "src/trace_processor/metrics/sql/chrome/chrome_user_event_hashes.sql",
diff --git a/BUILD b/BUILD
index 1d37812..f90f839 100644
--- a/BUILD
+++ b/BUILD
@@ -1117,6 +1117,7 @@
         "src/trace_processor/metrics/sql/chrome/actual_power_by_rail_mode.sql",
         "src/trace_processor/metrics/sql/chrome/chrome_event_metadata.sql",
         "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_thread_slice.sql",
         "src/trace_processor/metrics/sql/chrome/chrome_user_event_hashes.sql",
@@ -2836,6 +2837,7 @@
         "protos/perfetto/metrics/chrome/histogram_hashes.proto",
         "protos/perfetto/metrics/chrome/long_latency.proto",
         "protos/perfetto/metrics/chrome/media_metric.proto",
+        "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/test_chrome_metric.proto",
diff --git a/protos/perfetto/metrics/chrome/BUILD.gn b/protos/perfetto/metrics/chrome/BUILD.gn
index ad53980..314e235 100644
--- a/protos/perfetto/metrics/chrome/BUILD.gn
+++ b/protos/perfetto/metrics/chrome/BUILD.gn
@@ -28,6 +28,7 @@
     "histogram_hashes.proto",
     "long_latency.proto",
     "media_metric.proto",
+    "performance_mark_hashes.proto",
     "reported_by_page.proto",
     "scroll_jank.proto",
     "test_chrome_metric.proto",
diff --git a/protos/perfetto/metrics/chrome/all_chrome_metrics.proto b/protos/perfetto/metrics/chrome/all_chrome_metrics.proto
index 5513b52..b9802c3 100644
--- a/protos/perfetto/metrics/chrome/all_chrome_metrics.proto
+++ b/protos/perfetto/metrics/chrome/all_chrome_metrics.proto
@@ -25,6 +25,7 @@
 import "protos/perfetto/metrics/chrome/histogram_hashes.proto";
 import "protos/perfetto/metrics/chrome/long_latency.proto";
 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/scroll_jank.proto";
 import "protos/perfetto/metrics/chrome/test_chrome_metric.proto";
@@ -44,4 +45,5 @@
   optional ChromeLongLatency chrome_long_latency = 1009;
   optional ChromeHistogramHashes chrome_histogram_hashes = 1010;
   optional ChromeUserEventHashes chrome_user_event_hashes = 1011;
+  optional ChromePerformanceMarkHashes chrome_performance_mark_hashes = 1012;
 }
diff --git a/protos/perfetto/metrics/chrome/performance_mark_hashes.proto b/protos/perfetto/metrics/chrome/performance_mark_hashes.proto
new file mode 100644
index 0000000..d3ae5dc
--- /dev/null
+++ b/protos/perfetto/metrics/chrome/performance_mark_hashes.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 Chrome performance mark hashes in trace track events.
+// Use cases include translating performance mark hashes to site and mark
+// names by getting this list, and prepending a translation table to the trace.
+message ChromePerformanceMarkHashes {
+  repeated int64 site_hash = 1;
+  repeated int64 mark_hash = 2;
+}
diff --git a/src/trace_processor/metrics/sql/BUILD.gn b/src/trace_processor/metrics/sql/BUILD.gn
index 0ec76e6..adbc168 100644
--- a/src/trace_processor/metrics/sql/BUILD.gn
+++ b/src/trace_processor/metrics/sql/BUILD.gn
@@ -86,6 +86,7 @@
   "chrome/actual_power_by_rail_mode.sql",
   "chrome/chrome_event_metadata.sql",
   "chrome/chrome_histogram_hashes.sql",
+  "chrome/chrome_performance_mark_hashes.sql",
   "chrome/chrome_processes.sql",
   "chrome/chrome_thread_slice.sql",
   "chrome/chrome_user_event_hashes.sql",
diff --git a/src/trace_processor/metrics/sql/chrome/chrome_performance_mark_hashes.sql b/src/trace_processor/metrics/sql/chrome/chrome_performance_mark_hashes.sql
new file mode 100644
index 0000000..b424adb
--- /dev/null
+++ b/src/trace_processor/metrics/sql/chrome/chrome_performance_mark_hashes.sql
@@ -0,0 +1,33 @@
+--
+-- 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_performance_mark_hashes_output;
+
+CREATE VIEW chrome_performance_mark_hashes_output AS
+SELECT ChromePerformanceMarkHashes(
+  'site_hash', (
+    SELECT RepeatedField(int_value)
+    FROM args
+    WHERE key = 'chrome_hashed_performance_mark.site_hash'
+    ORDER BY int_value
+  ),
+  'mark_hash', (
+    SELECT RepeatedField(int_value)
+    FROM args
+    WHERE key = 'chrome_hashed_performance_mark.mark_hash'
+    ORDER BY int_value
+  )
+);
+
diff --git a/test/data/ui-screenshots/ui-routing_navigate_navigate_back_and_forward.png.sha256 b/test/data/ui-screenshots/ui-routing_navigate_navigate_back_and_forward.png.sha256
index b48e6b7..035f335 100644
--- a/test/data/ui-screenshots/ui-routing_navigate_navigate_back_and_forward.png.sha256
+++ b/test/data/ui-screenshots/ui-routing_navigate_navigate_back_and_forward.png.sha256
@@ -1 +1 @@
-bb6094a29a504093b63964c472145be75b7ad010848fe49fd74ac805d3add788
\ No newline at end of file
+e8ffe0046ea98d27b4216c8d1ff64c665392c90ab3d90e2db99069ae54d12707
\ No newline at end of file
diff --git a/test/trace_processor/chrome/chrome_performance_mark_hashes.out b/test/trace_processor/chrome/chrome_performance_mark_hashes.out
new file mode 100644
index 0000000..9c581ba
--- /dev/null
+++ b/test/trace_processor/chrome/chrome_performance_mark_hashes.out
@@ -0,0 +1,6 @@
+[perfetto.protos.chrome_performance_mark_hashes]: {
+  site_hash: 10
+  site_hash: 20
+  mark_hash: 100
+  mark_hash: 200
+}
diff --git a/test/trace_processor/chrome/chrome_performance_mark_hashes.textproto b/test/trace_processor/chrome/chrome_performance_mark_hashes.textproto
new file mode 100644
index 0000000..fb53642
--- /dev/null
+++ b/test/trace_processor/chrome/chrome_performance_mark_hashes.textproto
@@ -0,0 +1,28 @@
+packet {
+  trusted_packet_sequence_id: 1
+  timestamp: 0
+  incremental_state_cleared: true
+  track_event {
+    categories: "cat1"
+    type: 3
+    name: "name1"
+    [perfetto.protos.ChromeTrackEvent.chrome_hashed_performance_mark] {
+      site_hash: 10
+      mark_hash: 100
+    }
+  }
+}
+packet {
+  trusted_packet_sequence_id: 1
+  timestamp: 0
+  incremental_state_cleared: true
+  track_event {
+    categories: "cat2"
+    type: 3
+    name: "name2"
+    [perfetto.protos.ChromeTrackEvent.chrome_hashed_performance_mark] {
+      site_hash: 20
+      mark_hash: 200
+    }
+  }
+}
diff --git a/test/trace_processor/chrome/index b/test/trace_processor/chrome/index
index 9bdeb89..dc152a5 100644
--- a/test/trace_processor/chrome/index
+++ b/test/trace_processor/chrome/index
@@ -60,3 +60,6 @@
 
 # Chrome user events
 chrome_user_event_hashes.textproto chrome_user_event_hashes chrome_user_event_hashes.out
+
+# Chrome performance mark
+chrome_performance_mark_hashes.textproto chrome_performance_mark_hashes chrome_performance_mark_hashes.out