Merge "Add Android Statsd Logging to "Record new trace" UI." into main
diff --git a/Android.bp b/Android.bp
index 5cdc9e7..0c31cbd 100644
--- a/Android.bp
+++ b/Android.bp
@@ -13523,6 +13523,7 @@
         "src/trace_processor/perfetto_sql/stdlib/android/app_process_starts.sql",
         "src/trace_processor/perfetto_sql/stdlib/android/auto/multiuser.sql",
         "src/trace_processor/perfetto_sql/stdlib/android/battery.sql",
+        "src/trace_processor/perfetto_sql/stdlib/android/battery/charging_states.sql",
         "src/trace_processor/perfetto_sql/stdlib/android/battery_stats.sql",
         "src/trace_processor/perfetto_sql/stdlib/android/binder.sql",
         "src/trace_processor/perfetto_sql/stdlib/android/binder_breakdown.sql",
@@ -13544,6 +13545,7 @@
         "src/trace_processor/perfetto_sql/stdlib/android/input.sql",
         "src/trace_processor/perfetto_sql/stdlib/android/io.sql",
         "src/trace_processor/perfetto_sql/stdlib/android/job_scheduler.sql",
+        "src/trace_processor/perfetto_sql/stdlib/android/job_scheduler_states.sql",
         "src/trace_processor/perfetto_sql/stdlib/android/memory/dmabuf.sql",
         "src/trace_processor/perfetto_sql/stdlib/android/memory/heap_graph/class_summary_tree.sql",
         "src/trace_processor/perfetto_sql/stdlib/android/memory/heap_graph/class_tree.sql",
diff --git a/BUILD b/BUILD
index 9bbfaed..30c3226 100644
--- a/BUILD
+++ b/BUILD
@@ -2719,6 +2719,14 @@
     ],
 )
 
+# GN target: //src/trace_processor/perfetto_sql/stdlib/android/battery:battery
+perfetto_filegroup(
+    name = "src_trace_processor_perfetto_sql_stdlib_android_battery_battery",
+    srcs = [
+        "src/trace_processor/perfetto_sql/stdlib/android/battery/charging_states.sql",
+    ],
+)
+
 # GN target: //src/trace_processor/perfetto_sql/stdlib/android/cpu:cpu
 perfetto_filegroup(
     name = "src_trace_processor_perfetto_sql_stdlib_android_cpu_cpu",
@@ -2824,6 +2832,7 @@
         "src/trace_processor/perfetto_sql/stdlib/android/input.sql",
         "src/trace_processor/perfetto_sql/stdlib/android/io.sql",
         "src/trace_processor/perfetto_sql/stdlib/android/job_scheduler.sql",
+        "src/trace_processor/perfetto_sql/stdlib/android/job_scheduler_states.sql",
         "src/trace_processor/perfetto_sql/stdlib/android/monitor_contention.sql",
         "src/trace_processor/perfetto_sql/stdlib/android/network_packets.sql",
         "src/trace_processor/perfetto_sql/stdlib/android/oom_adjuster.sql",
@@ -3110,6 +3119,7 @@
     deps = [
         ":src_trace_processor_perfetto_sql_stdlib_android_android",
         ":src_trace_processor_perfetto_sql_stdlib_android_auto_auto",
+        ":src_trace_processor_perfetto_sql_stdlib_android_battery_battery",
         ":src_trace_processor_perfetto_sql_stdlib_android_cpu_cpu",
         ":src_trace_processor_perfetto_sql_stdlib_android_frames_frames",
         ":src_trace_processor_perfetto_sql_stdlib_android_gpu_gpu",
diff --git a/gn/proto_library.gni b/gn/proto_library.gni
index bb55e77..2865fe2 100644
--- a/gn/proto_library.gni
+++ b/gn/proto_library.gni
@@ -369,7 +369,7 @@
             rebase_path(invoker.generate_descriptor, proto_path)
         deps = deps_
         import_dirs = import_dirs_
-        forward_variables_from(invoker, vars_to_forward)
+        forward_variables_from(invoker, vars_to_forward + [ "proto_deps" ])
       }
 
       # Not needed for descriptor proto_library target.
diff --git a/gn/standalone/proto_library.gni b/gn/standalone/proto_library.gni
index 2b67ea2..0fb119a 100644
--- a/gn/standalone/proto_library.gni
+++ b/gn/standalone/proto_library.gni
@@ -304,4 +304,5 @@
       }
     }  # source_set(source_set_name)
   }
+  not_needed(invoker, ["proto_deps"])
 }  # template
diff --git a/protos/perfetto/config/perfetto_config.proto b/protos/perfetto/config/perfetto_config.proto
index 80e90b6..345b248 100644
--- a/protos/perfetto/config/perfetto_config.proto
+++ b/protos/perfetto/config/perfetto_config.proto
@@ -2038,11 +2038,9 @@
   ATOM_LMK_KILL_OCCURRED = 51;
   ATOM_PICTURE_IN_PICTURE_STATE_CHANGED = 52;
   ATOM_WIFI_MULTICAST_LOCK_STATE_CHANGED = 53;
-  ATOM_LMK_STATE_CHANGED = 54;
   ATOM_APP_START_MEMORY_STATE_CAPTURED = 55;
   ATOM_SHUTDOWN_SEQUENCE_REPORTED = 56;
   ATOM_BOOT_SEQUENCE_REPORTED = 57;
-  ATOM_DAVEY_OCCURRED = 58;
   ATOM_OVERLAY_STATE_CHANGED = 59;
   ATOM_FOREGROUND_SERVICE_STATE_CHANGED = 60;
   ATOM_CALL_STATE_CHANGED = 61;
@@ -2359,7 +2357,6 @@
   ATOM_PRIVACY_TOGGLE_DIALOG_INTERACTION = 382;
   ATOM_APP_SEARCH_OPTIMIZE_STATS_REPORTED = 383;
   ATOM_NON_A11Y_TOOL_SERVICE_WARNING_REPORT = 384;
-  ATOM_APP_SEARCH_SET_SCHEMA_STATS_REPORTED = 385;
   ATOM_APP_COMPAT_STATE_CHANGED = 386;
   ATOM_SIZE_COMPAT_RESTART_BUTTON_EVENT_REPORTED = 387;
   ATOM_SPLITSCREEN_UI_CHANGED = 388;
@@ -2408,8 +2405,6 @@
   ATOM_HOTWORD_DETECTION_SERVICE_RESTARTED = 432;
   ATOM_HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED = 433;
   ATOM_HOTWORD_DETECTOR_EVENTS = 434;
-  ATOM_AD_SERVICES_API_CALLED = 435;
-  ATOM_AD_SERVICES_MESUREMENT_REPORTS_UPLOADED = 436;
   ATOM_BOOT_COMPLETED_BROADCAST_COMPLETION_LATENCY_REPORTED = 437;
   ATOM_CONTACTS_INDEXER_UPDATE_STATS_REPORTED = 440;
   ATOM_APP_BACKGROUND_RESTRICTIONS_INFO = 441;
@@ -2453,25 +2448,14 @@
   ATOM_CB_MODULE_ERROR_REPORTED = 480;
   ATOM_CB_SERVICE_FEATURE_CHANGED = 481;
   ATOM_CB_RECEIVER_FEATURE_CHANGED = 482;
-  ATOM_JSSCRIPTENGINE_LATENCY_REPORTED = 483;
   ATOM_PRIVACY_SIGNAL_NOTIFICATION_INTERACTION = 484;
   ATOM_PRIVACY_SIGNAL_ISSUE_CARD_INTERACTION = 485;
   ATOM_PRIVACY_SIGNALS_JOB_FAILURE = 486;
   ATOM_VIBRATION_REPORTED = 487;
   ATOM_UWB_RANGING_START = 489;
-  ATOM_MOBILE_DATA_DOWNLOAD_FILE_GROUP_STATUS_REPORTED = 490;
   ATOM_APP_COMPACTED_V2 = 491;
-  ATOM_AD_SERVICES_SETTINGS_USAGE_REPORTED = 493;
   ATOM_DISPLAY_BRIGHTNESS_CHANGED = 494;
   ATOM_ACTIVITY_ACTION_BLOCKED = 495;
-  ATOM_BACKGROUND_FETCH_PROCESS_REPORTED = 496;
-  ATOM_UPDATE_CUSTOM_AUDIENCE_PROCESS_REPORTED = 497;
-  ATOM_RUN_AD_BIDDING_PROCESS_REPORTED = 498;
-  ATOM_RUN_AD_SCORING_PROCESS_REPORTED = 499;
-  ATOM_RUN_AD_SELECTION_PROCESS_REPORTED = 500;
-  ATOM_RUN_AD_BIDDING_PER_CA_PROCESS_REPORTED = 501;
-  ATOM_MOBILE_DATA_DOWNLOAD_DOWNLOAD_RESULT_REPORTED = 502;
-  ATOM_MOBILE_DATA_DOWNLOAD_FILE_GROUP_STORAGE_STATS_REPORTED = 503;
   ATOM_NETWORK_DNS_SERVER_SUPPORT_REPORTED = 504;
   ATOM_VM_BOOTED = 505;
   ATOM_VM_EXITED = 506;
@@ -2480,7 +2464,6 @@
   ATOM_MEDIAMETRICS_SPATIALIZERDEVICEENABLED_REPORTED = 509;
   ATOM_MEDIAMETRICS_HEADTRACKERDEVICEENABLED_REPORTED = 510;
   ATOM_MEDIAMETRICS_HEADTRACKERDEVICESUPPORTED_REPORTED = 511;
-  ATOM_AD_SERVICES_MEASUREMENT_REGISTRATIONS = 512;
   ATOM_HEARING_AID_INFO_REPORTED = 513;
   ATOM_DEVICE_WIDE_JOB_CONSTRAINT_CHANGED = 514;
   ATOM_AMBIENT_MODE_CHANGED = 515;
@@ -2502,9 +2485,6 @@
   ATOM_BLUETOOTH_LOCAL_SUPPORTED_FEATURES_REPORTED = 532;
   ATOM_BLUETOOTH_GATT_APP_INFO = 533;
   ATOM_BRIGHTNESS_CONFIGURATION_UPDATED = 534;
-  ATOM_AD_SERVICES_GET_TOPICS_REPORTED = 535;
-  ATOM_AD_SERVICES_EPOCH_COMPUTATION_GET_TOP_TOPICS_REPORTED = 536;
-  ATOM_AD_SERVICES_EPOCH_COMPUTATION_CLASSIFIER_REPORTED = 537;
   ATOM_WEAR_MEDIA_OUTPUT_SWITCHER_LAUNCHED = 538;
   ATOM_WEAR_MEDIA_OUTPUT_SWITCHER_FINISHED = 539;
   ATOM_WEAR_MEDIA_OUTPUT_SWITCHER_CONNECTION_REPORTED = 540;
@@ -2542,12 +2522,10 @@
   ATOM_MEDIAMETRICS_MIDI_DEVICE_CLOSE_REPORTED = 576;
   ATOM_BIOMETRIC_TOUCH_REPORTED = 577;
   ATOM_HOTWORD_AUDIO_EGRESS_EVENT_REPORTED = 578;
-  ATOM_APP_SEARCH_SCHEMA_MIGRATION_STATS_REPORTED = 579;
   ATOM_LOCATION_ENABLED_STATE_CHANGED = 580;
   ATOM_IME_REQUEST_FINISHED = 581;
   ATOM_USB_COMPLIANCE_WARNINGS_REPORTED = 582;
   ATOM_APP_SUPPORTED_LOCALES_CHANGED = 583;
-  ATOM_GRAMMATICAL_INFLECTION_CHANGED = 584;
   ATOM_MEDIA_PROVIDER_VOLUME_RECOVERY_REPORTED = 586;
   ATOM_BIOMETRIC_PROPERTIES_COLLECTED = 587;
   ATOM_KERNEL_WAKEUP_ATTRIBUTED = 588;
@@ -2560,7 +2538,11 @@
   ATOM_WS_NOTIFICATION_UPDATED = 596;
   ATOM_NETWORK_VALIDATION_FAILURE_STATS_DAILY_REPORTED = 601;
   ATOM_WS_COMPLICATION_TAPPED = 602;
-  ATOM_WS_WEAR_TIME_SESSION = 610;
+  ATOM_WS_NOTIFICATION_BLOCKING = 780;
+  ATOM_WS_NOTIFICATION_BRIDGEMODE_UPDATED = 822;
+  ATOM_WS_NOTIFICATION_DISMISSAL_ACTIONED = 823;
+  ATOM_WS_NOTIFICATION_ACTIONED = 824;
+  ATOM_WS_NOTIFICATION_LATENCY = 880;
   ATOM_WIFI_BYTES_TRANSFER = 10000;
   ATOM_WIFI_BYTES_TRANSFER_BY_FG_BG = 10001;
   ATOM_MOBILE_BYTES_TRANSFER = 10002;
@@ -2733,6 +2715,186 @@
   ATOM_NOTIFICATION_MEMORY_USE = 10174;
   ATOM_HDR_CAPABILITIES = 10175;
   ATOM_WS_FAVOURITE_WATCH_FACE_LIST_SNAPSHOT = 10176;
+  ATOM_WS_WEAR_TIME_SESSION = 610;
+  ATOM_WS_INCOMING_CALL_ACTION_REPORTED = 626;
+  ATOM_WS_CALL_DISCONNECTION_REPORTED = 627;
+  ATOM_WS_CALL_DURATION_REPORTED = 628;
+  ATOM_WS_CALL_USER_EXPERIENCE_LATENCY_REPORTED = 629;
+  ATOM_WS_CALL_INTERACTION_REPORTED = 630;
+  ATOM_WS_ON_BODY_STATE_CHANGED = 787;
+  ATOM_WS_WATCH_FACE_RESTRICTED_COMPLICATIONS_IMPACTED = 802;
+  ATOM_WS_WATCH_FACE_DEFAULT_RESTRICTED_COMPLICATIONS_REMOVED = 803;
+  ATOM_WS_COMPLICATIONS_IMPACTED_NOTIFICATION_EVENT_REPORTED = 804;
+  ATOM_WS_STANDALONE_MODE_SNAPSHOT = 10197;
+  ATOM_WS_FAVORITE_WATCH_FACE_SNAPSHOT = 10206;
+  ATOM_SETTINGS_SPA_REPORTED = 622;
+  ATOM_PDF_LOAD_REPORTED = 859;
+  ATOM_PDF_API_USAGE_REPORTED = 860;
+  ATOM_PDF_SEARCH_REPORTED = 861;
+  ATOM_HDMI_EARC_STATUS_REPORTED = 701;
+  ATOM_HDMI_SOUNDBAR_MODE_STATUS_REPORTED = 724;
+  ATOM_MEDIA_PROVIDER_DATABASE_ROLLBACK_REPORTED = 784;
+  ATOM_BACKUP_SETUP_STATUS_REPORTED = 785;
+  ATOM_PHOTOPICKER_SESSION_INFO_REPORTED = 886;
+  ATOM_PHOTOPICKER_API_INFO_REPORTED = 887;
+  ATOM_PHOTOPICKER_UI_EVENT_LOGGED = 888;
+  ATOM_PHOTOPICKER_MEDIA_ITEM_STATUS_REPORTED = 889;
+  ATOM_PHOTOPICKER_PREVIEW_INFO_LOGGED = 890;
+  ATOM_PHOTOPICKER_MENU_INTERACTION_LOGGED = 891;
+  ATOM_PHOTOPICKER_BANNER_INTERACTION_LOGGED = 892;
+  ATOM_PHOTOPICKER_MEDIA_LIBRARY_INFO_LOGGED = 893;
+  ATOM_PHOTOPICKER_PAGE_INFO_LOGGED = 894;
+  ATOM_PHOTOPICKER_MEDIA_GRID_SYNC_INFO_REPORTED = 895;
+  ATOM_PHOTOPICKER_ALBUM_SYNC_INFO_REPORTED = 896;
+  ATOM_PHOTOPICKER_SEARCH_INFO_REPORTED = 897;
+  ATOM_SEARCH_DATA_EXTRACTION_DETAILS_REPORTED = 898;
+  ATOM_EMBEDDED_PHOTOPICKER_INFO_REPORTED = 899;
+  ATOM_WEAR_POWER_MENU_OPENED = 731;
+  ATOM_WEAR_ASSISTANT_OPENED = 755;
+  ATOM_KERNEL_OOM_KILL_OCCURRED = 754;
+  ATOM_AUTOFILL_UI_EVENT_REPORTED = 603;
+  ATOM_AUTOFILL_FILL_REQUEST_REPORTED = 604;
+  ATOM_AUTOFILL_FILL_RESPONSE_REPORTED = 605;
+  ATOM_AUTOFILL_SAVE_EVENT_REPORTED = 606;
+  ATOM_AUTOFILL_SESSION_COMMITTED = 607;
+  ATOM_AUTOFILL_FIELD_CLASSIFICATION_EVENT_REPORTED = 659;
+  ATOM_TV_LOW_POWER_STANDBY_POLICY = 679;
+  ATOM_EXTERNAL_TV_INPUT_EVENT = 717;
+  ATOM_COMPONENT_STATE_CHANGED_REPORTED = 863;
+  ATOM_AI_WALLPAPERS_BUTTON_PRESSED = 706;
+  ATOM_AI_WALLPAPERS_TEMPLATE_SELECTED = 707;
+  ATOM_AI_WALLPAPERS_TERM_SELECTED = 708;
+  ATOM_AI_WALLPAPERS_WALLPAPER_SET = 709;
+  ATOM_AI_WALLPAPERS_SESSION_SUMMARY = 710;
+  ATOM_APF_SESSION_INFO_REPORTED = 777;
+  ATOM_IP_CLIENT_RA_INFO_REPORTED = 778;
+  ATOM_VPN_CONNECTION_STATE_CHANGED = 850;
+  ATOM_VPN_CONNECTION_REPORTED = 851;
+  ATOM_NETWORK_STATS_RECORDER_FILE_OPERATED = 783;
+  ATOM_DAILY_KEEPALIVE_INFO_REPORTED = 650;
+  ATOM_NETWORK_REQUEST_STATE_CHANGED = 779;
+  ATOM_TETHERING_ACTIVE_SESSIONS_REPORTED = 925;
+  ATOM_ART_DATUM_REPORTED = 332;
+  ATOM_ART_DEVICE_DATUM_REPORTED = 550;
+  ATOM_ART_DATUM_DELTA_REPORTED = 565;
+  ATOM_ART_DEX2OAT_REPORTED = 929;
+  ATOM_ART_DEVICE_STATUS = 10205;
+  ATOM_ODREFRESH_REPORTED = 366;
+  ATOM_ODSIGN_REPORTED = 548;
+  ATOM_BACKGROUND_DEXOPT_JOB_ENDED = 467;
+  ATOM_PREREBOOT_DEXOPT_JOB_ENDED = 883;
+  ATOM_PERMISSION_RATIONALE_DIALOG_VIEWED = 645;
+  ATOM_PERMISSION_RATIONALE_DIALOG_ACTION_REPORTED = 646;
+  ATOM_APP_DATA_SHARING_UPDATES_NOTIFICATION_INTERACTION = 647;
+  ATOM_APP_DATA_SHARING_UPDATES_FRAGMENT_VIEWED = 648;
+  ATOM_APP_DATA_SHARING_UPDATES_FRAGMENT_ACTION_REPORTED = 649;
+  ATOM_ENHANCED_CONFIRMATION_DIALOG_RESULT_REPORTED = 827;
+  ATOM_ENHANCED_CONFIRMATION_RESTRICTION_CLEARED = 828;
+  ATOM_EMERGENCY_STATE_CHANGED = 633;
+  ATOM_CHRE_SIGNIFICANT_MOTION_STATE_CHANGED = 868;
+  ATOM_HEALTH_CONNECT_UI_IMPRESSION = 623;
+  ATOM_HEALTH_CONNECT_UI_INTERACTION = 624;
+  ATOM_HEALTH_CONNECT_APP_OPENED_REPORTED = 625;
+  ATOM_HEALTH_CONNECT_API_CALLED = 616;
+  ATOM_HEALTH_CONNECT_USAGE_STATS = 617;
+  ATOM_HEALTH_CONNECT_STORAGE_STATS = 618;
+  ATOM_HEALTH_CONNECT_API_INVOKED = 643;
+  ATOM_EXERCISE_ROUTE_API_CALLED = 654;
+  ATOM_SELINUX_AUDIT_LOG = 799;
+  ATOM_ONDEVICEPERSONALIZATION_API_CALLED = 711;
+  ATOM_CELLULAR_RADIO_POWER_STATE_CHANGED = 713;
+  ATOM_EMERGENCY_NUMBERS_INFO = 10180;
+  ATOM_DATA_NETWORK_VALIDATION = 10207;
+  ATOM_DATA_RAT_STATE_CHANGED = 854;
+  ATOM_CONNECTED_CHANNEL_CHANGED = 882;
+  ATOM_QUALIFIED_RAT_LIST_CHANGED = 634;
+  ATOM_QNS_IMS_CALL_DROP_STATS = 635;
+  ATOM_QNS_FALLBACK_RESTRICTION_CHANGED = 636;
+  ATOM_QNS_RAT_PREFERENCE_MISMATCH_INFO = 10177;
+  ATOM_QNS_HANDOVER_TIME_MILLIS = 10178;
+  ATOM_QNS_HANDOVER_PINGPONG = 10179;
+  ATOM_SATELLITE_CONTROLLER = 10182;
+  ATOM_SATELLITE_SESSION = 10183;
+  ATOM_SATELLITE_INCOMING_DATAGRAM = 10184;
+  ATOM_SATELLITE_OUTGOING_DATAGRAM = 10185;
+  ATOM_SATELLITE_PROVISION = 10186;
+  ATOM_SATELLITE_SOS_MESSAGE_RECOMMENDER = 10187;
+  ATOM_CARRIER_ROAMING_SATELLITE_SESSION = 10211;
+  ATOM_CARRIER_ROAMING_SATELLITE_CONTROLLER_STATS = 10212;
+  ATOM_CONTROLLER_STATS_PER_PACKAGE = 10213;
+  ATOM_SATELLITE_ENTITLEMENT = 10214;
+  ATOM_SATELLITE_CONFIG_UPDATER = 10215;
+  ATOM_SATELLITE_ACCESS_CONTROLLER = 10219;
+  ATOM_CELLULAR_IDENTIFIER_DISCLOSED = 800;
+  ATOM_KEYBOARD_CONFIGURED = 682;
+  ATOM_KEYBOARD_SYSTEMS_EVENT_REPORTED = 683;
+  ATOM_INPUTDEVICE_USAGE_REPORTED = 686;
+  ATOM_TOUCHPAD_USAGE = 10191;
+  ATOM_THREADNETWORK_TELEMETRY_DATA_REPORTED = 738;
+  ATOM_THREADNETWORK_TOPO_ENTRY_REPEATED = 739;
+  ATOM_THREADNETWORK_DEVICE_INFO_REPORTED = 740;
+  ATOM_CRONET_ENGINE_CREATED = 703;
+  ATOM_CRONET_TRAFFIC_REPORTED = 704;
+  ATOM_CRONET_ENGINE_BUILDER_INITIALIZED = 762;
+  ATOM_CRONET_HTTP_FLAGS_INITIALIZED = 763;
+  ATOM_CRONET_INITIALIZED = 764;
+  ATOM_WEAR_MODE_STATE_CHANGED = 715;
+  ATOM_RENDERER_INITIALIZED = 736;
+  ATOM_SCHEMA_VERSION_RECEIVED = 737;
+  ATOM_LAYOUT_INSPECTED = 741;
+  ATOM_LAYOUT_EXPRESSION_INSPECTED = 742;
+  ATOM_LAYOUT_ANIMATIONS_INSPECTED = 743;
+  ATOM_MATERIAL_COMPONENTS_INSPECTED = 744;
+  ATOM_TILE_REQUESTED = 745;
+  ATOM_STATE_RESPONSE_RECEIVED = 746;
+  ATOM_TILE_RESPONSE_RECEIVED = 747;
+  ATOM_INFLATION_FINISHED = 748;
+  ATOM_INFLATION_FAILED = 749;
+  ATOM_IGNORED_INFLATION_FAILURES_REPORTED = 750;
+  ATOM_DRAWABLE_RENDERED = 751;
+  ATOM_MEDIA_ACTION_REPORTED = 608;
+  ATOM_MEDIA_CONTROLS_LAUNCHED = 609;
+  ATOM_MEDIA_SESSION_STATE_CHANGED = 677;
+  ATOM_WEAR_MEDIA_OUTPUT_SWITCHER_DEVICE_SCAN_API_LATENCY = 757;
+  ATOM_WEAR_MEDIA_OUTPUT_SWITCHER_SASS_DEVICE_UNAVAILABLE = 758;
+  ATOM_WEAR_MEDIA_OUTPUT_SWITCHER_FASTPAIR_API_TIMEOUT = 759;
+  ATOM_MEDIATOR_UPDATED = 721;
+  ATOM_SYSPROXY_BLUETOOTH_BYTES_TRANSFER = 10196;
+  ATOM_SYSPROXY_CONNECTION_UPDATED = 786;
+  ATOM_ADAPTIVE_AUTH_UNLOCK_AFTER_LOCK_REPORTED = 820;
+  ATOM_FEDERATED_COMPUTE_API_CALLED = 712;
+  ATOM_FEDERATED_COMPUTE_TRAINING_EVENT_REPORTED = 771;
+  ATOM_EXAMPLE_ITERATOR_NEXT_LATENCY_REPORTED = 838;
+  ATOM_RKPD_POOL_STATS = 664;
+  ATOM_RKPD_CLIENT_OPERATION = 665;
+  ATOM_CPU_POLICY = 10199;
+  ATOM_ATOM_9999 = 9999;
+  ATOM_ATOM_99999 = 99999;
+  ATOM_SCREEN_OFF_REPORTED = 776;
+  ATOM_SCREEN_TIMEOUT_OVERRIDE_REPORTED = 836;
+  ATOM_SCREEN_INTERACTIVE_SESSION_REPORTED = 837;
+  ATOM_SCREEN_DIM_REPORTED = 867;
+  ATOM_FULL_SCREEN_INTENT_LAUNCHED = 631;
+  ATOM_BAL_ALLOWED = 632;
+  ATOM_IN_TASK_ACTIVITY_STARTED = 685;
+  ATOM_CACHED_APPS_HIGH_WATERMARK = 10189;
+  ATOM_STYLUS_PREDICTION_METRICS_REPORTED = 718;
+  ATOM_USER_RISK_EVENT_REPORTED = 725;
+  ATOM_MEDIA_PROJECTION_STATE_CHANGED = 729;
+  ATOM_MEDIA_PROJECTION_TARGET_CHANGED = 730;
+  ATOM_EXCESSIVE_BINDER_PROXY_COUNT_REPORTED = 853;
+  ATOM_PROXY_BYTES_TRANSFER_BY_FG_BG = 10200;
+  ATOM_MOBILE_BYTES_TRANSFER_BY_PROC_STATE = 10204;
+  ATOM_BIOMETRIC_FRR_NOTIFICATION = 817;
+  ATOM_SENSITIVE_CONTENT_MEDIA_PROJECTION_SESSION = 830;
+  ATOM_SENSITIVE_NOTIFICATION_APP_PROTECTION_SESSION = 831;
+  ATOM_SENSITIVE_NOTIFICATION_APP_PROTECTION_APPLIED = 832;
+  ATOM_SENSITIVE_NOTIFICATION_REDACTION = 833;
+  ATOM_SENSITIVE_CONTENT_APP_PROTECTION = 835;
+  ATOM_APP_RESTRICTION_STATE_CHANGED = 866;
+  ATOM_DREAM_SETTING_CHANGED = 705;
+  ATOM_DREAM_SETTING_SNAPSHOT = 10192;
+  ATOM_BOOT_INTEGRITY_INFO_REPORTED = 775;
   ATOM_WIFI_AWARE_NDP_REPORTED = 638;
   ATOM_WIFI_AWARE_ATTACH_REPORTED = 639;
   ATOM_WIFI_SELF_RECOVERY_TRIGGERED = 661;
@@ -2747,39 +2909,99 @@
   ATOM_WIFI_LOCAL_ONLY_REQUEST_SCAN_TRIGGERED = 693;
   ATOM_WIFI_THREAD_TASK_EXECUTED = 694;
   ATOM_WIFI_STATE_CHANGED = 700;
+  ATOM_PNO_SCAN_STARTED = 719;
+  ATOM_PNO_SCAN_STOPPED = 720;
+  ATOM_WIFI_IS_UNUSABLE_REPORTED = 722;
+  ATOM_WIFI_AP_CAPABILITIES_REPORTED = 723;
+  ATOM_SOFT_AP_STATE_CHANGED = 805;
+  ATOM_SCORER_PREDICTION_RESULT_REPORTED = 884;
   ATOM_WIFI_AWARE_CAPABILITIES = 10190;
   ATOM_WIFI_MODULE_INFO = 10193;
-  ATOM_SETTINGS_SPA_REPORTED = 622;
+  ATOM_WIFI_SETTING_INFO = 10194;
+  ATOM_WIFI_COMPLEX_SETTING_INFO = 10195;
+  ATOM_WIFI_CONFIGURED_NETWORK_INFO = 10198;
+  ATOM_MTE_STATE = 10181;
+  ATOM_HOTWORD_EGRESS_SIZE_ATOM_REPORTED = 761;
+  ATOM_SANDBOX_API_CALLED = 488;
+  ATOM_SANDBOX_ACTIVITY_EVENT_OCCURRED = 735;
+  ATOM_SDK_SANDBOX_RESTRICTED_ACCESS_IN_SESSION = 796;
+  ATOM_SANDBOX_SDK_STORAGE = 10159;
   ATOM_EXPRESS_EVENT_REPORTED = 528;
   ATOM_EXPRESS_HISTOGRAM_SAMPLE_REPORTED = 593;
   ATOM_EXPRESS_UID_EVENT_REPORTED = 644;
   ATOM_EXPRESS_UID_HISTOGRAM_SAMPLE_REPORTED = 658;
-  ATOM_PERMISSION_RATIONALE_DIALOG_VIEWED = 645;
-  ATOM_PERMISSION_RATIONALE_DIALOG_ACTION_REPORTED = 646;
-  ATOM_APP_DATA_SHARING_UPDATES_NOTIFICATION_INTERACTION = 647;
-  ATOM_APP_DATA_SHARING_UPDATES_FRAGMENT_VIEWED = 648;
-  ATOM_APP_DATA_SHARING_UPDATES_FRAGMENT_ACTION_REPORTED = 649;
-  ATOM_WS_INCOMING_CALL_ACTION_REPORTED = 626;
-  ATOM_WS_CALL_DISCONNECTION_REPORTED = 627;
-  ATOM_WS_CALL_DURATION_REPORTED = 628;
-  ATOM_WS_CALL_USER_EXPERIENCE_LATENCY_REPORTED = 629;
-  ATOM_WS_CALL_INTERACTION_REPORTED = 630;
-  ATOM_FULL_SCREEN_INTENT_LAUNCHED = 631;
-  ATOM_BAL_ALLOWED = 632;
-  ATOM_IN_TASK_ACTIVITY_STARTED = 685;
-  ATOM_CACHED_APPS_HIGH_WATERMARK = 10189;
-  ATOM_ODREFRESH_REPORTED = 366;
-  ATOM_ODSIGN_REPORTED = 548;
-  ATOM_ART_DATUM_REPORTED = 332;
-  ATOM_ART_DEVICE_DATUM_REPORTED = 550;
-  ATOM_ART_DATUM_DELTA_REPORTED = 565;
-  ATOM_BACKGROUND_DEXOPT_JOB_ENDED = 467;
-  ATOM_WEAR_ADAPTIVE_SUSPEND_STATS_REPORTED = 619;
-  ATOM_WEAR_POWER_ANOMALY_SERVICE_OPERATIONAL_STATS_REPORTED = 620;
-  ATOM_WEAR_POWER_ANOMALY_SERVICE_EVENT_STATS_REPORTED = 621;
-  ATOM_EMERGENCY_STATE_CHANGED = 633;
-  ATOM_DND_STATE_CHANGED = 657;
-  ATOM_MTE_STATE = 10181;
+  ATOM_IKE_SESSION_TERMINATED = 678;
+  ATOM_IKE_LIVENESS_CHECK_SESSION_VALIDATED = 760;
+  ATOM_NEGOTIATED_SECURITY_ASSOCIATION = 821;
+  ATOM_APP_SEARCH_SET_SCHEMA_STATS_REPORTED = 385;
+  ATOM_APP_SEARCH_SCHEMA_MIGRATION_STATS_REPORTED = 579;
+  ATOM_APP_SEARCH_USAGE_SEARCH_INTENT_STATS_REPORTED = 825;
+  ATOM_APP_SEARCH_USAGE_SEARCH_INTENT_RAW_QUERY_STATS_REPORTED = 826;
+  ATOM_DEVICE_POLICY_MANAGEMENT_MODE = 10216;
+  ATOM_DEVICE_POLICY_STATE = 10217;
+  ATOM_DESKTOP_MODE_UI_CHANGED = 818;
+  ATOM_DESKTOP_MODE_SESSION_TASK_UPDATE = 819;
+  ATOM_MEDIA_CODEC_RECLAIM_REQUEST_COMPLETED = 600;
+  ATOM_MEDIA_CODEC_STARTED = 641;
+  ATOM_MEDIA_CODEC_STOPPED = 642;
+  ATOM_MEDIA_CODEC_RENDERED = 684;
+  ATOM_MEDIA_EDITING_ENDED_REPORTED = 798;
+  ATOM_CAR_WAKEUP_FROM_SUSPEND_REPORTED = 852;
+  ATOM_PLUGIN_INITIALIZED = 655;
+  ATOM_CAR_RECENTS_EVENT_REPORTED = 770;
+  ATOM_CAR_CALM_MODE_EVENT_REPORTED = 797;
+  ATOM_CAMERA_FEATURE_COMBINATION_QUERY_EVENT = 900;
+  ATOM_THERMAL_STATUS_CALLED = 772;
+  ATOM_THERMAL_HEADROOM_CALLED = 773;
+  ATOM_THERMAL_HEADROOM_THRESHOLDS_CALLED = 774;
+  ATOM_ADPF_HINT_SESSION_TID_CLEANUP = 839;
+  ATOM_THERMAL_HEADROOM_THRESHOLDS = 10201;
+  ATOM_ADPF_SESSION_SNAPSHOT = 10218;
+  ATOM_BLUETOOTH_HASHED_DEVICE_NAME_REPORTED = 613;
+  ATOM_BLUETOOTH_L2CAP_COC_CLIENT_CONNECTION = 614;
+  ATOM_BLUETOOTH_L2CAP_COC_SERVER_CONNECTION = 615;
+  ATOM_BLUETOOTH_LE_SESSION_CONNECTED = 656;
+  ATOM_RESTRICTED_BLUETOOTH_DEVICE_NAME_REPORTED = 666;
+  ATOM_BLUETOOTH_PROFILE_CONNECTION_ATTEMPTED = 696;
+  ATOM_BLUETOOTH_CONTENT_PROFILE_ERROR_REPORTED = 781;
+  ATOM_BLUETOOTH_RFCOMM_CONNECTION_ATTEMPTED = 782;
+  ATOM_REMOTE_DEVICE_INFORMATION_WITH_METRIC_ID = 862;
+  ATOM_LE_APP_SCAN_STATE_CHANGED = 870;
+  ATOM_LE_RADIO_SCAN_STOPPED = 871;
+  ATOM_LE_SCAN_RESULT_RECEIVED = 872;
+  ATOM_LE_SCAN_ABUSED = 873;
+  ATOM_LE_ADV_STATE_CHANGED = 874;
+  ATOM_LE_ADV_ERROR_REPORTED = 875;
+  ATOM_A2DP_SESSION_REPORTED = 904;
+  ATOM_BLUETOOTH_CROSS_LAYER_EVENT_REPORTED = 916;
+  ATOM_BROADCAST_AUDIO_SESSION_REPORTED = 927;
+  ATOM_BROADCAST_AUDIO_SYNC_REPORTED = 928;
+  ATOM_DEVICE_LOCK_CHECK_IN_REQUEST_REPORTED = 726;
+  ATOM_DEVICE_LOCK_PROVISIONING_COMPLETE_REPORTED = 727;
+  ATOM_DEVICE_LOCK_KIOSK_APP_REQUEST_REPORTED = 728;
+  ATOM_DEVICE_LOCK_CHECK_IN_RETRY_REPORTED = 789;
+  ATOM_DEVICE_LOCK_PROVISION_FAILURE_REPORTED = 790;
+  ATOM_DEVICE_LOCK_LOCK_UNLOCK_DEVICE_FAILURE_REPORTED = 791;
+  ATOM_APPLICATION_GRAMMATICAL_INFLECTION_CHANGED = 584;
+  ATOM_SYSTEM_GRAMMATICAL_INFLECTION_CHANGED = 816;
+  ATOM_EMERGENCY_NUMBER_DIALED = 637;
+  ATOM_JSSCRIPTENGINE_LATENCY_REPORTED = 483;
+  ATOM_AD_SERVICES_API_CALLED = 435;
+  ATOM_AD_SERVICES_MESUREMENT_REPORTS_UPLOADED = 436;
+  ATOM_MOBILE_DATA_DOWNLOAD_FILE_GROUP_STATUS_REPORTED = 490;
+  ATOM_MOBILE_DATA_DOWNLOAD_DOWNLOAD_RESULT_REPORTED = 502;
+  ATOM_AD_SERVICES_SETTINGS_USAGE_REPORTED = 493;
+  ATOM_BACKGROUND_FETCH_PROCESS_REPORTED = 496;
+  ATOM_UPDATE_CUSTOM_AUDIENCE_PROCESS_REPORTED = 497;
+  ATOM_RUN_AD_BIDDING_PROCESS_REPORTED = 498;
+  ATOM_RUN_AD_SCORING_PROCESS_REPORTED = 499;
+  ATOM_RUN_AD_SELECTION_PROCESS_REPORTED = 500;
+  ATOM_RUN_AD_BIDDING_PER_CA_PROCESS_REPORTED = 501;
+  ATOM_MOBILE_DATA_DOWNLOAD_FILE_GROUP_STORAGE_STATS_REPORTED = 503;
+  ATOM_AD_SERVICES_MEASUREMENT_REGISTRATIONS = 512;
+  ATOM_AD_SERVICES_GET_TOPICS_REPORTED = 535;
+  ATOM_AD_SERVICES_EPOCH_COMPUTATION_GET_TOP_TOPICS_REPORTED = 536;
+  ATOM_AD_SERVICES_EPOCH_COMPUTATION_CLASSIFIER_REPORTED = 537;
   ATOM_AD_SERVICES_BACK_COMPAT_GET_TOPICS_REPORTED = 598;
   ATOM_AD_SERVICES_BACK_COMPAT_EPOCH_COMPUTATION_CLASSIFIER_REPORTED = 599;
   ATOM_AD_SERVICES_MEASUREMENT_DEBUG_KEYS = 640;
@@ -2789,68 +3011,68 @@
   ATOM_AD_SERVICES_MEASUREMENT_ATTRIBUTION = 674;
   ATOM_AD_SERVICES_MEASUREMENT_JOBS = 675;
   ATOM_AD_SERVICES_MEASUREMENT_WIPEOUT = 676;
+  ATOM_AD_SERVICES_MEASUREMENT_AD_ID_MATCH_FOR_DEBUG_KEYS = 695;
+  ATOM_AD_SERVICES_ENROLLMENT_DATA_STORED = 697;
+  ATOM_AD_SERVICES_ENROLLMENT_FILE_DOWNLOADED = 698;
+  ATOM_AD_SERVICES_ENROLLMENT_MATCHED = 699;
   ATOM_AD_SERVICES_CONSENT_MIGRATED = 702;
-  ATOM_RKPD_POOL_STATS = 664;
-  ATOM_RKPD_CLIENT_OPERATION = 665;
-  ATOM_AUTOFILL_UI_EVENT_REPORTED = 603;
-  ATOM_AUTOFILL_FILL_REQUEST_REPORTED = 604;
-  ATOM_AUTOFILL_FILL_RESPONSE_REPORTED = 605;
-  ATOM_AUTOFILL_SAVE_EVENT_REPORTED = 606;
-  ATOM_AUTOFILL_SESSION_COMMITTED = 607;
-  ATOM_AUTOFILL_FIELD_CLASSIFICATION_EVENT_REPORTED = 659;
+  ATOM_AD_SERVICES_ENROLLMENT_FAILED = 714;
+  ATOM_AD_SERVICES_MEASUREMENT_CLICK_VERIFICATION = 756;
+  ATOM_AD_SERVICES_ENCRYPTION_KEY_FETCHED = 765;
+  ATOM_AD_SERVICES_ENCRYPTION_KEY_DB_TRANSACTION_ENDED = 766;
+  ATOM_DESTINATION_REGISTERED_BEACONS = 767;
+  ATOM_REPORT_INTERACTION_API_CALLED = 768;
+  ATOM_INTERACTION_REPORTING_TABLE_CLEARED = 769;
+  ATOM_APP_MANIFEST_CONFIG_HELPER_CALLED = 788;
+  ATOM_AD_FILTERING_PROCESS_JOIN_CA_REPORTED = 793;
+  ATOM_AD_FILTERING_PROCESS_AD_SELECTION_REPORTED = 794;
+  ATOM_AD_COUNTER_HISTOGRAM_UPDATER_REPORTED = 795;
+  ATOM_SIGNATURE_VERIFICATION = 807;
+  ATOM_K_ANON_IMMEDIATE_SIGN_JOIN_STATUS_REPORTED = 808;
+  ATOM_K_ANON_BACKGROUND_JOB_STATUS_REPORTED = 809;
+  ATOM_K_ANON_INITIALIZE_STATUS_REPORTED = 810;
+  ATOM_K_ANON_SIGN_STATUS_REPORTED = 811;
+  ATOM_K_ANON_JOIN_STATUS_REPORTED = 812;
+  ATOM_K_ANON_KEY_ATTESTATION_STATUS_REPORTED = 813;
+  ATOM_GET_AD_SELECTION_DATA_API_CALLED = 814;
+  ATOM_GET_AD_SELECTION_DATA_BUYER_INPUT_GENERATED = 815;
+  ATOM_BACKGROUND_JOB_SCHEDULING_REPORTED = 834;
+  ATOM_TOPICS_ENCRYPTION_EPOCH_COMPUTATION_REPORTED = 840;
+  ATOM_TOPICS_ENCRYPTION_GET_TOPICS_REPORTED = 841;
+  ATOM_ADSERVICES_SHELL_COMMAND_CALLED = 842;
+  ATOM_UPDATE_SIGNALS_API_CALLED = 843;
+  ATOM_ENCODING_JOB_RUN = 844;
+  ATOM_ENCODING_JS_FETCH = 845;
+  ATOM_ENCODING_JS_EXECUTION = 846;
+  ATOM_PERSIST_AD_SELECTION_RESULT_CALLED = 847;
+  ATOM_SERVER_AUCTION_KEY_FETCH_CALLED = 848;
+  ATOM_SERVER_AUCTION_BACKGROUND_KEY_FETCH_ENABLED = 849;
+  ATOM_AD_SERVICES_MEASUREMENT_PROCESS_ODP_REGISTRATION = 864;
+  ATOM_AD_SERVICES_MEASUREMENT_NOTIFY_REGISTRATION_TO_ODP = 865;
+  ATOM_SELECT_ADS_FROM_OUTCOMES_API_CALLED = 876;
+  ATOM_REPORT_IMPRESSION_API_CALLED = 877;
+  ATOM_AD_SERVICES_ENROLLMENT_TRANSACTION_STATS = 885;
+  ATOM_EXTERNAL_DISPLAY_STATE_CHANGED = 806;
+  ATOM_DISPLAY_MODE_DIRECTOR_VOTE_CHANGED = 792;
   ATOM_TEST_EXTENSION_ATOM_REPORTED = 660;
   ATOM_TEST_RESTRICTED_ATOM_REPORTED = 672;
   ATOM_STATS_SOCKET_LOSS_REPORTED = 752;
-  ATOM_PLUGIN_INITIALIZED = 655;
-  ATOM_TV_LOW_POWER_STANDBY_POLICY = 679;
+  ATOM_NFC_OBSERVE_MODE_STATE_CHANGED = 855;
+  ATOM_NFC_FIELD_CHANGED = 856;
+  ATOM_NFC_POLLING_LOOP_NOTIFICATION_REPORTED = 857;
+  ATOM_NFC_PROPRIETARY_CAPABILITIES_REPORTED = 858;
   ATOM_LOCKSCREEN_SHORTCUT_SELECTED = 611;
   ATOM_LOCKSCREEN_SHORTCUT_TRIGGERED = 612;
-  ATOM_EMERGENCY_NUMBERS_INFO = 10180;
-  ATOM_QUALIFIED_RAT_LIST_CHANGED = 634;
-  ATOM_QNS_IMS_CALL_DROP_STATS = 635;
-  ATOM_QNS_FALLBACK_RESTRICTION_CHANGED = 636;
-  ATOM_QNS_RAT_PREFERENCE_MISMATCH_INFO = 10177;
-  ATOM_QNS_HANDOVER_TIME_MILLIS = 10178;
-  ATOM_QNS_HANDOVER_PINGPONG = 10179;
-  ATOM_SATELLITE_CONTROLLER = 10182;
-  ATOM_SATELLITE_SESSION = 10183;
-  ATOM_SATELLITE_INCOMING_DATAGRAM = 10184;
-  ATOM_SATELLITE_OUTGOING_DATAGRAM = 10185;
-  ATOM_SATELLITE_PROVISION = 10186;
-  ATOM_SATELLITE_SOS_MESSAGE_RECOMMENDER = 10187;
-  ATOM_IKE_SESSION_TERMINATED = 678;
-  ATOM_IKE_LIVENESS_CHECK_SESSION_VALIDATED = 760;
-  ATOM_BLUETOOTH_HASHED_DEVICE_NAME_REPORTED = 613;
-  ATOM_BLUETOOTH_L2CAP_COC_CLIENT_CONNECTION = 614;
-  ATOM_BLUETOOTH_L2CAP_COC_SERVER_CONNECTION = 615;
-  ATOM_BLUETOOTH_LE_SESSION_CONNECTED = 656;
-  ATOM_RESTRICTED_BLUETOOTH_DEVICE_NAME_REPORTED = 666;
-  ATOM_BLUETOOTH_PROFILE_CONNECTION_ATTEMPTED = 696;
-  ATOM_HEALTH_CONNECT_UI_IMPRESSION = 623;
-  ATOM_HEALTH_CONNECT_UI_INTERACTION = 624;
-  ATOM_HEALTH_CONNECT_APP_OPENED_REPORTED = 625;
-  ATOM_HEALTH_CONNECT_API_CALLED = 616;
-  ATOM_HEALTH_CONNECT_USAGE_STATS = 617;
-  ATOM_HEALTH_CONNECT_STORAGE_STATS = 618;
-  ATOM_HEALTH_CONNECT_API_INVOKED = 643;
-  ATOM_EXERCISE_ROUTE_API_CALLED = 654;
-  ATOM_ATOM_9999 = 9999;
-  ATOM_ATOM_99999 = 99999;
-  ATOM_THREADNETWORK_TELEMETRY_DATA_REPORTED = 738;
-  ATOM_THREADNETWORK_TOPO_ENTRY_REPEATED = 739;
-  ATOM_THREADNETWORK_DEVICE_INFO_REPORTED = 740;
-  ATOM_EMERGENCY_NUMBER_DIALED = 637;
-  ATOM_SANDBOX_API_CALLED = 488;
-  ATOM_SANDBOX_ACTIVITY_EVENT_OCCURRED = 735;
-  ATOM_SANDBOX_SDK_STORAGE = 10159;
-  ATOM_CRONET_ENGINE_CREATED = 703;
-  ATOM_CRONET_TRAFFIC_REPORTED = 704;
-  ATOM_CRONET_ENGINE_BUILDER_INITIALIZED = 762;
-  ATOM_CRONET_HTTP_FLAGS_INITIALIZED = 763;
-  ATOM_CRONET_INITIALIZED = 764;
-  ATOM_DAILY_KEEPALIVE_INFO_REPORTED = 650;
-  ATOM_IP_CLIENT_RA_INFO_REPORTED = 778;
-  ATOM_APF_SESSION_INFO_REPORTED = 777;
+  ATOM_LAUNCHER_IMPRESSION_EVENT_V2 = 716;
+  ATOM_DISPLAY_SWITCH_LATENCY_TRACKED = 753;
+  ATOM_NOTIFICATION_LISTENER_SERVICE = 829;
+  ATOM_NAV_HANDLE_TOUCH_POINTS = 869;
+  ATOM_WEAR_ADAPTIVE_SUSPEND_STATS_REPORTED = 619;
+  ATOM_WEAR_POWER_ANOMALY_SERVICE_OPERATIONAL_STATS_REPORTED = 620;
+  ATOM_WEAR_POWER_ANOMALY_SERVICE_EVENT_STATS_REPORTED = 621;
+  ATOM_APEX_INSTALLATION_REQUESTED = 732;
+  ATOM_APEX_INSTALLATION_STAGED = 733;
+  ATOM_APEX_INSTALLATION_ENDED = 734;
   ATOM_CREDENTIAL_MANAGER_API_CALLED = 585;
   ATOM_CREDENTIAL_MANAGER_INIT_PHASE_REPORTED = 651;
   ATOM_CREDENTIAL_MANAGER_CANDIDATE_PHASE_REPORTED = 652;
@@ -2861,12 +3083,7 @@
   ATOM_CREDENTIAL_MANAGER_AUTH_CLICK_REPORTED = 670;
   ATOM_CREDENTIAL_MANAGER_APIV2_CALLED = 671;
   ATOM_UWB_ACTIVITY_INFO = 10188;
-  ATOM_MEDIA_ACTION_REPORTED = 608;
-  ATOM_MEDIA_CONTROLS_LAUNCHED = 609;
-  ATOM_MEDIA_CODEC_RECLAIM_REQUEST_COMPLETED = 600;
-  ATOM_MEDIA_CODEC_STARTED = 641;
-  ATOM_MEDIA_CODEC_STOPPED = 642;
-  ATOM_MEDIA_CODEC_RENDERED = 684;
+  ATOM_DND_STATE_CHANGED = 657;
 }
 // End of protos/perfetto/config/statsd/atom_ids.proto
 
diff --git a/protos/perfetto/config/statsd/atom_ids.proto b/protos/perfetto/config/statsd/atom_ids.proto
index c436571..0d0af24 100644
--- a/protos/perfetto/config/statsd/atom_ids.proto
+++ b/protos/perfetto/config/statsd/atom_ids.proto
@@ -75,11 +75,9 @@
   ATOM_LMK_KILL_OCCURRED = 51;
   ATOM_PICTURE_IN_PICTURE_STATE_CHANGED = 52;
   ATOM_WIFI_MULTICAST_LOCK_STATE_CHANGED = 53;
-  ATOM_LMK_STATE_CHANGED = 54;
   ATOM_APP_START_MEMORY_STATE_CAPTURED = 55;
   ATOM_SHUTDOWN_SEQUENCE_REPORTED = 56;
   ATOM_BOOT_SEQUENCE_REPORTED = 57;
-  ATOM_DAVEY_OCCURRED = 58;
   ATOM_OVERLAY_STATE_CHANGED = 59;
   ATOM_FOREGROUND_SERVICE_STATE_CHANGED = 60;
   ATOM_CALL_STATE_CHANGED = 61;
@@ -396,7 +394,6 @@
   ATOM_PRIVACY_TOGGLE_DIALOG_INTERACTION = 382;
   ATOM_APP_SEARCH_OPTIMIZE_STATS_REPORTED = 383;
   ATOM_NON_A11Y_TOOL_SERVICE_WARNING_REPORT = 384;
-  ATOM_APP_SEARCH_SET_SCHEMA_STATS_REPORTED = 385;
   ATOM_APP_COMPAT_STATE_CHANGED = 386;
   ATOM_SIZE_COMPAT_RESTART_BUTTON_EVENT_REPORTED = 387;
   ATOM_SPLITSCREEN_UI_CHANGED = 388;
@@ -445,8 +442,6 @@
   ATOM_HOTWORD_DETECTION_SERVICE_RESTARTED = 432;
   ATOM_HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED = 433;
   ATOM_HOTWORD_DETECTOR_EVENTS = 434;
-  ATOM_AD_SERVICES_API_CALLED = 435;
-  ATOM_AD_SERVICES_MESUREMENT_REPORTS_UPLOADED = 436;
   ATOM_BOOT_COMPLETED_BROADCAST_COMPLETION_LATENCY_REPORTED = 437;
   ATOM_CONTACTS_INDEXER_UPDATE_STATS_REPORTED = 440;
   ATOM_APP_BACKGROUND_RESTRICTIONS_INFO = 441;
@@ -490,25 +485,14 @@
   ATOM_CB_MODULE_ERROR_REPORTED = 480;
   ATOM_CB_SERVICE_FEATURE_CHANGED = 481;
   ATOM_CB_RECEIVER_FEATURE_CHANGED = 482;
-  ATOM_JSSCRIPTENGINE_LATENCY_REPORTED = 483;
   ATOM_PRIVACY_SIGNAL_NOTIFICATION_INTERACTION = 484;
   ATOM_PRIVACY_SIGNAL_ISSUE_CARD_INTERACTION = 485;
   ATOM_PRIVACY_SIGNALS_JOB_FAILURE = 486;
   ATOM_VIBRATION_REPORTED = 487;
   ATOM_UWB_RANGING_START = 489;
-  ATOM_MOBILE_DATA_DOWNLOAD_FILE_GROUP_STATUS_REPORTED = 490;
   ATOM_APP_COMPACTED_V2 = 491;
-  ATOM_AD_SERVICES_SETTINGS_USAGE_REPORTED = 493;
   ATOM_DISPLAY_BRIGHTNESS_CHANGED = 494;
   ATOM_ACTIVITY_ACTION_BLOCKED = 495;
-  ATOM_BACKGROUND_FETCH_PROCESS_REPORTED = 496;
-  ATOM_UPDATE_CUSTOM_AUDIENCE_PROCESS_REPORTED = 497;
-  ATOM_RUN_AD_BIDDING_PROCESS_REPORTED = 498;
-  ATOM_RUN_AD_SCORING_PROCESS_REPORTED = 499;
-  ATOM_RUN_AD_SELECTION_PROCESS_REPORTED = 500;
-  ATOM_RUN_AD_BIDDING_PER_CA_PROCESS_REPORTED = 501;
-  ATOM_MOBILE_DATA_DOWNLOAD_DOWNLOAD_RESULT_REPORTED = 502;
-  ATOM_MOBILE_DATA_DOWNLOAD_FILE_GROUP_STORAGE_STATS_REPORTED = 503;
   ATOM_NETWORK_DNS_SERVER_SUPPORT_REPORTED = 504;
   ATOM_VM_BOOTED = 505;
   ATOM_VM_EXITED = 506;
@@ -517,7 +501,6 @@
   ATOM_MEDIAMETRICS_SPATIALIZERDEVICEENABLED_REPORTED = 509;
   ATOM_MEDIAMETRICS_HEADTRACKERDEVICEENABLED_REPORTED = 510;
   ATOM_MEDIAMETRICS_HEADTRACKERDEVICESUPPORTED_REPORTED = 511;
-  ATOM_AD_SERVICES_MEASUREMENT_REGISTRATIONS = 512;
   ATOM_HEARING_AID_INFO_REPORTED = 513;
   ATOM_DEVICE_WIDE_JOB_CONSTRAINT_CHANGED = 514;
   ATOM_AMBIENT_MODE_CHANGED = 515;
@@ -539,9 +522,6 @@
   ATOM_BLUETOOTH_LOCAL_SUPPORTED_FEATURES_REPORTED = 532;
   ATOM_BLUETOOTH_GATT_APP_INFO = 533;
   ATOM_BRIGHTNESS_CONFIGURATION_UPDATED = 534;
-  ATOM_AD_SERVICES_GET_TOPICS_REPORTED = 535;
-  ATOM_AD_SERVICES_EPOCH_COMPUTATION_GET_TOP_TOPICS_REPORTED = 536;
-  ATOM_AD_SERVICES_EPOCH_COMPUTATION_CLASSIFIER_REPORTED = 537;
   ATOM_WEAR_MEDIA_OUTPUT_SWITCHER_LAUNCHED = 538;
   ATOM_WEAR_MEDIA_OUTPUT_SWITCHER_FINISHED = 539;
   ATOM_WEAR_MEDIA_OUTPUT_SWITCHER_CONNECTION_REPORTED = 540;
@@ -579,12 +559,10 @@
   ATOM_MEDIAMETRICS_MIDI_DEVICE_CLOSE_REPORTED = 576;
   ATOM_BIOMETRIC_TOUCH_REPORTED = 577;
   ATOM_HOTWORD_AUDIO_EGRESS_EVENT_REPORTED = 578;
-  ATOM_APP_SEARCH_SCHEMA_MIGRATION_STATS_REPORTED = 579;
   ATOM_LOCATION_ENABLED_STATE_CHANGED = 580;
   ATOM_IME_REQUEST_FINISHED = 581;
   ATOM_USB_COMPLIANCE_WARNINGS_REPORTED = 582;
   ATOM_APP_SUPPORTED_LOCALES_CHANGED = 583;
-  ATOM_GRAMMATICAL_INFLECTION_CHANGED = 584;
   ATOM_MEDIA_PROVIDER_VOLUME_RECOVERY_REPORTED = 586;
   ATOM_BIOMETRIC_PROPERTIES_COLLECTED = 587;
   ATOM_KERNEL_WAKEUP_ATTRIBUTED = 588;
@@ -597,7 +575,11 @@
   ATOM_WS_NOTIFICATION_UPDATED = 596;
   ATOM_NETWORK_VALIDATION_FAILURE_STATS_DAILY_REPORTED = 601;
   ATOM_WS_COMPLICATION_TAPPED = 602;
-  ATOM_WS_WEAR_TIME_SESSION = 610;
+  ATOM_WS_NOTIFICATION_BLOCKING = 780;
+  ATOM_WS_NOTIFICATION_BRIDGEMODE_UPDATED = 822;
+  ATOM_WS_NOTIFICATION_DISMISSAL_ACTIONED = 823;
+  ATOM_WS_NOTIFICATION_ACTIONED = 824;
+  ATOM_WS_NOTIFICATION_LATENCY = 880;
   ATOM_WIFI_BYTES_TRANSFER = 10000;
   ATOM_WIFI_BYTES_TRANSFER_BY_FG_BG = 10001;
   ATOM_MOBILE_BYTES_TRANSFER = 10002;
@@ -770,6 +752,186 @@
   ATOM_NOTIFICATION_MEMORY_USE = 10174;
   ATOM_HDR_CAPABILITIES = 10175;
   ATOM_WS_FAVOURITE_WATCH_FACE_LIST_SNAPSHOT = 10176;
+  ATOM_WS_WEAR_TIME_SESSION = 610;
+  ATOM_WS_INCOMING_CALL_ACTION_REPORTED = 626;
+  ATOM_WS_CALL_DISCONNECTION_REPORTED = 627;
+  ATOM_WS_CALL_DURATION_REPORTED = 628;
+  ATOM_WS_CALL_USER_EXPERIENCE_LATENCY_REPORTED = 629;
+  ATOM_WS_CALL_INTERACTION_REPORTED = 630;
+  ATOM_WS_ON_BODY_STATE_CHANGED = 787;
+  ATOM_WS_WATCH_FACE_RESTRICTED_COMPLICATIONS_IMPACTED = 802;
+  ATOM_WS_WATCH_FACE_DEFAULT_RESTRICTED_COMPLICATIONS_REMOVED = 803;
+  ATOM_WS_COMPLICATIONS_IMPACTED_NOTIFICATION_EVENT_REPORTED = 804;
+  ATOM_WS_STANDALONE_MODE_SNAPSHOT = 10197;
+  ATOM_WS_FAVORITE_WATCH_FACE_SNAPSHOT = 10206;
+  ATOM_SETTINGS_SPA_REPORTED = 622;
+  ATOM_PDF_LOAD_REPORTED = 859;
+  ATOM_PDF_API_USAGE_REPORTED = 860;
+  ATOM_PDF_SEARCH_REPORTED = 861;
+  ATOM_HDMI_EARC_STATUS_REPORTED = 701;
+  ATOM_HDMI_SOUNDBAR_MODE_STATUS_REPORTED = 724;
+  ATOM_MEDIA_PROVIDER_DATABASE_ROLLBACK_REPORTED = 784;
+  ATOM_BACKUP_SETUP_STATUS_REPORTED = 785;
+  ATOM_PHOTOPICKER_SESSION_INFO_REPORTED = 886;
+  ATOM_PHOTOPICKER_API_INFO_REPORTED = 887;
+  ATOM_PHOTOPICKER_UI_EVENT_LOGGED = 888;
+  ATOM_PHOTOPICKER_MEDIA_ITEM_STATUS_REPORTED = 889;
+  ATOM_PHOTOPICKER_PREVIEW_INFO_LOGGED = 890;
+  ATOM_PHOTOPICKER_MENU_INTERACTION_LOGGED = 891;
+  ATOM_PHOTOPICKER_BANNER_INTERACTION_LOGGED = 892;
+  ATOM_PHOTOPICKER_MEDIA_LIBRARY_INFO_LOGGED = 893;
+  ATOM_PHOTOPICKER_PAGE_INFO_LOGGED = 894;
+  ATOM_PHOTOPICKER_MEDIA_GRID_SYNC_INFO_REPORTED = 895;
+  ATOM_PHOTOPICKER_ALBUM_SYNC_INFO_REPORTED = 896;
+  ATOM_PHOTOPICKER_SEARCH_INFO_REPORTED = 897;
+  ATOM_SEARCH_DATA_EXTRACTION_DETAILS_REPORTED = 898;
+  ATOM_EMBEDDED_PHOTOPICKER_INFO_REPORTED = 899;
+  ATOM_WEAR_POWER_MENU_OPENED = 731;
+  ATOM_WEAR_ASSISTANT_OPENED = 755;
+  ATOM_KERNEL_OOM_KILL_OCCURRED = 754;
+  ATOM_AUTOFILL_UI_EVENT_REPORTED = 603;
+  ATOM_AUTOFILL_FILL_REQUEST_REPORTED = 604;
+  ATOM_AUTOFILL_FILL_RESPONSE_REPORTED = 605;
+  ATOM_AUTOFILL_SAVE_EVENT_REPORTED = 606;
+  ATOM_AUTOFILL_SESSION_COMMITTED = 607;
+  ATOM_AUTOFILL_FIELD_CLASSIFICATION_EVENT_REPORTED = 659;
+  ATOM_TV_LOW_POWER_STANDBY_POLICY = 679;
+  ATOM_EXTERNAL_TV_INPUT_EVENT = 717;
+  ATOM_COMPONENT_STATE_CHANGED_REPORTED = 863;
+  ATOM_AI_WALLPAPERS_BUTTON_PRESSED = 706;
+  ATOM_AI_WALLPAPERS_TEMPLATE_SELECTED = 707;
+  ATOM_AI_WALLPAPERS_TERM_SELECTED = 708;
+  ATOM_AI_WALLPAPERS_WALLPAPER_SET = 709;
+  ATOM_AI_WALLPAPERS_SESSION_SUMMARY = 710;
+  ATOM_APF_SESSION_INFO_REPORTED = 777;
+  ATOM_IP_CLIENT_RA_INFO_REPORTED = 778;
+  ATOM_VPN_CONNECTION_STATE_CHANGED = 850;
+  ATOM_VPN_CONNECTION_REPORTED = 851;
+  ATOM_NETWORK_STATS_RECORDER_FILE_OPERATED = 783;
+  ATOM_DAILY_KEEPALIVE_INFO_REPORTED = 650;
+  ATOM_NETWORK_REQUEST_STATE_CHANGED = 779;
+  ATOM_TETHERING_ACTIVE_SESSIONS_REPORTED = 925;
+  ATOM_ART_DATUM_REPORTED = 332;
+  ATOM_ART_DEVICE_DATUM_REPORTED = 550;
+  ATOM_ART_DATUM_DELTA_REPORTED = 565;
+  ATOM_ART_DEX2OAT_REPORTED = 929;
+  ATOM_ART_DEVICE_STATUS = 10205;
+  ATOM_ODREFRESH_REPORTED = 366;
+  ATOM_ODSIGN_REPORTED = 548;
+  ATOM_BACKGROUND_DEXOPT_JOB_ENDED = 467;
+  ATOM_PREREBOOT_DEXOPT_JOB_ENDED = 883;
+  ATOM_PERMISSION_RATIONALE_DIALOG_VIEWED = 645;
+  ATOM_PERMISSION_RATIONALE_DIALOG_ACTION_REPORTED = 646;
+  ATOM_APP_DATA_SHARING_UPDATES_NOTIFICATION_INTERACTION = 647;
+  ATOM_APP_DATA_SHARING_UPDATES_FRAGMENT_VIEWED = 648;
+  ATOM_APP_DATA_SHARING_UPDATES_FRAGMENT_ACTION_REPORTED = 649;
+  ATOM_ENHANCED_CONFIRMATION_DIALOG_RESULT_REPORTED = 827;
+  ATOM_ENHANCED_CONFIRMATION_RESTRICTION_CLEARED = 828;
+  ATOM_EMERGENCY_STATE_CHANGED = 633;
+  ATOM_CHRE_SIGNIFICANT_MOTION_STATE_CHANGED = 868;
+  ATOM_HEALTH_CONNECT_UI_IMPRESSION = 623;
+  ATOM_HEALTH_CONNECT_UI_INTERACTION = 624;
+  ATOM_HEALTH_CONNECT_APP_OPENED_REPORTED = 625;
+  ATOM_HEALTH_CONNECT_API_CALLED = 616;
+  ATOM_HEALTH_CONNECT_USAGE_STATS = 617;
+  ATOM_HEALTH_CONNECT_STORAGE_STATS = 618;
+  ATOM_HEALTH_CONNECT_API_INVOKED = 643;
+  ATOM_EXERCISE_ROUTE_API_CALLED = 654;
+  ATOM_SELINUX_AUDIT_LOG = 799;
+  ATOM_ONDEVICEPERSONALIZATION_API_CALLED = 711;
+  ATOM_CELLULAR_RADIO_POWER_STATE_CHANGED = 713;
+  ATOM_EMERGENCY_NUMBERS_INFO = 10180;
+  ATOM_DATA_NETWORK_VALIDATION = 10207;
+  ATOM_DATA_RAT_STATE_CHANGED = 854;
+  ATOM_CONNECTED_CHANNEL_CHANGED = 882;
+  ATOM_QUALIFIED_RAT_LIST_CHANGED = 634;
+  ATOM_QNS_IMS_CALL_DROP_STATS = 635;
+  ATOM_QNS_FALLBACK_RESTRICTION_CHANGED = 636;
+  ATOM_QNS_RAT_PREFERENCE_MISMATCH_INFO = 10177;
+  ATOM_QNS_HANDOVER_TIME_MILLIS = 10178;
+  ATOM_QNS_HANDOVER_PINGPONG = 10179;
+  ATOM_SATELLITE_CONTROLLER = 10182;
+  ATOM_SATELLITE_SESSION = 10183;
+  ATOM_SATELLITE_INCOMING_DATAGRAM = 10184;
+  ATOM_SATELLITE_OUTGOING_DATAGRAM = 10185;
+  ATOM_SATELLITE_PROVISION = 10186;
+  ATOM_SATELLITE_SOS_MESSAGE_RECOMMENDER = 10187;
+  ATOM_CARRIER_ROAMING_SATELLITE_SESSION = 10211;
+  ATOM_CARRIER_ROAMING_SATELLITE_CONTROLLER_STATS = 10212;
+  ATOM_CONTROLLER_STATS_PER_PACKAGE = 10213;
+  ATOM_SATELLITE_ENTITLEMENT = 10214;
+  ATOM_SATELLITE_CONFIG_UPDATER = 10215;
+  ATOM_SATELLITE_ACCESS_CONTROLLER = 10219;
+  ATOM_CELLULAR_IDENTIFIER_DISCLOSED = 800;
+  ATOM_KEYBOARD_CONFIGURED = 682;
+  ATOM_KEYBOARD_SYSTEMS_EVENT_REPORTED = 683;
+  ATOM_INPUTDEVICE_USAGE_REPORTED = 686;
+  ATOM_TOUCHPAD_USAGE = 10191;
+  ATOM_THREADNETWORK_TELEMETRY_DATA_REPORTED = 738;
+  ATOM_THREADNETWORK_TOPO_ENTRY_REPEATED = 739;
+  ATOM_THREADNETWORK_DEVICE_INFO_REPORTED = 740;
+  ATOM_CRONET_ENGINE_CREATED = 703;
+  ATOM_CRONET_TRAFFIC_REPORTED = 704;
+  ATOM_CRONET_ENGINE_BUILDER_INITIALIZED = 762;
+  ATOM_CRONET_HTTP_FLAGS_INITIALIZED = 763;
+  ATOM_CRONET_INITIALIZED = 764;
+  ATOM_WEAR_MODE_STATE_CHANGED = 715;
+  ATOM_RENDERER_INITIALIZED = 736;
+  ATOM_SCHEMA_VERSION_RECEIVED = 737;
+  ATOM_LAYOUT_INSPECTED = 741;
+  ATOM_LAYOUT_EXPRESSION_INSPECTED = 742;
+  ATOM_LAYOUT_ANIMATIONS_INSPECTED = 743;
+  ATOM_MATERIAL_COMPONENTS_INSPECTED = 744;
+  ATOM_TILE_REQUESTED = 745;
+  ATOM_STATE_RESPONSE_RECEIVED = 746;
+  ATOM_TILE_RESPONSE_RECEIVED = 747;
+  ATOM_INFLATION_FINISHED = 748;
+  ATOM_INFLATION_FAILED = 749;
+  ATOM_IGNORED_INFLATION_FAILURES_REPORTED = 750;
+  ATOM_DRAWABLE_RENDERED = 751;
+  ATOM_MEDIA_ACTION_REPORTED = 608;
+  ATOM_MEDIA_CONTROLS_LAUNCHED = 609;
+  ATOM_MEDIA_SESSION_STATE_CHANGED = 677;
+  ATOM_WEAR_MEDIA_OUTPUT_SWITCHER_DEVICE_SCAN_API_LATENCY = 757;
+  ATOM_WEAR_MEDIA_OUTPUT_SWITCHER_SASS_DEVICE_UNAVAILABLE = 758;
+  ATOM_WEAR_MEDIA_OUTPUT_SWITCHER_FASTPAIR_API_TIMEOUT = 759;
+  ATOM_MEDIATOR_UPDATED = 721;
+  ATOM_SYSPROXY_BLUETOOTH_BYTES_TRANSFER = 10196;
+  ATOM_SYSPROXY_CONNECTION_UPDATED = 786;
+  ATOM_ADAPTIVE_AUTH_UNLOCK_AFTER_LOCK_REPORTED = 820;
+  ATOM_FEDERATED_COMPUTE_API_CALLED = 712;
+  ATOM_FEDERATED_COMPUTE_TRAINING_EVENT_REPORTED = 771;
+  ATOM_EXAMPLE_ITERATOR_NEXT_LATENCY_REPORTED = 838;
+  ATOM_RKPD_POOL_STATS = 664;
+  ATOM_RKPD_CLIENT_OPERATION = 665;
+  ATOM_CPU_POLICY = 10199;
+  ATOM_ATOM_9999 = 9999;
+  ATOM_ATOM_99999 = 99999;
+  ATOM_SCREEN_OFF_REPORTED = 776;
+  ATOM_SCREEN_TIMEOUT_OVERRIDE_REPORTED = 836;
+  ATOM_SCREEN_INTERACTIVE_SESSION_REPORTED = 837;
+  ATOM_SCREEN_DIM_REPORTED = 867;
+  ATOM_FULL_SCREEN_INTENT_LAUNCHED = 631;
+  ATOM_BAL_ALLOWED = 632;
+  ATOM_IN_TASK_ACTIVITY_STARTED = 685;
+  ATOM_CACHED_APPS_HIGH_WATERMARK = 10189;
+  ATOM_STYLUS_PREDICTION_METRICS_REPORTED = 718;
+  ATOM_USER_RISK_EVENT_REPORTED = 725;
+  ATOM_MEDIA_PROJECTION_STATE_CHANGED = 729;
+  ATOM_MEDIA_PROJECTION_TARGET_CHANGED = 730;
+  ATOM_EXCESSIVE_BINDER_PROXY_COUNT_REPORTED = 853;
+  ATOM_PROXY_BYTES_TRANSFER_BY_FG_BG = 10200;
+  ATOM_MOBILE_BYTES_TRANSFER_BY_PROC_STATE = 10204;
+  ATOM_BIOMETRIC_FRR_NOTIFICATION = 817;
+  ATOM_SENSITIVE_CONTENT_MEDIA_PROJECTION_SESSION = 830;
+  ATOM_SENSITIVE_NOTIFICATION_APP_PROTECTION_SESSION = 831;
+  ATOM_SENSITIVE_NOTIFICATION_APP_PROTECTION_APPLIED = 832;
+  ATOM_SENSITIVE_NOTIFICATION_REDACTION = 833;
+  ATOM_SENSITIVE_CONTENT_APP_PROTECTION = 835;
+  ATOM_APP_RESTRICTION_STATE_CHANGED = 866;
+  ATOM_DREAM_SETTING_CHANGED = 705;
+  ATOM_DREAM_SETTING_SNAPSHOT = 10192;
+  ATOM_BOOT_INTEGRITY_INFO_REPORTED = 775;
   ATOM_WIFI_AWARE_NDP_REPORTED = 638;
   ATOM_WIFI_AWARE_ATTACH_REPORTED = 639;
   ATOM_WIFI_SELF_RECOVERY_TRIGGERED = 661;
@@ -784,39 +946,99 @@
   ATOM_WIFI_LOCAL_ONLY_REQUEST_SCAN_TRIGGERED = 693;
   ATOM_WIFI_THREAD_TASK_EXECUTED = 694;
   ATOM_WIFI_STATE_CHANGED = 700;
+  ATOM_PNO_SCAN_STARTED = 719;
+  ATOM_PNO_SCAN_STOPPED = 720;
+  ATOM_WIFI_IS_UNUSABLE_REPORTED = 722;
+  ATOM_WIFI_AP_CAPABILITIES_REPORTED = 723;
+  ATOM_SOFT_AP_STATE_CHANGED = 805;
+  ATOM_SCORER_PREDICTION_RESULT_REPORTED = 884;
   ATOM_WIFI_AWARE_CAPABILITIES = 10190;
   ATOM_WIFI_MODULE_INFO = 10193;
-  ATOM_SETTINGS_SPA_REPORTED = 622;
+  ATOM_WIFI_SETTING_INFO = 10194;
+  ATOM_WIFI_COMPLEX_SETTING_INFO = 10195;
+  ATOM_WIFI_CONFIGURED_NETWORK_INFO = 10198;
+  ATOM_MTE_STATE = 10181;
+  ATOM_HOTWORD_EGRESS_SIZE_ATOM_REPORTED = 761;
+  ATOM_SANDBOX_API_CALLED = 488;
+  ATOM_SANDBOX_ACTIVITY_EVENT_OCCURRED = 735;
+  ATOM_SDK_SANDBOX_RESTRICTED_ACCESS_IN_SESSION = 796;
+  ATOM_SANDBOX_SDK_STORAGE = 10159;
   ATOM_EXPRESS_EVENT_REPORTED = 528;
   ATOM_EXPRESS_HISTOGRAM_SAMPLE_REPORTED = 593;
   ATOM_EXPRESS_UID_EVENT_REPORTED = 644;
   ATOM_EXPRESS_UID_HISTOGRAM_SAMPLE_REPORTED = 658;
-  ATOM_PERMISSION_RATIONALE_DIALOG_VIEWED = 645;
-  ATOM_PERMISSION_RATIONALE_DIALOG_ACTION_REPORTED = 646;
-  ATOM_APP_DATA_SHARING_UPDATES_NOTIFICATION_INTERACTION = 647;
-  ATOM_APP_DATA_SHARING_UPDATES_FRAGMENT_VIEWED = 648;
-  ATOM_APP_DATA_SHARING_UPDATES_FRAGMENT_ACTION_REPORTED = 649;
-  ATOM_WS_INCOMING_CALL_ACTION_REPORTED = 626;
-  ATOM_WS_CALL_DISCONNECTION_REPORTED = 627;
-  ATOM_WS_CALL_DURATION_REPORTED = 628;
-  ATOM_WS_CALL_USER_EXPERIENCE_LATENCY_REPORTED = 629;
-  ATOM_WS_CALL_INTERACTION_REPORTED = 630;
-  ATOM_FULL_SCREEN_INTENT_LAUNCHED = 631;
-  ATOM_BAL_ALLOWED = 632;
-  ATOM_IN_TASK_ACTIVITY_STARTED = 685;
-  ATOM_CACHED_APPS_HIGH_WATERMARK = 10189;
-  ATOM_ODREFRESH_REPORTED = 366;
-  ATOM_ODSIGN_REPORTED = 548;
-  ATOM_ART_DATUM_REPORTED = 332;
-  ATOM_ART_DEVICE_DATUM_REPORTED = 550;
-  ATOM_ART_DATUM_DELTA_REPORTED = 565;
-  ATOM_BACKGROUND_DEXOPT_JOB_ENDED = 467;
-  ATOM_WEAR_ADAPTIVE_SUSPEND_STATS_REPORTED = 619;
-  ATOM_WEAR_POWER_ANOMALY_SERVICE_OPERATIONAL_STATS_REPORTED = 620;
-  ATOM_WEAR_POWER_ANOMALY_SERVICE_EVENT_STATS_REPORTED = 621;
-  ATOM_EMERGENCY_STATE_CHANGED = 633;
-  ATOM_DND_STATE_CHANGED = 657;
-  ATOM_MTE_STATE = 10181;
+  ATOM_IKE_SESSION_TERMINATED = 678;
+  ATOM_IKE_LIVENESS_CHECK_SESSION_VALIDATED = 760;
+  ATOM_NEGOTIATED_SECURITY_ASSOCIATION = 821;
+  ATOM_APP_SEARCH_SET_SCHEMA_STATS_REPORTED = 385;
+  ATOM_APP_SEARCH_SCHEMA_MIGRATION_STATS_REPORTED = 579;
+  ATOM_APP_SEARCH_USAGE_SEARCH_INTENT_STATS_REPORTED = 825;
+  ATOM_APP_SEARCH_USAGE_SEARCH_INTENT_RAW_QUERY_STATS_REPORTED = 826;
+  ATOM_DEVICE_POLICY_MANAGEMENT_MODE = 10216;
+  ATOM_DEVICE_POLICY_STATE = 10217;
+  ATOM_DESKTOP_MODE_UI_CHANGED = 818;
+  ATOM_DESKTOP_MODE_SESSION_TASK_UPDATE = 819;
+  ATOM_MEDIA_CODEC_RECLAIM_REQUEST_COMPLETED = 600;
+  ATOM_MEDIA_CODEC_STARTED = 641;
+  ATOM_MEDIA_CODEC_STOPPED = 642;
+  ATOM_MEDIA_CODEC_RENDERED = 684;
+  ATOM_MEDIA_EDITING_ENDED_REPORTED = 798;
+  ATOM_CAR_WAKEUP_FROM_SUSPEND_REPORTED = 852;
+  ATOM_PLUGIN_INITIALIZED = 655;
+  ATOM_CAR_RECENTS_EVENT_REPORTED = 770;
+  ATOM_CAR_CALM_MODE_EVENT_REPORTED = 797;
+  ATOM_CAMERA_FEATURE_COMBINATION_QUERY_EVENT = 900;
+  ATOM_THERMAL_STATUS_CALLED = 772;
+  ATOM_THERMAL_HEADROOM_CALLED = 773;
+  ATOM_THERMAL_HEADROOM_THRESHOLDS_CALLED = 774;
+  ATOM_ADPF_HINT_SESSION_TID_CLEANUP = 839;
+  ATOM_THERMAL_HEADROOM_THRESHOLDS = 10201;
+  ATOM_ADPF_SESSION_SNAPSHOT = 10218;
+  ATOM_BLUETOOTH_HASHED_DEVICE_NAME_REPORTED = 613;
+  ATOM_BLUETOOTH_L2CAP_COC_CLIENT_CONNECTION = 614;
+  ATOM_BLUETOOTH_L2CAP_COC_SERVER_CONNECTION = 615;
+  ATOM_BLUETOOTH_LE_SESSION_CONNECTED = 656;
+  ATOM_RESTRICTED_BLUETOOTH_DEVICE_NAME_REPORTED = 666;
+  ATOM_BLUETOOTH_PROFILE_CONNECTION_ATTEMPTED = 696;
+  ATOM_BLUETOOTH_CONTENT_PROFILE_ERROR_REPORTED = 781;
+  ATOM_BLUETOOTH_RFCOMM_CONNECTION_ATTEMPTED = 782;
+  ATOM_REMOTE_DEVICE_INFORMATION_WITH_METRIC_ID = 862;
+  ATOM_LE_APP_SCAN_STATE_CHANGED = 870;
+  ATOM_LE_RADIO_SCAN_STOPPED = 871;
+  ATOM_LE_SCAN_RESULT_RECEIVED = 872;
+  ATOM_LE_SCAN_ABUSED = 873;
+  ATOM_LE_ADV_STATE_CHANGED = 874;
+  ATOM_LE_ADV_ERROR_REPORTED = 875;
+  ATOM_A2DP_SESSION_REPORTED = 904;
+  ATOM_BLUETOOTH_CROSS_LAYER_EVENT_REPORTED = 916;
+  ATOM_BROADCAST_AUDIO_SESSION_REPORTED = 927;
+  ATOM_BROADCAST_AUDIO_SYNC_REPORTED = 928;
+  ATOM_DEVICE_LOCK_CHECK_IN_REQUEST_REPORTED = 726;
+  ATOM_DEVICE_LOCK_PROVISIONING_COMPLETE_REPORTED = 727;
+  ATOM_DEVICE_LOCK_KIOSK_APP_REQUEST_REPORTED = 728;
+  ATOM_DEVICE_LOCK_CHECK_IN_RETRY_REPORTED = 789;
+  ATOM_DEVICE_LOCK_PROVISION_FAILURE_REPORTED = 790;
+  ATOM_DEVICE_LOCK_LOCK_UNLOCK_DEVICE_FAILURE_REPORTED = 791;
+  ATOM_APPLICATION_GRAMMATICAL_INFLECTION_CHANGED = 584;
+  ATOM_SYSTEM_GRAMMATICAL_INFLECTION_CHANGED = 816;
+  ATOM_EMERGENCY_NUMBER_DIALED = 637;
+  ATOM_JSSCRIPTENGINE_LATENCY_REPORTED = 483;
+  ATOM_AD_SERVICES_API_CALLED = 435;
+  ATOM_AD_SERVICES_MESUREMENT_REPORTS_UPLOADED = 436;
+  ATOM_MOBILE_DATA_DOWNLOAD_FILE_GROUP_STATUS_REPORTED = 490;
+  ATOM_MOBILE_DATA_DOWNLOAD_DOWNLOAD_RESULT_REPORTED = 502;
+  ATOM_AD_SERVICES_SETTINGS_USAGE_REPORTED = 493;
+  ATOM_BACKGROUND_FETCH_PROCESS_REPORTED = 496;
+  ATOM_UPDATE_CUSTOM_AUDIENCE_PROCESS_REPORTED = 497;
+  ATOM_RUN_AD_BIDDING_PROCESS_REPORTED = 498;
+  ATOM_RUN_AD_SCORING_PROCESS_REPORTED = 499;
+  ATOM_RUN_AD_SELECTION_PROCESS_REPORTED = 500;
+  ATOM_RUN_AD_BIDDING_PER_CA_PROCESS_REPORTED = 501;
+  ATOM_MOBILE_DATA_DOWNLOAD_FILE_GROUP_STORAGE_STATS_REPORTED = 503;
+  ATOM_AD_SERVICES_MEASUREMENT_REGISTRATIONS = 512;
+  ATOM_AD_SERVICES_GET_TOPICS_REPORTED = 535;
+  ATOM_AD_SERVICES_EPOCH_COMPUTATION_GET_TOP_TOPICS_REPORTED = 536;
+  ATOM_AD_SERVICES_EPOCH_COMPUTATION_CLASSIFIER_REPORTED = 537;
   ATOM_AD_SERVICES_BACK_COMPAT_GET_TOPICS_REPORTED = 598;
   ATOM_AD_SERVICES_BACK_COMPAT_EPOCH_COMPUTATION_CLASSIFIER_REPORTED = 599;
   ATOM_AD_SERVICES_MEASUREMENT_DEBUG_KEYS = 640;
@@ -826,68 +1048,68 @@
   ATOM_AD_SERVICES_MEASUREMENT_ATTRIBUTION = 674;
   ATOM_AD_SERVICES_MEASUREMENT_JOBS = 675;
   ATOM_AD_SERVICES_MEASUREMENT_WIPEOUT = 676;
+  ATOM_AD_SERVICES_MEASUREMENT_AD_ID_MATCH_FOR_DEBUG_KEYS = 695;
+  ATOM_AD_SERVICES_ENROLLMENT_DATA_STORED = 697;
+  ATOM_AD_SERVICES_ENROLLMENT_FILE_DOWNLOADED = 698;
+  ATOM_AD_SERVICES_ENROLLMENT_MATCHED = 699;
   ATOM_AD_SERVICES_CONSENT_MIGRATED = 702;
-  ATOM_RKPD_POOL_STATS = 664;
-  ATOM_RKPD_CLIENT_OPERATION = 665;
-  ATOM_AUTOFILL_UI_EVENT_REPORTED = 603;
-  ATOM_AUTOFILL_FILL_REQUEST_REPORTED = 604;
-  ATOM_AUTOFILL_FILL_RESPONSE_REPORTED = 605;
-  ATOM_AUTOFILL_SAVE_EVENT_REPORTED = 606;
-  ATOM_AUTOFILL_SESSION_COMMITTED = 607;
-  ATOM_AUTOFILL_FIELD_CLASSIFICATION_EVENT_REPORTED = 659;
+  ATOM_AD_SERVICES_ENROLLMENT_FAILED = 714;
+  ATOM_AD_SERVICES_MEASUREMENT_CLICK_VERIFICATION = 756;
+  ATOM_AD_SERVICES_ENCRYPTION_KEY_FETCHED = 765;
+  ATOM_AD_SERVICES_ENCRYPTION_KEY_DB_TRANSACTION_ENDED = 766;
+  ATOM_DESTINATION_REGISTERED_BEACONS = 767;
+  ATOM_REPORT_INTERACTION_API_CALLED = 768;
+  ATOM_INTERACTION_REPORTING_TABLE_CLEARED = 769;
+  ATOM_APP_MANIFEST_CONFIG_HELPER_CALLED = 788;
+  ATOM_AD_FILTERING_PROCESS_JOIN_CA_REPORTED = 793;
+  ATOM_AD_FILTERING_PROCESS_AD_SELECTION_REPORTED = 794;
+  ATOM_AD_COUNTER_HISTOGRAM_UPDATER_REPORTED = 795;
+  ATOM_SIGNATURE_VERIFICATION = 807;
+  ATOM_K_ANON_IMMEDIATE_SIGN_JOIN_STATUS_REPORTED = 808;
+  ATOM_K_ANON_BACKGROUND_JOB_STATUS_REPORTED = 809;
+  ATOM_K_ANON_INITIALIZE_STATUS_REPORTED = 810;
+  ATOM_K_ANON_SIGN_STATUS_REPORTED = 811;
+  ATOM_K_ANON_JOIN_STATUS_REPORTED = 812;
+  ATOM_K_ANON_KEY_ATTESTATION_STATUS_REPORTED = 813;
+  ATOM_GET_AD_SELECTION_DATA_API_CALLED = 814;
+  ATOM_GET_AD_SELECTION_DATA_BUYER_INPUT_GENERATED = 815;
+  ATOM_BACKGROUND_JOB_SCHEDULING_REPORTED = 834;
+  ATOM_TOPICS_ENCRYPTION_EPOCH_COMPUTATION_REPORTED = 840;
+  ATOM_TOPICS_ENCRYPTION_GET_TOPICS_REPORTED = 841;
+  ATOM_ADSERVICES_SHELL_COMMAND_CALLED = 842;
+  ATOM_UPDATE_SIGNALS_API_CALLED = 843;
+  ATOM_ENCODING_JOB_RUN = 844;
+  ATOM_ENCODING_JS_FETCH = 845;
+  ATOM_ENCODING_JS_EXECUTION = 846;
+  ATOM_PERSIST_AD_SELECTION_RESULT_CALLED = 847;
+  ATOM_SERVER_AUCTION_KEY_FETCH_CALLED = 848;
+  ATOM_SERVER_AUCTION_BACKGROUND_KEY_FETCH_ENABLED = 849;
+  ATOM_AD_SERVICES_MEASUREMENT_PROCESS_ODP_REGISTRATION = 864;
+  ATOM_AD_SERVICES_MEASUREMENT_NOTIFY_REGISTRATION_TO_ODP = 865;
+  ATOM_SELECT_ADS_FROM_OUTCOMES_API_CALLED = 876;
+  ATOM_REPORT_IMPRESSION_API_CALLED = 877;
+  ATOM_AD_SERVICES_ENROLLMENT_TRANSACTION_STATS = 885;
+  ATOM_EXTERNAL_DISPLAY_STATE_CHANGED = 806;
+  ATOM_DISPLAY_MODE_DIRECTOR_VOTE_CHANGED = 792;
   ATOM_TEST_EXTENSION_ATOM_REPORTED = 660;
   ATOM_TEST_RESTRICTED_ATOM_REPORTED = 672;
   ATOM_STATS_SOCKET_LOSS_REPORTED = 752;
-  ATOM_PLUGIN_INITIALIZED = 655;
-  ATOM_TV_LOW_POWER_STANDBY_POLICY = 679;
+  ATOM_NFC_OBSERVE_MODE_STATE_CHANGED = 855;
+  ATOM_NFC_FIELD_CHANGED = 856;
+  ATOM_NFC_POLLING_LOOP_NOTIFICATION_REPORTED = 857;
+  ATOM_NFC_PROPRIETARY_CAPABILITIES_REPORTED = 858;
   ATOM_LOCKSCREEN_SHORTCUT_SELECTED = 611;
   ATOM_LOCKSCREEN_SHORTCUT_TRIGGERED = 612;
-  ATOM_EMERGENCY_NUMBERS_INFO = 10180;
-  ATOM_QUALIFIED_RAT_LIST_CHANGED = 634;
-  ATOM_QNS_IMS_CALL_DROP_STATS = 635;
-  ATOM_QNS_FALLBACK_RESTRICTION_CHANGED = 636;
-  ATOM_QNS_RAT_PREFERENCE_MISMATCH_INFO = 10177;
-  ATOM_QNS_HANDOVER_TIME_MILLIS = 10178;
-  ATOM_QNS_HANDOVER_PINGPONG = 10179;
-  ATOM_SATELLITE_CONTROLLER = 10182;
-  ATOM_SATELLITE_SESSION = 10183;
-  ATOM_SATELLITE_INCOMING_DATAGRAM = 10184;
-  ATOM_SATELLITE_OUTGOING_DATAGRAM = 10185;
-  ATOM_SATELLITE_PROVISION = 10186;
-  ATOM_SATELLITE_SOS_MESSAGE_RECOMMENDER = 10187;
-  ATOM_IKE_SESSION_TERMINATED = 678;
-  ATOM_IKE_LIVENESS_CHECK_SESSION_VALIDATED = 760;
-  ATOM_BLUETOOTH_HASHED_DEVICE_NAME_REPORTED = 613;
-  ATOM_BLUETOOTH_L2CAP_COC_CLIENT_CONNECTION = 614;
-  ATOM_BLUETOOTH_L2CAP_COC_SERVER_CONNECTION = 615;
-  ATOM_BLUETOOTH_LE_SESSION_CONNECTED = 656;
-  ATOM_RESTRICTED_BLUETOOTH_DEVICE_NAME_REPORTED = 666;
-  ATOM_BLUETOOTH_PROFILE_CONNECTION_ATTEMPTED = 696;
-  ATOM_HEALTH_CONNECT_UI_IMPRESSION = 623;
-  ATOM_HEALTH_CONNECT_UI_INTERACTION = 624;
-  ATOM_HEALTH_CONNECT_APP_OPENED_REPORTED = 625;
-  ATOM_HEALTH_CONNECT_API_CALLED = 616;
-  ATOM_HEALTH_CONNECT_USAGE_STATS = 617;
-  ATOM_HEALTH_CONNECT_STORAGE_STATS = 618;
-  ATOM_HEALTH_CONNECT_API_INVOKED = 643;
-  ATOM_EXERCISE_ROUTE_API_CALLED = 654;
-  ATOM_ATOM_9999 = 9999;
-  ATOM_ATOM_99999 = 99999;
-  ATOM_THREADNETWORK_TELEMETRY_DATA_REPORTED = 738;
-  ATOM_THREADNETWORK_TOPO_ENTRY_REPEATED = 739;
-  ATOM_THREADNETWORK_DEVICE_INFO_REPORTED = 740;
-  ATOM_EMERGENCY_NUMBER_DIALED = 637;
-  ATOM_SANDBOX_API_CALLED = 488;
-  ATOM_SANDBOX_ACTIVITY_EVENT_OCCURRED = 735;
-  ATOM_SANDBOX_SDK_STORAGE = 10159;
-  ATOM_CRONET_ENGINE_CREATED = 703;
-  ATOM_CRONET_TRAFFIC_REPORTED = 704;
-  ATOM_CRONET_ENGINE_BUILDER_INITIALIZED = 762;
-  ATOM_CRONET_HTTP_FLAGS_INITIALIZED = 763;
-  ATOM_CRONET_INITIALIZED = 764;
-  ATOM_DAILY_KEEPALIVE_INFO_REPORTED = 650;
-  ATOM_IP_CLIENT_RA_INFO_REPORTED = 778;
-  ATOM_APF_SESSION_INFO_REPORTED = 777;
+  ATOM_LAUNCHER_IMPRESSION_EVENT_V2 = 716;
+  ATOM_DISPLAY_SWITCH_LATENCY_TRACKED = 753;
+  ATOM_NOTIFICATION_LISTENER_SERVICE = 829;
+  ATOM_NAV_HANDLE_TOUCH_POINTS = 869;
+  ATOM_WEAR_ADAPTIVE_SUSPEND_STATS_REPORTED = 619;
+  ATOM_WEAR_POWER_ANOMALY_SERVICE_OPERATIONAL_STATS_REPORTED = 620;
+  ATOM_WEAR_POWER_ANOMALY_SERVICE_EVENT_STATS_REPORTED = 621;
+  ATOM_APEX_INSTALLATION_REQUESTED = 732;
+  ATOM_APEX_INSTALLATION_STAGED = 733;
+  ATOM_APEX_INSTALLATION_ENDED = 734;
   ATOM_CREDENTIAL_MANAGER_API_CALLED = 585;
   ATOM_CREDENTIAL_MANAGER_INIT_PHASE_REPORTED = 651;
   ATOM_CREDENTIAL_MANAGER_CANDIDATE_PHASE_REPORTED = 652;
@@ -898,10 +1120,5 @@
   ATOM_CREDENTIAL_MANAGER_AUTH_CLICK_REPORTED = 670;
   ATOM_CREDENTIAL_MANAGER_APIV2_CALLED = 671;
   ATOM_UWB_ACTIVITY_INFO = 10188;
-  ATOM_MEDIA_ACTION_REPORTED = 608;
-  ATOM_MEDIA_CONTROLS_LAUNCHED = 609;
-  ATOM_MEDIA_CODEC_RECLAIM_REQUEST_COMPLETED = 600;
-  ATOM_MEDIA_CODEC_STARTED = 641;
-  ATOM_MEDIA_CODEC_STOPPED = 642;
-  ATOM_MEDIA_CODEC_RENDERED = 684;
+  ATOM_DND_STATE_CHANGED = 657;
 }
\ No newline at end of file
diff --git a/protos/perfetto/trace/perfetto_trace.proto b/protos/perfetto/trace/perfetto_trace.proto
index 6177004..af762a7 100644
--- a/protos/perfetto/trace/perfetto_trace.proto
+++ b/protos/perfetto/trace/perfetto_trace.proto
@@ -2038,11 +2038,9 @@
   ATOM_LMK_KILL_OCCURRED = 51;
   ATOM_PICTURE_IN_PICTURE_STATE_CHANGED = 52;
   ATOM_WIFI_MULTICAST_LOCK_STATE_CHANGED = 53;
-  ATOM_LMK_STATE_CHANGED = 54;
   ATOM_APP_START_MEMORY_STATE_CAPTURED = 55;
   ATOM_SHUTDOWN_SEQUENCE_REPORTED = 56;
   ATOM_BOOT_SEQUENCE_REPORTED = 57;
-  ATOM_DAVEY_OCCURRED = 58;
   ATOM_OVERLAY_STATE_CHANGED = 59;
   ATOM_FOREGROUND_SERVICE_STATE_CHANGED = 60;
   ATOM_CALL_STATE_CHANGED = 61;
@@ -2359,7 +2357,6 @@
   ATOM_PRIVACY_TOGGLE_DIALOG_INTERACTION = 382;
   ATOM_APP_SEARCH_OPTIMIZE_STATS_REPORTED = 383;
   ATOM_NON_A11Y_TOOL_SERVICE_WARNING_REPORT = 384;
-  ATOM_APP_SEARCH_SET_SCHEMA_STATS_REPORTED = 385;
   ATOM_APP_COMPAT_STATE_CHANGED = 386;
   ATOM_SIZE_COMPAT_RESTART_BUTTON_EVENT_REPORTED = 387;
   ATOM_SPLITSCREEN_UI_CHANGED = 388;
@@ -2408,8 +2405,6 @@
   ATOM_HOTWORD_DETECTION_SERVICE_RESTARTED = 432;
   ATOM_HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED = 433;
   ATOM_HOTWORD_DETECTOR_EVENTS = 434;
-  ATOM_AD_SERVICES_API_CALLED = 435;
-  ATOM_AD_SERVICES_MESUREMENT_REPORTS_UPLOADED = 436;
   ATOM_BOOT_COMPLETED_BROADCAST_COMPLETION_LATENCY_REPORTED = 437;
   ATOM_CONTACTS_INDEXER_UPDATE_STATS_REPORTED = 440;
   ATOM_APP_BACKGROUND_RESTRICTIONS_INFO = 441;
@@ -2453,25 +2448,14 @@
   ATOM_CB_MODULE_ERROR_REPORTED = 480;
   ATOM_CB_SERVICE_FEATURE_CHANGED = 481;
   ATOM_CB_RECEIVER_FEATURE_CHANGED = 482;
-  ATOM_JSSCRIPTENGINE_LATENCY_REPORTED = 483;
   ATOM_PRIVACY_SIGNAL_NOTIFICATION_INTERACTION = 484;
   ATOM_PRIVACY_SIGNAL_ISSUE_CARD_INTERACTION = 485;
   ATOM_PRIVACY_SIGNALS_JOB_FAILURE = 486;
   ATOM_VIBRATION_REPORTED = 487;
   ATOM_UWB_RANGING_START = 489;
-  ATOM_MOBILE_DATA_DOWNLOAD_FILE_GROUP_STATUS_REPORTED = 490;
   ATOM_APP_COMPACTED_V2 = 491;
-  ATOM_AD_SERVICES_SETTINGS_USAGE_REPORTED = 493;
   ATOM_DISPLAY_BRIGHTNESS_CHANGED = 494;
   ATOM_ACTIVITY_ACTION_BLOCKED = 495;
-  ATOM_BACKGROUND_FETCH_PROCESS_REPORTED = 496;
-  ATOM_UPDATE_CUSTOM_AUDIENCE_PROCESS_REPORTED = 497;
-  ATOM_RUN_AD_BIDDING_PROCESS_REPORTED = 498;
-  ATOM_RUN_AD_SCORING_PROCESS_REPORTED = 499;
-  ATOM_RUN_AD_SELECTION_PROCESS_REPORTED = 500;
-  ATOM_RUN_AD_BIDDING_PER_CA_PROCESS_REPORTED = 501;
-  ATOM_MOBILE_DATA_DOWNLOAD_DOWNLOAD_RESULT_REPORTED = 502;
-  ATOM_MOBILE_DATA_DOWNLOAD_FILE_GROUP_STORAGE_STATS_REPORTED = 503;
   ATOM_NETWORK_DNS_SERVER_SUPPORT_REPORTED = 504;
   ATOM_VM_BOOTED = 505;
   ATOM_VM_EXITED = 506;
@@ -2480,7 +2464,6 @@
   ATOM_MEDIAMETRICS_SPATIALIZERDEVICEENABLED_REPORTED = 509;
   ATOM_MEDIAMETRICS_HEADTRACKERDEVICEENABLED_REPORTED = 510;
   ATOM_MEDIAMETRICS_HEADTRACKERDEVICESUPPORTED_REPORTED = 511;
-  ATOM_AD_SERVICES_MEASUREMENT_REGISTRATIONS = 512;
   ATOM_HEARING_AID_INFO_REPORTED = 513;
   ATOM_DEVICE_WIDE_JOB_CONSTRAINT_CHANGED = 514;
   ATOM_AMBIENT_MODE_CHANGED = 515;
@@ -2502,9 +2485,6 @@
   ATOM_BLUETOOTH_LOCAL_SUPPORTED_FEATURES_REPORTED = 532;
   ATOM_BLUETOOTH_GATT_APP_INFO = 533;
   ATOM_BRIGHTNESS_CONFIGURATION_UPDATED = 534;
-  ATOM_AD_SERVICES_GET_TOPICS_REPORTED = 535;
-  ATOM_AD_SERVICES_EPOCH_COMPUTATION_GET_TOP_TOPICS_REPORTED = 536;
-  ATOM_AD_SERVICES_EPOCH_COMPUTATION_CLASSIFIER_REPORTED = 537;
   ATOM_WEAR_MEDIA_OUTPUT_SWITCHER_LAUNCHED = 538;
   ATOM_WEAR_MEDIA_OUTPUT_SWITCHER_FINISHED = 539;
   ATOM_WEAR_MEDIA_OUTPUT_SWITCHER_CONNECTION_REPORTED = 540;
@@ -2542,12 +2522,10 @@
   ATOM_MEDIAMETRICS_MIDI_DEVICE_CLOSE_REPORTED = 576;
   ATOM_BIOMETRIC_TOUCH_REPORTED = 577;
   ATOM_HOTWORD_AUDIO_EGRESS_EVENT_REPORTED = 578;
-  ATOM_APP_SEARCH_SCHEMA_MIGRATION_STATS_REPORTED = 579;
   ATOM_LOCATION_ENABLED_STATE_CHANGED = 580;
   ATOM_IME_REQUEST_FINISHED = 581;
   ATOM_USB_COMPLIANCE_WARNINGS_REPORTED = 582;
   ATOM_APP_SUPPORTED_LOCALES_CHANGED = 583;
-  ATOM_GRAMMATICAL_INFLECTION_CHANGED = 584;
   ATOM_MEDIA_PROVIDER_VOLUME_RECOVERY_REPORTED = 586;
   ATOM_BIOMETRIC_PROPERTIES_COLLECTED = 587;
   ATOM_KERNEL_WAKEUP_ATTRIBUTED = 588;
@@ -2560,7 +2538,11 @@
   ATOM_WS_NOTIFICATION_UPDATED = 596;
   ATOM_NETWORK_VALIDATION_FAILURE_STATS_DAILY_REPORTED = 601;
   ATOM_WS_COMPLICATION_TAPPED = 602;
-  ATOM_WS_WEAR_TIME_SESSION = 610;
+  ATOM_WS_NOTIFICATION_BLOCKING = 780;
+  ATOM_WS_NOTIFICATION_BRIDGEMODE_UPDATED = 822;
+  ATOM_WS_NOTIFICATION_DISMISSAL_ACTIONED = 823;
+  ATOM_WS_NOTIFICATION_ACTIONED = 824;
+  ATOM_WS_NOTIFICATION_LATENCY = 880;
   ATOM_WIFI_BYTES_TRANSFER = 10000;
   ATOM_WIFI_BYTES_TRANSFER_BY_FG_BG = 10001;
   ATOM_MOBILE_BYTES_TRANSFER = 10002;
@@ -2733,6 +2715,186 @@
   ATOM_NOTIFICATION_MEMORY_USE = 10174;
   ATOM_HDR_CAPABILITIES = 10175;
   ATOM_WS_FAVOURITE_WATCH_FACE_LIST_SNAPSHOT = 10176;
+  ATOM_WS_WEAR_TIME_SESSION = 610;
+  ATOM_WS_INCOMING_CALL_ACTION_REPORTED = 626;
+  ATOM_WS_CALL_DISCONNECTION_REPORTED = 627;
+  ATOM_WS_CALL_DURATION_REPORTED = 628;
+  ATOM_WS_CALL_USER_EXPERIENCE_LATENCY_REPORTED = 629;
+  ATOM_WS_CALL_INTERACTION_REPORTED = 630;
+  ATOM_WS_ON_BODY_STATE_CHANGED = 787;
+  ATOM_WS_WATCH_FACE_RESTRICTED_COMPLICATIONS_IMPACTED = 802;
+  ATOM_WS_WATCH_FACE_DEFAULT_RESTRICTED_COMPLICATIONS_REMOVED = 803;
+  ATOM_WS_COMPLICATIONS_IMPACTED_NOTIFICATION_EVENT_REPORTED = 804;
+  ATOM_WS_STANDALONE_MODE_SNAPSHOT = 10197;
+  ATOM_WS_FAVORITE_WATCH_FACE_SNAPSHOT = 10206;
+  ATOM_SETTINGS_SPA_REPORTED = 622;
+  ATOM_PDF_LOAD_REPORTED = 859;
+  ATOM_PDF_API_USAGE_REPORTED = 860;
+  ATOM_PDF_SEARCH_REPORTED = 861;
+  ATOM_HDMI_EARC_STATUS_REPORTED = 701;
+  ATOM_HDMI_SOUNDBAR_MODE_STATUS_REPORTED = 724;
+  ATOM_MEDIA_PROVIDER_DATABASE_ROLLBACK_REPORTED = 784;
+  ATOM_BACKUP_SETUP_STATUS_REPORTED = 785;
+  ATOM_PHOTOPICKER_SESSION_INFO_REPORTED = 886;
+  ATOM_PHOTOPICKER_API_INFO_REPORTED = 887;
+  ATOM_PHOTOPICKER_UI_EVENT_LOGGED = 888;
+  ATOM_PHOTOPICKER_MEDIA_ITEM_STATUS_REPORTED = 889;
+  ATOM_PHOTOPICKER_PREVIEW_INFO_LOGGED = 890;
+  ATOM_PHOTOPICKER_MENU_INTERACTION_LOGGED = 891;
+  ATOM_PHOTOPICKER_BANNER_INTERACTION_LOGGED = 892;
+  ATOM_PHOTOPICKER_MEDIA_LIBRARY_INFO_LOGGED = 893;
+  ATOM_PHOTOPICKER_PAGE_INFO_LOGGED = 894;
+  ATOM_PHOTOPICKER_MEDIA_GRID_SYNC_INFO_REPORTED = 895;
+  ATOM_PHOTOPICKER_ALBUM_SYNC_INFO_REPORTED = 896;
+  ATOM_PHOTOPICKER_SEARCH_INFO_REPORTED = 897;
+  ATOM_SEARCH_DATA_EXTRACTION_DETAILS_REPORTED = 898;
+  ATOM_EMBEDDED_PHOTOPICKER_INFO_REPORTED = 899;
+  ATOM_WEAR_POWER_MENU_OPENED = 731;
+  ATOM_WEAR_ASSISTANT_OPENED = 755;
+  ATOM_KERNEL_OOM_KILL_OCCURRED = 754;
+  ATOM_AUTOFILL_UI_EVENT_REPORTED = 603;
+  ATOM_AUTOFILL_FILL_REQUEST_REPORTED = 604;
+  ATOM_AUTOFILL_FILL_RESPONSE_REPORTED = 605;
+  ATOM_AUTOFILL_SAVE_EVENT_REPORTED = 606;
+  ATOM_AUTOFILL_SESSION_COMMITTED = 607;
+  ATOM_AUTOFILL_FIELD_CLASSIFICATION_EVENT_REPORTED = 659;
+  ATOM_TV_LOW_POWER_STANDBY_POLICY = 679;
+  ATOM_EXTERNAL_TV_INPUT_EVENT = 717;
+  ATOM_COMPONENT_STATE_CHANGED_REPORTED = 863;
+  ATOM_AI_WALLPAPERS_BUTTON_PRESSED = 706;
+  ATOM_AI_WALLPAPERS_TEMPLATE_SELECTED = 707;
+  ATOM_AI_WALLPAPERS_TERM_SELECTED = 708;
+  ATOM_AI_WALLPAPERS_WALLPAPER_SET = 709;
+  ATOM_AI_WALLPAPERS_SESSION_SUMMARY = 710;
+  ATOM_APF_SESSION_INFO_REPORTED = 777;
+  ATOM_IP_CLIENT_RA_INFO_REPORTED = 778;
+  ATOM_VPN_CONNECTION_STATE_CHANGED = 850;
+  ATOM_VPN_CONNECTION_REPORTED = 851;
+  ATOM_NETWORK_STATS_RECORDER_FILE_OPERATED = 783;
+  ATOM_DAILY_KEEPALIVE_INFO_REPORTED = 650;
+  ATOM_NETWORK_REQUEST_STATE_CHANGED = 779;
+  ATOM_TETHERING_ACTIVE_SESSIONS_REPORTED = 925;
+  ATOM_ART_DATUM_REPORTED = 332;
+  ATOM_ART_DEVICE_DATUM_REPORTED = 550;
+  ATOM_ART_DATUM_DELTA_REPORTED = 565;
+  ATOM_ART_DEX2OAT_REPORTED = 929;
+  ATOM_ART_DEVICE_STATUS = 10205;
+  ATOM_ODREFRESH_REPORTED = 366;
+  ATOM_ODSIGN_REPORTED = 548;
+  ATOM_BACKGROUND_DEXOPT_JOB_ENDED = 467;
+  ATOM_PREREBOOT_DEXOPT_JOB_ENDED = 883;
+  ATOM_PERMISSION_RATIONALE_DIALOG_VIEWED = 645;
+  ATOM_PERMISSION_RATIONALE_DIALOG_ACTION_REPORTED = 646;
+  ATOM_APP_DATA_SHARING_UPDATES_NOTIFICATION_INTERACTION = 647;
+  ATOM_APP_DATA_SHARING_UPDATES_FRAGMENT_VIEWED = 648;
+  ATOM_APP_DATA_SHARING_UPDATES_FRAGMENT_ACTION_REPORTED = 649;
+  ATOM_ENHANCED_CONFIRMATION_DIALOG_RESULT_REPORTED = 827;
+  ATOM_ENHANCED_CONFIRMATION_RESTRICTION_CLEARED = 828;
+  ATOM_EMERGENCY_STATE_CHANGED = 633;
+  ATOM_CHRE_SIGNIFICANT_MOTION_STATE_CHANGED = 868;
+  ATOM_HEALTH_CONNECT_UI_IMPRESSION = 623;
+  ATOM_HEALTH_CONNECT_UI_INTERACTION = 624;
+  ATOM_HEALTH_CONNECT_APP_OPENED_REPORTED = 625;
+  ATOM_HEALTH_CONNECT_API_CALLED = 616;
+  ATOM_HEALTH_CONNECT_USAGE_STATS = 617;
+  ATOM_HEALTH_CONNECT_STORAGE_STATS = 618;
+  ATOM_HEALTH_CONNECT_API_INVOKED = 643;
+  ATOM_EXERCISE_ROUTE_API_CALLED = 654;
+  ATOM_SELINUX_AUDIT_LOG = 799;
+  ATOM_ONDEVICEPERSONALIZATION_API_CALLED = 711;
+  ATOM_CELLULAR_RADIO_POWER_STATE_CHANGED = 713;
+  ATOM_EMERGENCY_NUMBERS_INFO = 10180;
+  ATOM_DATA_NETWORK_VALIDATION = 10207;
+  ATOM_DATA_RAT_STATE_CHANGED = 854;
+  ATOM_CONNECTED_CHANNEL_CHANGED = 882;
+  ATOM_QUALIFIED_RAT_LIST_CHANGED = 634;
+  ATOM_QNS_IMS_CALL_DROP_STATS = 635;
+  ATOM_QNS_FALLBACK_RESTRICTION_CHANGED = 636;
+  ATOM_QNS_RAT_PREFERENCE_MISMATCH_INFO = 10177;
+  ATOM_QNS_HANDOVER_TIME_MILLIS = 10178;
+  ATOM_QNS_HANDOVER_PINGPONG = 10179;
+  ATOM_SATELLITE_CONTROLLER = 10182;
+  ATOM_SATELLITE_SESSION = 10183;
+  ATOM_SATELLITE_INCOMING_DATAGRAM = 10184;
+  ATOM_SATELLITE_OUTGOING_DATAGRAM = 10185;
+  ATOM_SATELLITE_PROVISION = 10186;
+  ATOM_SATELLITE_SOS_MESSAGE_RECOMMENDER = 10187;
+  ATOM_CARRIER_ROAMING_SATELLITE_SESSION = 10211;
+  ATOM_CARRIER_ROAMING_SATELLITE_CONTROLLER_STATS = 10212;
+  ATOM_CONTROLLER_STATS_PER_PACKAGE = 10213;
+  ATOM_SATELLITE_ENTITLEMENT = 10214;
+  ATOM_SATELLITE_CONFIG_UPDATER = 10215;
+  ATOM_SATELLITE_ACCESS_CONTROLLER = 10219;
+  ATOM_CELLULAR_IDENTIFIER_DISCLOSED = 800;
+  ATOM_KEYBOARD_CONFIGURED = 682;
+  ATOM_KEYBOARD_SYSTEMS_EVENT_REPORTED = 683;
+  ATOM_INPUTDEVICE_USAGE_REPORTED = 686;
+  ATOM_TOUCHPAD_USAGE = 10191;
+  ATOM_THREADNETWORK_TELEMETRY_DATA_REPORTED = 738;
+  ATOM_THREADNETWORK_TOPO_ENTRY_REPEATED = 739;
+  ATOM_THREADNETWORK_DEVICE_INFO_REPORTED = 740;
+  ATOM_CRONET_ENGINE_CREATED = 703;
+  ATOM_CRONET_TRAFFIC_REPORTED = 704;
+  ATOM_CRONET_ENGINE_BUILDER_INITIALIZED = 762;
+  ATOM_CRONET_HTTP_FLAGS_INITIALIZED = 763;
+  ATOM_CRONET_INITIALIZED = 764;
+  ATOM_WEAR_MODE_STATE_CHANGED = 715;
+  ATOM_RENDERER_INITIALIZED = 736;
+  ATOM_SCHEMA_VERSION_RECEIVED = 737;
+  ATOM_LAYOUT_INSPECTED = 741;
+  ATOM_LAYOUT_EXPRESSION_INSPECTED = 742;
+  ATOM_LAYOUT_ANIMATIONS_INSPECTED = 743;
+  ATOM_MATERIAL_COMPONENTS_INSPECTED = 744;
+  ATOM_TILE_REQUESTED = 745;
+  ATOM_STATE_RESPONSE_RECEIVED = 746;
+  ATOM_TILE_RESPONSE_RECEIVED = 747;
+  ATOM_INFLATION_FINISHED = 748;
+  ATOM_INFLATION_FAILED = 749;
+  ATOM_IGNORED_INFLATION_FAILURES_REPORTED = 750;
+  ATOM_DRAWABLE_RENDERED = 751;
+  ATOM_MEDIA_ACTION_REPORTED = 608;
+  ATOM_MEDIA_CONTROLS_LAUNCHED = 609;
+  ATOM_MEDIA_SESSION_STATE_CHANGED = 677;
+  ATOM_WEAR_MEDIA_OUTPUT_SWITCHER_DEVICE_SCAN_API_LATENCY = 757;
+  ATOM_WEAR_MEDIA_OUTPUT_SWITCHER_SASS_DEVICE_UNAVAILABLE = 758;
+  ATOM_WEAR_MEDIA_OUTPUT_SWITCHER_FASTPAIR_API_TIMEOUT = 759;
+  ATOM_MEDIATOR_UPDATED = 721;
+  ATOM_SYSPROXY_BLUETOOTH_BYTES_TRANSFER = 10196;
+  ATOM_SYSPROXY_CONNECTION_UPDATED = 786;
+  ATOM_ADAPTIVE_AUTH_UNLOCK_AFTER_LOCK_REPORTED = 820;
+  ATOM_FEDERATED_COMPUTE_API_CALLED = 712;
+  ATOM_FEDERATED_COMPUTE_TRAINING_EVENT_REPORTED = 771;
+  ATOM_EXAMPLE_ITERATOR_NEXT_LATENCY_REPORTED = 838;
+  ATOM_RKPD_POOL_STATS = 664;
+  ATOM_RKPD_CLIENT_OPERATION = 665;
+  ATOM_CPU_POLICY = 10199;
+  ATOM_ATOM_9999 = 9999;
+  ATOM_ATOM_99999 = 99999;
+  ATOM_SCREEN_OFF_REPORTED = 776;
+  ATOM_SCREEN_TIMEOUT_OVERRIDE_REPORTED = 836;
+  ATOM_SCREEN_INTERACTIVE_SESSION_REPORTED = 837;
+  ATOM_SCREEN_DIM_REPORTED = 867;
+  ATOM_FULL_SCREEN_INTENT_LAUNCHED = 631;
+  ATOM_BAL_ALLOWED = 632;
+  ATOM_IN_TASK_ACTIVITY_STARTED = 685;
+  ATOM_CACHED_APPS_HIGH_WATERMARK = 10189;
+  ATOM_STYLUS_PREDICTION_METRICS_REPORTED = 718;
+  ATOM_USER_RISK_EVENT_REPORTED = 725;
+  ATOM_MEDIA_PROJECTION_STATE_CHANGED = 729;
+  ATOM_MEDIA_PROJECTION_TARGET_CHANGED = 730;
+  ATOM_EXCESSIVE_BINDER_PROXY_COUNT_REPORTED = 853;
+  ATOM_PROXY_BYTES_TRANSFER_BY_FG_BG = 10200;
+  ATOM_MOBILE_BYTES_TRANSFER_BY_PROC_STATE = 10204;
+  ATOM_BIOMETRIC_FRR_NOTIFICATION = 817;
+  ATOM_SENSITIVE_CONTENT_MEDIA_PROJECTION_SESSION = 830;
+  ATOM_SENSITIVE_NOTIFICATION_APP_PROTECTION_SESSION = 831;
+  ATOM_SENSITIVE_NOTIFICATION_APP_PROTECTION_APPLIED = 832;
+  ATOM_SENSITIVE_NOTIFICATION_REDACTION = 833;
+  ATOM_SENSITIVE_CONTENT_APP_PROTECTION = 835;
+  ATOM_APP_RESTRICTION_STATE_CHANGED = 866;
+  ATOM_DREAM_SETTING_CHANGED = 705;
+  ATOM_DREAM_SETTING_SNAPSHOT = 10192;
+  ATOM_BOOT_INTEGRITY_INFO_REPORTED = 775;
   ATOM_WIFI_AWARE_NDP_REPORTED = 638;
   ATOM_WIFI_AWARE_ATTACH_REPORTED = 639;
   ATOM_WIFI_SELF_RECOVERY_TRIGGERED = 661;
@@ -2747,39 +2909,99 @@
   ATOM_WIFI_LOCAL_ONLY_REQUEST_SCAN_TRIGGERED = 693;
   ATOM_WIFI_THREAD_TASK_EXECUTED = 694;
   ATOM_WIFI_STATE_CHANGED = 700;
+  ATOM_PNO_SCAN_STARTED = 719;
+  ATOM_PNO_SCAN_STOPPED = 720;
+  ATOM_WIFI_IS_UNUSABLE_REPORTED = 722;
+  ATOM_WIFI_AP_CAPABILITIES_REPORTED = 723;
+  ATOM_SOFT_AP_STATE_CHANGED = 805;
+  ATOM_SCORER_PREDICTION_RESULT_REPORTED = 884;
   ATOM_WIFI_AWARE_CAPABILITIES = 10190;
   ATOM_WIFI_MODULE_INFO = 10193;
-  ATOM_SETTINGS_SPA_REPORTED = 622;
+  ATOM_WIFI_SETTING_INFO = 10194;
+  ATOM_WIFI_COMPLEX_SETTING_INFO = 10195;
+  ATOM_WIFI_CONFIGURED_NETWORK_INFO = 10198;
+  ATOM_MTE_STATE = 10181;
+  ATOM_HOTWORD_EGRESS_SIZE_ATOM_REPORTED = 761;
+  ATOM_SANDBOX_API_CALLED = 488;
+  ATOM_SANDBOX_ACTIVITY_EVENT_OCCURRED = 735;
+  ATOM_SDK_SANDBOX_RESTRICTED_ACCESS_IN_SESSION = 796;
+  ATOM_SANDBOX_SDK_STORAGE = 10159;
   ATOM_EXPRESS_EVENT_REPORTED = 528;
   ATOM_EXPRESS_HISTOGRAM_SAMPLE_REPORTED = 593;
   ATOM_EXPRESS_UID_EVENT_REPORTED = 644;
   ATOM_EXPRESS_UID_HISTOGRAM_SAMPLE_REPORTED = 658;
-  ATOM_PERMISSION_RATIONALE_DIALOG_VIEWED = 645;
-  ATOM_PERMISSION_RATIONALE_DIALOG_ACTION_REPORTED = 646;
-  ATOM_APP_DATA_SHARING_UPDATES_NOTIFICATION_INTERACTION = 647;
-  ATOM_APP_DATA_SHARING_UPDATES_FRAGMENT_VIEWED = 648;
-  ATOM_APP_DATA_SHARING_UPDATES_FRAGMENT_ACTION_REPORTED = 649;
-  ATOM_WS_INCOMING_CALL_ACTION_REPORTED = 626;
-  ATOM_WS_CALL_DISCONNECTION_REPORTED = 627;
-  ATOM_WS_CALL_DURATION_REPORTED = 628;
-  ATOM_WS_CALL_USER_EXPERIENCE_LATENCY_REPORTED = 629;
-  ATOM_WS_CALL_INTERACTION_REPORTED = 630;
-  ATOM_FULL_SCREEN_INTENT_LAUNCHED = 631;
-  ATOM_BAL_ALLOWED = 632;
-  ATOM_IN_TASK_ACTIVITY_STARTED = 685;
-  ATOM_CACHED_APPS_HIGH_WATERMARK = 10189;
-  ATOM_ODREFRESH_REPORTED = 366;
-  ATOM_ODSIGN_REPORTED = 548;
-  ATOM_ART_DATUM_REPORTED = 332;
-  ATOM_ART_DEVICE_DATUM_REPORTED = 550;
-  ATOM_ART_DATUM_DELTA_REPORTED = 565;
-  ATOM_BACKGROUND_DEXOPT_JOB_ENDED = 467;
-  ATOM_WEAR_ADAPTIVE_SUSPEND_STATS_REPORTED = 619;
-  ATOM_WEAR_POWER_ANOMALY_SERVICE_OPERATIONAL_STATS_REPORTED = 620;
-  ATOM_WEAR_POWER_ANOMALY_SERVICE_EVENT_STATS_REPORTED = 621;
-  ATOM_EMERGENCY_STATE_CHANGED = 633;
-  ATOM_DND_STATE_CHANGED = 657;
-  ATOM_MTE_STATE = 10181;
+  ATOM_IKE_SESSION_TERMINATED = 678;
+  ATOM_IKE_LIVENESS_CHECK_SESSION_VALIDATED = 760;
+  ATOM_NEGOTIATED_SECURITY_ASSOCIATION = 821;
+  ATOM_APP_SEARCH_SET_SCHEMA_STATS_REPORTED = 385;
+  ATOM_APP_SEARCH_SCHEMA_MIGRATION_STATS_REPORTED = 579;
+  ATOM_APP_SEARCH_USAGE_SEARCH_INTENT_STATS_REPORTED = 825;
+  ATOM_APP_SEARCH_USAGE_SEARCH_INTENT_RAW_QUERY_STATS_REPORTED = 826;
+  ATOM_DEVICE_POLICY_MANAGEMENT_MODE = 10216;
+  ATOM_DEVICE_POLICY_STATE = 10217;
+  ATOM_DESKTOP_MODE_UI_CHANGED = 818;
+  ATOM_DESKTOP_MODE_SESSION_TASK_UPDATE = 819;
+  ATOM_MEDIA_CODEC_RECLAIM_REQUEST_COMPLETED = 600;
+  ATOM_MEDIA_CODEC_STARTED = 641;
+  ATOM_MEDIA_CODEC_STOPPED = 642;
+  ATOM_MEDIA_CODEC_RENDERED = 684;
+  ATOM_MEDIA_EDITING_ENDED_REPORTED = 798;
+  ATOM_CAR_WAKEUP_FROM_SUSPEND_REPORTED = 852;
+  ATOM_PLUGIN_INITIALIZED = 655;
+  ATOM_CAR_RECENTS_EVENT_REPORTED = 770;
+  ATOM_CAR_CALM_MODE_EVENT_REPORTED = 797;
+  ATOM_CAMERA_FEATURE_COMBINATION_QUERY_EVENT = 900;
+  ATOM_THERMAL_STATUS_CALLED = 772;
+  ATOM_THERMAL_HEADROOM_CALLED = 773;
+  ATOM_THERMAL_HEADROOM_THRESHOLDS_CALLED = 774;
+  ATOM_ADPF_HINT_SESSION_TID_CLEANUP = 839;
+  ATOM_THERMAL_HEADROOM_THRESHOLDS = 10201;
+  ATOM_ADPF_SESSION_SNAPSHOT = 10218;
+  ATOM_BLUETOOTH_HASHED_DEVICE_NAME_REPORTED = 613;
+  ATOM_BLUETOOTH_L2CAP_COC_CLIENT_CONNECTION = 614;
+  ATOM_BLUETOOTH_L2CAP_COC_SERVER_CONNECTION = 615;
+  ATOM_BLUETOOTH_LE_SESSION_CONNECTED = 656;
+  ATOM_RESTRICTED_BLUETOOTH_DEVICE_NAME_REPORTED = 666;
+  ATOM_BLUETOOTH_PROFILE_CONNECTION_ATTEMPTED = 696;
+  ATOM_BLUETOOTH_CONTENT_PROFILE_ERROR_REPORTED = 781;
+  ATOM_BLUETOOTH_RFCOMM_CONNECTION_ATTEMPTED = 782;
+  ATOM_REMOTE_DEVICE_INFORMATION_WITH_METRIC_ID = 862;
+  ATOM_LE_APP_SCAN_STATE_CHANGED = 870;
+  ATOM_LE_RADIO_SCAN_STOPPED = 871;
+  ATOM_LE_SCAN_RESULT_RECEIVED = 872;
+  ATOM_LE_SCAN_ABUSED = 873;
+  ATOM_LE_ADV_STATE_CHANGED = 874;
+  ATOM_LE_ADV_ERROR_REPORTED = 875;
+  ATOM_A2DP_SESSION_REPORTED = 904;
+  ATOM_BLUETOOTH_CROSS_LAYER_EVENT_REPORTED = 916;
+  ATOM_BROADCAST_AUDIO_SESSION_REPORTED = 927;
+  ATOM_BROADCAST_AUDIO_SYNC_REPORTED = 928;
+  ATOM_DEVICE_LOCK_CHECK_IN_REQUEST_REPORTED = 726;
+  ATOM_DEVICE_LOCK_PROVISIONING_COMPLETE_REPORTED = 727;
+  ATOM_DEVICE_LOCK_KIOSK_APP_REQUEST_REPORTED = 728;
+  ATOM_DEVICE_LOCK_CHECK_IN_RETRY_REPORTED = 789;
+  ATOM_DEVICE_LOCK_PROVISION_FAILURE_REPORTED = 790;
+  ATOM_DEVICE_LOCK_LOCK_UNLOCK_DEVICE_FAILURE_REPORTED = 791;
+  ATOM_APPLICATION_GRAMMATICAL_INFLECTION_CHANGED = 584;
+  ATOM_SYSTEM_GRAMMATICAL_INFLECTION_CHANGED = 816;
+  ATOM_EMERGENCY_NUMBER_DIALED = 637;
+  ATOM_JSSCRIPTENGINE_LATENCY_REPORTED = 483;
+  ATOM_AD_SERVICES_API_CALLED = 435;
+  ATOM_AD_SERVICES_MESUREMENT_REPORTS_UPLOADED = 436;
+  ATOM_MOBILE_DATA_DOWNLOAD_FILE_GROUP_STATUS_REPORTED = 490;
+  ATOM_MOBILE_DATA_DOWNLOAD_DOWNLOAD_RESULT_REPORTED = 502;
+  ATOM_AD_SERVICES_SETTINGS_USAGE_REPORTED = 493;
+  ATOM_BACKGROUND_FETCH_PROCESS_REPORTED = 496;
+  ATOM_UPDATE_CUSTOM_AUDIENCE_PROCESS_REPORTED = 497;
+  ATOM_RUN_AD_BIDDING_PROCESS_REPORTED = 498;
+  ATOM_RUN_AD_SCORING_PROCESS_REPORTED = 499;
+  ATOM_RUN_AD_SELECTION_PROCESS_REPORTED = 500;
+  ATOM_RUN_AD_BIDDING_PER_CA_PROCESS_REPORTED = 501;
+  ATOM_MOBILE_DATA_DOWNLOAD_FILE_GROUP_STORAGE_STATS_REPORTED = 503;
+  ATOM_AD_SERVICES_MEASUREMENT_REGISTRATIONS = 512;
+  ATOM_AD_SERVICES_GET_TOPICS_REPORTED = 535;
+  ATOM_AD_SERVICES_EPOCH_COMPUTATION_GET_TOP_TOPICS_REPORTED = 536;
+  ATOM_AD_SERVICES_EPOCH_COMPUTATION_CLASSIFIER_REPORTED = 537;
   ATOM_AD_SERVICES_BACK_COMPAT_GET_TOPICS_REPORTED = 598;
   ATOM_AD_SERVICES_BACK_COMPAT_EPOCH_COMPUTATION_CLASSIFIER_REPORTED = 599;
   ATOM_AD_SERVICES_MEASUREMENT_DEBUG_KEYS = 640;
@@ -2789,68 +3011,68 @@
   ATOM_AD_SERVICES_MEASUREMENT_ATTRIBUTION = 674;
   ATOM_AD_SERVICES_MEASUREMENT_JOBS = 675;
   ATOM_AD_SERVICES_MEASUREMENT_WIPEOUT = 676;
+  ATOM_AD_SERVICES_MEASUREMENT_AD_ID_MATCH_FOR_DEBUG_KEYS = 695;
+  ATOM_AD_SERVICES_ENROLLMENT_DATA_STORED = 697;
+  ATOM_AD_SERVICES_ENROLLMENT_FILE_DOWNLOADED = 698;
+  ATOM_AD_SERVICES_ENROLLMENT_MATCHED = 699;
   ATOM_AD_SERVICES_CONSENT_MIGRATED = 702;
-  ATOM_RKPD_POOL_STATS = 664;
-  ATOM_RKPD_CLIENT_OPERATION = 665;
-  ATOM_AUTOFILL_UI_EVENT_REPORTED = 603;
-  ATOM_AUTOFILL_FILL_REQUEST_REPORTED = 604;
-  ATOM_AUTOFILL_FILL_RESPONSE_REPORTED = 605;
-  ATOM_AUTOFILL_SAVE_EVENT_REPORTED = 606;
-  ATOM_AUTOFILL_SESSION_COMMITTED = 607;
-  ATOM_AUTOFILL_FIELD_CLASSIFICATION_EVENT_REPORTED = 659;
+  ATOM_AD_SERVICES_ENROLLMENT_FAILED = 714;
+  ATOM_AD_SERVICES_MEASUREMENT_CLICK_VERIFICATION = 756;
+  ATOM_AD_SERVICES_ENCRYPTION_KEY_FETCHED = 765;
+  ATOM_AD_SERVICES_ENCRYPTION_KEY_DB_TRANSACTION_ENDED = 766;
+  ATOM_DESTINATION_REGISTERED_BEACONS = 767;
+  ATOM_REPORT_INTERACTION_API_CALLED = 768;
+  ATOM_INTERACTION_REPORTING_TABLE_CLEARED = 769;
+  ATOM_APP_MANIFEST_CONFIG_HELPER_CALLED = 788;
+  ATOM_AD_FILTERING_PROCESS_JOIN_CA_REPORTED = 793;
+  ATOM_AD_FILTERING_PROCESS_AD_SELECTION_REPORTED = 794;
+  ATOM_AD_COUNTER_HISTOGRAM_UPDATER_REPORTED = 795;
+  ATOM_SIGNATURE_VERIFICATION = 807;
+  ATOM_K_ANON_IMMEDIATE_SIGN_JOIN_STATUS_REPORTED = 808;
+  ATOM_K_ANON_BACKGROUND_JOB_STATUS_REPORTED = 809;
+  ATOM_K_ANON_INITIALIZE_STATUS_REPORTED = 810;
+  ATOM_K_ANON_SIGN_STATUS_REPORTED = 811;
+  ATOM_K_ANON_JOIN_STATUS_REPORTED = 812;
+  ATOM_K_ANON_KEY_ATTESTATION_STATUS_REPORTED = 813;
+  ATOM_GET_AD_SELECTION_DATA_API_CALLED = 814;
+  ATOM_GET_AD_SELECTION_DATA_BUYER_INPUT_GENERATED = 815;
+  ATOM_BACKGROUND_JOB_SCHEDULING_REPORTED = 834;
+  ATOM_TOPICS_ENCRYPTION_EPOCH_COMPUTATION_REPORTED = 840;
+  ATOM_TOPICS_ENCRYPTION_GET_TOPICS_REPORTED = 841;
+  ATOM_ADSERVICES_SHELL_COMMAND_CALLED = 842;
+  ATOM_UPDATE_SIGNALS_API_CALLED = 843;
+  ATOM_ENCODING_JOB_RUN = 844;
+  ATOM_ENCODING_JS_FETCH = 845;
+  ATOM_ENCODING_JS_EXECUTION = 846;
+  ATOM_PERSIST_AD_SELECTION_RESULT_CALLED = 847;
+  ATOM_SERVER_AUCTION_KEY_FETCH_CALLED = 848;
+  ATOM_SERVER_AUCTION_BACKGROUND_KEY_FETCH_ENABLED = 849;
+  ATOM_AD_SERVICES_MEASUREMENT_PROCESS_ODP_REGISTRATION = 864;
+  ATOM_AD_SERVICES_MEASUREMENT_NOTIFY_REGISTRATION_TO_ODP = 865;
+  ATOM_SELECT_ADS_FROM_OUTCOMES_API_CALLED = 876;
+  ATOM_REPORT_IMPRESSION_API_CALLED = 877;
+  ATOM_AD_SERVICES_ENROLLMENT_TRANSACTION_STATS = 885;
+  ATOM_EXTERNAL_DISPLAY_STATE_CHANGED = 806;
+  ATOM_DISPLAY_MODE_DIRECTOR_VOTE_CHANGED = 792;
   ATOM_TEST_EXTENSION_ATOM_REPORTED = 660;
   ATOM_TEST_RESTRICTED_ATOM_REPORTED = 672;
   ATOM_STATS_SOCKET_LOSS_REPORTED = 752;
-  ATOM_PLUGIN_INITIALIZED = 655;
-  ATOM_TV_LOW_POWER_STANDBY_POLICY = 679;
+  ATOM_NFC_OBSERVE_MODE_STATE_CHANGED = 855;
+  ATOM_NFC_FIELD_CHANGED = 856;
+  ATOM_NFC_POLLING_LOOP_NOTIFICATION_REPORTED = 857;
+  ATOM_NFC_PROPRIETARY_CAPABILITIES_REPORTED = 858;
   ATOM_LOCKSCREEN_SHORTCUT_SELECTED = 611;
   ATOM_LOCKSCREEN_SHORTCUT_TRIGGERED = 612;
-  ATOM_EMERGENCY_NUMBERS_INFO = 10180;
-  ATOM_QUALIFIED_RAT_LIST_CHANGED = 634;
-  ATOM_QNS_IMS_CALL_DROP_STATS = 635;
-  ATOM_QNS_FALLBACK_RESTRICTION_CHANGED = 636;
-  ATOM_QNS_RAT_PREFERENCE_MISMATCH_INFO = 10177;
-  ATOM_QNS_HANDOVER_TIME_MILLIS = 10178;
-  ATOM_QNS_HANDOVER_PINGPONG = 10179;
-  ATOM_SATELLITE_CONTROLLER = 10182;
-  ATOM_SATELLITE_SESSION = 10183;
-  ATOM_SATELLITE_INCOMING_DATAGRAM = 10184;
-  ATOM_SATELLITE_OUTGOING_DATAGRAM = 10185;
-  ATOM_SATELLITE_PROVISION = 10186;
-  ATOM_SATELLITE_SOS_MESSAGE_RECOMMENDER = 10187;
-  ATOM_IKE_SESSION_TERMINATED = 678;
-  ATOM_IKE_LIVENESS_CHECK_SESSION_VALIDATED = 760;
-  ATOM_BLUETOOTH_HASHED_DEVICE_NAME_REPORTED = 613;
-  ATOM_BLUETOOTH_L2CAP_COC_CLIENT_CONNECTION = 614;
-  ATOM_BLUETOOTH_L2CAP_COC_SERVER_CONNECTION = 615;
-  ATOM_BLUETOOTH_LE_SESSION_CONNECTED = 656;
-  ATOM_RESTRICTED_BLUETOOTH_DEVICE_NAME_REPORTED = 666;
-  ATOM_BLUETOOTH_PROFILE_CONNECTION_ATTEMPTED = 696;
-  ATOM_HEALTH_CONNECT_UI_IMPRESSION = 623;
-  ATOM_HEALTH_CONNECT_UI_INTERACTION = 624;
-  ATOM_HEALTH_CONNECT_APP_OPENED_REPORTED = 625;
-  ATOM_HEALTH_CONNECT_API_CALLED = 616;
-  ATOM_HEALTH_CONNECT_USAGE_STATS = 617;
-  ATOM_HEALTH_CONNECT_STORAGE_STATS = 618;
-  ATOM_HEALTH_CONNECT_API_INVOKED = 643;
-  ATOM_EXERCISE_ROUTE_API_CALLED = 654;
-  ATOM_ATOM_9999 = 9999;
-  ATOM_ATOM_99999 = 99999;
-  ATOM_THREADNETWORK_TELEMETRY_DATA_REPORTED = 738;
-  ATOM_THREADNETWORK_TOPO_ENTRY_REPEATED = 739;
-  ATOM_THREADNETWORK_DEVICE_INFO_REPORTED = 740;
-  ATOM_EMERGENCY_NUMBER_DIALED = 637;
-  ATOM_SANDBOX_API_CALLED = 488;
-  ATOM_SANDBOX_ACTIVITY_EVENT_OCCURRED = 735;
-  ATOM_SANDBOX_SDK_STORAGE = 10159;
-  ATOM_CRONET_ENGINE_CREATED = 703;
-  ATOM_CRONET_TRAFFIC_REPORTED = 704;
-  ATOM_CRONET_ENGINE_BUILDER_INITIALIZED = 762;
-  ATOM_CRONET_HTTP_FLAGS_INITIALIZED = 763;
-  ATOM_CRONET_INITIALIZED = 764;
-  ATOM_DAILY_KEEPALIVE_INFO_REPORTED = 650;
-  ATOM_IP_CLIENT_RA_INFO_REPORTED = 778;
-  ATOM_APF_SESSION_INFO_REPORTED = 777;
+  ATOM_LAUNCHER_IMPRESSION_EVENT_V2 = 716;
+  ATOM_DISPLAY_SWITCH_LATENCY_TRACKED = 753;
+  ATOM_NOTIFICATION_LISTENER_SERVICE = 829;
+  ATOM_NAV_HANDLE_TOUCH_POINTS = 869;
+  ATOM_WEAR_ADAPTIVE_SUSPEND_STATS_REPORTED = 619;
+  ATOM_WEAR_POWER_ANOMALY_SERVICE_OPERATIONAL_STATS_REPORTED = 620;
+  ATOM_WEAR_POWER_ANOMALY_SERVICE_EVENT_STATS_REPORTED = 621;
+  ATOM_APEX_INSTALLATION_REQUESTED = 732;
+  ATOM_APEX_INSTALLATION_STAGED = 733;
+  ATOM_APEX_INSTALLATION_ENDED = 734;
   ATOM_CREDENTIAL_MANAGER_API_CALLED = 585;
   ATOM_CREDENTIAL_MANAGER_INIT_PHASE_REPORTED = 651;
   ATOM_CREDENTIAL_MANAGER_CANDIDATE_PHASE_REPORTED = 652;
@@ -2861,12 +3083,7 @@
   ATOM_CREDENTIAL_MANAGER_AUTH_CLICK_REPORTED = 670;
   ATOM_CREDENTIAL_MANAGER_APIV2_CALLED = 671;
   ATOM_UWB_ACTIVITY_INFO = 10188;
-  ATOM_MEDIA_ACTION_REPORTED = 608;
-  ATOM_MEDIA_CONTROLS_LAUNCHED = 609;
-  ATOM_MEDIA_CODEC_RECLAIM_REQUEST_COMPLETED = 600;
-  ATOM_MEDIA_CODEC_STARTED = 641;
-  ATOM_MEDIA_CODEC_STOPPED = 642;
-  ATOM_MEDIA_CODEC_RENDERED = 684;
+  ATOM_DND_STATE_CHANGED = 657;
 }
 // End of protos/perfetto/config/statsd/atom_ids.proto
 
@@ -14620,6 +14837,9 @@
   // The SoC model from which trace is collected
   optional string android_soc_model = 9;
 
+  // The guest SoC model from which trace is collected in case of VMs
+  optional string android_guest_soc_model = 13;
+
   // The hardware reversion from android device
   optional string android_hardware_revision = 10;
 
diff --git a/protos/perfetto/trace/system_info.proto b/protos/perfetto/trace/system_info.proto
index 32cf887..cdb952f 100644
--- a/protos/perfetto/trace/system_info.proto
+++ b/protos/perfetto/trace/system_info.proto
@@ -32,6 +32,9 @@
   // The SoC model from which trace is collected
   optional string android_soc_model = 9;
 
+  // The guest SoC model from which trace is collected in case of VMs
+  optional string android_guest_soc_model = 13;
+
   // The hardware reversion from android device
   optional string android_hardware_revision = 10;
 
diff --git a/protos/perfetto/trace/track_event/BUILD.gn b/protos/perfetto/trace/track_event/BUILD.gn
index abb9a76..0d2749b 100644
--- a/protos/perfetto/trace/track_event/BUILD.gn
+++ b/protos/perfetto/trace/track_event/BUILD.gn
@@ -46,9 +46,42 @@
   ]
 }
 
+config("descriptor_inputs_config") {
+  inputs = [
+    "debug_annotation.proto",
+    "log_message.proto",
+    "task_execution.proto",
+    "chrome_active_processes.proto",
+    "chrome_application_state_info.proto",
+    "chrome_compositor_scheduler_state.proto",
+    "chrome_content_settings_event_info.proto",
+    "chrome_frame_reporter.proto",
+    "chrome_histogram_sample.proto",
+    "chrome_keyed_service.proto",
+    "chrome_latency_info.proto",
+    "chrome_legacy_ipc.proto",
+    "chrome_message_pump.proto",
+    "chrome_mojo_event_info.proto",
+    "chrome_renderer_scheduler_state.proto",
+    "chrome_user_event.proto",
+    "chrome_window_handle_event_info.proto",
+    "screenshot.proto",
+    "source_location.proto",
+  ]
+}
+
+group("descriptor_inputs") {
+  public_configs = [ ":descriptor_inputs_config" ]
+}
+
 perfetto_proto_library("descriptor") {
   proto_generators = [ "descriptor" ]
   generate_descriptor = "track_event.descriptor"
   sources = [ "track_event.proto" ]
+
+  # TODO(lalitm): remove this target when we found better way to propagate
+  # indirect input deps.
+  proto_deps = [ ":descriptor_inputs" ]
+
   link_deps = [ ":source_set" ]
 }
diff --git a/protos/third_party/chromium/BUILD.gn b/protos/third_party/chromium/BUILD.gn
index ef1e18a..4cd5d12 100644
--- a/protos/third_party/chromium/BUILD.gn
+++ b/protos/third_party/chromium/BUILD.gn
@@ -7,10 +7,44 @@
   public_deps = [ "../../perfetto/trace/track_event:@TYPE@" ]
 }
 
+config("descriptor_inputs_config") {
+  inputs = [
+    "../../perfetto/trace/track_event/track_event.proto",
+    "../../perfetto/trace/track_event/debug_annotation.proto",
+    "../../perfetto/trace/track_event/source_location.proto",
+    "../../perfetto/trace/track_event/log_message.proto",
+    "../../perfetto/trace/track_event/task_execution.proto",
+    "../../perfetto/trace/track_event/chrome_active_processes.proto",
+    "../../perfetto/trace/track_event/chrome_application_state_info.proto",
+    "../../perfetto/trace/track_event/chrome_compositor_scheduler_state.proto",
+    "../../perfetto/trace/track_event/chrome_content_settings_event_info.proto",
+    "../../perfetto/trace/track_event/chrome_frame_reporter.proto",
+    "../../perfetto/trace/track_event/chrome_histogram_sample.proto",
+    "../../perfetto/trace/track_event/chrome_keyed_service.proto",
+    "../../perfetto/trace/track_event/chrome_latency_info.proto",
+    "../../perfetto/trace/track_event/chrome_legacy_ipc.proto",
+    "../../perfetto/trace/track_event/chrome_message_pump.proto",
+    "../../perfetto/trace/track_event/chrome_mojo_event_info.proto",
+    "../../perfetto/trace/track_event/chrome_renderer_scheduler_state.proto",
+    "../../perfetto/trace/track_event/chrome_user_event.proto",
+    "../../perfetto/trace/track_event/chrome_window_handle_event_info.proto",
+    "../../perfetto/trace/track_event/screenshot.proto",
+  ]
+}
+
+group("descriptor_inputs") {
+  public_configs = [ ":descriptor_inputs_config" ]
+}
+
 perfetto_proto_library("@TYPE@") {
   proto_generators = [ "descriptor" ]
   sources = chrome_track_event_sources
   generate_descriptor = "chrome_track_event.descriptor"
+
+  # TODO(lalitm): remove this target when we found better way to propagate
+  # indirect input deps.
+  proto_deps = [ ":descriptor_inputs" ]
+
   link_deps = [ ":source_set" ]
 
   # When rolled into Chrome, extension descriptor is going to be linked into
diff --git a/python/perfetto/trace_processor/protos.py b/python/perfetto/trace_processor/protos.py
index ea13297..b2ac388 100644
--- a/python/perfetto/trace_processor/protos.py
+++ b/python/perfetto/trace_processor/protos.py
@@ -43,9 +43,7 @@
 
     def create_message_factory(message_type):
       message_desc = self.descriptor_pool.FindMessageTypeByName(message_type)
-      if hasattr(message_factory, 'GetMessageClass'):
-        return message_factory.GetMessageClass(message_desc)
-      return message_factory.MessageFactory().GetPrototype(message_desc)
+      return message_factory.GetMessageClass(message_desc)
 
     # Create proto messages to correctly communicate with the RPC API by sending
     # and receiving data as protos
diff --git a/src/trace_processor/importers/proto/atoms.descriptor b/src/trace_processor/importers/proto/atoms.descriptor
index 923f583..b318814 100644
--- a/src/trace_processor/importers/proto/atoms.descriptor
+++ b/src/trace_processor/importers/proto/atoms.descriptor
Binary files differ
diff --git a/src/trace_processor/importers/proto/system_probes_parser.cc b/src/trace_processor/importers/proto/system_probes_parser.cc
index 94f624f..63bbdfe 100644
--- a/src/trace_processor/importers/proto/system_probes_parser.cc
+++ b/src/trace_processor/importers/proto/system_probes_parser.cc
@@ -824,6 +824,13 @@
             context_->storage->InternString(packet.android_soc_model())));
   }
 
+  if (packet.has_android_guest_soc_model()) {
+    context_->metadata_tracker->SetMetadata(
+        metadata::android_guest_soc_model,
+        Variadic::String(
+            context_->storage->InternString(packet.android_guest_soc_model())));
+  }
+
   if (packet.has_android_hardware_revision()) {
     context_->metadata_tracker->SetMetadata(
         metadata::android_hardware_revision,
diff --git a/src/trace_processor/perfetto_sql/stdlib/android/BUILD.gn b/src/trace_processor/perfetto_sql/stdlib/android/BUILD.gn
index 14a1560..4f0208c 100644
--- a/src/trace_processor/perfetto_sql/stdlib/android/BUILD.gn
+++ b/src/trace_processor/perfetto_sql/stdlib/android/BUILD.gn
@@ -1,4 +1,4 @@
-# Copyright (C) 2022 The Android Open Source Project
+# Copyright (C) 2024 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.
@@ -17,6 +17,7 @@
 perfetto_sql_source_set("android") {
   deps = [
     "auto",
+    "battery",
     "cpu",
     "frames",
     "gpu",
@@ -41,6 +42,7 @@
     "input.sql",
     "io.sql",
     "job_scheduler.sql",
+    "job_scheduler_states.sql",
     "monitor_contention.sql",
     "network_packets.sql",
     "oom_adjuster.sql",
diff --git a/src/trace_processor/perfetto_sql/stdlib/android/battery/BUILD.gn b/src/trace_processor/perfetto_sql/stdlib/android/battery/BUILD.gn
new file mode 100644
index 0000000..828c10b
--- /dev/null
+++ b/src/trace_processor/perfetto_sql/stdlib/android/battery/BUILD.gn
@@ -0,0 +1,19 @@
+# Copyright (C) 2024 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.
+
+import("../../../../../../gn/perfetto_sql.gni")
+
+perfetto_sql_source_set("battery") {
+  sources = [ "charging_states.sql" ]
+}
diff --git a/src/trace_processor/perfetto_sql/stdlib/android/battery/charging_states.sql b/src/trace_processor/perfetto_sql/stdlib/android/battery/charging_states.sql
new file mode 100644
index 0000000..6629fe4
--- /dev/null
+++ b/src/trace_processor/perfetto_sql/stdlib/android/battery/charging_states.sql
@@ -0,0 +1,71 @@
+--
+-- Copyright 2024 The Android Open Source Project
+--
+-- Licensed under the Apache License, Version 2.0 (the "License");
+-- you may not use this file except in compliance with the License.
+-- You may obtain a copy of the License at
+--
+--     https://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+INCLUDE PERFETTO MODULE counters.intervals;
+
+-- Device charging states.
+CREATE PERFETTO TABLE android_charging_states(
+  -- Alias of counter.id if a slice with charging state exists otherwise
+  -- there will be a single row where id = 1.
+  id INT,
+  -- Timestamp at which the device charging state began.
+  ts INT,
+  -- Duration of the device charging state.
+  dur INT,
+  -- Device charging state, one of: Charging, Discharging, Not charging
+  -- (when the charger is present but battery is not charging),
+  -- Full, Unknown
+  charging_state STRING
+) AS SELECT
+    id,
+    ts,
+    dur,
+    charging_state
+  FROM (
+    WITH
+      _counter AS (
+        SELECT counter.id, ts, 0 AS track_id, value
+        FROM counter
+        JOIN counter_track
+          ON counter_track.id = counter.track_id
+        WHERE counter_track.name = 'BatteryStatus'
+      )
+    SELECT
+      id,
+      ts,
+      dur,
+      CASE
+        value
+        -- 0 and 1 are both 'Unknown'
+        WHEN 2 THEN 'Charging'
+        WHEN 3 THEN 'Discharging'
+        -- special case when charger is present but battery isn't charging
+        WHEN 4 THEN 'Not charging'
+        WHEN 5 THEN 'Full'
+        ELSE 'Unknown'
+        END AS charging_state
+    FROM counter_leading_intervals !(_counter)
+    WHERE dur > 0
+    -- Either the above select statement is populated or the
+    -- select statement after the union is populated but not both.
+    UNION
+    -- When the trace does not have a slice in the charging state track then
+    -- we will assume that the charging state for the entire trace is Unknown.
+    -- This ensures that we still have job data even if the charging state is
+    -- not known. The following statement will only ever return a single row.
+    SELECT 1, TRACE_START(), TRACE_DUR(), 'Unknown'
+    WHERE NOT EXISTS (
+      SELECT * FROM _counter
+    ) AND TRACE_DUR() > 0
+  );
diff --git a/src/trace_processor/perfetto_sql/stdlib/android/desktop_mode.sql b/src/trace_processor/perfetto_sql/stdlib/android/desktop_mode.sql
index de4729b..6ab75d8 100644
--- a/src/trace_processor/perfetto_sql/stdlib/android/desktop_mode.sql
+++ b/src/trace_processor/perfetto_sql/stdlib/android/desktop_mode.sql
@@ -35,21 +35,21 @@
   atoms AS (
     SELECT
       ts,
-      extract_arg(arg_set_id, 'field_1') AS type,
-      extract_arg(arg_set_id, 'field_2') AS instance_id,
-      extract_arg(arg_set_id, 'field_3') AS uid
+      extract_arg(arg_set_id, 'desktop_mode_session_task_update.task_event') AS type,
+      extract_arg(arg_set_id, 'desktop_mode_session_task_update.instance_id') AS instance_id,
+      extract_arg(arg_set_id, 'desktop_mode_session_task_update.uid') AS uid
     FROM android_statsd_atoms
-    WHERE name = 'atom_819'),
+    WHERE name = 'desktop_mode_session_task_update'),
   dw_statsd_events_add AS (
     SELECT *
     FROM atoms
-    WHERE type = 1),
+    WHERE type = 'TASK_ADDED'),
   dw_statsd_events_remove AS (
     SELECT * FROM atoms
-    WHERE type = 2),
+    WHERE type = 'TASK_REMOVED'),
   dw_statsd_events_update_by_instance AS (
     SELECT instance_id, min(uid) AS uid FROM atoms
-    WHERE type = 3 GROUP BY instance_id),
+    WHERE type = 'TASK_INFO_CHANGED' GROUP BY instance_id),
   dw_windows AS (
     SELECT
       a.ts AS raw_add_ts,
diff --git a/src/trace_processor/perfetto_sql/stdlib/android/job_scheduler.sql b/src/trace_processor/perfetto_sql/stdlib/android/job_scheduler.sql
index dc222bf..98f65e0 100644
--- a/src/trace_processor/perfetto_sql/stdlib/android/job_scheduler.sql
+++ b/src/trace_processor/perfetto_sql/stdlib/android/job_scheduler.sql
@@ -15,6 +15,18 @@
 --
 
 -- All scheduled jobs and their latencies.
+--
+-- The table is populated by ATrace using the system server ATrace category
+-- (`atrace_categories: "ss"`). You can also set the `atrace_apps` of interest.
+--
+-- This differs from the `android_job_scheduler_states` table
+-- in the `android.job_scheduler_states` module which is populated
+-- by the `ScheduledJobStateChanged` atom.
+--
+-- Using `android_job_scheduler_states` is preferred when the
+-- `ATOM_SCHEDULED_JOB_STATE_CHANGED` is available in the trace since
+-- it includes the constraint, screen, or charging state changes for
+-- each job in a trace.
 CREATE PERFETTO TABLE android_job_scheduler_events (
   -- Id of the scheduled job assigned by the app developer.
   job_id INT,
diff --git a/src/trace_processor/perfetto_sql/stdlib/android/job_scheduler_states.sql b/src/trace_processor/perfetto_sql/stdlib/android/job_scheduler_states.sql
new file mode 100644
index 0000000..ea3f8cb
--- /dev/null
+++ b/src/trace_processor/perfetto_sql/stdlib/android/job_scheduler_states.sql
@@ -0,0 +1,438 @@
+--
+-- Copyright 2024 The Android Open Source Project
+--
+-- Licensed under the Apache License, Version 2.0 (the "License");
+-- you may not use this file except in compliance with the License.
+-- You may obtain a copy of the License at
+--
+--     https://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+
+INCLUDE PERFETTO MODULE counters.intervals;
+INCLUDE PERFETTO MODULE android.battery.charging_states;
+INCLUDE PERFETTO MODULE intervals.intersect;
+
+CREATE PERFETTO TABLE _screen_states AS
+SELECT
+  id,
+  ts,
+  dur,
+  screen_state
+FROM (
+  WITH _screen_state_span AS (
+  SELECT *
+  FROM counter_leading_intervals!((
+    SELECT counter.id, ts, 0 AS track_id, value
+    FROM counter
+    JOIN counter_track ON counter_track.id = counter.track_id
+    WHERE name = 'ScreenState'
+  ))) SELECT
+    id,
+    ts,
+    dur,
+    CASE value
+      WHEN 1 THEN 'Screen off'
+      WHEN 2 THEN 'Screen on'
+      WHEN 3 THEN 'Always-on display (doze)'
+      ELSE 'Unknown'
+      END AS screen_state
+    FROM _screen_state_span
+    WHERE dur > 0
+    -- Either the above select statement is populated or the
+    -- select statement after the union is populated but not both.
+    UNION
+     -- When the trace does not have a slice in the screen state track then
+    -- we will assume that the screen state for the entire trace is Unknown.
+    -- This ensures that we still have job data even if the screen state is
+    -- not known. The following statement will only ever return a single row.
+    SELECT 1, TRACE_START() as ts, TRACE_DUR() as dur, 'Unknown'
+    WHERE NOT EXISTS (
+      SELECT * FROM _screen_state_span
+    ) AND TRACE_DUR() > 0
+);
+
+CREATE PERFETTO TABLE _job_states AS
+SELECT
+  t.id as track_id,
+  s.ts,
+  s.id AS slice_id,
+  extract_arg(arg_set_id, 'scheduled_job_state_changed.job_name') AS job_name,
+  extract_arg(arg_set_id, 'scheduled_job_state_changed.state') AS state,
+  extract_arg(arg_set_id, 'scheduled_job_state_changed.internal_stop_reason')
+    AS internal_stop_reason,
+  extract_arg(arg_set_id, 'scheduled_job_state_changed.public_stop_reason')
+    AS public_stop_reason,
+  extract_arg(arg_set_id, 'scheduled_job_state_changed.effective_priority')
+    AS effective_priority,
+  extract_arg(arg_set_id, 'scheduled_job_state_changed.has_battery_not_low_constraint')
+    AS has_battery_not_low_constraint,
+  extract_arg(arg_set_id, 'scheduled_job_state_changed.has_charging_constraint')
+    AS has_charging_constraint,
+  extract_arg(arg_set_id, 'scheduled_job_state_changed.has_connectivity_constraint')
+    AS has_connectivity_constraint,
+  extract_arg(arg_set_id, 'scheduled_job_state_changed.has_content_trigger_constraint')
+    AS has_content_trigger_constraint,
+  extract_arg(arg_set_id, 'scheduled_job_state_changed.has_deadline_constraint')
+    AS has_deadline_constraint,
+  extract_arg(arg_set_id, 'scheduled_job_state_changed.has_idle_constraint')
+    AS has_idle_constraint,
+  extract_arg(arg_set_id, 'scheduled_job_state_changed.has_storage_not_low_constraint')
+    AS has_storage_not_low_constraint,
+  extract_arg(arg_set_id, 'scheduled_job_state_changed.has_timing_delay_constraint')
+    AS has_timing_delay_constraint,
+  extract_arg(arg_set_id, 'scheduled_job_state_changed.is_prefetch') == 1
+    AS is_prefetch,
+  extract_arg(arg_set_id, 'scheduled_job_state_changed.is_requested_expedited_job')
+    AS is_requested_expedited_job,
+  extract_arg(arg_set_id, 'scheduled_job_state_changed.is_running_as_expedited_job')
+    AS is_running_as_expedited_job,
+  extract_arg(arg_set_id, 'scheduled_job_state_changed.job_id') AS job_id,
+  extract_arg(arg_set_id, 'scheduled_job_state_changed.num_previous_attempts')
+    AS num_previous_attempts,
+  extract_arg(arg_set_id, 'scheduled_job_state_changed.requested_priority')
+    AS requested_priority,
+  extract_arg(arg_set_id, 'scheduled_job_state_changed.standby_bucket')
+    AS standby_bucket,
+  extract_arg(arg_set_id, 'scheduled_job_state_changed.is_periodic')
+    AS is_periodic,
+  extract_arg(arg_set_id, 'scheduled_job_state_changed.is_periodic')
+    AS has_flex_constraint,
+  extract_arg(arg_set_id, 'scheduled_job_state_changed.is_requested_as_user_initiated_job')
+    AS is_requested_as_user_initiated_job,
+  extract_arg(arg_set_id, 'scheduled_job_state_changed.is_running_as_user_initiated_job')
+    AS is_running_as_user_initiated_job,
+  extract_arg(arg_set_id, 'scheduled_job_state_changed.deadline_ms')
+    AS deadline_ms,
+  extract_arg(arg_set_id, 'scheduled_job_state_changed.job_start_latency_ms')
+    AS job_start_latency_ms,
+  extract_arg(arg_set_id, 'scheduled_job_state_changed.num_uncompleted_work_items')
+    AS num_uncompleted_work_items,
+  extract_arg(arg_set_id, 'scheduled_job_state_changed.proc_state')
+    AS proc_state
+FROM
+  track t
+JOIN slice s
+  ON (s.track_id = t.id)
+WHERE
+  t.name = 'Statsd Atoms' AND s.name = 'scheduled_job_state_changed';
+
+CREATE PERFETTO TABLE _job_started AS
+WITH cte AS (
+  SELECT
+    *,
+    LEAD(state, 1)
+      OVER (PARTITION BY job_name, job_id ORDER BY job_name, job_id, ts) AS lead_state,
+    LEAD(ts, 1, TRACE_END())
+      OVER (PARTITION BY job_name, job_id ORDER BY job_name, job_id, ts) AS ts_lead,
+    --- Filter out statsd lossy issue.
+    LEAD(ts, 1)
+      OVER (PARTITION BY job_name, job_id ORDER BY job_name, job_id, ts) IS NULL AS is_end_slice,
+    LEAD(internal_stop_reason, 1, 'INTERNAL_STOP_REASON_UNKNOWN')
+      OVER (
+        PARTITION BY job_name, job_id
+        ORDER BY job_name, job_id, ts
+      ) AS lead_internal_stop_reason,
+    LEAD(public_stop_reason, 1, 'PUBLIC_STOP_REASON_UNKNOWN')
+      OVER (
+        PARTITION BY job_name, job_id
+        ORDER BY job_name, job_id, ts
+      ) AS lead_public_stop_reason
+  FROM _job_states
+  WHERE state != 'CANCELLED'
+)
+SELECT
+  -- Job name is based on whether the tag and/or namespace are present:
+  -- 1. Both tag and namespace are present: @<namespace>@<tag>:<package name>
+  -- 2. Only tag is present:  <tag>:<package name>
+  -- 3. Only namespace is present: @<namespace>@<package name>/<class name>
+  CASE
+    WHEN substr(job_name, 1, 1) = '@'
+      THEN
+        CASE
+          WHEN substr(STR_SPLIT(job_name, '/', 1), 1, 3) = 'com' THEN STR_SPLIT(job_name, '/', 1)
+          ELSE STR_SPLIT(STR_SPLIT(job_name, '/', 0), '@', 2)
+          END
+    ELSE STR_SPLIT(job_name, '/', 0)
+    END AS package_name,
+  CASE
+    WHEN substr(job_name, 1, 1) = '@' THEN STR_SPLIT(job_name, '@', 1)
+    ELSE STR_SPLIT(job_name, '/', 1)
+    END AS job_namespace,
+  ts_lead - ts AS dur,
+  IIF(lead_state = 'SCHEDULED', TRUE, FALSE) AS is_rescheduled,
+  *
+FROM cte
+WHERE
+  is_end_slice = FALSE
+  AND (ts_lead - ts) > 0
+  AND state = 'STARTED'
+  AND lead_state IN ('FINISHED', 'SCHEDULED');
+
+CREATE PERFETTO TABLE _charging_screen_states AS
+SELECT
+  ROW_NUMBER() OVER () AS id,
+  ii.ts,
+  ii.dur,
+  c.charging_state,
+  s.screen_state
+FROM _interval_intersect!(
+  (android_charging_states, _screen_states),
+  ()
+) ii
+JOIN android_charging_states c ON c.id = ii.id_0
+JOIN _screen_states s ON s.id = ii.id_1;
+
+-- This table returns constraint changes that a
+-- job will go through in a single trace.
+--
+-- Values in this table are derived from the the `ScheduledJobStateChanged`
+-- atom. This table differs from the
+-- `android_job_scheduler_with_screen_charging_states` in this module
+-- (`android.job_scheduler_states`) by only having job constraint information.
+--
+-- See documentation for the `android_job_scheduler_with_screen_charging_states`
+-- for how tables in this module differ from `android_job_scheduler_events`
+-- table in the `android.job_scheduler` module and how to populate this table.
+CREATE PERFETTO TABLE android_job_scheduler_states(
+  -- Unique identifier for row.
+  id INT,
+  -- Timestamp of job state slice.
+  ts INT,
+  -- Duration of job state slice.
+  dur INT,
+  -- Id of the slice.
+  slice_id INT,
+  -- Name of the job (as named by the app).
+  job_name STRING,
+  -- Id of job (assigned by app for T- builds and system generated in U+
+  -- builds).
+  job_id INT,
+  -- Package that the job belongs (ex: associated app).
+  package_name STRING,
+  -- Namespace of job.
+  job_namespace STRING,
+  -- Priority at which JobScheduler ran the job.
+  effective_priority INT,
+  -- True if app requested job should run when the device battery is not low.
+  has_battery_not_low_constraint BOOL,
+  -- True if app requested job should run when the device is charging.
+  has_charging_constraint BOOL,
+  -- True if app requested job should run when device has connectivity.
+  has_connectivity_constraint BOOL,
+  -- True if app requested job should run when there is a content trigger.
+  has_content_trigger_constraint BOOL,
+  -- True if app requested there is a deadline by which the job should run.
+  has_deadline_constraint BOOL,
+  -- True if app requested job should run when device is idle.
+  has_idle_constraint BOOL,
+  -- True if app requested job should run when device storage is not low.
+  has_storage_not_low_constraint BOOL,
+  -- True if app requested job has a timing delay.
+  has_timing_delay_constraint BOOL,
+  -- True if app requested job should run within hours of app launch.
+  is_prefetch BOOL,
+  -- True if app requested that the job is run as an expedited job.
+  is_requested_expedited_job BOOL,
+  -- The job is run as an expedited job.
+  is_running_as_expedited_job BOOL,
+  -- Number of previous attempts at running job.
+  num_previous_attempts INT,
+  -- The requested priority at which the job should run.
+  requested_priority INT,
+  -- The job's standby bucket (one of: Active, Working Set, Frequent, Rare,
+  -- Never, Restricted, Exempt).
+  standby_bucket STRING,
+  -- Job should run in intervals.
+  is_periodic BOOL,
+  -- True if the job should run as a flex job.
+  has_flex_constraint BOOL,
+  -- True is app has requested that a job be run as a user initiated job.
+  is_requested_as_user_initiated_job BOOL,
+  -- True if job is running as a user initiated job.
+  is_running_as_user_initiated_job BOOL,
+  -- Deadline that job has requested and valid if has_deadline_constraint is
+  -- true.
+  deadline_ms INT,
+  -- The latency in ms between when a job is scheduled and when it actually
+  -- starts.
+  job_start_latency_ms INT,
+  -- Number of uncompleted job work items.
+  num_uncompleted_work_items INT,
+  -- Process state of the process responsible for running the job.
+  proc_state STRING
+) AS
+SELECT
+  ROW_NUMBER() OVER (ORDER BY ts) AS id,
+  ts,
+  dur,
+  slice_id,
+  job_name,
+  job_id,
+  package_name,
+  job_namespace,
+  effective_priority,
+  has_battery_not_low_constraint,
+  has_charging_constraint,
+  has_connectivity_constraint,
+  has_content_trigger_constraint,
+  has_deadline_constraint,
+  has_idle_constraint,
+  has_storage_not_low_constraint,
+  has_timing_delay_constraint,
+  is_prefetch,
+  is_requested_expedited_job,
+  is_running_as_expedited_job,
+  num_previous_attempts,
+  requested_priority,
+  standby_bucket,
+  is_periodic,
+  has_flex_constraint,
+  is_requested_as_user_initiated_job,
+  is_running_as_user_initiated_job,
+  deadline_ms,
+  job_start_latency_ms,
+  num_uncompleted_work_items,
+  proc_state
+FROM _job_started;
+
+-- This table returns the constraint, charging,
+-- and screen state changes that a job will go through
+-- in a single trace.
+--
+-- Values from this table are derived from
+-- the `ScheduledJobStateChanged` atom. This differs from the
+-- `android_job_scheduler_events` table in the `android.job_scheduler` module
+-- which is derived from ATrace the system server category
+-- (`atrace_categories: "ss"`).
+--
+-- This also differs from the `android_job_scheduler_states` in this module
+-- (`android.job_scheduler_states`) by providing charging and screen state
+-- changes.
+--
+-- To populate this table, enable the Statsd Tracing Config with the
+-- ATOM_SCHEDULED_JOB_STATE_CHANGED push atom id.
+-- https://perfetto.dev/docs/reference/trace-config-proto#StatsdTracingConfig
+--
+-- This table is preferred over `android_job_scheduler_events`
+-- since it contains more information and should be used whenever
+-- `ATOM_SCHEDULED_JOB_STATE_CHANGED` is available in a trace.
+CREATE PERFETTO TABLE android_job_scheduler_with_screen_charging_states(
+  -- Timestamp of job.
+  ts INT,
+  -- Duration of job in ns.
+  dur INT,
+  -- Id of the slice.
+  slice_id INT,
+  -- Name of the job (as named by the app).
+  job_name STRING,
+  -- Id of job (assigned by app for T- builds and system generated in U+
+  -- builds).
+  job_id INT,
+  -- Duration of job in ns.
+  job_dur INT,
+  -- Package that the job belongs (ex: associated app).
+  package_name STRING,
+  -- Namespace of job.
+  job_namespace STRING,
+  -- Device charging state during job (one of: Charging, Discharging, Not charging,
+  -- Full, Unknown).
+  charging_state STRING,
+  -- Device screen state during job (one of: Screen off, Screen on, Always-on display
+  -- (doze), Unknown).
+  screen_state STRING,
+  -- Priority at which JobScheduler ran the job.
+  effective_priority INT,
+  -- True if app requested job should run when the device battery is not low.
+  has_battery_not_low_constraint BOOL,
+  -- True if app requested job should run when the device is charging.
+  has_charging_constraint BOOL,
+  -- True if app requested job should run when device has connectivity.
+  has_connectivity_constraint BOOL,
+  -- True if app requested job should run when there is a content trigger.
+  has_content_trigger_constraint BOOL,
+  -- True if app requested there is a deadline by which the job should run.
+  has_deadline_constraint BOOL,
+  -- True if app requested job should run when device is idle.
+  has_idle_constraint BOOL,
+  -- True if app requested job should run when device storage is not low.
+  has_storage_not_low_constraint BOOL,
+  -- True if app requested job has a timing delay.
+  has_timing_delay_constraint BOOL,
+  -- True if app requested job should run within hours of app launch.
+  is_prefetch BOOL,
+  -- True if app requested that the job is run as an expedited job.
+  is_requested_expedited_job BOOL,
+  -- The job is run as an expedited job.
+  is_running_as_expedited_job BOOL,
+  -- Number of previous attempts at running job.
+  num_previous_attempts INT,
+  -- The requested priority at which the job should run.
+  requested_priority INT,
+  -- The job's standby bucket (one of: Active, Working Set, Frequent, Rare,
+  -- Never, Restricted, Exempt).
+  standby_bucket STRING,
+  -- Job should run in intervals.
+  is_periodic BOOL,
+  -- True if the job should run as a flex job.
+  has_flex_constraint BOOL,
+  -- True is app has requested that a job be run as a user initiated job.
+  is_requested_as_user_initiated_job BOOL,
+  -- True if job is running as a user initiated job.
+  is_running_as_user_initiated_job BOOL,
+  -- Deadline that job has requested and valid if has_deadline_constraint is
+  -- true.
+  deadline_ms INT,
+  -- The latency in ms between when a job is scheduled and when it actually
+  -- starts.
+  job_start_latency_ms INT,
+  -- Number of uncompleted job work items.
+  num_uncompleted_work_items INT,
+  -- Process state of the process responsible for running the job.
+  proc_state STRING
+) AS
+SELECT
+  ii.ts,
+  ii.dur,
+  js.slice_id,
+  js.job_name || '_' || js.job_id AS job_name,
+  js.job_id,
+  js.dur AS job_dur,
+  js.package_name,
+  js.job_namespace,
+  c.charging_state,
+  c.screen_state,
+  js.effective_priority,
+  js.has_battery_not_low_constraint,
+  js.has_charging_constraint,
+  js.has_connectivity_constraint,
+  js.has_content_trigger_constraint,
+  js.has_deadline_constraint,
+  js.has_idle_constraint,
+  js.has_storage_not_low_constraint,
+  js.has_timing_delay_constraint,
+  js.is_prefetch,
+  js.is_requested_expedited_job,
+  js.is_running_as_expedited_job,
+  js.num_previous_attempts,
+  js.requested_priority,
+  js.standby_bucket,
+  js.is_periodic,
+  js.has_flex_constraint,
+  js.is_requested_as_user_initiated_job,
+  js.is_running_as_user_initiated_job,
+  js.deadline_ms,
+  js.job_start_latency_ms,
+  js.num_uncompleted_work_items,
+  js.proc_state
+  FROM _interval_intersect!(
+        (_charging_screen_states,
+        android_job_scheduler_states),
+        ()
+      ) ii
+  JOIN _charging_screen_states c ON c.id = ii.id_0
+  JOIN android_job_scheduler_states js ON js.id = ii.id_1;
diff --git a/src/trace_processor/perfetto_sql/stdlib/android/startup/startup_breakdowns.sql b/src/trace_processor/perfetto_sql/stdlib/android/startup/startup_breakdowns.sql
index c6b972a..9f3f321 100644
--- a/src/trace_processor/perfetto_sql/stdlib/android/startup/startup_breakdowns.sql
+++ b/src/trace_processor/perfetto_sql/stdlib/android/startup/startup_breakdowns.sql
@@ -150,4 +150,19 @@
 AS
 SELECT b.ts, b.dur, startup.startup_id, b.slice_id, b.thread_state_id, _startup_breakdown_reason(name, state, io_wait, irq_context) AS reason
 FROM _startup_thread_states_and_slices_breakdown_sp b
-JOIN _startup_root_slices startup ON startup.id = b.root_id;
+JOIN _startup_root_slices startup ON startup.id = b.root_id
+UNION ALL
+-- Augment the existing startup breakdown with an artificial slice accounting for
+-- any launch delays before the app starts handling startup on its main thread
+SELECT
+  _startup_root_slices.ts,
+  MIN(_startup_thread_states_breakdown.ts) - _startup_root_slices.ts AS dur,
+  startup_id,
+  NULL AS slice_id,
+  NULL AS thread_state_id,
+  'launch_delay' AS reason
+FROM _startup_thread_states_breakdown
+JOIN _startup_root_slices
+  ON _startup_root_slices.id = root_id
+GROUP BY root_id
+HAVING MIN(_startup_thread_states_breakdown.ts) - _startup_root_slices.ts > 0;
diff --git a/src/trace_processor/perfetto_sql/stdlib/android/suspend.sql b/src/trace_processor/perfetto_sql/stdlib/android/suspend.sql
index 1551ea6..8d2c88c 100644
--- a/src/trace_processor/perfetto_sql/stdlib/android/suspend.sql
+++ b/src/trace_processor/perfetto_sql/stdlib/android/suspend.sql
@@ -49,11 +49,11 @@
     AND NOT EXISTS(SELECT * FROM suspend_slice_from_minimal)
 ),
 awake_slice AS (
-  -- If we don't have any rows, use the trace bounds.
+  -- If we don't have any rows, use the trace bounds if bounds are defined.
   SELECT
     trace_start() AS ts,
     trace_dur() AS dur
-  WHERE (SELECT COUNT(*) FROM suspend_slice) = 0
+  WHERE (SELECT COUNT(*) FROM suspend_slice) = 0 AND dur > 0
   UNION ALL
   -- If we do have rows, create one slice from the trace start to the first suspend.
   SELECT
diff --git a/src/trace_processor/perfetto_sql/stdlib/wattson/cpu_split.sql b/src/trace_processor/perfetto_sql/stdlib/wattson/cpu_split.sql
index dfeb3fd..3d35a94 100644
--- a/src/trace_processor/perfetto_sql/stdlib/wattson/cpu_split.sql
+++ b/src/trace_processor/perfetto_sql/stdlib/wattson/cpu_split.sql
@@ -13,6 +13,7 @@
 -- See the License for the specific language governing permissions and
 -- limitations under the License.
 
+INCLUDE PERFETTO MODULE android.suspend;
 INCLUDE PERFETTO MODULE intervals.intersect;
 INCLUDE PERFETTO MODULE time.conversion;
 INCLUDE PERFETTO MODULE wattson.arm_dsu;
@@ -79,20 +80,25 @@
 CREATE PERFETTO TABLE _stats_cpu7 AS
 SELECT * FROM _stats_w_policy_subquery!(7, policy_7, cpu7_curve, freq_7, idle_7);
 
-CREATE PERFETTO TABLE _stats_cpu0123 AS
+CREATE PERFETTO TABLE _stats_cpu0123_suspend AS
 SELECT
   ii.ts,
   ii.dur,
-  id_0 as cpu0_id, id_1 as cpu1_id, id_2 as cpu2_id, id_3 as cpu3_id
+  id_0 as cpu0_id, id_1 as cpu1_id, id_2 as cpu2_id, id_3 as cpu3_id,
+  ss.power_state = 'suspended' as suspended
 FROM _interval_intersect!(
   (
     _ii_subquery!(_stats_cpu0),
     _ii_subquery!(_stats_cpu1),
     _ii_subquery!(_stats_cpu2),
-    _ii_subquery!(_stats_cpu3)
+    _ii_subquery!(_stats_cpu3),
+    -- Includes suspend AND awake portions, which will cover entire trace and
+    -- allows us to use _interval_intersect instead of SPAN_OUTER_JOIN()
+    _ii_subquery!(android_suspend_state)
   ),
   ()
-) as ii;
+) as ii
+JOIN android_suspend_state AS ss ON ss._auto_id = id_4;
 
 CREATE PERFETTO TABLE _stats_cpu4567 AS
 SELECT
@@ -110,26 +116,14 @@
 ) as ii;
 
 -- SPAN OUTER JOIN because sometimes CPU4/5/6/7 are empty tables
-CREATE VIRTUAL TABLE _stats_cpu01234567
+CREATE VIRTUAL TABLE _stats_cpu01234567_suspend
 USING
-  SPAN_OUTER_JOIN(_stats_cpu0123, _stats_cpu4567);
-
--- get suspend resume state as logged by ftrace.
-CREATE PERFETTO TABLE _suspend_slice AS
-SELECT
-  ts, dur, TRUE AS suspended
-FROM slice
-WHERE name GLOB "timekeeping_freeze(0)";
-
--- Combine suspend information with CPU idle and frequency system states.
-CREATE VIRTUAL TABLE _idle_freq_suspend_slice
-USING
-  SPAN_OUTER_JOIN(_stats_cpu01234567, _suspend_slice);
+  SPAN_OUTER_JOIN(_stats_cpu0123_suspend, _stats_cpu4567);
 
 -- Combine system state so that it has idle, freq, and L3 hit info.
 CREATE VIRTUAL TABLE _idle_freq_l3_hit_slice
 USING
-  SPAN_OUTER_JOIN(_idle_freq_suspend_slice, _arm_l3_hit_rate);
+  SPAN_OUTER_JOIN(_stats_cpu01234567_suspend, _arm_l3_hit_rate);
 
 -- Combine system state so that it has idle, freq, L3 hit, and L3 miss info.
 CREATE VIRTUAL TABLE _idle_freq_l3_hit_l3_miss_slice
@@ -166,7 +160,7 @@
   policy_6,
   policy_7,
   IIF(
-    suspended = 1,
+    suspended,
     1,
     MIN(
       IFNULL(idle_0, 1),
@@ -175,14 +169,14 @@
       IFNULL(idle_3, 1)
     )
   ) as no_static,
-  IIF(suspended = 1, 0.0, cpu0_curve) as cpu0_curve,
-  IIF(suspended = 1, 0.0, cpu1_curve) as cpu1_curve,
-  IIF(suspended = 1, 0.0, cpu2_curve) as cpu2_curve,
-  IIF(suspended = 1, 0.0, cpu3_curve) as cpu3_curve,
-  IIF(suspended = 1, 0.0, cpu4_curve) as cpu4_curve,
-  IIF(suspended = 1, 0.0, cpu5_curve) as cpu5_curve,
-  IIF(suspended = 1, 0.0, cpu6_curve) as cpu6_curve,
-  IIF(suspended = 1, 0.0, cpu7_curve) as cpu7_curve,
+  IIF(suspended, 0.0, cpu0_curve) as cpu0_curve,
+  IIF(suspended, 0.0, cpu1_curve) as cpu1_curve,
+  IIF(suspended, 0.0, cpu2_curve) as cpu2_curve,
+  IIF(suspended, 0.0, cpu3_curve) as cpu3_curve,
+  IIF(suspended, 0.0, cpu4_curve) as cpu4_curve,
+  IIF(suspended, 0.0, cpu5_curve) as cpu5_curve,
+  IIF(suspended, 0.0, cpu6_curve) as cpu6_curve,
+  IIF(suspended, 0.0, cpu7_curve) as cpu7_curve,
   -- If dependency CPUs are active, then that CPU could contribute static power
   IIF(idle_4 = -1, lut4.curve_value, -1) as static_4,
   IIF(idle_5 = -1, lut5.curve_value, -1) as static_5,
diff --git a/src/trace_processor/perfetto_sql/stdlib/wattson/curves/estimates.sql b/src/trace_processor/perfetto_sql/stdlib/wattson/curves/estimates.sql
index 3a10fba..1c81f49 100644
--- a/src/trace_processor/perfetto_sql/stdlib/wattson/curves/estimates.sql
+++ b/src/trace_processor/perfetto_sql/stdlib/wattson/curves/estimates.sql
@@ -156,3 +156,28 @@
   ) + static_curve as dsu_scu_mw
 FROM _system_state_curves;
 
+-- API to get power from each system state in an arbitrary time window
+CREATE PERFETTO FUNCTION _windowed_system_state_mw(ts LONG, dur LONG)
+RETURNS TABLE(
+  cpu0_mw FLOAT,
+  cpu1_mw FLOAT,
+  cpu2_mw FLOAT,
+  cpu3_mw FLOAT,
+  cpu4_mw FLOAT,
+  cpu5_mw FLOAT,
+  cpu6_mw FLOAT,
+  cpu7_mw FLOAT,
+  dsu_scu_mw FLOAT
+) AS
+SELECT
+  SUM(ss.cpu0_mw * ss.dur) / SUM(ss.dur) AS cpu0_mw,
+  SUM(ss.cpu1_mw * ss.dur) / SUM(ss.dur) AS cpu1_mw,
+  SUM(ss.cpu2_mw * ss.dur) / SUM(ss.dur) AS cpu2_mw,
+  SUM(ss.cpu3_mw * ss.dur) / SUM(ss.dur) AS cpu3_mw,
+  SUM(ss.cpu4_mw * ss.dur) / SUM(ss.dur) AS cpu4_mw,
+  SUM(ss.cpu5_mw * ss.dur) / SUM(ss.dur) AS cpu5_mw,
+  SUM(ss.cpu6_mw * ss.dur) / SUM(ss.dur) AS cpu6_mw,
+  SUM(ss.cpu7_mw * ss.dur) / SUM(ss.dur) AS cpu7_mw,
+  SUM(ss.dsu_scu_mw * ss.dur) / SUM(ss.dur) AS dsu_scu_mw
+FROM _interval_intersect_single!($ts, $dur, _ii_subquery!(_system_state_mw)) ii
+JOIN _system_state_mw AS ss ON ss._auto_id = id;
diff --git a/src/trace_processor/perfetto_sql/stdlib/wattson/device_infos.sql b/src/trace_processor/perfetto_sql/stdlib/wattson/device_infos.sql
index 6af3c85..6b8cda5 100644
--- a/src/trace_processor/perfetto_sql/stdlib/wattson/device_infos.sql
+++ b/src/trace_processor/perfetto_sql/stdlib/wattson/device_infos.sql
@@ -58,6 +58,8 @@
 CREATE PERFETTO TABLE _wattson_device AS
 WITH soc_model AS (
   SELECT COALESCE(
+    -- Get guest model from metadata, which takes precedence if set
+    (SELECT str_value FROM metadata WHERE name = 'android_guest_soc_model'),
     -- Get model from metadata
     (SELECT str_value FROM metadata WHERE name = 'android_soc_model'),
     -- Get device name from metadata and map it to model
diff --git a/src/trace_processor/storage/metadata.h b/src/trace_processor/storage/metadata.h
index 7183b0f..9c73c83 100644
--- a/src/trace_processor/storage/metadata.h
+++ b/src/trace_processor/storage/metadata.h
@@ -33,6 +33,7 @@
   F(android_build_fingerprint,         KeyType::kSingle,  Variadic::kString), \
   F(android_sdk_version,               KeyType::kSingle,  Variadic::kInt),    \
   F(android_soc_model,                 KeyType::kSingle,  Variadic::kString), \
+  F(android_guest_soc_model,           KeyType::kSingle,  Variadic::kString), \
   F(android_hardware_revision,         KeyType::kSingle,  Variadic::kString), \
   F(android_storage_model,             KeyType::kSingle,  Variadic::kString), \
   F(android_ram_model,                 KeyType::kSingle,  Variadic::kString), \
diff --git a/src/tracing/service/tracing_service_impl.cc b/src/tracing/service/tracing_service_impl.cc
index c6c07a6..262e352 100644
--- a/src/tracing/service/tracing_service_impl.cc
+++ b/src/tracing/service/tracing_service_impl.cc
@@ -3751,6 +3751,13 @@
     PERFETTO_ELOG("Unable to read ro.soc.model");
   }
 
+  // guest_soc model is not always present
+  std::string guest_soc_model_value =
+      base::GetAndroidProp("ro.guest_soc.model");
+  if (!guest_soc_model_value.empty()) {
+    info->set_android_guest_soc_model(guest_soc_model_value);
+  }
+
   std::string hw_rev_value = base::GetAndroidProp("ro.boot.hardware.revision");
   if (!hw_rev_value.empty()) {
     info->set_android_hardware_revision(hw_rev_value);
diff --git a/test/data/android_job_scheduler.perfetto-trace.sha256 b/test/data/android_job_scheduler.perfetto-trace.sha256
new file mode 100644
index 0000000..f3779ec
--- /dev/null
+++ b/test/data/android_job_scheduler.perfetto-trace.sha256
@@ -0,0 +1 @@
+9941708f26c9dddfb250f8fdbef94a160302e3020c677f86287a3c061a430738
\ No newline at end of file
diff --git a/test/data/wattson_syscore_suspend.pb.sha256 b/test/data/wattson_syscore_suspend.pb.sha256
new file mode 100644
index 0000000..6a6d34e
--- /dev/null
+++ b/test/data/wattson_syscore_suspend.pb.sha256
@@ -0,0 +1 @@
+611b1824b4c5a26c7cf9e0bf06c4af32a5e30149ecd07ca2cd10160a0872108d
\ No newline at end of file
diff --git a/test/trace_processor/diff_tests/stdlib/android/startups_tests.py b/test/trace_processor/diff_tests/stdlib/android/startups_tests.py
index acce2d7..c44bca7 100644
--- a/test/trace_processor/diff_tests/stdlib/android/startups_tests.py
+++ b/test/trace_processor/diff_tests/stdlib/android/startups_tests.py
@@ -184,6 +184,7 @@
         "dur","reason"
         28663023,"choreographer_do_frame"
         22564487,"binder"
+        22011252,"launch_delay"
         16351925,"Running"
         13212137,"activity_start"
         10264635,"io"
diff --git a/test/trace_processor/diff_tests/stdlib/android/tests.py b/test/trace_processor/diff_tests/stdlib/android/tests.py
index 7a649e1..f559091 100644
--- a/test/trace_processor/diff_tests/stdlib/android/tests.py
+++ b/test/trace_processor/diff_tests/stdlib/android/tests.py
@@ -1302,3 +1302,111 @@
         "binder",4174605447
         "S",5144384456
         """))
+
+  def test_android_charging_states_output(self):
+    return DiffTestBlueprint(
+        trace=DataPath('android_job_scheduler.perfetto-trace'),
+        query="""
+        INCLUDE PERFETTO MODULE android.battery.charging_states;
+        SELECT ts, dur, charging_state FROM android_charging_states;
+      """,
+        out=Csv("""
+        "ts","dur","charging_state"
+        368604749651,59806073237,"Charging"
+      """))
+
+  def test_android_job_scheduler_states_output(self):
+    return DiffTestBlueprint(
+        trace=DataPath('android_job_scheduler.perfetto-trace'),
+        query="""
+        INCLUDE PERFETTO MODULE android.job_scheduler_states;
+        SELECT
+          id,
+          ts,
+          dur,
+          slice_id,
+          job_name || '_' || job_id AS job_name,
+          job_id,
+          package_name,
+          job_namespace,
+          effective_priority,
+          has_battery_not_low_constraint,
+          has_charging_constraint,
+          has_connectivity_constraint,
+          has_content_trigger_constraint,
+          has_deadline_constraint,
+          has_idle_constraint,
+          has_storage_not_low_constraint,
+          has_timing_delay_constraint,
+          is_prefetch,
+          is_requested_expedited_job,
+          is_running_as_expedited_job,
+          num_previous_attempts,
+          requested_priority,
+          standby_bucket,
+          is_periodic,
+          has_flex_constraint,
+          is_requested_as_user_initiated_job,
+          is_running_as_user_initiated_job,
+          deadline_ms,
+          job_start_latency_ms,
+          num_uncompleted_work_items,
+          proc_state
+        FROM android_job_scheduler_states;
+      """,
+        out=Csv("""
+      "id","ts","dur","slice_id","job_name","job_id","package_name","job_namespace","effective_priority","has_battery_not_low_constraint","has_charging_constraint","has_connectivity_constraint","has_content_trigger_constraint","has_deadline_constraint","has_idle_constraint","has_storage_not_low_constraint","has_timing_delay_constraint","is_prefetch","is_requested_expedited_job","is_running_as_expedited_job","num_previous_attempts","requested_priority","standby_bucket","is_periodic","has_flex_constraint","is_requested_as_user_initiated_job","is_running_as_user_initiated_job","deadline_ms","job_start_latency_ms","num_uncompleted_work_items","proc_state"
+1,377089754138,83200835,10,"@androidx.work.systemjobscheduler@com.android.providers.media.module/androidx.work.impl.background.systemjob.SystemJobService_-2746960329031286783",-2746960329031286783,"com.android.providers.media.module","androidx.work.systemjobscheduler",400,1,0,0,0,0,0,0,0,0,0,0,0,400,"EXEMPTED",0,0,0,0,0,3,0,"PROCESS_STATE_PERSISTENT"
+2,385507499374,111746552,17,"@androidx.work.systemjobscheduler@com.android.providers.media.module/androidx.work.impl.background.systemjob.SystemJobService_-2746960329031286782",-2746960329031286782,"com.android.providers.media.module","androidx.work.systemjobscheduler",400,1,0,0,0,0,0,0,0,0,0,0,0,400,"EXEMPTED",0,0,0,0,0,6,0,"PROCESS_STATE_PERSISTENT"
+3,416753734715,129444346,53,"@androidx.work.systemjobscheduler@com.android.providers.media.module/androidx.work.impl.background.systemjob.SystemJobService_-2746960329031286781",-2746960329031286781,"com.android.providers.media.module","androidx.work.systemjobscheduler",400,1,0,0,0,0,0,0,0,0,0,0,0,400,"EXEMPTED",0,0,0,0,0,5,0,"PROCESS_STATE_PERSISTENT"
+4,422530232411,86735906,59,"@androidx.work.systemjobscheduler@com.android.providers.media.module/androidx.work.impl.background.systemjob.SystemJobService_-2746960329031286780",-2746960329031286780,"com.android.providers.media.module","androidx.work.systemjobscheduler",400,1,0,0,0,0,0,0,0,0,0,0,0,400,"EXEMPTED",0,0,0,0,0,3,0,"PROCESS_STATE_PERSISTENT"
+      """))
+
+  def test_android_job_scheduler_with_screen_charging_output(self):
+    return DiffTestBlueprint(
+        trace=DataPath('android_job_scheduler.perfetto-trace'),
+        query="""
+        INCLUDE PERFETTO MODULE android.job_scheduler_states;
+        SELECT
+          ts,
+          dur,
+          slice_id,
+          job_name,
+          job_id,
+          job_dur,
+          package_name,
+          job_namespace,
+          charging_state,
+          screen_state,
+          effective_priority,
+          has_battery_not_low_constraint,
+          has_charging_constraint,
+          has_connectivity_constraint,
+          has_content_trigger_constraint,
+          has_deadline_constraint,
+          has_idle_constraint,
+          has_storage_not_low_constraint,
+          has_timing_delay_constraint,
+          is_prefetch,
+          is_requested_expedited_job,
+          is_running_as_expedited_job,
+          num_previous_attempts,
+          requested_priority,
+          standby_bucket,
+          is_periodic,
+          has_flex_constraint,
+          is_requested_as_user_initiated_job,
+          is_running_as_user_initiated_job,
+          deadline_ms,
+          job_start_latency_ms,
+          num_uncompleted_work_items,
+          proc_state
+        from android_job_scheduler_with_screen_charging_states;
+      """,
+        out=Csv("""
+        "ts","dur","slice_id","job_name","job_id","job_dur","package_name","job_namespace","charging_state","screen_state","effective_priority","has_battery_not_low_constraint","has_charging_constraint","has_connectivity_constraint","has_content_trigger_constraint","has_deadline_constraint","has_idle_constraint","has_storage_not_low_constraint","has_timing_delay_constraint","is_prefetch","is_requested_expedited_job","is_running_as_expedited_job","num_previous_attempts","requested_priority","standby_bucket","is_periodic","has_flex_constraint","is_requested_as_user_initiated_job","is_running_as_user_initiated_job","deadline_ms","job_start_latency_ms","num_uncompleted_work_items","proc_state"
+377089754138,83200835,10,"@androidx.work.systemjobscheduler@com.android.providers.media.module/androidx.work.impl.background.systemjob.SystemJobService_-2746960329031286783",-2746960329031286783,83200835,"com.android.providers.media.module","androidx.work.systemjobscheduler","Charging","Unknown",400,1,0,0,0,0,0,0,0,0,0,0,0,400,"EXEMPTED",0,0,0,0,0,3,0,"PROCESS_STATE_PERSISTENT"
+385507499374,111746552,17,"@androidx.work.systemjobscheduler@com.android.providers.media.module/androidx.work.impl.background.systemjob.SystemJobService_-2746960329031286782",-2746960329031286782,111746552,"com.android.providers.media.module","androidx.work.systemjobscheduler","Charging","Unknown",400,1,0,0,0,0,0,0,0,0,0,0,0,400,"EXEMPTED",0,0,0,0,0,6,0,"PROCESS_STATE_PERSISTENT"
+416753734715,129444346,53,"@androidx.work.systemjobscheduler@com.android.providers.media.module/androidx.work.impl.background.systemjob.SystemJobService_-2746960329031286781",-2746960329031286781,129444346,"com.android.providers.media.module","androidx.work.systemjobscheduler","Charging","Unknown",400,1,0,0,0,0,0,0,0,0,0,0,0,400,"EXEMPTED",0,0,0,0,0,5,0,"PROCESS_STATE_PERSISTENT"
+422530232411,86735906,59,"@androidx.work.systemjobscheduler@com.android.providers.media.module/androidx.work.impl.background.systemjob.SystemJobService_-2746960329031286780",-2746960329031286780,86735906,"com.android.providers.media.module","androidx.work.systemjobscheduler","Charging","Unknown",400,1,0,0,0,0,0,0,0,0,0,0,0,400,"EXEMPTED",0,0,0,0,0,3,0,"PROCESS_STATE_PERSISTENT"
+      """))
diff --git a/test/trace_processor/diff_tests/stdlib/wattson/tests.py b/test/trace_processor/diff_tests/stdlib/wattson/tests.py
index d00a305..b5c9cae 100644
--- a/test/trace_processor/diff_tests/stdlib/wattson/tests.py
+++ b/test/trace_processor/diff_tests/stdlib/wattson/tests.py
@@ -410,3 +410,45 @@
             4108587746105,12451,2.670000,2.670000,2.670000,205.600000,674.240000,674.240000,674.240000,3327.560000,1166.556475
             4108587758556,28524,2.670000,2.670000,205.600000,205.600000,674.240000,674.240000,674.240000,3327.560000,1166.680924
             """))
+
+  def test_wattson_time_window_api(self):
+    return DiffTestBlueprint(
+        trace=DataPath('wattson_dsu_pmu.pb'),
+        query="""
+        INCLUDE PERFETTO MODULE wattson.curves.estimates;
+
+        SELECT
+          cpu0_mw,
+          cpu1_mw,
+          cpu2_mw,
+          cpu3_mw,
+          cpu4_mw,
+          cpu5_mw,
+          cpu6_mw,
+          cpu7_mw,
+          dsu_scu_mw
+        FROM _windowed_system_state_mw(362426061658, 5067704349)
+        """,
+        out=Csv("""
+            "cpu0_mw","cpu1_mw","cpu2_mw","cpu3_mw","cpu4_mw","cpu5_mw","cpu6_mw","cpu7_mw","dsu_scu_mw"
+            13.025673,6.270190,5.448549,8.796540,8.937174,10.717942,29.482823,30.239208,26.121213
+            """))
+
+  # Tests that suspend calculations are correct on 8 CPU device where suspend
+  # indication comes from "syscore" command
+  def test_wattson_syscore_suspend(self):
+    return DiffTestBlueprint(
+        trace=DataPath('wattson_syscore_suspend.pb'),
+        query=("""
+            INCLUDE PERFETTO MODULE wattson.curves.estimates;
+            SELECT ts, dur, cpu0_id, cpu1_id, cpu2_id, cpu3_id, suspended
+            FROM _stats_cpu0123_suspend
+            WHERE suspended
+            """),
+        out=Csv("""
+            "ts","dur","cpu0_id","cpu1_id","cpu2_id","cpu3_id","suspended"
+            385019771468,61975407053,12041,12218,10488,8910,1
+            448320364476,3674872885,13005,12954,11166,9272,1
+            452415394221,69579176303,13654,13361,11651,9609,1
+            564873995228,135118729231,45223,37594,22798,20132,1
+            """))
diff --git a/ui/src/common/recordingV2/recording_page_controller.ts b/ui/src/common/recordingV2/recording_page_controller.ts
index 19257e2..5bbe067 100644
--- a/ui/src/common/recordingV2/recording_page_controller.ts
+++ b/ui/src/common/recordingV2/recording_page_controller.ts
@@ -426,7 +426,7 @@
 
     const target = this.getTarget();
     const targetInfo = target.getInfo();
-    globals.logging.logEvent(
+    AppImpl.instance.analytics.logEvent(
       'Record Trace',
       `Record trace (${targetInfo.targetType})`,
     );
diff --git a/ui/src/frontend/analytics.ts b/ui/src/core/analytics_impl.ts
similarity index 86%
rename from ui/src/frontend/analytics.ts
rename to ui/src/core/analytics_impl.ts
index a453010..be785ca 100644
--- a/ui/src/frontend/analytics.ts
+++ b/ui/src/core/analytics_impl.ts
@@ -13,12 +13,11 @@
 // limitations under the License.
 
 import {ErrorDetails} from '../base/logging';
-import {getCurrentChannel} from '../common/channels';
+import {getCurrentChannel} from './channels';
 import {VERSION} from '../gen/perfetto_version';
-import {globals} from './globals';
-import {Router} from '../core/router';
+import {Router} from './router';
+import {Analytics, TraceCategories} from '../public/analytics';
 
-type TraceCategories = 'Trace Actions' | 'Record Trace' | 'User Actions';
 const ANALYTICS_ID = 'G-BD89KT2P3C';
 const PAGE_TITLE = 'no-page-title';
 
@@ -61,7 +60,15 @@
   }
 }
 
-export function initAnalytics() {
+// Interface exposed only to core (for the initialize method).
+export interface AnalyticsInternal extends Analytics {
+  initialize(isInternalUser: boolean): void;
+}
+
+export function initAnalytics(
+  testingMode: boolean,
+  embeddedMode: boolean,
+): AnalyticsInternal {
   // Only initialize logging on the official site and on localhost (to catch
   // analytics bugs when testing locally).
   // Skip analytics is the fragment has "testing=1", this is used by UI tests.
@@ -70,8 +77,8 @@
   if (
     (window.location.origin.startsWith('http://localhost:') ||
       window.location.origin.endsWith('.perfetto.dev')) &&
-    !globals.testing &&
-    !globals.embeddedMode
+    !testingMode &&
+    !embeddedMode
   ) {
     return new AnalyticsImpl();
   }
@@ -84,17 +91,8 @@
   gtag: (command: string, event: string | Date, args?: {}) => void;
 };
 
-export interface Analytics {
-  initialize(): void;
-  updatePath(_: string): void;
-  logEvent(category: TraceCategories | null, event: string): void;
-  logError(err: ErrorDetails): void;
-  isEnabled(): boolean;
-}
-
-class NullAnalytics implements Analytics {
-  initialize() {}
-  updatePath(_: string) {}
+class NullAnalytics implements AnalyticsInternal {
+  initialize(_: boolean) {}
   logEvent(_category: TraceCategories | null, _event: string) {}
   logError(_err: ErrorDetails) {}
   isEnabled(): boolean {
@@ -102,7 +100,7 @@
   }
 }
 
-class AnalyticsImpl implements Analytics {
+class AnalyticsImpl implements AnalyticsInternal {
   private initialized_ = false;
 
   constructor() {
@@ -128,7 +126,7 @@
   // This is callled only after the script that sets isInternalUser loads.
   // It is fine to call updatePath() and log*() functions before initialize().
   // The gtag() function internally enqueues all requests into |dataLayer|.
-  initialize() {
+  initialize(isInternalUser: boolean) {
     if (this.initialized_) return;
     this.initialized_ = true;
     const script = document.createElement('script');
@@ -138,7 +136,7 @@
     const route = window.location.href;
     console.log(
       `GA initialized. route=${route}`,
-      `isInternalUser=${globals.isInternalUser}`,
+      `isInternalUser=${isInternalUser}`,
     );
     // GA's recommendation for SPAs is to disable automatic page views and
     // manually send page_view events. See:
@@ -151,19 +149,16 @@
       page_referrer: getReferrer(),
       send_page_view: false,
       page_title: PAGE_TITLE,
-      perfetto_is_internal_user: globals.isInternalUser ? '1' : '0',
+      perfetto_is_internal_user: isInternalUser ? '1' : '0',
       perfetto_version: VERSION,
       // Release channel (canary, stable, autopush)
       perfetto_channel: getCurrentChannel(),
       // Referrer *if overridden* via the query string else empty string.
       perfetto_referrer_override: getReferrerOverride() ?? '',
     });
-    this.updatePath(route);
-  }
 
-  updatePath(path: string) {
     gtagGlobals.gtag('event', 'page_view', {
-      page_path: path,
+      page_path: route,
       page_title: PAGE_TITLE,
     });
   }
diff --git a/ui/src/core/app_impl.ts b/ui/src/core/app_impl.ts
index 304e659..073f506 100644
--- a/ui/src/core/app_impl.ts
+++ b/ui/src/core/app_impl.ts
@@ -28,6 +28,7 @@
 import {loadTrace} from './load_trace';
 import {CORE_PLUGIN_ID} from './plugin_manager';
 import {Router} from './router';
+import {AnalyticsInternal, initAnalytics} from './analytics_impl';
 
 // The args that frontend/index.ts passes when calling AppImpl.initialize().
 // This is to deal with injections that would otherwise cause circular deps.
@@ -51,12 +52,15 @@
 export class AppContext {
   readonly commandMgr = new CommandManagerImpl();
   readonly omniboxMgr = new OmniboxManagerImpl();
-  readonly sidebarMgr = new SidebarManagerImpl();
+  readonly sidebarMgr: SidebarManagerImpl;
   readonly pluginMgr: PluginManager;
+  readonly analytics: AnalyticsInternal;
   newEngineMode: NewEngineMode = 'USE_HTTP_RPC_IF_AVAILABLE';
   initialRouteArgs: RouteArgs;
   isLoadingTrace = false; // Set when calling openTrace().
   readonly initArgs: AppInitArgs;
+  readonly embeddedMode: boolean;
+  readonly testingMode: boolean;
 
   // This is normally empty and is injected with extra google-internal packages
   // via is_internal_user.js
@@ -67,7 +71,12 @@
   constructor(initArgs: AppInitArgs) {
     this.initArgs = initArgs;
     this.initialRouteArgs = initArgs.initialRouteArgs;
-
+    this.sidebarMgr = new SidebarManagerImpl(this.initialRouteArgs.hideSidebar);
+    this.embeddedMode = this.initialRouteArgs.mode === 'embedded';
+    this.testingMode =
+      self.location !== undefined &&
+      self.location.search.indexOf('testing=1') >= 0;
+    this.analytics = initAnalytics(this.testingMode, this.embeddedMode);
     // The rootUrl should point to 'https://ui.perfetto.dev/v1.2.3/'. It's
     // allowed to be empty only in unittests, because there there is no bundle
     // hence no concrete root.
@@ -136,6 +145,10 @@
     return this.appCtx.pluginMgr;
   }
 
+  get analytics(): AnalyticsInternal {
+    return this.appCtx.analytics;
+  }
+
   get trace(): TraceImpl | undefined {
     return this.currentTrace;
   }
@@ -205,6 +218,14 @@
     }
   }
 
+  get embeddedMode(): boolean {
+    return this.appCtx.embeddedMode;
+  }
+
+  get testingMode(): boolean {
+    return this.appCtx.testingMode;
+  }
+
   closeCurrentTrace() {
     // This method should be called only on the core instance, plugins don't
     // have access to openTrace*() methods.
diff --git a/ui/src/common/channels.ts b/ui/src/core/channels.ts
similarity index 97%
rename from ui/src/common/channels.ts
rename to ui/src/core/channels.ts
index d071628..22cf8e0 100644
--- a/ui/src/common/channels.ts
+++ b/ui/src/core/channels.ts
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-import {raf} from '../core/raf_scheduler';
+import {raf} from './raf_scheduler';
 
 export const DEFAULT_CHANNEL = 'stable';
 const CHANNEL_KEY = 'perfettoUiChannel';
diff --git a/ui/src/core/sidebar_manager.ts b/ui/src/core/sidebar_manager.ts
index 96d492b..18743af 100644
--- a/ui/src/core/sidebar_manager.ts
+++ b/ui/src/core/sidebar_manager.ts
@@ -14,11 +14,26 @@
 
 import {Registry} from '../base/registry';
 import {SidebarManager, SidebarMenuItem} from '../public/sidebar';
+import {raf} from './raf_scheduler';
 
 export class SidebarManagerImpl implements SidebarManager {
+  private _sidebarHidden = false;
   readonly menuItems = new Registry<SidebarMenuItem>((m) => m.commandId);
 
+  constructor(sidebarHidden?: boolean) {
+    this._sidebarHidden = sidebarHidden ?? false;
+  }
+
   addMenuItem(menuItem: SidebarMenuItem): Disposable {
     return this.menuItems.register(menuItem);
   }
+
+  get sidebarHidden() {
+    return this._sidebarHidden;
+  }
+
+  set sidebarHidden(value: boolean) {
+    this._sidebarHidden = value;
+    raf.scheduleFullRedraw();
+  }
 }
diff --git a/ui/src/core/trace_impl.ts b/ui/src/core/trace_impl.ts
index 06a9245..d8a14cc 100644
--- a/ui/src/core/trace_impl.ts
+++ b/ui/src/core/trace_impl.ts
@@ -42,6 +42,7 @@
 import {ThreadDesc, ThreadMap} from '../public/threads';
 import {RouteArgs} from '../public/route_schema';
 import {CORE_PLUGIN_ID} from './plugin_manager';
+import {Analytics} from '../public/analytics';
 
 /**
  * Handles the per-trace state of the UI
@@ -349,6 +350,10 @@
     return this.appImpl.plugins;
   }
 
+  get analytics(): Analytics {
+    return this.appImpl.analytics;
+  }
+
   get initialRouteArgs(): RouteArgs {
     return this.appImpl.initialRouteArgs;
   }
diff --git a/ui/src/core_plugins/commands/index.ts b/ui/src/core_plugins/commands/index.ts
index ecf31f3..f539cd3 100644
--- a/ui/src/core_plugins/commands/index.ts
+++ b/ui/src/core_plugins/commands/index.ts
@@ -336,13 +336,16 @@
     return;
   }
 
-  globals.logging.logEvent('Trace Actions', 'Open trace from file');
+  AppImpl.instance.analytics.logEvent('Trace Actions', 'Open trace from file');
   AppImpl.instance.openTraceFromFile(file);
 }
 
 async function openWithLegacyUi(file: File) {
   // Switch back to the old catapult UI.
-  globals.logging.logEvent('Trace Actions', 'Open trace in Legacy UI');
+  AppImpl.instance.analytics.logEvent(
+    'Trace Actions',
+    'Open trace in Legacy UI',
+  );
   if (await isLegacyTrace(file)) {
     openFileWithLegacyTraceViewer(file);
     return;
diff --git a/ui/src/core_plugins/example_traces/index.ts b/ui/src/core_plugins/example_traces/index.ts
index 782ddad..bcbb875 100644
--- a/ui/src/core_plugins/example_traces/index.ts
+++ b/ui/src/core_plugins/example_traces/index.ts
@@ -13,7 +13,6 @@
 // limitations under the License.
 
 import {AppImpl} from '../../core/app_impl';
-import {globals} from '../../frontend/globals';
 import {App} from '../../public/app';
 import {PerfettoPlugin, PluginDescriptor} from '../../public/plugin';
 
@@ -23,8 +22,8 @@
 const EXAMPLE_CHROME_TRACE_URL =
   'https://storage.googleapis.com/perfetto-misc/chrome_example_wikipedia.perfetto_trace.gz';
 
-function openTraceUrl(url: string): void {
-  globals.logging.logEvent('Trace Actions', 'Open example trace');
+function openTraceUrl(app: App, url: string): void {
+  app.analytics.logEvent('Trace Actions', 'Open example trace');
   AppImpl.instance.openTraceFromUrl(url);
 }
 
@@ -36,7 +35,7 @@
       id: OPEN_EXAMPLE_ANDROID_TRACE_COMMAND_ID,
       name: 'Open Android example',
       callback: () => {
-        openTraceUrl(EXAMPLE_ANDROID_TRACE_URL);
+        openTraceUrl(ctx, EXAMPLE_ANDROID_TRACE_URL);
       },
     });
     ctx.sidebar.addMenuItem({
@@ -51,7 +50,7 @@
       id: OPEN_EXAMPLE_CHROME_TRACE_COMMAND_ID,
       name: 'Open Chrome example',
       callback: () => {
-        openTraceUrl(EXAMPLE_CHROME_TRACE_URL);
+        openTraceUrl(ctx, EXAMPLE_CHROME_TRACE_URL);
       },
     });
     ctx.sidebar.addMenuItem({
diff --git a/ui/src/frontend/cookie_consent.ts b/ui/src/frontend/cookie_consent.ts
index a869466..d7cfd84 100644
--- a/ui/src/frontend/cookie_consent.ts
+++ b/ui/src/frontend/cookie_consent.ts
@@ -14,7 +14,7 @@
 
 import m from 'mithril';
 import {raf} from '../core/raf_scheduler';
-import {globals} from './globals';
+import {AppImpl} from '../core/app_impl';
 
 const COOKIE_ACK_KEY = 'cookieAck';
 
@@ -24,7 +24,7 @@
   oninit() {
     this.showCookieConsent = true;
     if (
-      !globals.logging.isEnabled() ||
+      !AppImpl.instance.analytics.isEnabled() ||
       localStorage.getItem(COOKIE_ACK_KEY) === 'true'
     ) {
       this.showCookieConsent = false;
diff --git a/ui/src/frontend/explore_page.ts b/ui/src/frontend/explore_page.ts
new file mode 100644
index 0000000..6a53323
--- /dev/null
+++ b/ui/src/frontend/explore_page.ts
@@ -0,0 +1,22 @@
+// Copyright (C) 2024 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.
+
+import m from 'mithril';
+import {PageWithTraceAttrs} from './pages';
+
+export class ExplorePage implements m.ClassComponent<PageWithTraceAttrs> {
+  view() {
+    return m('.explore-page');
+  }
+}
diff --git a/ui/src/frontend/flags_page.ts b/ui/src/frontend/flags_page.ts
index c5033ab..cac670d 100644
--- a/ui/src/frontend/flags_page.ts
+++ b/ui/src/frontend/flags_page.ts
@@ -13,7 +13,7 @@
 // limitations under the License.
 
 import m from 'mithril';
-import {channelChanged, getNextChannel, setChannel} from '../common/channels';
+import {channelChanged, getNextChannel, setChannel} from '../core/channels';
 import {featureFlags, Flag, OverrideState} from '../core/feature_flags';
 import {raf} from '../core/raf_scheduler';
 import {PageAttrs} from '../core/router';
diff --git a/ui/src/frontend/globals.ts b/ui/src/frontend/globals.ts
index 44a9895..347bb91 100644
--- a/ui/src/frontend/globals.ts
+++ b/ui/src/frontend/globals.ts
@@ -26,7 +26,6 @@
 import {raf} from '../core/raf_scheduler';
 import {ServiceWorkerController} from './service_worker_controller';
 import {HttpRpcState} from '../trace_processor/http_rpc_engine';
-import type {Analytics} from './analytics';
 import {getServingRoot} from '../base/http_utils';
 import {Workspace} from '../public/workspace';
 import {TraceImpl} from '../core/trace_impl';
@@ -41,11 +40,9 @@
  */
 class Globals {
   private _initialFakeTrace?: TraceImpl;
-  private _testing = false;
   private _dispatchMultiple?: DispatchMultiple = undefined;
   private _store = createStore<State>(createEmptyState());
   private _serviceWorkerController?: ServiceWorkerController = undefined;
-  private _logging?: Analytics = undefined;
   private _isInternalUser: boolean | undefined = undefined;
 
   // TODO(hjd): Unify trackDataStore, queryResults, overviewStore, threads.
@@ -53,8 +50,6 @@
   private _bufferUsage?: number = undefined;
   private _recordingLog?: string = undefined;
   private _jobStatus?: Map<ConversionJobName, ConversionJobStatus> = undefined;
-  private _embeddedMode?: boolean = undefined;
-  private _hideSidebar?: boolean = undefined;
   httpRpcState: HttpRpcState = {connected: false};
   showPanningHint = false;
   permalinkHash?: string;
@@ -62,10 +57,7 @@
   // TODO(hjd): Remove once we no longer need to update UUID on redraw.
   private _publishRedraw?: () => void = undefined;
 
-  initialize(
-    dispatchMultiple: DispatchMultiple,
-    initAnalytics: () => Analytics,
-  ) {
+  initialize(dispatchMultiple: DispatchMultiple) {
     this._dispatchMultiple = dispatchMultiple;
 
     // TODO(primiano): we do this to avoid making all our members possibly
@@ -82,17 +74,6 @@
     this._serviceWorkerController = new ServiceWorkerController(
       getServingRoot(),
     );
-    this._testing =
-      /* eslint-disable @typescript-eslint/strict-boolean-expressions */
-      self.location && self.location.search.indexOf('testing=1') >= 0;
-    /* eslint-enable */
-
-    // TODO(stevegolton): This is a mess. We should just inject this object in,
-    // instead of passing in a function. The only reason this is done like this
-    // is because the current implementation of initAnalytics depends on the
-    // state of globals.testing, so this needs to be set before we run the
-    // function.
-    this._logging = initAnalytics();
 
     // TODO(hjd): Unify trackDataStore, queryResults, overviewStore, threads.
     // TODO(primiano): for posterity: these assignments below are completely
@@ -143,10 +124,6 @@
     return this.trace.search;
   }
 
-  get logging() {
-    return assertExists(this._logging);
-  }
-
   get serviceWorkerController() {
     return assertExists(this._serviceWorkerController);
   }
@@ -196,22 +173,6 @@
     return this._jobStatus;
   }
 
-  get embeddedMode(): boolean {
-    return !!this._embeddedMode;
-  }
-
-  set embeddedMode(value: boolean) {
-    this._embeddedMode = value;
-  }
-
-  get hideSidebar(): boolean {
-    return !!this._hideSidebar;
-  }
-
-  set hideSidebar(value: boolean) {
-    this._hideSidebar = value;
-  }
-
   setBufferUsage(bufferUsage: number) {
     this._bufferUsage = bufferUsage;
   }
@@ -247,10 +208,6 @@
     raf.scheduleFullRedraw();
   }
 
-  get testing() {
-    return this._testing;
-  }
-
   // Used when switching to the legacy TraceViewer UI.
   // Most resources are cleaned up by replacing the current |window| object,
   // however pending RAFs and workers seem to outlive the |window| and need to
diff --git a/ui/src/frontend/help_modal.ts b/ui/src/frontend/help_modal.ts
index 603d6df..bc1a4dd 100644
--- a/ui/src/frontend/help_modal.ts
+++ b/ui/src/frontend/help_modal.ts
@@ -25,9 +25,10 @@
 import {KeyMapping} from './pan_and_zoom_handler';
 import {HotkeyGlyphs} from '../widgets/hotkey_glyphs';
 import {assertExists} from '../base/logging';
+import {AppImpl} from '../core/app_impl';
 
 export function toggleHelp() {
-  globals.logging.logEvent('User Actions', 'Show help');
+  AppImpl.instance.analytics.logEvent('User Actions', 'Show help');
   showHelp();
 }
 
@@ -76,31 +77,6 @@
   }
 
   view(_: m.Vnode): m.Children {
-    const queryPageInstructions = globals.hideSidebar
-      ? []
-      : [
-          m('h2', 'Making SQL queries from the query page'),
-          m(
-            'table',
-            m(
-              'tr',
-              m('td', keycap('Ctrl'), ' + ', keycap('Enter')),
-              m('td', 'Execute query'),
-            ),
-            m(
-              'tr',
-              m(
-                'td',
-                keycap('Ctrl'),
-                ' + ',
-                keycap('Enter'),
-                ' (with selection)',
-              ),
-              m('td', 'Execute selection'),
-            ),
-          ),
-        ];
-
     return m(
       '.help',
       m('h2', 'Navigation'),
@@ -163,7 +139,20 @@
           ),
         ),
       ),
-      ...queryPageInstructions,
+      m('h2', 'Making SQL queries from the query page'),
+      m(
+        'table',
+        m(
+          'tr',
+          m('td', keycap('Ctrl'), ' + ', keycap('Enter')),
+          m('td', 'Execute query'),
+        ),
+        m(
+          'tr',
+          m('td', keycap('Ctrl'), ' + ', keycap('Enter'), ' (with selection)'),
+          m('td', 'Execute selection'),
+        ),
+      ),
       m('h2', 'Command Hotkeys'),
       m(
         'table',
diff --git a/ui/src/frontend/home_page.ts b/ui/src/frontend/home_page.ts
index 4c7d265..a5f3ac9 100644
--- a/ui/src/frontend/home_page.ts
+++ b/ui/src/frontend/home_page.ts
@@ -13,7 +13,7 @@
 // limitations under the License.
 
 import m from 'mithril';
-import {channelChanged, getNextChannel, setChannel} from '../common/channels';
+import {channelChanged, getNextChannel, setChannel} from '../core/channels';
 import {Anchor} from '../widgets/anchor';
 import {HotkeyGlyphs} from '../widgets/hotkey_glyphs';
 import {globals} from './globals';
diff --git a/ui/src/frontend/index.ts b/ui/src/frontend/index.ts
index 3e4d963..93f0c71 100644
--- a/ui/src/frontend/index.ts
+++ b/ui/src/frontend/index.ts
@@ -36,6 +36,7 @@
 import {initCssConstants} from './css_constants';
 import {registerDebugGlobals} from './debug';
 import {maybeShowErrorDialog} from './error_dialog';
+import {ExplorePage} from './explore_page';
 import {installFileDropHandler} from './file_drop_handler';
 import {FlagsPage} from './flags_page';
 import {globals} from './globals';
@@ -56,7 +57,6 @@
 import {WidgetsPage} from './widgets_page';
 import {HttpRpcEngine} from '../trace_processor/http_rpc_engine';
 import {showModal} from '../widgets/modal';
-import {initAnalytics} from './analytics';
 import {IdleDetector} from './idle_detector';
 import {IdleDetectorWindow} from './idle_detector_interface';
 import {pageWithTrace} from './pages';
@@ -238,19 +238,22 @@
 
   // Load the script to detect if this is a Googler (see comments on globals.ts)
   // and initialize GA after that (or after a timeout if something goes wrong).
+  function initAnalyticsOnScriptLoad() {
+    AppImpl.instance.analytics.initialize(globals.isInternalUser);
+  }
   const script = document.createElement('script');
   script.src =
     'https://storage.cloud.google.com/perfetto-ui-internal/is_internal_user.js';
   script.async = true;
-  script.onerror = () => globals.logging.initialize();
-  script.onload = () => globals.logging.initialize();
-  setTimeout(() => globals.logging.initialize(), 5000);
+  script.onerror = () => initAnalyticsOnScriptLoad();
+  script.onload = () => initAnalyticsOnScriptLoad();
+  setTimeout(() => initAnalyticsOnScriptLoad(), 5000);
 
   document.head.append(script, css);
 
   // Route errors to both the UI bugreport dialog and Analytics (if enabled).
   addErrorHandler(maybeShowErrorDialog);
-  addErrorHandler((e) => globals.logging.logError(e));
+  addErrorHandler((e) => AppImpl.instance.analytics.logError(e));
 
   // Add Error handlers for JS error and for uncaught exceptions in promises.
   window.addEventListener('error', (e) => reportError(e));
@@ -262,11 +265,7 @@
   initController(extensionLocalChannel.port1);
 
   // These need to be set before globals.initialize.
-  const route = Router.parseUrl(window.location.href);
-  globals.embeddedMode = route.args.mode === 'embedded';
-  globals.hideSidebar = route.args.hideSidebar === true;
-
-  globals.initialize(stateActionDispatcher, initAnalytics);
+  globals.initialize(stateActionDispatcher);
 
   globals.serviceWorkerController.install();
 
@@ -289,7 +288,7 @@
 
   cssLoadPromise.then(() => onCssLoaded());
 
-  if (globals.testing) {
+  if (AppImpl.instance.testingMode) {
     document.body.classList.add('testing');
   }
 
@@ -306,6 +305,7 @@
 
   const router = new Router({
     '/': HomePage,
+    '/explore': ExplorePage,
     '/flags': FlagsPage,
     '/info': pageWithTrace(TraceInfoPage),
     '/insights': pageWithTrace(InsightsPage),
@@ -326,8 +326,8 @@
   if (
     (location.origin.startsWith('http://localhost:') ||
       location.origin.startsWith('http://127.0.0.1:')) &&
-    !globals.embeddedMode &&
-    !globals.testing
+    !AppImpl.instance.embeddedMode &&
+    !AppImpl.instance.testingMode
   ) {
     initLiveReload();
   }
@@ -355,7 +355,7 @@
   maybeChangeRpcPortFromFragment();
   CheckHttpRpcConnection().then(() => {
     const route = Router.parseUrl(window.location.href);
-    if (!globals.embeddedMode) {
+    if (!AppImpl.instance.embeddedMode) {
       installFileDropHandler();
     }
 
diff --git a/ui/src/frontend/record_page.ts b/ui/src/frontend/record_page.ts
index 91d38c9..49f2f75 100644
--- a/ui/src/frontend/record_page.ts
+++ b/ui/src/frontend/record_page.ts
@@ -56,6 +56,7 @@
 import {RecordingSettings} from './recording/recording_settings';
 import {EtwSettings} from './recording/etw_settings';
 import {createPermalink} from './permalink';
+import {AppImpl} from '../core/app_impl';
 
 export const PERSIST_CONFIG_FLAG = featureFlags.register({
   id: 'persistConfigsUI',
@@ -598,7 +599,10 @@
     isChromeTarget(target) ||
     isWindowsTarget(target)
   ) {
-    globals.logging.logEvent('Record Trace', `Record trace (${target.os})`);
+    AppImpl.instance.analytics.logEvent(
+      'Record Trace',
+      `Record trace (${target.os})`,
+    );
     globals.dispatch(Actions.startRecording({}));
   }
 }
diff --git a/ui/src/frontend/sidebar.ts b/ui/src/frontend/sidebar.ts
index 0a5537a..0218d65 100644
--- a/ui/src/frontend/sidebar.ts
+++ b/ui/src/frontend/sidebar.ts
@@ -15,7 +15,7 @@
 import m from 'mithril';
 import {assertExists, assertTrue} from '../base/logging';
 import {isString} from '../base/object_utils';
-import {getCurrentChannel} from '../common/channels';
+import {getCurrentChannel} from '../core/channels';
 import {TRACE_SUFFIX} from '../common/constants';
 import {ConversionJobStatus} from '../common/conversion_jobs';
 import {
@@ -95,6 +95,13 @@
   defaultValue: true,
 });
 
+const EXPLORE_PAGE_IN_NAV_FLAG = featureFlags.register({
+  id: 'showExplorePageInNav',
+  name: 'Show explore page',
+  description: 'Show a link to the explore page in the side bar.',
+  defaultValue: false,
+});
+
 export interface OptionalTraceAttrs {
   trace?: Trace;
 }
@@ -161,22 +168,25 @@
       expanded: true,
       items: [
         ...insertSidebarMenuitems('navigation'),
-        {t: 'Record new trace', a: navigateRecord, i: 'fiber_smart_record'},
+        {
+          t: 'Record new trace',
+          a: (e: Event) => navigateToPage(e, 'record'),
+          i: 'fiber_smart_record',
+        },
         {
           t: 'Widgets',
-          a: navigateWidgets,
+          a: (e: Event) => navigateToPage(e, 'widgets'),
           i: 'widgets',
           isVisible: () => WIDGETS_PAGE_IN_NAV_FLAG.get(),
         },
         {
           t: 'Plugins',
-          a: navigatePlugins,
+          a: (e: Event) => navigateToPage(e, 'plugins'),
           i: 'extension',
           isVisible: () => PLUGINS_PAGE_IN_NAV_FLAG.get(),
         },
       ],
     },
-
     {
       title: 'Current Trace',
       summary: 'Actions on the current trace',
@@ -184,7 +194,11 @@
       hideIfNoTraceLoaded: true,
       appendOpenedTraceTitle: true,
       items: [
-        {t: 'Show timeline', a: navigateViewer, i: 'line_style'},
+        {
+          t: 'Show timeline',
+          a: (e: Event) => navigateToPage(e, 'viewer'),
+          i: 'line_style',
+        },
         {
           t: 'Share',
           a: handleShareTrace,
@@ -200,21 +214,39 @@
           i: 'file_download',
           checkDownloadDisabled: true,
         },
-        {t: 'Query (SQL)', a: navigateQuery, i: 'database'},
+        {
+          t: 'Query (SQL)',
+          a: (e: Event) => navigateToPage(e, 'query'),
+          i: 'database',
+        },
+        {
+          t: 'Explore',
+          a: (e: Event) => navigateToPage(e, 'explore'),
+          i: 'data_exploration',
+          isVisible: () => EXPLORE_PAGE_IN_NAV_FLAG.get(),
+        },
         {
           t: 'Insights',
-          a: navigateInsights,
+          a: (e: Event) => navigateToPage(e, 'insights'),
           i: 'insights',
           isVisible: () => INSIGHTS_PAGE_IN_NAV_FLAG.get(),
         },
         {
           t: 'Viz',
-          a: navigateViz,
+          a: (e: Event) => navigateToPage(e, 'viz'),
           i: 'area_chart',
           isVisible: () => VIZ_PAGE_IN_NAV_FLAG.get(),
         },
-        {t: 'Metrics', a: navigateMetrics, i: 'speed'},
-        {t: 'Info and stats', a: navigateInfo, i: 'info'},
+        {
+          t: 'Metrics',
+          a: (e: Event) => navigateToPage(e, 'metrics'),
+          i: 'speed',
+        },
+        {
+          t: 'Info and stats',
+          a: (e: Event) => navigateToPage(e, 'info'),
+          i: 'info',
+        },
       ],
     },
 
@@ -269,7 +301,11 @@
       items: [
         {t: 'Keyboard shortcuts', a: openHelp, i: 'help'},
         {t: 'Documentation', a: 'https://perfetto.dev/docs', i: 'find_in_page'},
-        {t: 'Flags', a: navigateFlags, i: 'emoji_flags'},
+        {
+          t: 'Flags',
+          a: (e: Event) => navigateToPage(e, 'flags'),
+          i: 'emoji_flags',
+        },
         {
           t: 'Report a bug',
           a: getBugReportUrl(),
@@ -338,7 +374,10 @@
 function openCurrentTraceWithOldUI(e: Event) {
   e.preventDefault();
   assertTrue(isTraceLoaded());
-  globals.logging.logEvent('Trace Actions', 'Open current trace in legacy UI');
+  AppImpl.instance.analytics.logEvent(
+    'Trace Actions',
+    'Open current trace in legacy UI',
+  );
   if (!isTraceLoaded()) return;
   getCurrentTrace()
     .then((file) => {
@@ -352,7 +391,7 @@
 function convertTraceToSystrace(e: Event) {
   e.preventDefault();
   assertTrue(isTraceLoaded());
-  globals.logging.logEvent('Trace Actions', 'Convert to .systrace');
+  AppImpl.instance.analytics.logEvent('Trace Actions', 'Convert to .systrace');
   if (!isTraceLoaded()) return;
   getCurrentTrace()
     .then((file) => {
@@ -366,7 +405,7 @@
 function convertTraceToJson(e: Event) {
   e.preventDefault();
   assertTrue(isTraceLoaded());
-  globals.logging.logEvent('Trace Actions', 'Convert to .json');
+  AppImpl.instance.analytics.logEvent('Trace Actions', 'Convert to .json');
   if (!isTraceLoaded()) return;
   getCurrentTrace()
     .then((file) => {
@@ -377,54 +416,9 @@
     });
 }
 
-function navigateRecord(e: Event) {
+function navigateToPage(e: Event, pageName: string) {
   e.preventDefault();
-  Router.navigate('#!/record');
-}
-
-function navigateWidgets(e: Event) {
-  e.preventDefault();
-  Router.navigate('#!/widgets');
-}
-
-function navigatePlugins(e: Event) {
-  e.preventDefault();
-  Router.navigate('#!/plugins');
-}
-
-function navigateQuery(e: Event) {
-  e.preventDefault();
-  Router.navigate('#!/query');
-}
-
-function navigateInsights(e: Event) {
-  e.preventDefault();
-  Router.navigate('#!/insights');
-}
-
-function navigateViz(e: Event) {
-  e.preventDefault();
-  Router.navigate('#!/viz');
-}
-
-function navigateFlags(e: Event) {
-  e.preventDefault();
-  Router.navigate('#!/flags');
-}
-
-function navigateMetrics(e: Event) {
-  e.preventDefault();
-  Router.navigate('#!/metrics');
-}
-
-function navigateInfo(e: Event) {
-  e.preventDefault();
-  Router.navigate('#!/info');
-}
-
-function navigateViewer(e: Event) {
-  e.preventDefault();
-  Router.navigate('#!/viewer');
+  Router.navigate(`#!/${pageName}`);
 }
 
 function handleShareTrace(e: Event) {
@@ -435,7 +429,7 @@
 function downloadTrace(e: Event, trace: Trace) {
   e.preventDefault();
   if (!isDownloadable() || !isTraceLoaded()) return;
-  globals.logging.logEvent('Trace Actions', 'Download trace');
+  AppImpl.instance.analytics.logEvent('Trace Actions', 'Download trace');
 
   let url = '';
   let fileName = `trace${TRACE_SUFFIX}`;
@@ -475,7 +469,7 @@
 
 function recordMetatrace(e: Event, engine: Engine) {
   e.preventDefault();
-  globals.logging.logEvent('Trace Actions', 'Record metatrace');
+  AppImpl.instance.analytics.logEvent('Trace Actions', 'Record metatrace');
 
   if (!highPrecisionTimersAvailable()) {
     const PROMPT = `High-precision timers are not available to WASM trace processor yet.
@@ -513,7 +507,7 @@
 
 async function finaliseMetatrace(e: Event, engine: Engine) {
   e.preventDefault();
-  globals.logging.logEvent('Trace Actions', 'Finalise metatrace');
+  AppImpl.instance.analytics.logEvent('Trace Actions', 'Finalise metatrace');
 
   const jsEvents = disableMetatracingAndGetTrace();
 
@@ -699,7 +693,7 @@
 export class Sidebar implements m.ClassComponent<OptionalTraceAttrs> {
   private _redrawWhileAnimating = new Animation(() => raf.scheduleFullRedraw());
   view({attrs}: m.CVnode<OptionalTraceAttrs>) {
-    if (globals.hideSidebar) return null;
+    if (AppImpl.instance.sidebar.sidebarHidden) return null;
     const vdomSections = [];
     for (const section of getSections(attrs.trace)) {
       if (section.hideIfNoTraceLoaded && !isTraceLoaded()) continue;
diff --git a/ui/src/frontend/topbar.ts b/ui/src/frontend/topbar.ts
index 6a02655..50a00e8 100644
--- a/ui/src/frontend/topbar.ts
+++ b/ui/src/frontend/topbar.ts
@@ -44,7 +44,7 @@
     // does not persist for iFrames. The host is responsible for communicating
     // to users that they can press '?' for help.
     if (
-      globals.embeddedMode ||
+      AppImpl.instance.embeddedMode ||
       dismissed === 'true' ||
       !globals.showPanningHint
     ) {
@@ -77,7 +77,7 @@
 
   view({attrs}: m.CVnode<TraceImplAttrs>) {
     const trace = attrs.trace;
-    if (globals.embeddedMode) return;
+    if (AppImpl.instance.embeddedMode) return;
 
     const mode = AppImpl.instance.omnibox.mode;
     const totErrors = trace.traceInfo.importErrors + trace.loadingErrors.length;
diff --git a/ui/src/frontend/trace_attrs.ts b/ui/src/frontend/trace_attrs.ts
index 785b327..b996265 100644
--- a/ui/src/frontend/trace_attrs.ts
+++ b/ui/src/frontend/trace_attrs.ts
@@ -73,7 +73,7 @@
       `The trace will be accessible by anybody with the permalink.`,
   );
   if (result) {
-    globals.logging.logEvent('Trace Actions', 'Create permalink');
+    AppImpl.instance.analytics.logEvent('Trace Actions', 'Create permalink');
     createPermalink({mode: 'APP_STATE'});
   }
 }
diff --git a/ui/src/frontend/ui_main.ts b/ui/src/frontend/ui_main.ts
index 8bab2f8..c1d1050 100644
--- a/ui/src/frontend/ui_main.ts
+++ b/ui/src/frontend/ui_main.ts
@@ -744,7 +744,7 @@
     if (
       !isJsonTrace ||
       window.localStorage.getItem(SHOWN_JSON_WARNING_KEY) === 'true' ||
-      globals.embeddedMode
+      AppImpl.instance.embeddedMode
     ) {
       // When in embedded mode, the host app will control which trace format
       // it passes to Perfetto, so we don't need to show this warning.
diff --git a/ui/src/public/analytics.ts b/ui/src/public/analytics.ts
new file mode 100644
index 0000000..653b1ea
--- /dev/null
+++ b/ui/src/public/analytics.ts
@@ -0,0 +1,23 @@
+// Copyright (C) 2024 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.
+
+import {ErrorDetails} from '../base/logging';
+
+export type TraceCategories = 'Trace Actions' | 'Record Trace' | 'User Actions';
+
+export interface Analytics {
+  logEvent(category: TraceCategories | null, event: string): void;
+  logError(err: ErrorDetails): void;
+  isEnabled(): boolean;
+}
diff --git a/ui/src/public/app.ts b/ui/src/public/app.ts
index 511d0d7..7b23753 100644
--- a/ui/src/public/app.ts
+++ b/ui/src/public/app.ts
@@ -16,6 +16,7 @@
 import {CommandManager} from './command';
 import {OmniboxManager} from './omnibox';
 import {SidebarManager} from './sidebar';
+import {Analytics} from './analytics';
 
 /**
  * The API endpoint to interact programmaticaly with the UI before a trace has
@@ -30,6 +31,7 @@
   readonly commands: CommandManager;
   readonly sidebar: SidebarManager;
   readonly omnibox: OmniboxManager;
+  readonly analytics: Analytics;
 
   /**
    * The parsed querystring passed when starting the app, before any navigation
diff --git a/ui/src/public/lib/query_table/query_table.ts b/ui/src/public/lib/query_table/query_table.ts
index a06657d..86afec1 100644
--- a/ui/src/public/lib/query_table/query_table.ts
+++ b/ui/src/public/lib/query_table/query_table.ts
@@ -27,6 +27,7 @@
 import {globals} from '../../../frontend/globals';
 import {Router} from '../../../core/router';
 import {scrollTo} from '../../scroll_helper';
+import {AppImpl} from '../../../core/app_impl';
 
 interface QueryTableRowAttrs {
   row: Row;
@@ -232,7 +233,7 @@
       return 'Query - running';
     }
     const result = resp.error ? 'error' : `${resp.rows.length} rows`;
-    if (globals.testing) {
+    if (AppImpl.instance.testingMode) {
       // Omit the duration in tests, they cause screenshot diff failures.
       return `Query result (${result})`;
     }