// 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 {SerializedAppState} from './state_serialization_schema'; export type TraceSource = | TraceFileSource | TraceArrayBufferSource | TraceUrlSource | TraceHttpRpcSource; export interface TraceFileSource { type: 'FILE'; file: File; } export interface TraceUrlSource { type: 'URL'; url: string; // When loading from a permalink, the permalink might supply also the app // state alongside the URL of the trace. serializedAppState?: SerializedAppState; } export interface TraceHttpRpcSource { type: 'HTTP_RPC'; } export interface TraceArrayBufferSource extends PostedTrace { type: 'ARRAY_BUFFER'; // See PostedTrace (which this interface extends). } export interface PostedTrace { buffer: ArrayBuffer; title: string; fileName?: string; url?: string; // |uuid| is set only when loading via ?local_cache_key=1234. When set, // this matches global.state.traceUuid, with the exception of the following // time window: When a trace T1 is loaded and the user loads another trace T2, // this |uuid| will be == T2, but the globals.state.traceUuid will be // temporarily == T1 until T2 has been loaded (consistently to what happens // with all other state fields). uuid?: string; // if |localOnly| is true then the trace should not be shared or downloaded. localOnly?: boolean; keepApiOpen?: boolean; // Allows to pass extra arguments to plugins. This can be read by plugins // onTraceLoad() and can be used to trigger plugin-specific-behaviours (e.g. // allow dashboards like APC to pass extra data to materialize onto tracks). // The format is the following: // pluginArgs: { // 'dev.perfetto.PluginFoo': { 'key1': 'value1', 'key2': 1234 } // 'dev.perfetto.PluginBar': { 'key3': '...', 'key4': ... } // } pluginArgs?: {[pluginId: string]: {[key: string]: unknown}}; }