Merge changes from topic "perfetto_march_2024" into androidx-main

* changes:
  Update perfetto to 249090360a31856f2a5022f52abfb8dc54f69a0b
  Update wire to 4.9.7
diff --git a/benchmark/benchmark-macro/build.gradle b/benchmark/benchmark-macro/build.gradle
index 2eede15..a38320e 100644
--- a/benchmark/benchmark-macro/build.gradle
+++ b/benchmark/benchmark-macro/build.gradle
@@ -109,8 +109,11 @@
 wire {
     kotlin {}
     sourcePath {
-        srcDir 'src/main/proto'
-        include '*.proto'
+        srcDir AndroidXConfig.getPrebuiltsRoot(project).absolutePath + '/androidx/traceprocessor'
+
+        // currently, all protos are at same tree depth
+        // can add further includes if this stops working
+        include 'protos/perfetto/*/*.proto'
     }
 
     prune 'perfetto.protos.AndroidBatteryMetric'
@@ -142,7 +145,6 @@
     prune 'perfetto.protos.AndroidRtRuntimeMetric'
     prune 'perfetto.protos.AndroidSimpleperfMetric'
     prune 'perfetto.protos.AndroidSurfaceflingerMetric'
-    prune 'perfetto.protos.AndroidSysUiCujMetrics'
     prune 'perfetto.protos.AndroidTaskNames'
     prune 'perfetto.protos.AndroidTraceQualityMetric'
     prune 'perfetto.protos.AndroidTrustyWorkqueues'
diff --git a/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/perfetto/PerfettoTraceProcessorTest.kt b/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/perfetto/PerfettoTraceProcessorTest.kt
index 37769a6..ce1f5b1 100644
--- a/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/perfetto/PerfettoTraceProcessorTest.kt
+++ b/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/perfetto/PerfettoTraceProcessorTest.kt
@@ -163,9 +163,13 @@
         val traceFile = createTempFileFromAsset("api31_startup_cold", ".perfetto-trace")
         PerfettoTraceProcessor.runSingleSessionServer(traceFile.absolutePath) {
             val error = assertFailsWith<IllegalStateException> {
-                query("SYNTAX ERROR, PLEASE!")
+                query("SYNTAX ERROR, PLEASE")
             }
-            assertContains(error.message!!, "syntax error")
+            assertContains(
+                charSequence = error.message!!,
+                other = "syntax error",
+                message = "expected 'syntax error', saw message : '''${error.message}'''"
+            )
         }
     }
 
diff --git a/benchmark/benchmark-macro/src/main/proto/descriptor.proto b/benchmark/benchmark-macro/src/main/proto/descriptor.proto
deleted file mode 100644
index 7ee05e3..0000000
--- a/benchmark/benchmark-macro/src/main/proto/descriptor.proto
+++ /dev/null
@@ -1,198 +0,0 @@
-/*
- * Copyright (C) 2018 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.
- */
-
-// This is a subset of descriptor.proto from the Protobuf library.
-syntax = "proto2";
-
-package perfetto.protos;
-
-// The protocol compiler can output a FileDescriptorSet containing the .proto
-// files it parses.
-message FileDescriptorSet {
-  repeated FileDescriptorProto file = 1;
-}
-
-// Describes a complete .proto file.
-message FileDescriptorProto {
-  // file name, relative to root of source tree
-  optional string name = 1;
-  // e.g. "foo", "foo.bar", etc.
-  optional string package = 2;
-
-  // Names of files imported by this file.
-  repeated string dependency = 3;
-  // Indexes of the public imported files in the dependency list above.
-  repeated int32 public_dependency = 10;
-  // Indexes of the weak imported files in the dependency list.
-  // For Google-internal migration only. Do not use.
-  repeated int32 weak_dependency = 11;
-
-  // All top-level definitions in this file.
-  repeated DescriptorProto message_type = 4;
-  repeated EnumDescriptorProto enum_type = 5;
-  repeated FieldDescriptorProto extension = 7;
-
-  reserved 6;
-  reserved 8;
-  reserved 9;
-  reserved 12;
-}
-
-// Describes a message type.
-message DescriptorProto {
-  optional string name = 1;
-
-  repeated FieldDescriptorProto field = 2;
-  repeated FieldDescriptorProto extension = 6;
-
-  repeated DescriptorProto nested_type = 3;
-  repeated EnumDescriptorProto enum_type = 4;
-
-  reserved 5;
-
-  repeated OneofDescriptorProto oneof_decl = 8;
-
-  reserved 7;
-
-  // Range of reserved tag numbers. Reserved tag numbers may not be used by
-  // fields or extension ranges in the same message. Reserved ranges may
-  // not overlap.
-  message ReservedRange {
-    // Inclusive.
-    optional int32 start = 1;
-    // Exclusive.
-    optional int32 end = 2;
-  }
-  repeated ReservedRange reserved_range = 9;
-  // Reserved field names, which may not be used by fields in the same message.
-  // A given name may only be reserved once.
-  repeated string reserved_name = 10;
-}
-
-// Describes a field within a message.
-message FieldDescriptorProto {
-  enum Type {
-    // 0 is reserved for errors.
-    // Order is weird for historical reasons.
-    TYPE_DOUBLE = 1;
-    TYPE_FLOAT = 2;
-    // Not ZigZag encoded.  Negative numbers take 10 bytes.  Use TYPE_SINT64 if
-    // negative values are likely.
-    TYPE_INT64 = 3;
-    TYPE_UINT64 = 4;
-    // Not ZigZag encoded.  Negative numbers take 10 bytes.  Use TYPE_SINT32 if
-    // negative values are likely.
-    TYPE_INT32 = 5;
-    TYPE_FIXED64 = 6;
-    TYPE_FIXED32 = 7;
-    TYPE_BOOL = 8;
-    TYPE_STRING = 9;
-    // Tag-delimited aggregate.
-    // Group type is deprecated and not supported in proto3. However, Proto3
-    // implementations should still be able to parse the group wire format and
-    // treat group fields as unknown fields.
-    TYPE_GROUP = 10;
-    // Length-delimited aggregate.
-    TYPE_MESSAGE = 11;
-
-    // New in version 2.
-    TYPE_BYTES = 12;
-    TYPE_UINT32 = 13;
-    TYPE_ENUM = 14;
-    TYPE_SFIXED32 = 15;
-    TYPE_SFIXED64 = 16;
-    // Uses ZigZag encoding.
-    TYPE_SINT32 = 17;
-    // Uses ZigZag encoding.
-    TYPE_SINT64 = 18;
-  };
-
-  enum Label {
-    // 0 is reserved for errors
-    LABEL_OPTIONAL = 1;
-    LABEL_REQUIRED = 2;
-    LABEL_REPEATED = 3;
-  };
-
-  optional string name = 1;
-  optional int32 number = 3;
-  optional Label label = 4;
-
-  // If type_name is set, this need not be set.  If both this and type_name
-  // are set, this must be one of TYPE_ENUM, TYPE_MESSAGE or TYPE_GROUP.
-  optional Type type = 5;
-
-  // For message and enum types, this is the name of the type.  If the name
-  // starts with a '.', it is fully-qualified.  Otherwise, C++-like scoping
-  // rules are used to find the type (i.e. first the nested types within this
-  // message are searched, then within the parent, on up to the root
-  // namespace).
-  optional string type_name = 6;
-
-  // For extensions, this is the name of the type being extended.  It is
-  // resolved in the same manner as type_name.
-  optional string extendee = 2;
-
-  // For numeric types, contains the original text representation of the value.
-  // For booleans, "true" or "false".
-  // For strings, contains the default text contents (not escaped in any way).
-  // For bytes, contains the C escaped value.  All bytes >= 128 are escaped.
-  // TODO(kenton):  Base-64 encode?
-  optional string default_value = 7;
-
-  // If set, gives the index of a oneof in the containing type's oneof_decl
-  // list.  This field is a member of that oneof.
-  optional int32 oneof_index = 9;
-
-  reserved 10;
-
-  reserved 8;
-}
-
-// Describes a oneof.
-message OneofDescriptorProto {
-  optional string name = 1;
-  optional OneofOptions options = 2;
-}
-
-// Describes an enum type.
-message EnumDescriptorProto {
-  optional string name = 1;
-
-  repeated EnumValueDescriptorProto value = 2;
-
-  reserved 3;
-  reserved 4;
-
-  // Reserved enum value names, which may not be reused. A given name may only
-  // be reserved once.
-  repeated string reserved_name = 5;
-}
-
-// Describes a value within an enum.
-message EnumValueDescriptorProto {
-  optional string name = 1;
-  optional int32 number = 2;
-
-  reserved 3;
-}
-
-message OneofOptions {
-  reserved 999;
-
-  // Clients can define custom options in extensions of this message. See above.
-  extensions 1000 to max;
-}
diff --git a/benchmark/benchmark-macro/src/main/proto/perfetto_merged_metrics.proto b/benchmark/benchmark-macro/src/main/proto/perfetto_merged_metrics.proto
deleted file mode 100644
index d889dc7..0000000
--- a/benchmark/benchmark-macro/src/main/proto/perfetto_merged_metrics.proto
+++ /dev/null
@@ -1,1896 +0,0 @@
-// AUTOGENERATED - DO NOT EDIT
-// ---------------------------
-// This file has been generated by
-// AOSP://external/perfetto/tools/gen_merged_protos
-// merging the perfetto config protos.
-// This fused proto is intended to be copied in:
-//  - Android tree, for statsd.
-//  - Google internal repos.
-
-syntax = "proto2";
-
-package perfetto.protos;
-
-option go_package = "github.com/google/perfetto/perfetto_proto";
-
-// Begin of protos/perfetto/metrics/android/process_metadata.proto
-
-message AndroidProcessMetadata {
-  // Process name. Usually, cmdline or <package_name>(:<custom_name>)?.
-  optional string name = 1;
-
-  // User id under which this process runs.
-  optional int64 uid = 2;
-
-  // Package metadata from Android package list.
-  message Package {
-    optional string package_name = 1;
-    optional int64 apk_version_code = 2;
-    optional bool debuggable = 3;
-  }
-
-  // Package that this process belongs to.
-  //
-  // If this process shares its uid (see `packages_for_uid` field), the package
-  // is determined based on the process name and package name. If there is no
-  // match this field is empty.
-  optional Package package = 7;
-
-  // All packages using this uid.
-  //
-  // Shared uid documentation:
-  // https://developer.android.com/guide/topics/manifest/manifest-element#uid
-  repeated Package packages_for_uid = 8;
-
-  reserved 3, 4, 5, 6;
-}
-
-// End of protos/perfetto/metrics/android/process_metadata.proto
-
-// Begin of protos/perfetto/metrics/android/android_frame_timeline_metric.proto
-
-message AndroidFrameTimelineMetric {
-  message ProcessBreakdown {
-    optional AndroidProcessMetadata process = 3;
-
-    optional int64 total_frames = 4;
-    optional int64 missed_frames = 5;
-    optional int64 missed_app_frames = 6;
-    optional int64 missed_sf_frames = 7;
-
-    optional int64 frame_dur_max = 8;
-    optional int64 frame_dur_avg = 9;
-    optional int64 frame_dur_p50 = 10;
-    optional int64 frame_dur_p90 = 11;
-    optional int64 frame_dur_p95 = 12;
-    optional int64 frame_dur_p99 = 13;
-
-    reserved 1, 2;
-  }
-
-  optional int64 total_frames = 4;
-  optional int64 missed_app_frames = 5;
-
-  repeated ProcessBreakdown process = 2;
-
-  reserved 1;
-}
-
-
-// End of protos/perfetto/metrics/android/android_frame_timeline_metric.proto
-
-// Begin of protos/perfetto/metrics/android/android_trusty_workqueues.proto
-
-// Metric used to generate a simplified view of the Trusty kworker events.
-message AndroidTrustyWorkqueues {}
-
-// End of protos/perfetto/metrics/android/android_trusty_workqueues.proto
-
-// Begin of protos/perfetto/metrics/android/batt_metric.proto
-
-message AndroidBatteryMetric {
-  message BatteryCounters {
-    // Timestamp measured from boot time [ns].
-    optional int64 timestamp_ns = 1;
-    // Fields 2-5 are the same as in BatteryCounters proto in TracePacket.
-    optional double charge_counter_uah = 2;
-    optional float capacity_percent = 3;
-    optional double current_ua = 4;
-    optional double current_avg_ua = 5;
-  }
-
-  message BatteryAggregates {
-    // Field numbers for these 3 == the int values from Android
-    optional int64 total_screen_off_ns = 1;
-    optional int64 total_screen_on_ns = 2;
-    optional int64 total_screen_doze_ns = 3;
-    // Total time a wakelock was held
-    optional int64 total_wakelock_ns = 4;
-    // Amount of time the device was suspended. Depends on the ftrace source
-    // "power/suspend_resume".
-    optional int64 sleep_ns = 5;
-    optional int64 sleep_screen_off_ns = 6;
-    optional int64 sleep_screen_on_ns = 7;
-    optional int64 sleep_screen_doze_ns = 8;
-  }
-
-  // Period of time during the trace that the device went to sleep completely.
-  message SuspendPeriod {
-    optional int64 timestamp_ns = 1;
-    optional int64 duration_ns = 2;
-  }
-
-  // Battery counters info for each ts of the trace. This should only be
-  // extracted for short traces.
-  repeated BatteryCounters battery_counters = 1;
-
-  optional BatteryAggregates battery_aggregates = 2;
-
-  repeated SuspendPeriod suspend_period = 3;
-}
-
-// End of protos/perfetto/metrics/android/batt_metric.proto
-
-// Begin of protos/perfetto/metrics/android/binder_metric.proto
-
-// This metric provides per-process Binder statistics for traces with binder_driver enabled
-// Specifically, transactions are categorized and counted
-message AndroidBinderMetric {
-  message PerProcessBreakdown {
-    optional string process_name = 1;
-    optional uint32 pid = 2;
-    optional string slice_name = 3;
-    optional uint32 count = 4;
-  }
-
-  repeated PerProcessBreakdown process_breakdown = 1;
-}
-// End of protos/perfetto/metrics/android/binder_metric.proto
-
-// Begin of protos/perfetto/metrics/android/camera_metric.proto
-
-message AndroidCameraMetric {
-  message Counter {
-    optional double min = 1;
-    optional double max = 2;
-    optional double avg = 3;
-  }
-
-  // Counter for the sum of DMA and RSS across GCA, cameraserver
-  // and HAL. This provides a single number for the memory
-  // pressure using the camera is putting on the rest of the
-  // system.
-  //
-  // Note: this number assumes that all DMA pressure is coming
-  // from the camera as this is usually a pretty good
-  // approximation. Being more accurate here would increase the
-  // complexity of the metric significantly.
-  //
-  // Note: if there are multiple GCA/cameraserver/HAL processes
-  // in the trace, this metric will simply take the latest
-  // one in the trace and ignore the others.
-  optional Counter gc_rss_and_dma = 1;
-}
-
-// End of protos/perfetto/metrics/android/camera_metric.proto
-
-// Begin of protos/perfetto/metrics/android/camera_unagg_metric.proto
-
-message AndroidCameraUnaggregatedMetric {
-  message Value {
-    optional int64 ts = 1;
-    optional double value = 2;
-  }
-
-  // Timeseries for the sum of DMA and RSS across GCA, cameraserver
-  // and HAL. This provides a single number for the memory
-  // pressure using the camera is putting on the rest of the
-  // system.
-  //
-  // Note: this number assumes that all DMA pressure is coming
-  // from the camera as this is usually a pretty good
-  // approximation. Being more accurate here would increase the
-  // complexity of the metric significantly.
-  //
-  // Note: if there are multiple GCA/cameraserver/HAL processes
-  // in the trace, this metric will simply take the latest
-  // one in the trace and ignore the others.
-  repeated Value gc_rss_and_dma = 1;
-}
-
-// End of protos/perfetto/metrics/android/camera_unagg_metric.proto
-
-// Begin of protos/perfetto/metrics/android/cpu_metric.proto
-
-message AndroidCpuMetric {
-  // Next id: 6
-  message Metrics {
-    // CPU megacycles (i.e. cycles divided by 1e6).
-    optional int64 mcycles = 1;
-
-    // Total time the thread was running for this breakdown in
-    // nanoseconds.
-    optional int64 runtime_ns = 2;
-
-    // Min/max/average CPU frequency weighted by the time the CPU was
-    // running at each frequency in this breakdown.
-    optional int64 min_freq_khz = 3;
-    optional int64 max_freq_khz = 4;
-    optional int64 avg_freq_khz = 5;
-  }
-
-  // Next id: 7
-  message CoreData {
-    optional uint32 id = 1;
-    optional Metrics metrics = 6;
-
-    reserved 2 to 5;
-  }
-
-  // Next id: 3
-  message CoreTypeData {
-    optional string type = 1;
-    optional Metrics metrics = 2;
-  }
-
-  // Next id: 7
-  message Thread {
-    optional string name = 1;
-    optional Metrics metrics = 4;
-
-    // Breakdowns of above metrics.
-    repeated CoreData core = 2;
-    repeated CoreTypeData core_type = 5;
-
-    reserved 3;
-  }
-
-  // Next id: 8
-  message Process {
-    optional string name = 1;
-    optional Metrics metrics = 4;
-
-    // Breakdowns of above metrics.
-    repeated Thread threads = 6;
-    repeated CoreData core = 7;
-    repeated CoreTypeData core_type = 5;
-
-    reserved 3;
-  }
-
-  repeated Process process_info = 1;
-}
-
-// End of protos/perfetto/metrics/android/cpu_metric.proto
-
-// Begin of protos/perfetto/metrics/android/display_metrics.proto
-
-message AndroidDisplayMetrics {
-  // Stat that reports the number of duplicate frames submitted
-  // to the display for rendering. That is frames that have the same
-  // pixels values but where still submitted. It is tracked based on
-  // comparing the MISR of the current frame vs previous frame.
-  optional uint32 total_duplicate_frames = 1;
-
-  // Stat reports whether there is any duplicate_frames tracked
-  optional uint32 duplicate_frames_logged = 2;
-
-  // Stat that reports the number of dpu underrrun occurs count.
-  optional uint32 total_dpu_underrun_count = 3;
-
-
-  message RefreshRateStat {
-    // The refresh rate value (the number of frames per second)
-    optional uint32 refresh_rate_fps = 1;
-
-    // Calculate the number of refresh rate switches to this fps
-    optional uint32 count = 2;
-
-    // Calculate the total duration of refresh rate stays at this fps
-    optional double total_dur_ms = 3;
-
-    // Calculate the average duration of refresh rate stays at this fps
-    optional double avg_dur_ms = 4;
-  }
-
-  // Calculate the total number of refresh rate changes
-  optional uint32 refresh_rate_switches = 4;
-
-  // The statistics for each refresh rate value
-  repeated RefreshRateStat refresh_rate_stats = 5;
-}
-
-// End of protos/perfetto/metrics/android/display_metrics.proto
-
-// Begin of protos/perfetto/metrics/android/dma_heap_metric.proto
-
-// dma-buf heap memory stats on Android.
-message AndroidDmaHeapMetric {
-    optional double avg_size_bytes = 1;
-    optional double min_size_bytes = 2;
-    optional double max_size_bytes = 3;
-
-    // Total allocation size.
-    // Essentially the sum of positive allocs.
-    optional double total_alloc_size_bytes = 4;
-}
-
-// End of protos/perfetto/metrics/android/dma_heap_metric.proto
-
-// Begin of protos/perfetto/metrics/android/dvfs_metric.proto
-
-message AndroidDvfsMetric {
-
-  message BandStat {
-    // Operating frequency
-    optional int32 freq_value = 1;
-
-    // Percentage of duration in this operating frequency compared to all frequencies
-    optional double percentage = 2;
-
-    // Total duration in ns when the state was in this operating frequency
-    optional int64 duration_ns = 3;
-  }
-
-  message FrequencyResidency {
-    // Frequency representative name
-    optional string freq_name = 1;
-    // Each band statistics meta
-    repeated BandStat band_stat = 2;
-  }
-
-  // Frequency residency metrics from clock_set_rate ftrace event.
-  repeated FrequencyResidency freq_residencies = 1;
-}
-
-// End of protos/perfetto/metrics/android/dvfs_metric.proto
-
-// Begin of protos/perfetto/metrics/android/fastrpc_metric.proto
-
-// fastrpc memory stats on Android.
-message AndroidFastrpcMetric {
-  message Subsystem {
-    optional string name = 1;
-    optional double avg_size_bytes = 2;
-    optional double min_size_bytes = 3;
-    optional double max_size_bytes = 4;
-
-    // Total allocation size.
-    // Essentially the sum of positive allocs.
-    optional double total_alloc_size_bytes = 5;
-  }
-
-  repeated Subsystem subsystem = 1;
-}
-
-// End of protos/perfetto/metrics/android/fastrpc_metric.proto
-
-// Begin of protos/perfetto/metrics/android/g2d_metric.proto
-
-message G2dMetrics {
-  message G2dInstance {
-    // G2d name.
-    optional string name = 1;
-
-    optional uint32 frame_count = 5;
-    optional uint32 error_count = 6;
-
-    optional double max_dur_ms = 7;
-    optional double min_dur_ms = 8;
-    optional double avg_dur_ms = 9;
-
-    // Removed: was int64 versions of max_dur_ns, min_dur_ns and avg_dur_ns.
-    reserved 2 to 4;
-  }
-  message G2dMetric {
-    // G2D Metric for each G2D Instance.
-    repeated G2dInstance instances = 1;
-
-    // the number of frames processed by G2D
-    optional uint32 frame_count = 5;
-    // the number of error events
-    optional uint32 error_count = 6;
-
-    // max/min/avg G2d frame durations for all instances.
-    optional double max_dur_ms = 7;
-    optional double min_dur_ms = 8;
-    optional double avg_dur_ms = 9;
-
-    // Removed: was int64 versions of max_dur_ns, min_dur_ns and avg_dur_ns.
-    reserved 2 to 4;
-  }
-
-  optional G2dMetric g2d_hw = 1;
-  optional G2dMetric g2d_sw = 2;
-}
-
-// End of protos/perfetto/metrics/android/g2d_metric.proto
-
-// Begin of protos/perfetto/metrics/android/gpu_metric.proto
-
-message AndroidGpuMetric {
-  message Process {
-    // Process name.
-    optional string name = 1;
-
-    // max/min/avg GPU memory used by this process.
-    optional int64 mem_max = 2;
-    optional int64 mem_min = 3;
-    optional int64 mem_avg = 4;
-  }
-
-  // GPU metric for processes using GPU.
-  repeated Process processes = 1;
-
-  // max/min/avg GPU memory used by the entire system.
-  optional int64 mem_max = 2;
-  optional int64 mem_min = 3;
-  optional int64 mem_avg = 4;
-
-  message FrequencyMetric {
-    // Identifier for GPU in a multi-gpu device.
-    optional uint32 gpu_id = 1;
-
-    // max/min/avg GPU frequency for this gpu_id
-    // the calculation of avg is weighted by the duration of each frequency
-    optional int64 freq_max = 2;
-    optional int64 freq_min = 3;
-    optional double freq_avg = 4;
-
-    message MetricsPerFrequency {
-      // Used frequency
-      optional int64 freq = 1;
-
-      // Total duration in ms when the state of GPU was in this frequency
-      optional double dur_ms = 2;
-
-      // Percentage of duration in this frequency compared to all frequencies
-      // in this gpu_id
-      optional double percentage = 3;
-    }
-
-    // Metrics for each used GPU frequency
-    repeated MetricsPerFrequency used_freqs = 5;
-  }
-
-  // GPU frequency metric for each gpu_id
-  repeated FrequencyMetric freq_metrics = 5;
-}
-
-// End of protos/perfetto/metrics/android/gpu_metric.proto
-
-// Begin of protos/perfetto/metrics/android/hwcomposer.proto
-
-message AndroidHwcomposerMetrics {
-  // Counts the number of composition total layers in the trace. (non-weighted average)
-  optional double composition_total_layers = 1;
-
-  // Counts the number of composition dpu layers in the trace. (non-weighted average)
-  optional double composition_dpu_layers = 2;
-
-  // Counts the number of composition gpu layers in the trace. (non-weighted average)
-  optional double composition_gpu_layers = 3;
-
-  // Counts the number of composition dpu cached layers in the trace. (non-weighted average)
-  optional double composition_dpu_cached_layers = 4;
-
-  // Counts the number of composition surfaceflinger cached layers in the trace.
-  // (non-weighted average)
-  optional double composition_sf_cached_layers = 5;
-
-  // Counts how many times validateDisplay is skipped.
-  optional int32 skipped_validation_count = 6;
-
-  // Counts how many times validateDisplay cannot be skipped.
-  optional int32 unskipped_validation_count = 7;
-
-  // Counts how many times validateDisplay is already separated from presentDisplay
-  // since the beginning.
-  optional int32 separated_validation_count = 8;
-
-  // Counts how many unhandled validation cases which might be caused by errors.
-  optional int32 unknown_validation_count = 9;
-
-  // the average of overall hwcomposer execution time.
-  optional double avg_all_execution_time_ms = 10;
-
-  // the average of hwcomposer execution time for skipped validation cases.
-  optional double avg_skipped_execution_time_ms = 11;
-
-  // the average of hwcomposer execution time for unskipped validation cases.
-  optional double avg_unskipped_execution_time_ms = 12;
-
-  // the average of hwcomposer execution time for separated validation cases.
-  optional double avg_separated_execution_time_ms = 13;
-
-  message DpuVoteMetrics {
-    // the thread ID that handles this track
-    optional uint32 tid = 1;
-
-    // the weighted average of DPU Vote Clock
-    optional double avg_dpu_vote_clock = 2;
-
-    // the weighted average of DPU Vote Avg Bandwidth
-    optional double avg_dpu_vote_avg_bw = 3;
-
-    // the weighted average of DPU Vote Peak Bandwidth
-    optional double avg_dpu_vote_peak_bw = 4;
-
-    // the weighted average of DPU Vote RT (Real Time) Bandwidth
-    optional double avg_dpu_vote_rt_bw = 5;
-  }
-
-  // DPU Vote Metrics for each thread track
-  repeated DpuVoteMetrics dpu_vote_metrics = 14;
-}
-
-// End of protos/perfetto/metrics/android/hwcomposer.proto
-
-// Begin of protos/perfetto/metrics/android/hwui_metric.proto
-
-// Android HWUI graphics performance and graphics memory usage metrics.
-message ProcessRenderInfo {
-  // Name of the package launched
-  optional string process_name = 1;
-
-  // CPU time spent on RenderThread in milliseconds.
-  optional int64 rt_cpu_time_ms = 2;
-
-  // Number of frames drawn on RenderThread, followed by max/min/avg CPU time to draw a frame
-  // in nanoseconds.
-  optional uint32 draw_frame_count = 3;
-  optional int64 draw_frame_max = 4;
-  optional int64 draw_frame_min = 5;
-  optional double draw_frame_avg = 6;
-
-  // Number of GPU commands flushes and max/min/avg time per flush in nanoseconds.
-  optional uint32 flush_count = 7;
-  optional int64 flush_max = 8;
-  optional int64 flush_min = 9;
-  optional double flush_avg = 10;
-
-  // Number of View tree preparation counts and max/min/avg time to traverse the tree in
-  // nanoseconds.
-  optional uint32 prepare_tree_count = 11;
-  optional int64 prepare_tree_max = 12;
-  optional int64 prepare_tree_min = 13;
-  optional double prepare_tree_avg = 14;
-
-  // Number of times the GPU rendered a frame and max/min/avg time for GPU to finish rendering in
-  // in nanoseconds.
-  optional uint32 gpu_completion_count = 15;
-  optional int64 gpu_completion_max = 16;
-  optional int64 gpu_completion_min = 17;
-  optional double gpu_completion_avg = 18;
-
-  // Number of times a frame was recorded/serialized in a display list on the UI thread with
-  // max/min/avg time in nanoseconds.
-  optional uint32 ui_record_count = 19;
-  optional int64 ui_record_max = 20;
-  optional int64 ui_record_min = 21;
-  optional double ui_record_avg = 22;
-
-  // number of unique shader programs that were used to render frames, followed by total and average
-  // times to prepare a shader in nanoseconds.
-  optional uint32 shader_compile_count = 23;
-  optional int64 shader_compile_time = 24;
-  optional double shader_compile_avg = 25;
-  // number of shader programs loaded from the disk cache, followed by total time and average time
-  // to prepare a shader in nanoseconds.
-  optional uint32 cache_hit_count = 26;
-  optional int64 cache_hit_time = 27;
-  optional double cache_hit_avg = 28;
-  // number of shader programs compiled/linked, followed by total time and average time to prepare
-  // a shader in nanoseconds.
-  optional uint32 cache_miss_count = 29;
-  optional int64 cache_miss_time = 30;
-  optional double cache_miss_avg = 31;
-
-  // max/min/avg CPU memory used for graphics by HWUI at the end of a frame.
-  optional int64 graphics_cpu_mem_max = 32;
-  optional int64 graphics_cpu_mem_min = 33;
-  optional double graphics_cpu_mem_avg = 34;
-
-  // max/min/avg GPU memory used by HWUI at the end of a frame excluding textures.
-  optional int64 graphics_gpu_mem_max = 35;
-  optional int64 graphics_gpu_mem_min = 36;
-  optional double graphics_gpu_mem_avg = 37;
-
-  // max/min/avg memory used for GPU textures by HWUI at the end of a frame.
-  optional int64 texture_mem_max = 38;
-  optional int64 texture_mem_min = 39;
-  optional double texture_mem_avg = 40;
-
-  // max/min/avg memory used by HWUI at the end of a frame. This is a sum of previous 3 categories.
-  optional int64 all_mem_max = 41;
-  optional int64 all_mem_min = 42;
-  optional double all_mem_avg = 43;
-}
-
-message AndroidHwuiMetric {
-  //  HWUI metrics for processes that have a RenderThread.
-  repeated ProcessRenderInfo process_info = 1;
-}
-
-// End of protos/perfetto/metrics/android/hwui_metric.proto
-
-// Begin of protos/perfetto/metrics/android/ion_metric.proto
-
-// ion memory stats on Android.
-message AndroidIonMetric {
-  message Buffer {
-    optional string name = 1;
-    optional double avg_size_bytes = 2;
-    optional double min_size_bytes = 3;
-    optional double max_size_bytes = 4;
-
-    // Total allocation size.
-    // Essentially the sum of positive allocs (-> new buffers).
-    optional double total_alloc_size_bytes = 5;
-  }
-
-  repeated Buffer buffer = 1;
-}
-
-// End of protos/perfetto/metrics/android/ion_metric.proto
-
-// Begin of protos/perfetto/metrics/android/irq_runtime_metric.proto
-
-// measure max IRQ runtime and IRQ tasks running over threshold.
-message AndroidIrqRuntimeMetric {
-  message IrqSlice {
-    // IRQ name
-    optional string irq_name = 1;
-    // timestamp
-    optional int64 ts = 2;
-    // runtime of IRQ task
-    optional int64 dur = 3;
-  }
-  message ThresholdMetric {
-    // Threshold value
-    optional string threshold = 1;
-    // over threshold count
-    optional int64 over_threshold_count = 2;
-    // anomaly ratio (over threshold count / total count)
-    optional double anomaly_ratio= 3;
-  }
-  message IrqRuntimeMetric {
-    // max runtime of IRQ tasks
-    optional int64 max_runtime = 1;
-    // total IRQ tasks
-    optional int64 total_count = 2;
-    // over threshold metric
-    optional ThresholdMetric threshold_metric = 3;
-    // information for top 10 IRQ tasks
-    repeated IrqSlice longest_irq_slices = 4;
-  }
-
-  // metrics for hardirq and softirq
-  optional IrqRuntimeMetric hw_irq = 1;
-  optional IrqRuntimeMetric sw_irq = 2;
-}
-
-
-// End of protos/perfetto/metrics/android/irq_runtime_metric.proto
-
-// Begin of protos/perfetto/metrics/android/jank_cuj_metric.proto
-
-message AndroidJankCujMetric {
-  repeated Cuj cuj = 1;
-
-  // Next id: 11
-  message Cuj {
-    // ID of the CUJ that is unique within the trace.
-    optional int32 id = 1;
-
-    // Name of the CUJ, extracted from the CUJ trace marker.
-    // For example SHADE_EXPAND_COLLAPSE from J<SHADE_EXPAND_COLLAPSE>.
-    optional string name = 2;
-
-    // Details about the process (uid, version, etc)
-    optional AndroidProcessMetadata process = 3;
-
-    // ts of the CUJ trace marker slice.
-    optional int64 ts = 4;
-
-    // dur of the CUJ trace marker slice.
-    optional int64 dur = 5;
-
-    // Details about each of the frames within the CUJ.
-    repeated Frame frame = 6;
-
-    // Details about each of the SF frames within the CUJ.
-    repeated Frame sf_frame = 10;
-
-    // Metrics extracted from the counters output by FrameTracker
-    // Does not contain the frame_dur percentile information.
-    optional Metrics counter_metrics = 7;
-
-    // Metrics extracted from the frame timeline.
-    optional Metrics timeline_metrics = 8;
-
-    // Metrics extracted from the trace slices.
-    optional Metrics trace_metrics = 9;
-  }
-
-  // Next id: 8
-  message Frame {
-    // Index of the frame within the single user journey.
-    optional int64 frame_number = 1;
-
-    // VSYNC ID of the frame.
-    optional int64 vsync = 2;
-
-    optional int64 ts = 3;
-    optional int64 dur = 4;
-    optional int64 dur_expected = 7;
-
-    // Whether the app process missed the frame deadline.
-    // Only set for the App frames. Always left unset for SF frames.
-    optional bool app_missed = 5;
-
-    // Whether SF missed the frame deadline.
-    optional bool sf_missed = 6;
-  }
-
-  // Next id: 12
-  message Metrics {
-    // Overall number of frames within the CUJ.
-    optional int64 total_frames = 1;
-
-    // Number of missed frames.
-    optional int64 missed_frames = 2;
-
-    // Number of frames missed due to the app missing the deadline.
-    optional int64 missed_app_frames = 3;
-
-    // Number of frames missed due to SF.
-    optional int64 missed_sf_frames = 4;
-
-    // Number of successive frames missed.
-    // Not available in timeline_metrics and trace_metrics.
-    optional int64 missed_frames_max_successive = 5;
-
-    // Max frame duration.
-    // Not available in counter_metrics.
-    optional int64 frame_dur_max = 6;
-
-    // Average frame duration.
-    // Not available in counter_metrics.
-    optional int64 frame_dur_avg = 7;
-
-    // Median frame duration.
-    // Not available in counter_metrics.
-    optional int64 frame_dur_p50 = 8;
-
-    // P90 frame duration.
-    // Not available in counter_metrics.
-    optional int64 frame_dur_p90 = 9;
-
-    // P95 frame duration.
-    // Not available in counter_metrics.
-    optional int64 frame_dur_p95 = 10;
-
-    // P99 frame duration.
-    // Not available in counter_metrics.
-    optional int64 frame_dur_p99 = 11;
-  }
-}
-
-// End of protos/perfetto/metrics/android/jank_cuj_metric.proto
-
-// Begin of protos/perfetto/metrics/android/java_heap_histogram.proto
-
-message JavaHeapHistogram {
-  // Next id: 9
-  message TypeCount {
-    optional string type_name = 1;
-    optional string category = 4;
-
-    optional uint32 obj_count = 2;
-    optional uint32 reachable_obj_count = 3;
-
-    optional uint32 size_kb = 5;
-    optional uint32 reachable_size_kb = 6;
-    optional uint32 native_size_kb = 7;
-    optional uint32 reachable_native_size_kb = 8;
-  }
-
-  message Sample {
-    optional int64 ts = 1;
-    repeated TypeCount type_count = 2;
-  }
-
-  // Heap stats per process. One sample per dump (with continuous dump you can
-  // have more samples differentiated by ts).
-  message InstanceStats {
-    optional uint32 upid = 1;
-    optional AndroidProcessMetadata process = 2;
-    repeated Sample samples = 3;
-  }
-
-  repeated InstanceStats instance_stats = 1;
-}
-
-// End of protos/perfetto/metrics/android/java_heap_histogram.proto
-
-// Begin of protos/perfetto/metrics/android/java_heap_stats.proto
-
-message JavaHeapStats {
-  message HeapRoots {
-    optional string root_type = 1;
-    optional string type_name = 2;
-    optional int64 obj_count = 3;
-  }
-
-  // Next id: 10
-  message Sample {
-    optional int64 ts = 1;
-    // Size of the Java heap in bytes
-    optional int64 heap_size = 2;
-    // Native size of all the objects (not included in heap_size)
-    optional int64 heap_native_size = 8;
-    optional int64 obj_count = 4;
-    // Size of the reachable objects in bytes.
-    optional int64 reachable_heap_size = 3;
-    // Native size of all the reachable objects (not included in
-    // reachable_heap_size)
-    optional int64 reachable_heap_native_size = 9;
-    optional int64 reachable_obj_count = 5;
-    // Sum of anonymous RSS + swap pages in bytes.
-    optional int64 anon_rss_and_swap_size = 6;
-
-    // ART root objects
-    repeated HeapRoots roots = 7;
-  }
-
-  // Heap stats per process. One sample per dump (can be > 1 if continuous
-  // dump is enabled).
-  message InstanceStats {
-    optional uint32 upid = 1;
-    optional AndroidProcessMetadata process = 2;
-    repeated Sample samples = 3;
-  }
-
-  repeated InstanceStats instance_stats = 1;
-}
-
-// End of protos/perfetto/metrics/android/java_heap_stats.proto
-
-// Begin of protos/perfetto/metrics/android/lmk_metric.proto
-
-// LMK stats on Android.
-message AndroidLmkMetric {
-  message ByOomScore {
-    optional int32 oom_score_adj = 1;
-    optional int32 count = 2;
-  }
-
-  // Total count of LMK events observed in the trace.
-  optional int32 total_count = 1;
-  repeated ByOomScore by_oom_score = 2;
-
-  // OOM reaper kills. Enabled via the oom/mark_victim point. Should never
-  // happen.
-  optional int32 oom_victim_count = 3;
-}
-
-// End of protos/perfetto/metrics/android/lmk_metric.proto
-
-// Begin of protos/perfetto/metrics/android/lmk_reason_metric.proto
-
-// Global process state at LMK time, used to identify potential culprits.
-// TODO: rename to AndroidLmkProcessState
-message AndroidLmkReasonMetric {
-  message Process {
-    optional AndroidProcessMetadata process = 1;
-
-    // OOM score adj of the process.
-    optional int32 oom_score_adj = 2;
-
-    // RSS + swap.
-    optional int64 size = 3;
-
-    optional int64 file_rss_bytes = 4;
-    optional int64 anon_rss_bytes = 5;
-    optional int64 shmem_rss_bytes = 6;
-    optional int64 swap_bytes = 7;
-  }
-  message Lmk {
-    // OOM score adj of the LMK'ed process.
-    optional int32 oom_score_adj = 1;
-
-    // Total size of the ION heap in bytes during this LMK.
-    optional int64 ion_heaps_bytes = 4;
-    // Deprecated. Prefer ion_heaps_bytes.
-    optional int64 system_ion_heap_size = 2;
-
-    // Processes present during this LMK.
-    repeated Process processes = 3;
-  }
-
-  // LMKs present in the trace, ordered on their timestamp.
-  repeated Lmk lmks = 1;
-}
-
-// End of protos/perfetto/metrics/android/lmk_reason_metric.proto
-
-// Begin of protos/perfetto/metrics/android/mem_metric.proto
-
-// Memory metrics on Android.
-message AndroidMemoryMetric {
-  message ProcessMetrics {
-    optional string process_name = 1;
-    optional ProcessMemoryCounters total_counters = 2;
-    repeated PriorityBreakdown priority_breakdown = 3;
-  }
-
-  message PriorityBreakdown {
-    optional string priority = 1;
-    optional ProcessMemoryCounters counters = 2;
-  }
-
-  message ProcessMemoryCounters {
-    optional Counter anon_rss = 1;
-    optional Counter file_rss = 2;
-    optional Counter swap = 3;
-    optional Counter anon_and_swap = 4;
-
-    // Available when ART trace events are available.
-    optional Counter java_heap = 5;
-  }
-
-  message Counter {
-    optional double min = 1;
-    optional double max = 2;
-    optional double avg = 3;
-
-    // Memory growth observed in the counter sequence. In case of multiple
-    // processes with the same name, break ties using max.
-    optional double delta = 4;
-  }
-
-  // Process metrics, grouped by process name
-  repeated ProcessMetrics process_metrics = 1;
-}
-
-// End of protos/perfetto/metrics/android/mem_metric.proto
-
-// Begin of protos/perfetto/metrics/android/mem_unagg_metric.proto
-
-// Unaggregated memory metrics on Android.
-message AndroidMemoryUnaggregatedMetric {
-  message ProcessValues {
-    optional string process_name = 1;
-    optional ProcessMemoryValues mem_values = 2;
-  }
-
-  message ProcessMemoryValues {
-    repeated Value anon_rss = 1;
-    repeated Value file_rss = 2;
-    repeated Value swap = 3;
-    repeated Value anon_and_swap = 4;
-  }
-
-  message Value {
-    optional int64 ts = 1;
-    optional int32 oom_score = 2;
-    optional double value = 3;
-  }
-
-  // Process metrics for every process instance in trace.
-  repeated ProcessValues process_values = 1;
-}
-
-// End of protos/perfetto/metrics/android/mem_unagg_metric.proto
-
-// Begin of protos/perfetto/metrics/android/multiuser_metric.proto
-
-// Metrics for Multiuser events, such as switching users.
-message AndroidMultiuserMetric {
-
-  // Holds the data for a Multiuser event.
-  message EventData {
-    // Duration of the event (in milliseconds).
-    optional int32 duration_ms = 1;
-
-    // CPU usage of each process during the event.
-    message CpuUsage {
-      // The userId of the process (e.g. 0 or 10).
-      optional int32 user_id = 1;
-      // The name of the process.
-      optional string process_name = 2;
-      // The number of CPU cycles (in megacycles) spent by that process during the event.
-      optional int32 cpu_mcycles = 3;
-      // The ratio of this process's cycles to the total for all processes, expressed as a percentage.
-      optional float cpu_percentage = 4;
-      // General identifier for this usage source: determined from the process name, user, etc.
-      // Should be stable across multiple runs (i.e. does not print the user_id directly).
-      optional string identifier = 5;
-    }
-    repeated CpuUsage cpu_usage = 2;
-  }
-
-  // Metrics for a user switch.
-  optional EventData user_switch = 1;
-}
-// End of protos/perfetto/metrics/android/multiuser_metric.proto
-
-// Begin of protos/perfetto/metrics/android/network_metric.proto
-
-message AndroidNetworkMetric {
-  message PacketStatistic {
-    // Packet count.
-    optional int64 packets = 1;
-
-    // Packet Bytes.
-    optional int64 bytes = 2;
-
-    // Timestamp when first packet received or transmitted.
-    optional int64 first_packet_timestamp_ns = 3;
-
-    // Timestamp when last packet received or transmitted.
-    optional int64 last_packet_timestamp_ns = 4;
-
-    // Interval between first & last packet. The minimum interval is 10ms.
-    optional int64 interval_ns = 5;
-
-    // Data Speed.
-    optional double data_rate_kbps = 6;
-  }
-
-  message CorePacketStatistic {
-    optional uint32 id = 1;
-    optional PacketStatistic packet_statistic = 2;
-  }
-
-  message Rx {
-    // Total packets statistic.
-    optional PacketStatistic total = 1;
-
-    // Per core packets statistic.
-    repeated CorePacketStatistic core = 2;
-
-    // GRO aggregation ratio.
-    optional string gro_aggregation_ratio = 3;
-  }
-
-  message Tx {
-    // Total packets statistic.
-    optional PacketStatistic total = 1;
-
-    // Per core packets statistic.
-    repeated CorePacketStatistic core = 2;
-  }
-
-  message NetDevice {
-    // Network device name.
-    optional string name = 1;
-
-    // Ingress traffic statistic.
-    optional Rx rx = 2;
-
-    // Egress traffic statistic
-    optional Tx tx = 3;
-  }
-
-  message NetRxActionStatistic {
-    // SoftIrq NET_RX action count.
-    optional int64 count = 1;
-
-    // SoftIrq NET_RX action was running in millisecond.
-    optional double runtime_ms = 2;
-
-    // SoftIrq NET_RX action average running time.
-    optional double avg_runtime_ms = 3;
-
-    // CPU megacycles (i.e. cycles divided by 1e6).
-    optional int64 mcycles = 4;
-
-    // Average weighted CPU frequency by the time the NET_RX Action
-    // running at each frequency.
-    optional int64 avg_freq_khz = 5;
-  }
-
-  message NetTxActionStatistic {
-    // SoftIrq NET_TX action count.
-    optional int64 count = 1;
-
-    // SoftIrq NET_TX action was running in millisecond.
-    optional double runtime_ms = 2;
-
-    // SoftIrq NET_TX action average running time.
-    optional double avg_runtime_ms = 3;
-
-    // CPU megacycles (i.e. cycles divided by 1e6).
-    optional int64 mcycles = 4;
-
-    // Average weighted CPU frequency by the time the NET_TX Action
-    // running at each frequency.
-    optional int64 avg_freq_khz = 5;
-  }
-
-  message IpiActionStatistic {
-    // SoftIrq IPI action count.
-    optional int64 count = 1;
-
-    // SoftIrq IPI action was running in millisecond.
-    optional double runtime_ms = 2;
-
-    // SoftIrq IPI action average running time.
-    optional double avg_runtime_ms = 3;
-  }
-
-  message CoreNetRxActionStatistic {
-    optional uint32 id = 1;
-    optional NetRxActionStatistic net_rx_action_statistic = 2;
-  }
-
-  message CoreNetTxActionStatistic {
-    optional uint32 id = 1;
-    optional NetTxActionStatistic net_tx_action_statistic = 2;
-  }
-
-  message NetRxAction {
-    // Total NET_RX action statistics.
-    optional NetRxActionStatistic total = 1;
-
-    // Per core NET_RX action statistics.
-    repeated CoreNetRxActionStatistic core = 2;
-
-    // The average packet time moves through the kernel stack.
-    optional double avg_interstack_latency_ms = 3;
-  }
-
-  message NetTxAction {
-    // Total NET_TX action statistics.
-    optional NetTxActionStatistic total = 1;
-
-    // Per core NET_TX action statistics.
-    repeated CoreNetTxActionStatistic core = 2;
-  }
-
-  message IpiAction {
-    // Total IPI action statistics.
-    optional IpiActionStatistic total = 1;
-  }
-
-  // Network device metrics.
-  repeated NetDevice net_devices = 1;
-
-  // SoftIrq NET_RX action metrics.
-  optional NetRxAction net_rx_action = 2;
-
-  // Packet retransmission rate.
-  optional double retransmission_rate = 3;
-
-  // Kfree Skb rate (i.e. kfree_skb count divided by the packet count from all
-  // net devices).
-  optional double kfree_skb_rate = 4;
-
-  // SoftIrq NET_TX action metrics.
-  optional NetTxAction net_tx_action = 5;
-
-  // SoftIrq IPI action metrics.
-  optional IpiAction ipi_action = 6;
-}
-
-// End of protos/perfetto/metrics/android/network_metric.proto
-
-// Begin of protos/perfetto/metrics/android/other_traces.proto
-
-message AndroidOtherTracesMetric {
-  // Uuids of other traces being finalized while the current trace was being
-  // recorded.
-  repeated string finalized_traces_uuid = 1;
-}
-
-// End of protos/perfetto/metrics/android/other_traces.proto
-
-// Begin of protos/perfetto/metrics/android/package_list.proto
-
-message AndroidPackageList {
-  message Package {
-    optional string package_name = 1;
-    optional int64 uid = 2;
-    optional int64 version_code = 3;
-  }
-
-  repeated Package packages = 1;
-}
-
-// End of protos/perfetto/metrics/android/package_list.proto
-
-// Begin of protos/perfetto/metrics/android/powrails_metric.proto
-
-message AndroidPowerRails {
-  // Energy data per Power Rail at given ts.
-  message EnergyData {
-    // Time since device boot(CLOCK_BOTTOMTIME) in milli-seconds.
-    optional int64 timestamp_ms = 1;
-    // Accumulated energy since device boot in microwatt-seconds(uws).
-    optional double energy_uws = 2;
-  }
-
-  message PowerRails {
-    // Name of the rail.
-    optional string name = 1;
-    // Energy data for given rail and for all samples in the trace.
-    repeated EnergyData energy_data = 2;
-    // The average used power between the first and the last sampled
-    // energy data in miliwatt (mw)
-    optional double avg_used_power_mw = 3;
-  }
-
-  // Energy data per Power Rail.
-  repeated PowerRails power_rails = 1;
-
-  // The average used power between the first and last sampled rail across all
-  // the rails in milliwatts (mw).
-  optional double avg_total_used_power_mw = 2;
-}
-// End of protos/perfetto/metrics/android/powrails_metric.proto
-
-// Begin of protos/perfetto/metrics/android/profiler_smaps.proto
-
-message ProfilerSmaps {
-  message Mapping {
-    optional string path = 1;
-    optional int32 size_kb = 2;
-    optional int32 private_dirty_kb = 3;
-    optional int32 swap_kb = 4;
-  }
-
-  message Instance {
-    optional AndroidProcessMetadata process = 1;
-    repeated Mapping mappings = 2;
-  }
-
-  repeated Instance instance = 1;
-}
-
-// End of protos/perfetto/metrics/android/profiler_smaps.proto
-
-// Begin of protos/perfetto/metrics/android/rt_runtime_metric.proto
-
-// measure max RT runtime and RT tasks running over 5ms.
-message AndroidRtRuntimeMetric {
-  message RtSlice {
-    // thread name
-    optional string tname = 1;
-    // timestamp
-    optional int64 ts = 2;
-    // runtime of RT task
-    optional int64 dur = 3;
-  }
-
-  // max runtime of RT tasks
-  optional int64 max_runtime = 1;
-  // how many RT tasks are over 5ms.
-  optional int64 over_5ms_count = 2;
-  // information for top 10 RT tasks
-  repeated RtSlice longest_rt_slices = 3;
-}
-
-
-// End of protos/perfetto/metrics/android/rt_runtime_metric.proto
-
-// Begin of protos/perfetto/metrics/android/simpleperf.proto
-
-// Metric that stores information related to atrace events generated by
-// simpleperf tool
-message AndroidSimpleperfMetric {
-  optional double urgent_ratio = 1;
-
-  message PerfEventMetric {
-    // Simpleperf event name
-    optional string name = 1;
-
-    message Thread {
-      // Thread ID
-      optional int32 tid = 1;
-      // Thread name
-      optional string name = 2;
-      // CPU ID
-      optional int32 cpu = 3;
-      // Total counter value
-      optional double total = 4;
-    }
-
-    message Process {
-      // Process ID
-      optional int32 pid = 1;
-      // Process name
-      optional string name = 2;
-      // Metrics for each thread in this process.
-      repeated Thread threads = 3;
-      // Total counter value over all threads in this process
-      optional double total = 4;
-    }
-
-    // Metrics for each process
-    repeated Process processes = 2;
-
-    // Total counter value over all processes and threads
-    optional double total = 3;
-  }
-
-  repeated PerfEventMetric events = 2;
-}
-
-// End of protos/perfetto/metrics/android/simpleperf.proto
-
-// Begin of protos/perfetto/metrics/android/startup_metric.proto
-
-// Android app startup metrics.
-message AndroidStartupMetric {
-  // A simplified view of the task state durations for a thread
-  // and a span of time.
-  message TaskStateBreakdown {
-    optional int64 running_dur_ns = 1;
-    optional int64 runnable_dur_ns = 2;
-    optional int64 uninterruptible_sleep_dur_ns = 3;
-    optional int64 interruptible_sleep_dur_ns = 4;
-  }
-
-  message McyclesByCoreType {
-    optional int64 little = 1;
-    optional int64 big = 2;
-    optional int64 bigger = 3;
-    optional int64 unknown = 4;
-  }
-
-  message Slice {
-    optional int64 dur_ns = 1;
-    optional double dur_ms = 2;
-  }
-
-  // Timing information spanning the intent received by the
-  // activity manager to the first frame drawn.
-  // Next id: 33.
-  message ToFirstFrame {
-    // The duration between the intent received and first frame.
-    optional int64 dur_ns = 1;
-    optional double dur_ms = 17;
-
-    // Breakdown of time to first frame by task state for the main thread of
-    // the process starting up.
-    optional TaskStateBreakdown main_thread_by_task_state = 2;
-
-    // The mcycles taken by this startup across all CPUs (broken down by core
-    // type).
-    optional McyclesByCoreType mcycles_by_core_type = 26;
-
-    // In this timespan, how many processes (apart from the main activity) were
-    // spawned.
-    optional uint32 other_processes_spawned_count = 3;
-
-    // Total time spent in activity manager between the initial intent
-    // and the end of the activity starter.
-    optional Slice time_activity_manager = 4;
-
-    // The following slices follow the typical steps post-fork.
-    optional Slice time_activity_thread_main = 5;
-    optional Slice time_bind_application = 6;
-    optional Slice time_activity_start = 7;
-    optional Slice time_activity_resume = 8;
-    optional Slice time_activity_restart = 21;
-    optional Slice time_choreographer = 9;
-    optional Slice time_inflate = 22;
-    optional Slice time_get_resources = 23;
-
-    // If we are starting a new process, record the duration from the
-    // intent being received to the time we call the zygote.
-    optional Slice time_before_start_process = 10;
-
-    // The actual duration of the process start (based on the zygote slice).
-    optional Slice time_during_start_process = 11;
-
-    optional Slice to_post_fork = 18;
-    optional Slice to_activity_thread_main = 19;
-    optional Slice to_bind_application = 20;
-
-    optional Slice time_post_fork = 16;
-
-    // The total time spent on opening dex files.
-    optional Slice time_dex_open = 24;
-    // Total time spent verifying classes during app startup.
-    optional Slice time_verify_class = 25;
-
-    // Number of methods that were compiled by JIT during app startup.
-    optional uint32 jit_compiled_methods = 27;
-
-    // Time spent running CPU on jit thread pool.
-    optional Slice time_jit_thread_pool_on_cpu = 28;
-
-    // Time spent on garbage collection.
-    optional Slice time_gc_total = 29;
-    optional Slice time_gc_on_cpu = 30;
-
-    // Time spent in lock contention on the main thread of the process being
-    // started up. This includes *all* types of lock contention not just monitor
-    // contention.
-    optional Slice time_lock_contention_thread_main = 31;
-
-    // Time spent in monitor lock contention on the main thread of the
-    // process being started up. This will be a subset of the time counted by
-    // |time_lock_contention_thread_main|.
-    optional Slice time_monitor_contention_thread_main = 32;
-
-    // Removed: was other_process_to_activity_cpu_ratio.
-    reserved 12;
-
-    // Removed: was uint32 versions of to_post_fork, to_activity_thread_main and
-    // to_bind_application.
-    reserved 13, 14, 15;
-  }
-
-  // Metrics about startup which were developed by looking at experiments using
-  // high-speed cameras (HSC).
-  message HscMetrics {
-    // The duration of the full "startup" as defined by HSC tests.
-    optional Slice full_startup = 1;
-  }
-
-  message Activity {
-    optional string name = 1;
-    optional string method = 2;
-    optional int64 ts_method_start = 4;
-
-    // Field 3 contained Slice with a sum of durations for matching slices.
-    reserved 3;
-  }
-
-  message BinderTransaction {
-    optional Slice duration = 1;
-    optional string thread = 2;
-    optional string destination_thread = 3;
-    optional string destination_process = 4;
-    // From
-    // https://cs.android.com/android/platform/superproject/+/master:external/perfetto/protos/perfetto/trace/ftrace/binder.proto;l=15;drc=7b6a788162a30802f4c9d8d7a30a54e25edd30f1
-    optional string flags = 5;
-    // From
-    // https://cs.android.com/android/platform/superproject/+/master:external/perfetto/protos/perfetto/trace/ftrace/binder.proto;l=14;drc=7b6a788162a30802f4c9d8d7a30a54e25edd30f1
-    optional string code = 6;
-    // From
-    // https://cs.android.com/android/platform/superproject/+/master:external/perfetto/protos/perfetto/trace/ftrace/binder.proto;l=37;drc=7b6a788162a30802f4c9d8d7a30a54e25edd30f1
-    optional int64 data_size = 7;
-  }
-
-  // Metrics with information about the status of odex files and the outcome
-  // of the loading process.
-  // Multiple files might be loaded for a single startup. Platform might also
-  // decide to discard an odex file and instead load a fallback, for example
-  // in case the OS or apk were updated.
-  message OptimizationStatus {
-    optional string odex_status = 1;
-    optional string compilation_filter = 2;
-    optional string compilation_reason = 3;
-    optional string location = 4;
-  }
-
-  // Contains timestamps of important events which occurred during the
-  // startup.
-  message EventTimestamps {
-    optional int64 intent_received = 1;
-    optional int64 first_frame = 2;
-  }
-
-  // Contains information about the state of a system during the app startup.
-  // Useful to put the startup in context.
-  message SystemState {
-    // Whether the dex2oat64 process was running concurrent to the startup.
-    optional bool dex2oat_running = 1;
-
-    // Whether the installd process was running concurrent to the startup.
-    optional bool installd_running = 2;
-
-    // The number of broadcasts dispatched by the system during the app
-    // launch.
-    optional int64 broadcast_dispatched_count = 3;
-
-    // The number of broadcasts received by an app or the system during the
-    // app launch. Note that multiple packages can be subscribed to the same
-    // broadcast so a single dsipatch can cause multiple packages to receive
-    // and process a broadcast.
-    optional int64 broadcast_received_count = 4;
-
-    // The most active (i.e. consuming the most mcycles) processes during the
-    // app launch excluding the process(es) being launched.
-    // Note: the exact number of returned is an implementation detail and
-    // will likely change over time.
-    repeated string most_active_non_launch_processes = 5;
-  }
-
-  // Next id: 18
-  message Startup {
-    // Random id uniquely identifying an app startup in this trace.
-    optional uint32 startup_id = 1;
-
-    // Startup type (cold / warm / hot)
-    optional string startup_type = 16;
-
-    // Name of the package launched
-    optional string package_name = 2;
-
-    // Name of the process launched
-    optional string process_name = 3;
-
-    // Details about the activities launched
-    repeated Activity activities = 11;
-
-    // Details about slow binder transactions during the startup. The definition
-    // of a slow transaction is an implementation detail.
-    repeated BinderTransaction long_binder_transactions = 14;
-
-    // Did we ask the zygote for a new process
-    optional bool zygote_new_process = 4;
-
-    // Number of processes hosting the activity involved in the launch.
-    // This will usually be 1. If it is 0, it is indicative of a data / process
-    // error. If > 1, the process died during startup and the system respawned
-    // it.
-    optional uint32 activity_hosting_process_count = 6;
-
-    // Contains timestamps of important events which happened during
-    // the startup.
-    optional EventTimestamps event_timestamps = 13;
-
-    // Timing information spanning the intent received by the
-    // activity manager to the first frame drawn.
-    optional ToFirstFrame to_first_frame = 5;
-
-    // Details about the process (uid, version, etc)
-    optional AndroidProcessMetadata process = 7;
-
-    // Metrics about startup which were developed by looking at experiments
-    // using high-speed cameras (HSC).
-    optional HscMetrics hsc = 8;
-
-    // The time taken in the startup from intent received to the start time
-    // of the reportFullyDrawn slice. This should be longer than the time to
-    // first frame as the application decides this after it starts rendering.
-    optional Slice report_fully_drawn = 9;
-
-    // Contains information about the status of odex files.
-    repeated OptimizationStatus optimization_status = 12;
-
-    // Contains information about the state of the rest of the system during the
-    // startup. This is useful for getting context about why a startup might
-    // be slow beyond just what the app is doing.
-    optional SystemState system_state = 15;
-
-    // A list of identified potential causes for slow startup.
-    // Optional.
-    repeated string slow_start_reason = 17;
-
-    reserved 10;
-  }
-
-  repeated Startup startup = 1;
-}
-
-// End of protos/perfetto/metrics/android/startup_metric.proto
-
-// Begin of protos/perfetto/metrics/android/surfaceflinger.proto
-
-message AndroidSurfaceflingerMetric {
-  // Counts the number of missed frames in the trace.
-  optional uint32 missed_frames = 1;
-
-  // Counts the number of missed HWC frames in the trace.
-  optional uint32 missed_hwc_frames = 2;
-
-  // Counts the number of missed GPU frames in the trace.
-  optional uint32 missed_gpu_frames = 3;
-
-  // Calculate the number of missed frames divided by
-  // total frames
-  optional double missed_frame_rate = 4;
-
-  // Calculate the number of missed HWC frames divided by
-  // total HWC frames
-  optional double missed_hwc_frame_rate = 5;
-
-  // Calculate the number of missed GPU frames divided by
-  // total GPU frames
-  optional double missed_gpu_frame_rate = 6;
-
-  // Count the number of times SurfaceFlinger needs to invoke GPU
-  // for rendering some layers
-  optional uint32 gpu_invocations = 7;
-
-  // Calculate the average duration of GPU request by SurfaceFlinger
-  // since it enters the FenceMonitor's queue until it gets completed
-  optional double avg_gpu_waiting_dur_ms = 8;
-
-  // Calculate the total duration when there is at least one GPU request
-  // by SurfaceFlinger that is still waiting for GPU to complete the
-  // request.
-  // This also equals to the total duration of
-  // "waiting for GPU completion <fence_num>" in SurfaceFlinger.
-  optional double total_non_empty_gpu_waiting_dur_ms = 9;
-}
-
-// End of protos/perfetto/metrics/android/surfaceflinger.proto
-
-// Begin of protos/perfetto/metrics/android/sysui_cuj_metrics.proto
-
-// Metric that stores frame information and potential jank root causes
-// for a single Android system UI interaction/user journey.
-message AndroidSysUiCujMetrics {
-  // A list of all frames within the SysUi user journey.
-  repeated Frame frames = 1;
-
-  optional string cuj_name = 2;
-  optional int64 cuj_start = 3;
-  optional int64 cuj_dur = 4;
-
-  // Details about the process (uid, version, etc)
-  optional AndroidProcessMetadata process = 5;
-
-  message Frame {
-    // Index of the frame within the single user journey.
-    optional int64 number = 1;
-    optional int64 vsync = 5;
-    optional int64 ts = 2;
-    optional int64 dur = 3;
-
-    // A list of identified potential causes for jank.
-    // Optional.
-    repeated string jank_cause = 4;
-  }
-}
-
-// End of protos/perfetto/metrics/android/sysui_cuj_metrics.proto
-
-// Begin of protos/perfetto/metrics/android/task_names.proto
-
-message AndroidTaskNames {
-  message Process {
-    optional int64 pid = 1;
-
-    // Process name.
-    optional string process_name = 2;
-
-    // Names of all threads for this process.
-    repeated string thread_name = 3;
-
-    // User id under which this process runs.
-    optional int64 uid = 4;
-
-    // Packages matching the process uid.
-    repeated string uid_package_name = 5;
-  }
-
-  repeated Process process = 1;
-}
-
-// End of protos/perfetto/metrics/android/task_names.proto
-
-// Begin of protos/perfetto/metrics/android/trace_quality.proto
-
-// Metric which checks the data in the trace processor tables is "reasonble"
-// (i.e. we would expect to see it from a real device).
-//
-// This is useful to reject traces which may be valid (so no stat would be
-// recorded) but a human would find the trace nonsensical.
-message AndroidTraceQualityMetric {
-  message Failure {
-    // The name of the failed check.
-    optional string name = 1;
-  }
-  repeated Failure failures = 1;
-}
-// End of protos/perfetto/metrics/android/trace_quality.proto
-
-// Begin of protos/perfetto/metrics/android/unsymbolized_frames.proto
-
-message UnsymbolizedFrames {
-  message Frame {
-    optional string module = 1;
-    optional string build_id = 2;
-    optional int64 address = 3;
-
-    // In some cases (Chrome/Webview) the ID that should be used to query
-    // symbols in Google's internal tera-scale symbolization service is !=
-    // `build_id` and requires some mangling.
-    // This field is == 'build_id` for non-chromium cases, and is the breakpad
-    // module ID (with lowercase hex digics) for chromium cases.
-    optional string google_lookup_id = 4;
-  }
-
-  repeated Frame frames = 1;
-}
-
-// End of protos/perfetto/metrics/android/unsymbolized_frames.proto
-
-// Begin of protos/perfetto/metrics/metrics.proto
-
-// Trace processor metadata
-message TraceMetadata {
-  reserved 1;
-  optional int64 trace_duration_ns = 2;
-  optional string trace_uuid = 3;
-  optional string android_build_fingerprint = 4;
-  optional int64 statsd_triggering_subscription_id = 5;
-  optional int64 trace_size_bytes = 6;
-  repeated string trace_trigger = 7;
-  optional string unique_session_name = 8;
-  optional string trace_config_pbtxt = 9;
-  optional int64 sched_duration_ns = 10;
-}
-
-// Stats counters for the trace.
-// Defined in src/trace_processor/storage/stats.h
-message TraceAnalysisStats {
-  enum Severity {
-    SEVERITY_UNKNOWN = 0;
-    SEVERITY_INFO = 1;
-    SEVERITY_DATA_LOSS = 2;
-    SEVERITY_ERROR = 3;
-  }
-
-  enum Source {
-    SOURCE_UNKNOWN = 0;
-    SOURCE_TRACE = 1;
-    SOURCE_ANALYSIS = 2;
-  }
-
-  message Stat {
-    optional string name = 1;
-    optional uint32 idx = 2;
-    optional Severity severity = 3;
-    optional Source source = 4;
-
-    optional int64 count = 5;
-  }
-
-  repeated Stat stat = 1;
-}
-
-// Root message for all Perfetto-based metrics.
-//
-// Next id: 49
-message TraceMetrics {
-  reserved 4, 10, 13, 14, 16, 19;
-
-  // Battery counters metric on Android.
-  optional AndroidBatteryMetric android_batt = 5;
-
-  // CPU usage per trace, process and thread.
-  optional AndroidCpuMetric android_cpu = 6;
-
-  // Memory metrics on Android (owned by the Android Telemetry team).
-  optional AndroidMemoryMetric android_mem = 1;
-
-  // Memory metrics on Android in unaggregated form. (owned by the Android
-  // Telemetry team).
-  // Note: this generates a lot of data so should not be requested unless it
-  // is clear that this data is necessary.
-  optional AndroidMemoryUnaggregatedMetric android_mem_unagg = 11;
-
-  // Package list.
-  optional AndroidPackageList android_package_list = 12;
-
-  // ion buffer memory metrics.
-  optional AndroidIonMetric android_ion = 9;
-
-  // fastrpc subsystem memory metrics.
-  optional AndroidFastrpcMetric android_fastrpc = 31;
-
-  // Statistics about low memory kills.
-  optional AndroidLmkMetric android_lmk = 8;
-
-  // Power Rails metrics on Android.
-  optional AndroidPowerRails android_powrails = 7;
-
-  // Startup metrics on Android (owned by the Android Telemetry team).
-  optional AndroidStartupMetric android_startup = 2;
-
-  // Trace metadata (applicable to all traces).
-  optional TraceMetadata trace_metadata = 3;
-
-  // Trace stats (applicable to all traces).
-  optional TraceAnalysisStats trace_stats = 33;
-
-  // Returns stack frames missing symbols.
-  optional UnsymbolizedFrames unsymbolized_frames = 15;
-
-  // If the trace contains a heap graph, output allocation statistics.
-  optional JavaHeapStats java_heap_stats = 17;
-
-  // If the trace contains a heap graph, output histogram.
-  optional JavaHeapHistogram java_heap_histogram = 21;
-
-  // Metrics used to find potential culprits of low-memory kills.
-  optional AndroidLmkReasonMetric android_lmk_reason = 18;
-
-  optional AndroidHwuiMetric android_hwui_metric = 20;
-
-  optional AndroidDisplayMetrics display_metrics = 22;
-
-  optional AndroidTaskNames android_task_names = 23;
-
-  // Deprecated was AndroidThreadTimeInStateMetric
-  reserved 24;
-
-  // Metric associated with surfaceflinger.
-  optional AndroidSurfaceflingerMetric android_surfaceflinger = 25;
-
-  // GPU metrics on Android.
-  optional AndroidGpuMetric android_gpu = 26;
-
-  // Frame timing and jank root causes for system UI interactions.
-  optional AndroidSysUiCujMetrics android_sysui_cuj = 27;
-
-  // Interaction and frame timings for CUJs (important UI transitions).
-  optional AndroidJankCujMetric android_jank_cuj = 48;
-
-  // Metric associated with hwcomposer.
-  optional AndroidHwcomposerMetrics android_hwcomposer = 28;
-
-  // Deprecated was AndroidJankMetrics;
-  reserved 29;
-
-  // G2D metrics.
-  optional G2dMetrics g2d = 30;
-
-  // Dmabuf heap metrics.
-  optional AndroidDmaHeapMetric android_dma_heap = 32;
-
-  // Metric to verify the quality of the trace.
-  optional AndroidTraceQualityMetric android_trace_quality = 34;
-
-  // Profiler smaps
-  optional ProfilerSmaps profiler_smaps = 35;
-
-  // Multiuser - metrics for switching users.
-  optional AndroidMultiuserMetric android_multiuser = 36;
-
-  // Metrics related to simpleperf tool
-  optional AndroidSimpleperfMetric android_simpleperf = 37;
-
-  // Metrics for the Camera team.
-  optional AndroidCameraMetric android_camera = 38;
-
-  // Metrics for dynamic voltage and frequency scaling.
-  optional AndroidDvfsMetric android_dvfs = 39;
-
-  // Metrics for network performance.
-  optional AndroidNetworkMetric android_netperf = 40;
-
-  // Metrics for the Camera team.
-  // Note: this generates a lot of data so should not be requested unless it
-  // is clear that this data is necessary.
-  optional AndroidCameraUnaggregatedMetric android_camera_unagg = 41;
-
-  // Metrics for RT runtime.
-  optional AndroidRtRuntimeMetric android_rt_runtime = 42;
-
-  // Metrics for IRQ runtime.
-  optional AndroidIrqRuntimeMetric android_irq_runtime = 43;
-
-  // Metrics for the Trusty team.
-  optional AndroidTrustyWorkqueues android_trusty_workqueues = 44;
-
-  // Summary of other concurrent trace recording.
-  optional AndroidOtherTracesMetric android_other_traces = 45;
-
-  // Per-process Binder transaction metrics.
-  optional AndroidBinderMetric android_binder = 46;
-
-  // Metrics for app deadline missed.
-  optional AndroidFrameTimelineMetric android_frame_timeline_metric = 47;
-
-  // Demo extensions.
-  extensions 450 to 499;
-
-  // Vendor extensions.
-  extensions 500 to 1000;
-
-  // Chrome metrics.
-  extensions 1001 to 2000;
-}
-
-// End of protos/perfetto/metrics/metrics.proto
diff --git a/benchmark/benchmark-macro/src/main/proto/trace_processor.proto b/benchmark/benchmark-macro/src/main/proto/trace_processor.proto
deleted file mode 100644
index 774d135..0000000
--- a/benchmark/benchmark-macro/src/main/proto/trace_processor.proto
+++ /dev/null
@@ -1,273 +0,0 @@
-/*
- * Copyright (C) 2018 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;
-
-import "descriptor.proto";
-
-// This file defines the schema for {,un}marshalling arguments and return values
-// when interfacing to the trace processor binary interface.
-
-// The Trace Processor can be used in three modes:
-// 1. Fully native from C++ or directly using trace_processor_shell.
-//    In this case, this file isn't really relevant because no binary
-//    marshalling is involved. Look at include/trace_processor/trace_processor.h
-//    for the public C++ API definition.
-// 2. Using WASM within the HTML ui. In this case these messages are used to
-//    {,un}marshall calls made through the JS<>WASM interop in
-//    src/trace_processor/rpc/wasm_bridge.cc .
-// 3. Using the HTTP+RPC interface, by running trace_processor_shell -D.
-//    In this case these messages are used to {,un}marshall HTTP requests and
-//    response made through src/trace_processor/rpc/httpd.cc .
-
-enum TraceProcessorApiVersion {
-  // This variable has been introduced in v15 and is used to deal with API
-  // mismatches between UI and trace_processor_shell --httpd. Increment this
-  // every time a new feature that the UI depends on is being introduced (e.g.
-  // new tables, new SQL operators, metrics that are required by the UI).
-  // See also StatusResult.api_version (below).
-  TRACE_PROCESSOR_CURRENT_API_VERSION = 5;
-}
-
-// At lowest level, the wire-format of the RPC procol is a linear sequence of
-// TraceProcessorRpc messages on each side of the byte pipe
-// Each message is prefixed by a tag (field = 1, type = length delimited) and a
-// varint encoding its size (this is so the whole stream can also be read /
-// written as if it was a repeated field of TraceProcessorRpcStream).
-
-message TraceProcessorRpcStream {
-  repeated TraceProcessorRpc msg = 1;
-}
-
-message TraceProcessorRpc {
-  // A monotonic counter used only for debugging purposes, to detect if the
-  // underlying stream is missing or duping data. The counter starts at 0 on
-  // each side of the pipe and is incremented on each message.
-  // Do NOT expect that a response has the same |seq| of its corresponding
-  // request: some requests (e.g., a query returning many rows) can yield more
-  // than one response message, bringing the tx and rq seq our of sync.
-  optional int64 seq = 1;
-
-  // This is returned when some unrecoverable error has been detected by the
-  // peer. The typical case is TraceProcessor detecting that the |seq| sequence
-  // is broken (e.g. when having two tabs open with the same --httpd instance).
-  optional string fatal_error = 5;
-
-  enum TraceProcessorMethod {
-    TPM_UNSPECIFIED = 0;
-    TPM_APPEND_TRACE_DATA = 1;
-    TPM_FINALIZE_TRACE_DATA = 2;
-    TPM_QUERY_STREAMING = 3;
-    // Previously: TPM_QUERY_RAW_DEPRECATED
-    reserved 4;
-    reserved "TPM_QUERY_RAW_DEPRECATED";
-    TPM_COMPUTE_METRIC = 5;
-    TPM_GET_METRIC_DESCRIPTORS = 6;
-    TPM_RESTORE_INITIAL_TABLES = 7;
-    TPM_ENABLE_METATRACE = 8;
-    TPM_DISABLE_AND_READ_METATRACE = 9;
-    TPM_GET_STATUS = 10;
-  }
-
-  oneof type {
-    // Client -> TraceProcessor requests.
-    TraceProcessorMethod request = 2;
-
-    // TraceProcessor -> Client responses.
-    TraceProcessorMethod response = 3;
-
-    // This is sent back instead of filling |response| when the client sends a
-    // |request| which is not known by the TraceProcessor service. This can
-    // happen when the client is newer than the service.
-    TraceProcessorMethod invalid_request = 4;
-  }
-
-  // Request/Response arguments.
-  // Not all requests / responses require an argument.
-
-  oneof args {
-    // TraceProcessorMethod request args.
-
-    // For TPM_APPEND_TRACE_DATA.
-    bytes append_trace_data = 101;
-    // For TPM_QUERY_STREAMING.
-    QueryArgs query_args = 103;
-    // For TPM_COMPUTE_METRIC.
-    ComputeMetricArgs compute_metric_args = 105;
-
-    // TraceProcessorMethod response args.
-    // For TPM_APPEND_TRACE_DATA.
-    AppendTraceDataResult append_result = 201;
-    // For TPM_QUERY_STREAMING.
-    QueryResult query_result = 203;
-    // For TPM_COMPUTE_METRIC.
-    ComputeMetricResult metric_result = 205;
-    // For TPM_GET_METRIC_DESCRIPTORS.
-    DescriptorSet metric_descriptors = 206;
-    // For TPM_DISABLE_AND_READ_METATRACE.
-    DisableAndReadMetatraceResult metatrace = 209;
-    // For TPM_GET_STATUS.
-    StatusResult status = 210;
-  }
-
-  // Previously: RawQueryArgs for TPM_QUERY_RAW_DEPRECATED
-  reserved 104;
-  // Previously: RawQueryResult for TPM_QUERY_RAW_DEPRECATED
-  reserved 204;
-}
-
-message AppendTraceDataResult {
-  optional int64 total_bytes_parsed = 1;
-  optional string error = 2;
-}
-
-message QueryArgs {
-  optional string sql_query = 1;
-
-  // Was time_queued_ns
-  reserved 2;
-}
-
-// Output for the /query endpoint.
-// Returns a query result set, grouping cells into batches. Batching allows a
-// more efficient encoding of results, at the same time allowing to return
-// O(M) results in a pipelined fashion, without full-memory buffering.
-// Batches are split when either a large number of cells (~thousands) is reached
-// or the string/blob payload becomes too large (~hundreds of KB).
-// Data is batched in cells, scanning results by row -> column. e.g. if a query
-// returns 3 columns and 2 rows, the cells will be emitted in this order:
-// R0C0, R0C1, R0C2, R1C0, R1C1, R1C2.
-message QueryResult {
-  // This determines the number and names of columns.
-  repeated string column_names = 1;
-
-  // If non-emty the query returned an error. Note that some cells might still
-  // be present, if the error happened while iterating.
-  optional string error = 2;
-
-  // A batch contains an array of cell headers, stating the type of each cell.
-  // The payload of each cell is stored in the corresponding xxx_cells field
-  // below (unless the cell is NULL).
-  // So if |cells| contains: [VARINT, FLOAT64, VARINT, STRING], the results will
-  // be available as:
-  // [varint_cells[0], float64_cells[0], varint_cells[1], string_cells[0]].
-  message CellsBatch {
-    enum CellType {
-      CELL_INVALID = 0;
-      CELL_NULL = 1;
-      CELL_VARINT = 2;
-      CELL_FLOAT64 = 3;
-      CELL_STRING = 4;
-      CELL_BLOB = 5;
-    }
-    repeated CellType cells = 1 [packed = true];
-
-    repeated int64 varint_cells = 2 [packed = true];
-    repeated double float64_cells = 3 [packed = true];
-    repeated bytes blob_cells = 4;
-
-    // The string cells are concatenated in a single field. Each cell is
-    // NUL-terminated. This is because JS incurs into a non-negligible overhead
-    // when decoding strings and one decode + split('\0') is measurably faster
-    // than decoding N strings. See goto.google.com/postmessage-benchmark .
-    optional string string_cells = 5;
-
-    // If true this is the last batch for the query result.
-    optional bool is_last_batch = 6;
-
-    // Padding field. Used only to re-align and fill gaps in the binary format.
-    reserved 7;
-  }
-  repeated CellsBatch batch = 3;
-
-  // The number of statements in the provided SQL.
-  optional uint32 statement_count = 4;
-
-  // The number of statements which produced output rows in the provided SQL.
-  optional uint32 statement_with_output_count = 5;
-}
-
-// Input for the /status endpoint.
-message StatusArgs {}
-
-// Output for the /status endpoint.
-message StatusResult {
-  // If present and not empty, a trace is already loaded already. This happens
-  // when using the HTTP+RPC mode nad passing a trace file to the shell, via
-  // trace_processor_shell -D trace_file.pftrace .
-  optional string loaded_trace_name = 1;
-
-  // Typically something like "v11.0.123", but could be just "v11" or "unknown",
-  // for binaries built from Bazel or other build configurations. This is for
-  // human presentation only, don't attempt to parse and reason on it.
-  optional string human_readable_version = 2;
-
-  // The API version is incremented every time a change that the UI depends
-  // on is introduced (e.g. adding a new table that the UI queries).
-  optional int32 api_version = 3;
-}
-
-// Input for the /compute_metric endpoint.
-message ComputeMetricArgs {
-  enum ResultFormat {
-    BINARY_PROTOBUF = 0;
-    TEXTPROTO = 1;
-  }
-  repeated string metric_names = 1;
-  optional ResultFormat format = 2;
-}
-
-// Output for the /compute_metric endpoint.
-message ComputeMetricResult {
-  oneof result {
-    // This is meant to contain a perfetto.protos.TraceMetrics. We're using
-    // bytes instead of the actual type because we do not want to generate
-    // protozero code for the metrics protos. We always encode/decode metrics
-    // using a reflection based mechanism that does not require the compiled C++
-    // code. This allows us to read in new protos at runtime.
-    bytes metrics = 1;
-
-    // A perfetto.protos.TraceMetrics formatted as prototext.
-    string metrics_as_prototext = 3;
-  }
-
-  optional string error = 2;
-}
-
-// Input for the /enable_metatrace endpoint.
-message EnableMetatraceArgs {}
-
-// Output for the /enable_metatrace endpoint.
-message EnableMetatraceResult {}
-
-// Input for the /disable_and_read_metatrace endpoint.
-message DisableAndReadMetatraceArgs {}
-
-// Output for the /disable_and_read_metatrace endpoint.
-message DisableAndReadMetatraceResult {
-  // Bytes of perfetto.protos.Trace message. Stored as bytes
-  // to avoid adding a dependency on trace.proto.
-  optional bytes metatrace = 1;
-  optional string error = 2;
-}
-
-// Convenience wrapper for multiple descriptors, similar to FileDescriptorSet
-// in descriptor.proto.
-message DescriptorSet {
-  repeated DescriptorProto descriptors = 1;
-}
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 4bf7b23..1445138 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -60,7 +60,7 @@
 spdxGradlePlugin = "0.6.0"
 sqldelight = "1.3.0"
 retrofit = "2.7.2"
-wire = "4.7.0"
+wire = "4.9.7"
 
 [libraries]
 agpTestingPlatformCoreProto =  { module = "com.google.testing.platform:core-proto", version = "0.0.8-alpha08" }
diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml
index 4a282b4..d058dab 100644
--- a/gradle/verification-metadata.xml
+++ b/gradle/verification-metadata.xml
@@ -471,7 +471,7 @@
          </trusted-key>
          <trusted-key id="FA7929F83AD44C4590F6CC6815C71C0A4E0B8EDD" group="net.java.dev.jna"/>
          <trusted-key id="FAABC3738B1F58DA2D776FA2EB380DC13C39F675" group="com.intellij"/>
-         <trusted-key id="FB35C8D02B4724DADA23DE0AFD116C1969FCCFF3" group="org.json" name="json" />
+         <trusted-key id="FB35C8D02B4724DADA23DE0AFD116C1969FCCFF3" group="org.json" name="json"/>
          <trusted-key id="FC411CD3CB7DCB0ABC9801058118B3BCDB1A5000" group="jakarta.xml.bind"/>
          <trusted-key id="FF460ACF3266FDCE8EB8FE3BA797295E9D87BDD0" group="androidx.build.gradle.gcpbuildcache" name="gcpbuildcache"/>
          <trusted-key id="FF6E2C001948C5F2F38B0CC385911F425EC61B51">