xref: /aosp_15_r20/external/perfetto/ui/src/plugins/com.example.Skeleton/index.ts (revision 6dbdd20afdafa5e3ca9b8809fa73465d530080dc)
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