1*6dbdd20aSAndroid Build Coastguard Worker// Copyright (C) 2023 The Android Open Source Project 2*6dbdd20aSAndroid Build Coastguard Worker// 3*6dbdd20aSAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License"); 4*6dbdd20aSAndroid Build Coastguard Worker// you may not use this file except in compliance with the License. 5*6dbdd20aSAndroid Build Coastguard Worker// You may obtain a copy of the License at 6*6dbdd20aSAndroid Build Coastguard Worker// 7*6dbdd20aSAndroid Build Coastguard Worker// http://www.apache.org/licenses/LICENSE-2.0 8*6dbdd20aSAndroid Build Coastguard Worker// 9*6dbdd20aSAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software 10*6dbdd20aSAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS, 11*6dbdd20aSAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*6dbdd20aSAndroid Build Coastguard Worker// See the License for the specific language governing permissions and 13*6dbdd20aSAndroid Build Coastguard Worker// limitations under the License. 14*6dbdd20aSAndroid Build Coastguard Worker 15*6dbdd20aSAndroid Build Coastguard Workerimport {Trace} from '../../public/trace'; 16*6dbdd20aSAndroid Build Coastguard Workerimport {App} from '../../public/app'; 17*6dbdd20aSAndroid Build Coastguard Workerimport {MetricVisualisation} from '../../public/plugin'; 18*6dbdd20aSAndroid Build Coastguard Workerimport {PerfettoPlugin} from '../../public/plugin'; 19*6dbdd20aSAndroid Build Coastguard Worker 20*6dbdd20aSAndroid Build Coastguard Worker// SKELETON: Rename this class to match your plugin. 21*6dbdd20aSAndroid Build Coastguard Workerexport default class implements PerfettoPlugin { 22*6dbdd20aSAndroid Build Coastguard Worker // SKELETON: Update pluginId to match the directory of the plugin. 23*6dbdd20aSAndroid Build Coastguard Worker static readonly id = 'com.example.Skeleton'; 24*6dbdd20aSAndroid Build Coastguard Worker 25*6dbdd20aSAndroid Build Coastguard Worker /** 26*6dbdd20aSAndroid Build Coastguard Worker * This hook is called when the plugin is activated manually, or when the UI 27*6dbdd20aSAndroid Build Coastguard Worker * starts up with this plugin enabled. This is typically before a trace has 28*6dbdd20aSAndroid Build Coastguard Worker * been loaded, so there is no trace information in the passed plugin context 29*6dbdd20aSAndroid Build Coastguard Worker * object. 30*6dbdd20aSAndroid Build Coastguard Worker * 31*6dbdd20aSAndroid Build Coastguard Worker * This hook should be used for adding commands that don't depend on the 32*6dbdd20aSAndroid Build Coastguard Worker * trace. 33*6dbdd20aSAndroid Build Coastguard Worker */ 34*6dbdd20aSAndroid Build Coastguard Worker static onActivate(app: App): void { 35*6dbdd20aSAndroid Build Coastguard Worker console.log('SkeletonPlugin::onActivate()', app.pluginId); 36*6dbdd20aSAndroid Build Coastguard Worker } 37*6dbdd20aSAndroid Build Coastguard Worker 38*6dbdd20aSAndroid Build Coastguard Worker /** 39*6dbdd20aSAndroid Build Coastguard Worker * This hook is called as the trace is loading. At this point the trace is 40*6dbdd20aSAndroid Build Coastguard Worker * loaded into trace processor and it's ready to process queries. This hook 41*6dbdd20aSAndroid Build Coastguard Worker * should be used for adding tracks and commands that depend on the trace. 42*6dbdd20aSAndroid Build Coastguard Worker * 43*6dbdd20aSAndroid Build Coastguard Worker * It should not be used for finding tracks from other plugins as there is no 44*6dbdd20aSAndroid Build Coastguard Worker * guarantee those tracks will have been added yet. 45*6dbdd20aSAndroid Build Coastguard Worker */ 46*6dbdd20aSAndroid Build Coastguard Worker async onTraceLoad(trace: Trace): Promise<void> { 47*6dbdd20aSAndroid Build Coastguard Worker console.log('SkeletonPlugin::onTraceLoad()', trace.traceInfo.traceTitle); 48*6dbdd20aSAndroid Build Coastguard Worker 49*6dbdd20aSAndroid Build Coastguard Worker // This is an example of how to access the pluginArgs pushed by the 50*6dbdd20aSAndroid Build Coastguard Worker // postMessage when deep-linking to the UI. 51*6dbdd20aSAndroid Build Coastguard Worker if (trace.openerPluginArgs !== undefined) { 52*6dbdd20aSAndroid Build Coastguard Worker console.log( 53*6dbdd20aSAndroid Build Coastguard Worker `Postmessage args for ${trace.pluginId}`, 54*6dbdd20aSAndroid Build Coastguard Worker trace.openerPluginArgs, 55*6dbdd20aSAndroid Build Coastguard Worker ); 56*6dbdd20aSAndroid Build Coastguard Worker } 57*6dbdd20aSAndroid Build Coastguard Worker 58*6dbdd20aSAndroid Build Coastguard Worker /** 59*6dbdd20aSAndroid Build Coastguard Worker * The 'traceready' event is fired when the trace has finished loading, and 60*6dbdd20aSAndroid Build Coastguard Worker * all plugins have returned from their onTraceLoad calls. The UI can be 61*6dbdd20aSAndroid Build Coastguard Worker * considered 'ready' at this point. All tracks and commands should now be 62*6dbdd20aSAndroid Build Coastguard Worker * available, and the timeline is ready to use. 63*6dbdd20aSAndroid Build Coastguard Worker * 64*6dbdd20aSAndroid Build Coastguard Worker * This is where any automations should be done - things that you would 65*6dbdd20aSAndroid Build Coastguard Worker * usually do manually after the trace has loaded but you'd like to automate 66*6dbdd20aSAndroid Build Coastguard Worker * them. 67*6dbdd20aSAndroid Build Coastguard Worker * 68*6dbdd20aSAndroid Build Coastguard Worker * Examples of things that could be done here: 69*6dbdd20aSAndroid Build Coastguard Worker * - Pinning tracks 70*6dbdd20aSAndroid Build Coastguard Worker * - Focusing on a slice 71*6dbdd20aSAndroid Build Coastguard Worker * - Adding debug tracks 72*6dbdd20aSAndroid Build Coastguard Worker * 73*6dbdd20aSAndroid Build Coastguard Worker * Postmessage args might be useful here - e.g. if you would like to pin a 74*6dbdd20aSAndroid Build Coastguard Worker * specific track, pass the track details through the postmessage args 75*6dbdd20aSAndroid Build Coastguard Worker * interface and react to it here. 76*6dbdd20aSAndroid Build Coastguard Worker * 77*6dbdd20aSAndroid Build Coastguard Worker * Note: Any tracks registered in this hook will not be displayed in the 78*6dbdd20aSAndroid Build Coastguard Worker * timeline, unless they are manually added through the ctx.timeline API. 79*6dbdd20aSAndroid Build Coastguard Worker * However this part of the code is in flux at the moment and the semantics 80*6dbdd20aSAndroid Build Coastguard Worker * of how this works might change, though it's still good practice to use 81*6dbdd20aSAndroid Build Coastguard Worker * the onTraceLoad hook to add tracks as it means that all tracks are 82*6dbdd20aSAndroid Build Coastguard Worker * available by the time this hook gets called. 83*6dbdd20aSAndroid Build Coastguard Worker * 84*6dbdd20aSAndroid Build Coastguard Worker * TODO(stevegolton): Update this comment if the semantics of track adding 85*6dbdd20aSAndroid Build Coastguard Worker * changes. 86*6dbdd20aSAndroid Build Coastguard Worker */ 87*6dbdd20aSAndroid Build Coastguard Worker trace.onTraceReady.addListener(async () => { 88*6dbdd20aSAndroid Build Coastguard Worker console.log('SkeletonPlugin::traceready'); 89*6dbdd20aSAndroid Build Coastguard Worker }); 90*6dbdd20aSAndroid Build Coastguard Worker } 91*6dbdd20aSAndroid Build Coastguard Worker 92*6dbdd20aSAndroid Build Coastguard Worker static metricVisualisations(): MetricVisualisation[] { 93*6dbdd20aSAndroid Build Coastguard Worker return []; 94*6dbdd20aSAndroid Build Coastguard Worker } 95*6dbdd20aSAndroid Build Coastguard Worker} 96