1// Copyright (C) 2018 The Android Open Source Project 2// 3// Licensed under the Apache License, Version 2.0 (the "License"); 4// you may not use this file except in compliance with the License. 5// You may obtain a copy of the License at 6// 7// http://www.apache.org/licenses/LICENSE-2.0 8// 9// Unless required by applicable law or agreed to in writing, software 10// distributed under the License is distributed on an "AS IS" BASIS, 11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12// See the License for the specific language governing permissions and 13// limitations under the License. 14 15import {RecordConfig} from './record_config_types'; 16 17export const MAX_TIME = 180; 18 19export interface RecordingTarget { 20 name: string; 21 os: TargetOs; 22} 23 24export interface AdbRecordingTarget extends RecordingTarget { 25 serial: string; 26} 27 28export interface LoadedConfigNone { 29 type: 'NONE'; 30} 31 32export interface LoadedConfigAutomatic { 33 type: 'AUTOMATIC'; 34} 35 36export interface LoadedConfigNamed { 37 type: 'NAMED'; 38 name: string; 39} 40 41export type LoadedConfig = 42 | LoadedConfigNone 43 | LoadedConfigAutomatic 44 | LoadedConfigNamed; 45 46export interface RecordCommand { 47 commandline: string; 48 pbtxt: string; 49 pbBase64: string; 50} 51 52export interface RecordingState { 53 /** 54 * State of the ConfigEditor. 55 */ 56 recordConfig: RecordConfig; 57 lastLoadedConfig: LoadedConfig; 58 59 /** 60 * Trace recording 61 */ 62 recordingInProgress: boolean; 63 recordingCancelled: boolean; 64 extensionInstalled: boolean; 65 recordingTarget: RecordingTarget; 66 availableAdbDevices: AdbRecordingTarget[]; 67 lastRecordingError?: string; 68 recordingStatus?: string; 69 70 fetchChromeCategories: boolean; 71 chromeCategories: string[] | undefined; 72 73 bufferUsage: number; 74 recordingLog: string; 75 recordCmd?: RecordCommand; 76} 77 78export declare type RecordMode = 79 | 'STOP_WHEN_FULL' 80 | 'RING_BUFFER' 81 | 'LONG_TRACE'; 82 83// 'Q','P','O' for Android, 'L' for Linux, 'C' for Chrome. 84export declare type TargetOs = 85 | 'S' 86 | 'R' 87 | 'Q' 88 | 'P' 89 | 'O' 90 | 'C' 91 | 'L' 92 | 'CrOS' 93 | 'Win'; 94 95export function isAndroidP(target: RecordingTarget) { 96 return target.os === 'P'; 97} 98 99export function isAndroidTarget(target: RecordingTarget) { 100 return ['Q', 'P', 'O', 'S'].includes(target.os); 101} 102 103export function isChromeTarget(target: RecordingTarget) { 104 return ['C', 'CrOS'].includes(target.os); 105} 106 107export function isCrOSTarget(target: RecordingTarget) { 108 return target.os === 'CrOS'; 109} 110 111export function isLinuxTarget(target: RecordingTarget) { 112 return target.os === 'L'; 113} 114 115export function isWindowsTarget(target: RecordingTarget) { 116 return target.os === 'Win'; 117} 118 119export function isAdbTarget( 120 target: RecordingTarget, 121): target is AdbRecordingTarget { 122 return !!(target as AdbRecordingTarget).serial; 123} 124 125export function hasActiveProbes(config: RecordConfig) { 126 const fieldsWithEmptyResult = new Set<string>([ 127 'hpBlockClient', 128 'allAtraceApps', 129 'chromePrivacyFiltering', 130 ]); 131 let key: keyof RecordConfig; 132 for (key in config) { 133 if ( 134 typeof config[key] === 'boolean' && 135 config[key] === true && 136 !fieldsWithEmptyResult.has(key) 137 ) { 138 return true; 139 } 140 } 141 if (config.chromeCategoriesSelected.length > 0) { 142 return true; 143 } 144 return config.chromeHighOverheadCategoriesSelected.length > 0; 145} 146 147export function getDefaultRecordingTargets(): RecordingTarget[] { 148 return [ 149 {os: 'Q', name: 'Android Q+ / 10+'}, 150 {os: 'P', name: 'Android P / 9'}, 151 {os: 'O', name: 'Android O- / 8-'}, 152 {os: 'C', name: 'Chrome'}, 153 {os: 'CrOS', name: 'Chrome OS (system trace)'}, 154 {os: 'L', name: 'Linux desktop'}, 155 {os: 'Win', name: 'Windows desktop'}, 156 ]; 157} 158 159export function getBuiltinChromeCategoryList(): string[] { 160 // List of static Chrome categories, last updated at 2024-05-15 from HEAD of 161 // Chromium's //base/trace_event/builtin_categories.h. 162 return [ 163 'accessibility', 164 'AccountFetcherService', 165 'android.adpf', 166 'android.ui.jank', 167 'android_webview', 168 'android_webview.timeline', 169 'aogh', 170 'audio', 171 'base', 172 'benchmark', 173 'blink', 174 'blink.animations', 175 'blink.bindings', 176 'blink.console', 177 'blink.net', 178 'blink.resource', 179 'blink.user_timing', 180 'blink.worker', 181 'blink_style', 182 'Blob', 183 'browser', 184 'browsing_data', 185 'CacheStorage', 186 'Calculators', 187 'CameraStream', 188 'cppgc', 189 'camera', 190 'cast_app', 191 'cast_perf_test', 192 'cast.mdns', 193 'cast.mdns.socket', 194 'cast.stream', 195 'cc', 196 'cc.debug', 197 'cdp.perf', 198 'chromeos', 199 'cma', 200 'compositor', 201 'content', 202 'content_capture', 203 'interactions', 204 'delegated_ink_trails', 205 'device', 206 'devtools', 207 'devtools.contrast', 208 'devtools.timeline', 209 'disk_cache', 210 'download', 211 'download_service', 212 'drm', 213 'drmcursor', 214 'dwrite', 215 'DXVA_Decoding', 216 'evdev', 217 'event', 218 'event_latency', 219 'exo', 220 'extensions', 221 'explore_sites', 222 'FileSystem', 223 'file_system_provider', 224 'fledge', 225 'fonts', 226 'GAMEPAD', 227 'gpu', 228 'gpu.angle', 229 'gpu.angle.texture_metrics', 230 'gpu.capture', 231 'graphics.pipeline', 232 'headless', 233 'history', 234 'hwoverlays', 235 'identity', 236 'ime', 237 'IndexedDB', 238 'input', 239 'input.scrolling', 240 'io', 241 'ipc', 242 'Java', 243 'jni', 244 'jpeg', 245 'latency', 246 'latencyInfo', 247 'leveldb', 248 'loading', 249 'log', 250 'login', 251 'media', 252 'media_router', 253 'memory', 254 'midi', 255 'mojom', 256 'mus', 257 'native', 258 'navigation', 259 'navigation.debug', 260 'net', 261 'network.scheduler', 262 'netlog', 263 'offline_pages', 264 'omnibox', 265 'oobe', 266 'openscreen', 267 'ozone', 268 'partition_alloc', 269 'passwords', 270 'p2p', 271 'page-serialization', 272 'paint_preview', 273 'pepper', 274 'PlatformMalloc', 275 'power', 276 'ppapi', 277 'ppapi_proxy', 278 'print', 279 'raf_investigation', 280 'rail', 281 'renderer', 282 'renderer_host', 283 'renderer.scheduler', 284 'resources', 285 'RLZ', 286 'ServiceWorker', 287 'SiteEngagement', 288 'safe_browsing', 289 'scheduler', 290 'scheduler.long_tasks', 291 'screenlock_monitor', 292 'segmentation_platform', 293 'sequence_manager', 294 'service_manager', 295 'sharing', 296 'shell', 297 'shortcut_viewer', 298 'shutdown', 299 'skia', 300 'sql', 301 'stadia_media', 302 'stadia_rtc', 303 'startup', 304 'sync', 305 'system_apps', 306 'test_gpu', 307 'toplevel', 308 'toplevel.flow', 309 'ui', 310 'v8', 311 'v8.execute', 312 'v8.wasm', 313 'ValueStoreFrontend::Backend', 314 'views', 315 'views.frame', 316 'viz', 317 'vk', 318 'wakeup.flow', 319 'wayland', 320 'webaudio', 321 'webengine.fidl', 322 'weblayer', 323 'WebCore', 324 'webnn', 325 'webrtc', 326 'webrtc_stats', 327 'xr', 328 'disabled-by-default-android_view_hierarchy', 329 'disabled-by-default-animation-worklet', 330 'disabled-by-default-audio', 331 'disabled-by-default-audio.latency', 332 'disabled-by-default-audio-worklet', 333 'disabled-by-default-base', 334 'disabled-by-default-blink.debug', 335 'disabled-by-default-blink.debug.display_lock', 336 'disabled-by-default-blink.debug.layout', 337 'disabled-by-default-blink.debug.layout.trees', 338 'disabled-by-default-blink.feature_usage', 339 'disabled-by-default-blink.image_decoding', 340 'disabled-by-default-blink.invalidation', 341 'disabled-by-default-identifiability', 342 'disabled-by-default-identifiability.high_entropy_api', 343 'disabled-by-default-cc', 344 'disabled-by-default-cc.debug', 345 'disabled-by-default-cc.debug.cdp-perf', 346 'disabled-by-default-cc.debug.display_items', 347 'disabled-by-default-cc.debug.lcd_text', 348 'disabled-by-default-cc.debug.picture', 349 'disabled-by-default-cc.debug.scheduler', 350 'disabled-by-default-cc.debug.scheduler.frames', 351 'disabled-by-default-cc.debug.scheduler.now', 352 'disabled-by-default-content.verbose', 353 'disabled-by-default-cpu_profiler', 354 'disabled-by-default-cppgc', 355 'disabled-by-default-cpu_profiler.debug', 356 'disabled-by-default-devtools.screenshot', 357 'disabled-by-default-devtools.timeline', 358 'disabled-by-default-devtools.timeline.frame', 359 'disabled-by-default-devtools.timeline.inputs', 360 'disabled-by-default-devtools.timeline.invalidationTracking', 361 'disabled-by-default-devtools.timeline.layers', 362 'disabled-by-default-devtools.timeline.picture', 363 'disabled-by-default-devtools.timeline.stack', 364 'disabled-by-default-devtools.target-rundown', 365 'disabled-by-default-devtools.v8-source-rundown', 366 'disabled-by-default-devtools.v8-source-rundown-sources', 367 'disabled-by-default-file', 368 'disabled-by-default-fonts', 369 'disabled-by-default-gpu_cmd_queue', 370 'disabled-by-default-gpu.dawn', 371 'disabled-by-default-gpu.debug', 372 'disabled-by-default-gpu.decoder', 373 'disabled-by-default-gpu.device', 374 'disabled-by-default-gpu.graphite.dawn', 375 'disabled-by-default-gpu.service', 376 'disabled-by-default-gpu.vulkan.vma', 377 'disabled-by-default-histogram_samples', 378 'disabled-by-default-java-heap-profiler', 379 'disabled-by-default-layer-element', 380 'disabled-by-default-layout_shift.debug', 381 'disabled-by-default-lifecycles', 382 'disabled-by-default-loading', 383 'disabled-by-default-mediastream', 384 'disabled-by-default-memory-infra', 385 'disabled-by-default-memory-infra.v8.code_stats', 386 'disabled-by-default-mojom', 387 'disabled-by-default-net', 388 'disabled-by-default-network', 389 'disabled-by-default-paint-worklet', 390 'disabled-by-default-power', 391 'disabled-by-default-renderer.scheduler', 392 'disabled-by-default-renderer.scheduler.debug', 393 'disabled-by-default-sequence_manager', 394 'disabled-by-default-sequence_manager.debug', 395 'disabled-by-default-sequence_manager.verbose_snapshots', 396 'disabled-by-default-skia', 397 'disabled-by-default-skia.gpu', 398 'disabled-by-default-skia.gpu.cache', 399 'disabled-by-default-skia.shaders', 400 'disabled-by-default-skottie', 401 'disabled-by-default-SyncFileSystem', 402 'disabled-by-default-system_power', 403 'disabled-by-default-system_stats', 404 'disabled-by-default-thread_pool_diagnostics', 405 'disabled-by-default-toplevel.ipc', 406 'disabled-by-default-user_action_samples', 407 'disabled-by-default-v8.compile', 408 'disabled-by-default-v8.cpu_profiler', 409 'disabled-by-default-v8.gc', 410 'disabled-by-default-v8.gc_stats', 411 'disabled-by-default-v8.ic_stats', 412 'disabled-by-default-v8.inspector', 413 'disabled-by-default-v8.runtime', 414 'disabled-by-default-v8.runtime_stats', 415 'disabled-by-default-v8.runtime_stats_sampling', 416 'disabled-by-default-v8.stack_trace', 417 'disabled-by-default-v8.turbofan', 418 'disabled-by-default-v8.wasm.detailed', 419 'disabled-by-default-v8.wasm.turbofan', 420 'disabled-by-default-video_and_image_capture', 421 'disabled-by-default-display.framedisplayed', 422 'disabled-by-default-viz.gpu_composite_time', 423 'disabled-by-default-viz.debug.overlay_planes', 424 'disabled-by-default-viz.hit_testing_flow', 425 'disabled-by-default-viz.overdraw', 426 'disabled-by-default-viz.quads', 427 'disabled-by-default-viz.surface_id_flow', 428 'disabled-by-default-viz.surface_lifetime', 429 'disabled-by-default-viz.triangles', 430 'disabled-by-default-viz.visual_debugger', 431 'disabled-by-default-webaudio.audionode', 432 'disabled-by-default-webgpu', 433 'disabled-by-default-webnn', 434 'disabled-by-default-webrtc', 435 'disabled-by-default-worker.scheduler', 436 'disabled-by-default-xr.debug', 437 ]; 438} 439