Add support for 16KB page size.

Test: Existing Benchmark, Trace Processor tests.
Bug: 427734651
Change-Id: I76ef4252811683d4901a30d058708e9b13476b68
diff --git a/generate_perfetto_binaries.py b/generate_perfetto_binaries.py
index a2c2eca..46a14eb 100755
--- a/generate_perfetto_binaries.py
+++ b/generate_perfetto_binaries.py
@@ -34,7 +34,8 @@
 ANDROID_ARGS = (
     'target_os="android"',
     'monolithic_binaries=true',
-    'is_debug=false'
+    'is_debug=false',
+    'extra_target_ldflags="-Wl,-z,max-page-size=16384"',
 )
 
 ANDROID_BUILD_TARGETS = (
@@ -98,7 +99,7 @@
   ### Binaries
   for arch, arch_tag in ARCH_LIST:
     config_name ='android_%s' % (arch)
-    gn_args = ANDROID_ARGS + ('target_cpu="%s"' % arch,)
+    gn_args = ANDROID_ARGS + (f'target_cpu="{arch}"',)
 
     print('\n\033[32mConfiguring %-20s[%s]\033[0m' % (config_name, ','.join(gn_args)))
     out_dir = os.path.join(perfetto_dir, 'out', config_name)
diff --git a/protos/perfetto/metrics/perfetto_merged_metrics.proto b/protos/perfetto/metrics/perfetto_merged_metrics.proto
index 40c64e2..eef7949 100644
--- a/protos/perfetto/metrics/perfetto_merged_metrics.proto
+++ b/protos/perfetto/metrics/perfetto_merged_metrics.proto
@@ -55,13 +55,14 @@
 
 // Begin of protos/perfetto/metrics/android/android_anomaly_metric.proto
 
-// Detects outlier scenarios in different Android Systems in a trace. For now,
-// this just detects high binder transaction rates. In the future, there could
-// be others like garbage_collection, CPU, broadcasts, etc.
+// Detects outlier scenarios in different Android Systems in a trace. For now, this just
+// detects high binder transaction rates. In the future, there could be others
+// like garbage_collection, CPU, broadcasts, etc.
 message AndroidAnomalyMetric {
+
   enum Unit {
-    UNIT_UNSPECIFIED = 0;
-    COUNT_PER_SECOND = 1;
+      UNIT_UNSPECIFIED = 0;
+      COUNT_PER_SECOND = 1;
   }
 
   // For anomalies related to a particular process.
@@ -73,13 +74,11 @@
   }
 
   // Binder subsystem outliers with the following aggegations:
-  // 1. Max incoming binder transaction count from each process over a one
-  // second sliding window.
-  // 2. Max outgoing binder transaction count from each process over a one
-  // second sliding window.
+  // 1. Max incoming binder transaction count from each process over a one second sliding window.
+  // 2. Max outgoing binder transaction count from each process over a one second sliding window.
   message Binder {
-    repeated ProcessAnomaly max_incoming_process_count_per_second = 1;
-    repeated ProcessAnomaly max_outgoing_process_count_per_second = 2;
+      repeated ProcessAnomaly max_incoming_process_count_per_second = 1;
+      repeated ProcessAnomaly max_outgoing_process_count_per_second = 2;
   }
 
   optional Binder binder = 1;
@@ -91,26 +90,26 @@
 
 // Blocking call on the main thread.
 message AndroidBlockingCall {
-  // Name of the blocking call
-  optional string name = 1;
-  // Number of times it happened within the CUJ
-  optional int64 cnt = 2;
-  // Total duration within the CUJ
-  optional int64 total_dur_ms = 3;
-  // Maximal duration within the CUJ
-  optional int64 max_dur_ms = 4;
-  // Minimal duration within the CUJ
-  optional int64 min_dur_ms = 5;
-  // Total duration within the CUJ in nanoseconds
-  optional int64 total_dur_ns = 6;
-  // Maximal duration within the CUJ in nanoseconds
-  optional int64 max_dur_ns = 7;
-  // Minimal duration within the CUJ in nanoseconds
-  optional int64 min_dur_ns = 8;
-  // Avg duration within the CUJ
-  optional int64 avg_dur_ms = 9;
-  // Avg duration within the CUJ in nanoseconds
-  optional int64 avg_dur_ns = 10;
+    // Name of the blocking call
+    optional string name = 1;
+    // Number of times it happened within the CUJ
+    optional int64 cnt = 2;
+    // Total duration within the CUJ
+    optional int64 total_dur_ms = 3;
+    // Maximal duration within the CUJ
+    optional int64 max_dur_ms = 4;
+    // Minimal duration within the CUJ
+    optional int64 min_dur_ms = 5;
+    // Total duration within the CUJ in nanoseconds
+    optional int64 total_dur_ns = 6;
+    // Maximal duration within the CUJ in nanoseconds
+    optional int64 max_dur_ns = 7;
+    // Minimal duration within the CUJ in nanoseconds
+    optional int64 min_dur_ns = 8;
+    // Avg duration within the CUJ
+    optional int64 avg_dur_ms = 9;
+    // Avg duration within the CUJ in nanoseconds
+    optional int64 avg_dur_ns = 10;
 }
 
 // End of protos/perfetto/metrics/android/android_blocking_call.proto
@@ -187,32 +186,32 @@
 
 // Blocking call per frame on the main thread.
 message AndroidBlockingCallPerFrame {
-  // Name of the blocking call
-  optional string name = 1;
-  // Maximal duration within a frame.
-  optional int64 max_dur_per_frame_ms = 2;
-  // Maximal duration within a frame in nanoseconds
-  optional int64 max_dur_per_frame_ns = 3;
-  // Mean duration within the CUJ
-  optional int64 mean_dur_per_frame_ms = 4;
-  // Mean duration within the CUJ in nanoseconds
-  optional int64 mean_dur_per_frame_ns = 5;
-  // Max count in a frame
-  optional int64 max_cnt_per_frame = 6;
-  // Mean count in a frame
-  optional double mean_cnt_per_frame = 7;
+    // Name of the blocking call
+    optional string name = 1;
+    // Maximal duration within a frame.
+    optional int64 max_dur_per_frame_ms = 2;
+    // Maximal duration within a frame in nanoseconds
+    optional int64 max_dur_per_frame_ns = 3;
+    // Mean duration within the CUJ
+    optional int64 mean_dur_per_frame_ms = 4;
+    // Mean duration within the CUJ in nanoseconds
+    optional int64 mean_dur_per_frame_ns = 5;
+    // Max count in a frame
+    optional int64 max_cnt_per_frame = 6;
+    // Mean count in a frame
+    optional double mean_cnt_per_frame = 7;
 }
 
 // End of protos/perfetto/metrics/android/android_blocking_call_per_frame.proto
 
 // Begin of protos/perfetto/metrics/android/android_blocking_calls_cuj_per_frame_metric.proto
 
-// Blocking calls per frame inside Android jank CUJs. Shows count and duration
-// for each.
+// Blocking calls per frame inside Android jank CUJs. Shows count and duration for each.
 message AndroidCujBlockingCallsPerFrameMetric {
   repeated Cuj cuj = 1;
 
   message Cuj {
+
     // Name of the CUJ, extracted from the CUJ jank trace marker.
     // For example SHADE_EXPAND_COLLAPSE from J<SHADE_EXPAND_COLLAPSE>.
     optional string name = 1;
@@ -321,7 +320,7 @@
     optional double avg_duration = 2;
     optional int64 max_duration = 3;
     optional int64 sum_duration = 4;
-  }
+}
   optional ProcessStartAggregation full_trace_process_start_aggregation = 6;
   optional ProcessStartAggregation post_boot_process_start_aggregation = 7;
   optional GarbageCollectionAggregation full_trace_gc_aggregation = 8;
@@ -337,13 +336,11 @@
   repeated OomAdjBucketDurationAggregation
       post_boot_oom_adj_bucket_duration_agg_by_process = 14;
   repeated OomAdjDurationAggregation post_boot_oom_adj_duration_agg = 15;
-  repeated BroadcastCountAggregation
-      post_boot_broadcast_process_count_by_intent = 16;
+  repeated BroadcastCountAggregation post_boot_broadcast_process_count_by_intent = 16;
   repeated BroadcastCountAggregation post_boot_broadcast_count_by_process = 17;
-  repeated BroadcastDurationAggregation
-      post_boot_brodcast_duration_agg_by_intent = 18;
-  repeated BroadcastDurationAggregation
-      post_boot_brodcast_duration_agg_by_process = 19;
+  repeated BroadcastDurationAggregation post_boot_brodcast_duration_agg_by_intent = 18;
+  repeated BroadcastDurationAggregation post_boot_brodcast_duration_agg_by_process = 19;
+
 }
 
 // End of protos/perfetto/metrics/android/android_boot.proto
@@ -439,26 +436,26 @@
 
 // Begin of protos/perfetto/metrics/android/android_broadcasts_metric.proto
 
-// Provides aggregated information about broadcasts
-message AndroidBroadcastsMetric {
-  // Next id: 5
-  // Stats for Broadcasts aggregated with count.
-  message BroadcastCountAggregation {
-    optional string name = 1;
-    optional int64 count = 2;
+  // Provides aggregated information about broadcasts
+  message AndroidBroadcastsMetric {
+    // Next id: 5
+    // Stats for Broadcasts aggregated with count.
+    message BroadcastCountAggregation {
+      optional string name = 1;
+      optional int64 count = 2;
+    }
+    // Stats for Broadcasts aggregated with duration.
+    message BroadcastDurationAggregation {
+      optional string name = 1;
+      optional double avg_duration = 2;
+      optional int64 max_duration = 3;
+      optional int64 sum_duration = 4;
+    }
+    repeated BroadcastCountAggregation process_count_by_intent = 1;
+    repeated BroadcastCountAggregation broadcast_count_by_process = 2;
+    repeated BroadcastDurationAggregation brodcast_duration_agg_by_intent = 3;
+    repeated BroadcastDurationAggregation brodcast_duration_agg_by_process = 4;
   }
-  // Stats for Broadcasts aggregated with duration.
-  message BroadcastDurationAggregation {
-    optional string name = 1;
-    optional double avg_duration = 2;
-    optional int64 max_duration = 3;
-    optional int64 sum_duration = 4;
-  }
-  repeated BroadcastCountAggregation process_count_by_intent = 1;
-  repeated BroadcastCountAggregation broadcast_count_by_process = 2;
-  repeated BroadcastDurationAggregation brodcast_duration_agg_by_intent = 3;
-  repeated BroadcastDurationAggregation brodcast_duration_agg_by_process = 4;
-}
 
 // End of protos/perfetto/metrics/android/android_broadcasts_metric.proto
 
@@ -472,12 +469,10 @@
     // The count of frames with this jank type
     optional int64 total_count = 2;
 
-    // The count of frames with this jank type and present type =
-    // PRESENT_UNSPECIFIED
+    // The count of frames with this jank type and present type = PRESENT_UNSPECIFIED
     optional int64 present_unspecified_count = 3;
 
-    // The count of frames with this jank type and present type =
-    // PRESENT_ON_TIME
+    // The count of frames with this jank type and present type = PRESENT_ON_TIME
     optional int64 present_on_time_count = 4;
 
     // The count of frames with this jank type and present type = PRESENT_LATE
@@ -486,12 +481,10 @@
     // The count of frames with this jank type and present type = PRESENT_EARLY
     optional int64 present_early_count = 6;
 
-    // The count of frames with this jank type and present type =
-    // PRESENT_DROPPED
+    // The count of frames with this jank type and present type = PRESENT_DROPPED
     optional int64 present_dropped_count = 7;
 
-    // The count of frames with this jank type and present type =
-    // PRESENT_UNKNOWN
+    // The count of frames with this jank type and present type = PRESENT_UNKNOWN
     optional int64 present_unknown_count = 8;
   }
 
@@ -533,6 +526,7 @@
   reserved 1;
 }
 
+
 // End of protos/perfetto/metrics/android/android_frame_timeline_metric.proto
 
 // Begin of protos/perfetto/metrics/android/android_garbage_collection_stats.proto
@@ -676,8 +670,7 @@
 
 // Begin of protos/perfetto/metrics/android/android_sysui_notifications_blocking_calls_metric.proto
 
-// Blocking calls inside System UI Notifications. Shows count and total duration
-// for each.
+// Blocking calls inside System UI Notifications. Shows count and total duration for each.
 message AndroidSysUINotificationsBlockingCallsMetric {
   repeated AndroidBlockingCall blocking_calls = 1;
 }
@@ -686,7 +679,7 @@
 
 // Begin of protos/perfetto/metrics/android/anr_metric.proto
 
-message AndroidAnrMetric {
+ message AndroidAnrMetric {
   repeated Anr anr = 1;
 
   // Next id: 12
@@ -1007,6 +1000,7 @@
 // idea about performance and cpu usage when using codec
 // framework
 message AndroidCodecMetrics {
+
   // profile details in messages
   message Detail {
     // was thread_name
@@ -1122,8 +1116,8 @@
   optional uint32 duplicate_frames_logged = 2;
 
   // Stat that reports the number of dpu underrrun occurs count.
-  // Deprecated as of 04/2025
-  optional uint32 total_dpu_underrun_count = 3 [deprecated = true];
+  optional uint32 total_dpu_underrun_count = 3;
+
 
   message RefreshRateStat {
     // The refresh rate value (the number of frames per second)
@@ -1155,24 +1149,6 @@
   }
 
   optional UpdatePowerState update_power_state = 6;
-
-  message DpuUnderrunDetail {
-    // display_id
-    optional string name = 1;
-
-    // The number of dpu underrun occurs.
-    optional uint32 dpu_underrun_count = 2;
-  }
-
-  message DpuState {
-    // Stat that reports the number of dpu underrrun occurs count.
-    optional uint32 total_dpu_underrun_count = 1;
-
-    // Dpu underun count for differnt display_id.
-    repeated DpuUnderrunDetail dpu_underrun_detail = 2;
-  }
-
-  optional DpuState dpu_state = 7;
 }
 
 // End of protos/perfetto/metrics/android/display_metrics.proto
@@ -1188,17 +1164,17 @@
     optional int32 delta_bytes = 2;
   }
 
-  optional double avg_size_bytes = 1;
-  optional double min_size_bytes = 2;
-  optional double max_size_bytes = 3;
+    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;
+    // Total allocation size.
+    // Essentially the sum of positive allocs.
+    optional double total_alloc_size_bytes = 4;
 
-  // Total delta size (bytes allocated but not freed during the trace)
-  optional int32 total_delta_bytes = 5;
-  repeated ProcessStats process_stats = 6;
+    // Total delta size (bytes allocated but not freed during the trace)
+    optional int32 total_delta_bytes = 5;
+    repeated ProcessStats process_stats = 6;
 }
 
 // End of protos/perfetto/metrics/android/dma_heap_metric.proto
@@ -1206,12 +1182,12 @@
 // 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
+    // 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
@@ -1348,28 +1324,24 @@
 // Begin of protos/perfetto/metrics/android/hwcomposer.proto
 
 message AndroidHwcomposerMetrics {
-  // Counts the number of composition total layers in the trace. (non-weighted
-  // average)
+  // 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)
+  // 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)
+  // 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)
+  // 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 the number of composition rounded corner decoration layers in the
-  // trace. (non-weighted average)
+  // Counts the number of composition rounded corner decoration layers in the trace.
+  // (non-weighted average)
   optional double composition_rcd_layers = 15;
 
   // Counts how many times validateDisplay is skipped.
@@ -1378,8 +1350,8 @@
   // 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.
+  // 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.
@@ -1421,28 +1393,24 @@
     // Display ID in HWC
     optional string display_id = 1;
 
-    // Counts the number of composition total layers in the trace. (non-weighted
-    // average)
+    // Counts the number of composition total layers in the trace. (non-weighted average)
     optional double composition_total_layers = 2;
 
-    // Counts the number of composition dpu layers in the trace. (non-weighted
-    // average)
+    // Counts the number of composition dpu layers in the trace. (non-weighted average)
     optional double composition_dpu_layers = 3;
 
-    // Counts the number of composition gpu layers in the trace. (non-weighted
-    // average)
+    // Counts the number of composition gpu layers in the trace. (non-weighted average)
     optional double composition_gpu_layers = 4;
 
-    // Counts the number of composition dpu cached layers in the trace.
-    // (non-weighted average)
+    // Counts the number of composition dpu cached layers in the trace. (non-weighted average)
     optional double composition_dpu_cached_layers = 5;
 
-    // Counts the number of composition surfaceflinger cached layers in the
-    // trace. (non-weighted average)
+    // Counts the number of composition surfaceflinger cached layers in the trace.
+    // (non-weighted average)
     optional double composition_sf_cached_layers = 6;
 
-    // Counts the number of composition rounded corner decoration layers in the
-    // trace. (non-weighted average)
+    // Counts the number of composition rounded corner decoration layers in the trace.
+    // (non-weighted average)
     optional double composition_rcd_layers = 7;
 
     // Counts how many times validateDisplay is skipped.
@@ -1451,12 +1419,11 @@
     // Counts how many times validateDisplay cannot be skipped.
     optional int32 unskipped_validation_count = 9;
 
-    // Counts how many times validateDisplay is already separated from
-    // presentDisplay since the beginning.
+    // Counts how many times validateDisplay is already separated from presentDisplay
+    // since the beginning.
     optional int32 separated_validation_count = 10;
 
-    // Counts how many unhandled validation cases which might be caused by
-    // errors.
+    // Counts how many unhandled validation cases which might be caused by errors.
     optional int32 unknown_validation_count = 11;
 
     // the average of overall hwcomposer execution time.
@@ -1487,53 +1454,52 @@
   // 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.
+  // 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.
+  // 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.
+  // 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.
+  // 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.
+  // 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.
+  // 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.
+  // 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.
+  // 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;
@@ -1543,8 +1509,7 @@
   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.
+  // 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;
@@ -1554,8 +1519,7 @@
   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.
+  // 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;
@@ -1607,17 +1571,17 @@
 // Note: this generates a lot of data so should not be requested unless it
 // is clear that this data is necessary.
 message AndroidIoUnaggregated {
-  // Next id: 2
-  message F2fsWriteUnaggreagatedStat {
-    optional uint32 tid = 1;
-    optional string thread_name = 2;
-    optional uint32 pid = 3;
-    optional string process_name = 4;
-    optional int64 ino = 5;
-    optional int64 dev = 6;
-  }
-  // F2fs write stats which are grouped by thread and inode.
-  repeated F2fsWriteUnaggreagatedStat f2fs_write_unaggregated_stats = 1;
+    // Next id: 2
+    message F2fsWriteUnaggreagatedStat {
+      optional uint32 tid = 1;
+      optional string thread_name = 2;
+      optional uint32 pid = 3;
+      optional string process_name = 4;
+      optional int64 ino = 5;
+      optional int64 dev = 6;
+    }
+    // F2fs write stats which are grouped by thread and inode.
+    repeated F2fsWriteUnaggreagatedStat f2fs_write_unaggregated_stats = 1;
 }
 // End of protos/perfetto/metrics/android/io_unagg_metric.proto
 
@@ -1659,7 +1623,7 @@
     // over threshold count
     optional int64 over_threshold_count = 2;
     // anomaly ratio (over threshold count / total count)
-    optional double anomaly_ratio = 3;
+    optional double anomaly_ratio= 3;
   }
   message IrqRuntimeMetric {
     // max runtime of IRQ tasks
@@ -1677,6 +1641,7 @@
   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
@@ -2066,8 +2031,8 @@
 
 // Begin of protos/perfetto/metrics/android/monitor_contention_agg_metric.proto
 
-// This metric provides aggregated information about monitor contention graph
-// in a trace
+ // This metric provides aggregated information about monitor contention graph
+ // in a trace
 message AndroidMonitorContentionAggMetric {
   // Next id: 2
   // Stats for Monitor contention aggregated by process.
@@ -2145,6 +2110,7 @@
 
 // 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).
@@ -2156,15 +2122,12 @@
       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.
+      // 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.
+      // 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).
+      // 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;
@@ -2421,6 +2384,7 @@
   repeated RtSlice longest_rt_slices = 3;
 }
 
+
 // End of protos/perfetto/metrics/android/rt_runtime_metric.proto
 
 // Begin of protos/perfetto/metrics/android/simpleperf.proto
@@ -2831,7 +2795,7 @@
   // Information for the ThreadSections
   message TraceThreadSectionInfo {
     repeated TraceThreadSection thread_section = 1;
-    optional int64 start_timestamp = 2;
+    optional int64 start_timestamp  = 2;
     optional int64 end_timestamp = 3;
   }
 
@@ -3033,10 +2997,8 @@
 // Shows count, average duration, and max duration for each.
 message SysuiNotifShadeListBuilderMetric {
   optional SysUiSlicePerformanceStatisticalData all_slices_performance = 1;
-  optional SysUiSlicePerformanceStatisticalData
-      slices_with_inflation_performance = 2;
-  optional SysUiSlicePerformanceStatisticalData
-      slices_with_modification_performance = 3;
+  optional SysUiSlicePerformanceStatisticalData slices_with_inflation_performance = 2;
+  optional SysUiSlicePerformanceStatisticalData slices_with_modification_performance = 3;
 
   // Data row for a single slice
   message SliceDuration {
@@ -3158,7 +3120,6 @@
   optional string period_name = 2;
   optional int64 period_dur = 3;
   optional AndroidWattsonCpuSubsystemEstimate cpu_subsystem = 4;
-  optional AndroidWattsonGpuSubsystemEstimate gpu_subsystem = 5;
 }
 
 message AndroidWattsonCpuSubsystemEstimate {
@@ -3199,11 +3160,6 @@
   optional float estimated_mws = 2;
 }
 
-message AndroidWattsonGpuSubsystemEstimate {
-  optional float estimated_mw = 1;
-  optional float estimated_mws = 2;
-}
-
 // End of protos/perfetto/metrics/android/wattson_in_time_period.proto
 
 // Begin of protos/perfetto/metrics/android/wattson_tasks_attribution.proto
@@ -3568,9 +3524,6 @@
   // WebView metrics.
   extensions 2001 to 2500;
 
-  // AndroidXR metrics.
-  extensions 2501 to 3000;
-
   // DO NOT ADD ANY OTHER FIELDS HERE. ADDITION OF NEW v1 METRICS IS NO LONGER
   // ALLOWED. PLEASE USE METRICS v2 INSTEAD.
 }
diff --git a/protos/perfetto/perfetto_sql/structured_query.proto b/protos/perfetto/perfetto_sql/structured_query.proto
index 995740e..13e399e 100644
--- a/protos/perfetto/perfetto_sql/structured_query.proto
+++ b/protos/perfetto/perfetto_sql/structured_query.proto
@@ -90,22 +90,17 @@
   message Sql {
     // The SQL string. Required.
     //
-    // `sql` can contain multiple, semi-colon separated statements but must
-    // adhere to the following principles:
-    // 1) Only the final statement can return results (i.e. be a `SELECT`
-    // statement): every other statement must be a statement returning no output
-    // (e.g. INCLUDE PERFETTO MODULE, CREATE PERFETTO TABLE etc.).
-    // 2) The final statement *must* be a valid `SELECT` statement returning
-    // results with at least one column.
+    // Note: this string is currently required to be a single well-formed select
+    // statement. This means you cannot use CREATE PERFETTO TABLE/VIEW but *can*
+    // use WITH clauses, UNION and INTERSECT. This restriction may be dropped
+    // in the future.
     optional string sql = 1;
 
     // The name of columns which will be returned by the SQL. Required.
     repeated string column_names = 2;
 
-    // DEPRECATED, as `sql` field supports multi-statement queries.
-    //
-    // SQL string that has to be run before running the SQL.
-    // Supports multi statement queries. Optional.
+    // SQL string that has to be run before running the SQL. Supports multi
+    // statement queries. Optional.
     optional string preamble = 3;
   }
 
diff --git a/protos/perfetto/trace_processor/trace_processor.proto b/protos/perfetto/trace_processor/trace_processor.proto
index b7bfd78..914d4e0 100644
--- a/protos/perfetto/trace_processor/trace_processor.proto
+++ b/protos/perfetto/trace_processor/trace_processor.proto
@@ -21,7 +21,6 @@
 import "protos/perfetto/common/descriptor.proto";
 import "protos/perfetto/trace_processor/metatrace_categories.proto";
 import "protos/perfetto/perfetto_sql/structured_query.proto";
-import "protos/perfetto/trace_summary/file.proto";
 
 // This file defines the schema for {,un}marshalling arguments and return values
 // when interfacing to the trace processor binary interface.
@@ -109,7 +108,6 @@
     TPM_RESET_TRACE_PROCESSOR = 11;
     TPM_REGISTER_SQL_PACKAGE = 13;
     TPM_ANALYZE_STRUCTURED_QUERY = 14;
-    TPM_SUMMARIZE_TRACE = 15;
   }
 
   oneof type {
@@ -145,8 +143,6 @@
     RegisterSqlPackageArgs register_sql_package_args = 108;
     // For TPM_ANALYZE_STRUCTURED_QUERY.
     AnalyzeStructuredQueryArgs analyze_structured_query_args = 109;
-    // For TPM_SUMMARIZE_TRACE.
-    TraceSummaryArgs trace_summary_args = 110;
 
     // TraceProcessorMethod response args.
     // For TPM_APPEND_TRACE_DATA.
@@ -167,8 +163,6 @@
     FinalizeDataResult finalize_data_result = 212;
     // For TPM_ANALYZE_STRUCTURED_QUERY.
     AnalyzeStructuredQueryResult analyze_structured_query_result = 213;
-    // For TPM_SUMMARIZE_TRACE.
-    TraceSummaryResult trace_summary_result = 214;
   }
 
   // Previously: RawQueryArgs for TPM_QUERY_RAW_DEPRECATED
@@ -390,27 +384,3 @@
   optional string error = 1;
   repeated StructuredQueryResult results = 2;
 }
-
-message TraceSummaryArgs {
-  message ComputationSpec {
-    repeated string metric_ids = 1;
-    optional bool run_all_metrics = 3;
-    optional string metadata_query_id = 2;
-  }
-  enum Format {
-    BINARY_PROTOBUF = 0;
-    TEXTPROTO = 1;
-  }
-  repeated TraceSummarySpec proto_specs = 1;
-  repeated string textproto_specs = 2;
-  optional ComputationSpec computation_spec = 3;
-  optional Format output_format = 4;
-}
-
-message TraceSummaryResult {
-  oneof summary {
-    bytes proto_summary = 1;
-    string textproto_summary = 2;
-  }
-  optional string error = 3;
-}
diff --git a/protos/perfetto/trace_summary/v2_metric.proto b/protos/perfetto/trace_summary/v2_metric.proto
index 1167b14..87b7d51 100644
--- a/protos/perfetto/trace_summary/v2_metric.proto
+++ b/protos/perfetto/trace_summary/v2_metric.proto
@@ -67,7 +67,6 @@
 // ```
 // id: "memory_per_process_and_cuj"
 // dimensions: "process_name"
-// dimensions: "cuj_name"
 // value: "avg_rss_and_swap"
 // query: {
 //   interval_intersect: {
@@ -149,25 +148,9 @@
   // Required.
   optional string id = 1;
 
-  enum DimensionType {
-    DIMENSION_TYPE_UNSPECIFIED = 0;
-    STRING = 1;
-    INT64 = 2;
-    DOUBLE = 3;
-  }
-
-  message DimensionSpec {
-    optional string name = 1;
-    // The type of the dimension. Must be specified.
-    optional DimensionType type = 2;
-  }
   // The columns from `query` which will act as the "dimensions" for the metric.
   // For a given set of dimensions, there must be exactly *one* value emitted.
   // Optional.
-  // If the `dimensions_specs` field is defined, then the type of each
-  // dimension must be specified.
-  repeated DimensionSpec dimensions_specs = 5;
-  // Either dimensions or dimensions_specs should be defined, but not both.
   repeated string dimensions = 2;
 
   // The column from `query` which will act as the "value" for the metric. This
@@ -247,9 +230,6 @@
     // The dimensions that `value` should be associated with. The order of
     // dimensions matches precisely the order of dimension names given by the
     // `spec`.
-    // The type of the dimension is infered from the sql column type.
-    // In case dimensionSpec is specified, the dimension type must match the
-    // type specified in the spec.
     message Dimension {
       message Null {}
       oneof value_oneof {
diff --git a/trace_processor_shell/trace_processor_shell_aarch64 b/trace_processor_shell/trace_processor_shell_aarch64
index f5eff98..b0f4272 100644
--- a/trace_processor_shell/trace_processor_shell_aarch64
+++ b/trace_processor_shell/trace_processor_shell_aarch64
Binary files differ
diff --git a/trace_processor_shell/trace_processor_shell_arm b/trace_processor_shell/trace_processor_shell_arm
index 13d5ee7..18e434d 100644
--- a/trace_processor_shell/trace_processor_shell_arm
+++ b/trace_processor_shell/trace_processor_shell_arm
Binary files differ
diff --git a/trace_processor_shell/trace_processor_shell_x86 b/trace_processor_shell/trace_processor_shell_x86
index 63527b5..fde11d5 100644
--- a/trace_processor_shell/trace_processor_shell_x86
+++ b/trace_processor_shell/trace_processor_shell_x86
Binary files differ
diff --git a/trace_processor_shell/trace_processor_shell_x86_64 b/trace_processor_shell/trace_processor_shell_x86_64
index 56f3889..33504b9 100644
--- a/trace_processor_shell/trace_processor_shell_x86_64
+++ b/trace_processor_shell/trace_processor_shell_x86_64
Binary files differ
diff --git a/tracebox/tracebox_aarch64 b/tracebox/tracebox_aarch64
index 40f5d83..f7e26a3 100644
--- a/tracebox/tracebox_aarch64
+++ b/tracebox/tracebox_aarch64
Binary files differ
diff --git a/tracebox/tracebox_arm b/tracebox/tracebox_arm
index 90c0bf0..41a50e4 100644
--- a/tracebox/tracebox_arm
+++ b/tracebox/tracebox_arm
Binary files differ
diff --git a/tracebox/tracebox_x86 b/tracebox/tracebox_x86
index c291099..4542836 100644
--- a/tracebox/tracebox_x86
+++ b/tracebox/tracebox_x86
Binary files differ
diff --git a/tracebox/tracebox_x86_64 b/tracebox/tracebox_x86_64
index 018a924..a1f703c 100644
--- a/tracebox/tracebox_x86_64
+++ b/tracebox/tracebox_x86_64
Binary files differ