• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// Copyright (C) 2024 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 m from 'mithril';
16import {PerfettoPlugin} from '../../public/plugin';
17import {Trace} from '../../public/trace';
18import SqlModulesPlugin from '../dev.perfetto.SqlModules';
19import {ExplorePage, ExplorePageModes, ExplorePageState} from './explore_page';
20
21export default class implements PerfettoPlugin {
22  static readonly id = 'dev.perfetto.ExplorePage';
23  static readonly dependencies = [SqlModulesPlugin];
24
25  // The following allows us to have persistent
26  // state/charts for the lifecycle of a single
27  // trace.
28  private readonly state: ExplorePageState = {
29    mode: ExplorePageModes.QUERY_BUILDER,
30    rootNodes: [],
31  };
32
33  async onTraceLoad(trace: Trace): Promise<void> {
34    trace.pages.registerPage({
35      route: '/explore',
36      page: {
37        view: ({attrs}) =>
38          m(ExplorePage, {
39            ...attrs,
40            state: this.state,
41            sqlModulesPlugin: attrs.trace.plugins.getPlugin(SqlModulesPlugin),
42          }),
43      },
44    });
45    trace.sidebar.addMenuItem({
46      section: 'current_trace',
47      text: 'Explore',
48      href: '#!/explore',
49      icon: 'data_exploration',
50    });
51  }
52}
53