xref: /aosp_15_r20/external/perfetto/ui/src/plugins/dev.perfetto.RecordTrace/state.ts (revision 6dbdd20afdafa5e3ca9b8809fa73465d530080dc)
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