xref: /aosp_15_r20/external/perfetto/ui/src/public/page.ts (revision 6dbdd20afdafa5e3ca9b8809fa73465d530080dc)
1*6dbdd20aSAndroid Build Coastguard Worker// Copyright (C) 2024 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 m from 'mithril';
16*6dbdd20aSAndroid Build Coastguard Workerimport {Trace} from './trace';
17*6dbdd20aSAndroid Build Coastguard Worker
18*6dbdd20aSAndroid Build Coastguard Worker/**
19*6dbdd20aSAndroid Build Coastguard Worker * Allows to register custom page endpoints that response to given routes, e.g.
20*6dbdd20aSAndroid Build Coastguard Worker * /viewer, /record etc.
21*6dbdd20aSAndroid Build Coastguard Worker */
22*6dbdd20aSAndroid Build Coastguard Workerexport interface PageManager {
23*6dbdd20aSAndroid Build Coastguard Worker  /**
24*6dbdd20aSAndroid Build Coastguard Worker   * Example usage:
25*6dbdd20aSAndroid Build Coastguard Worker   *   registerPage({route: '/foo', page: FooPage})
26*6dbdd20aSAndroid Build Coastguard Worker   *   class FooPage implements m.ClassComponent<PageWithTrace> {
27*6dbdd20aSAndroid Build Coastguard Worker   *     view({attrs}: m.CVnode<PageWithTrace>) {
28*6dbdd20aSAndroid Build Coastguard Worker   *        return m('div', ...
29*6dbdd20aSAndroid Build Coastguard Worker   *            onclick: () => attrs.trace.timeline.zoom(...);
30*6dbdd20aSAndroid Build Coastguard Worker   *        )
31*6dbdd20aSAndroid Build Coastguard Worker   *     }
32*6dbdd20aSAndroid Build Coastguard Worker   *   }
33*6dbdd20aSAndroid Build Coastguard Worker   */
34*6dbdd20aSAndroid Build Coastguard Worker  registerPage(pageHandler: PageHandler): Disposable;
35*6dbdd20aSAndroid Build Coastguard Worker}
36*6dbdd20aSAndroid Build Coastguard Worker
37*6dbdd20aSAndroid Build Coastguard Worker/**
38*6dbdd20aSAndroid Build Coastguard Worker * Mithril attrs for pages that don't require a Trace object. These pages are
39*6dbdd20aSAndroid Build Coastguard Worker * always accessible, even before a trace is loaded.
40*6dbdd20aSAndroid Build Coastguard Worker */
41*6dbdd20aSAndroid Build Coastguard Workerexport interface PageAttrs {
42*6dbdd20aSAndroid Build Coastguard Worker  subpage?: string;
43*6dbdd20aSAndroid Build Coastguard Worker  trace?: Trace;
44*6dbdd20aSAndroid Build Coastguard Worker}
45*6dbdd20aSAndroid Build Coastguard Worker
46*6dbdd20aSAndroid Build Coastguard Worker/**
47*6dbdd20aSAndroid Build Coastguard Worker * Mithril attrs for pages that require a Trace object. These pages are
48*6dbdd20aSAndroid Build Coastguard Worker * reachable only after a trace is loaded. Trying to access the route without a
49*6dbdd20aSAndroid Build Coastguard Worker * trace loaded results in the HomePage (route: '/') to be displayed instead.
50*6dbdd20aSAndroid Build Coastguard Worker */
51*6dbdd20aSAndroid Build Coastguard Workerexport interface PageWithTraceAttrs extends PageAttrs {
52*6dbdd20aSAndroid Build Coastguard Worker  trace: Trace;
53*6dbdd20aSAndroid Build Coastguard Worker}
54*6dbdd20aSAndroid Build Coastguard Worker
55*6dbdd20aSAndroid Build Coastguard Workerexport type PageHandler<PWT = m.ComponentTypes<PageWithTraceAttrs>> = {
56*6dbdd20aSAndroid Build Coastguard Worker  route: string; // e.g. '/' (default route), '/viewer'
57*6dbdd20aSAndroid Build Coastguard Worker  pluginId?: string; // Not needed, the internal impl will fill it.
58*6dbdd20aSAndroid Build Coastguard Worker} & (
59*6dbdd20aSAndroid Build Coastguard Worker  | {
60*6dbdd20aSAndroid Build Coastguard Worker      // If true, the route will be available even when there is no trace
61*6dbdd20aSAndroid Build Coastguard Worker      // loaded. The component needs to deal with a possibly undefined attr.
62*6dbdd20aSAndroid Build Coastguard Worker      traceless: true;
63*6dbdd20aSAndroid Build Coastguard Worker      page: m.ComponentTypes<PageAttrs>;
64*6dbdd20aSAndroid Build Coastguard Worker    }
65*6dbdd20aSAndroid Build Coastguard Worker  | {
66*6dbdd20aSAndroid Build Coastguard Worker      // If is omitted, the route will be available only when a trace is loaded.
67*6dbdd20aSAndroid Build Coastguard Worker      // The component is guarranteed to get a defined Trace in its attrs.
68*6dbdd20aSAndroid Build Coastguard Worker      traceless?: false;
69*6dbdd20aSAndroid Build Coastguard Worker      page: PWT;
70*6dbdd20aSAndroid Build Coastguard Worker    }
71*6dbdd20aSAndroid Build Coastguard Worker);
72