xref: /aosp_15_r20/external/perfetto/ui/src/frontend/home_page.ts (revision 6dbdd20afdafa5e3ca9b8809fa73465d530080dc)
1*6dbdd20aSAndroid Build Coastguard Worker// Copyright (C) 2018 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 {channelChanged, getNextChannel, setChannel} from '../core/channels';
17*6dbdd20aSAndroid Build Coastguard Workerimport {Anchor} from '../widgets/anchor';
18*6dbdd20aSAndroid Build Coastguard Workerimport {HotkeyGlyphs} from '../widgets/hotkey_glyphs';
19*6dbdd20aSAndroid Build Coastguard Workerimport {PageAttrs} from '../public/page';
20*6dbdd20aSAndroid Build Coastguard Workerimport {assetSrc} from '../base/assets';
21*6dbdd20aSAndroid Build Coastguard Worker
22*6dbdd20aSAndroid Build Coastguard Workerexport class Hints implements m.ClassComponent {
23*6dbdd20aSAndroid Build Coastguard Worker  view() {
24*6dbdd20aSAndroid Build Coastguard Worker    return m(
25*6dbdd20aSAndroid Build Coastguard Worker      '.home-page-hints',
26*6dbdd20aSAndroid Build Coastguard Worker      m('.tagline', 'New!'),
27*6dbdd20aSAndroid Build Coastguard Worker      m(
28*6dbdd20aSAndroid Build Coastguard Worker        'ul',
29*6dbdd20aSAndroid Build Coastguard Worker        m(
30*6dbdd20aSAndroid Build Coastguard Worker          'li',
31*6dbdd20aSAndroid Build Coastguard Worker          'New updated ',
32*6dbdd20aSAndroid Build Coastguard Worker          m(
33*6dbdd20aSAndroid Build Coastguard Worker            Anchor,
34*6dbdd20aSAndroid Build Coastguard Worker            {
35*6dbdd20aSAndroid Build Coastguard Worker              href: 'https://perfetto.dev/docs/visualization/perfetto-ui#tabs-v2',
36*6dbdd20aSAndroid Build Coastguard Worker            },
37*6dbdd20aSAndroid Build Coastguard Worker            'tabs',
38*6dbdd20aSAndroid Build Coastguard Worker          ),
39*6dbdd20aSAndroid Build Coastguard Worker          ' are extensible and user friendly.',
40*6dbdd20aSAndroid Build Coastguard Worker        ),
41*6dbdd20aSAndroid Build Coastguard Worker        m(
42*6dbdd20aSAndroid Build Coastguard Worker          'li',
43*6dbdd20aSAndroid Build Coastguard Worker          'Use ',
44*6dbdd20aSAndroid Build Coastguard Worker          m(HotkeyGlyphs, {hotkey: 'W'}),
45*6dbdd20aSAndroid Build Coastguard Worker          m(HotkeyGlyphs, {hotkey: 'A'}),
46*6dbdd20aSAndroid Build Coastguard Worker          m(HotkeyGlyphs, {hotkey: 'S'}),
47*6dbdd20aSAndroid Build Coastguard Worker          m(HotkeyGlyphs, {hotkey: 'D'}),
48*6dbdd20aSAndroid Build Coastguard Worker          ' to navigate the trace.',
49*6dbdd20aSAndroid Build Coastguard Worker        ),
50*6dbdd20aSAndroid Build Coastguard Worker        m(
51*6dbdd20aSAndroid Build Coastguard Worker          'li',
52*6dbdd20aSAndroid Build Coastguard Worker          'Try the ',
53*6dbdd20aSAndroid Build Coastguard Worker          m(
54*6dbdd20aSAndroid Build Coastguard Worker            Anchor,
55*6dbdd20aSAndroid Build Coastguard Worker            {
56*6dbdd20aSAndroid Build Coastguard Worker              href: 'https://perfetto.dev/docs/visualization/perfetto-ui#command-palette',
57*6dbdd20aSAndroid Build Coastguard Worker            },
58*6dbdd20aSAndroid Build Coastguard Worker            'command palette,',
59*6dbdd20aSAndroid Build Coastguard Worker          ),
60*6dbdd20aSAndroid Build Coastguard Worker          ' press ',
61*6dbdd20aSAndroid Build Coastguard Worker          m(HotkeyGlyphs, {hotkey: '!Mod+Shift+P'}),
62*6dbdd20aSAndroid Build Coastguard Worker          '.',
63*6dbdd20aSAndroid Build Coastguard Worker        ),
64*6dbdd20aSAndroid Build Coastguard Worker      ),
65*6dbdd20aSAndroid Build Coastguard Worker    );
66*6dbdd20aSAndroid Build Coastguard Worker  }
67*6dbdd20aSAndroid Build Coastguard Worker}
68*6dbdd20aSAndroid Build Coastguard Worker
69*6dbdd20aSAndroid Build Coastguard Workerexport class HomePage implements m.ClassComponent<PageAttrs> {
70*6dbdd20aSAndroid Build Coastguard Worker  view() {
71*6dbdd20aSAndroid Build Coastguard Worker    return m(
72*6dbdd20aSAndroid Build Coastguard Worker      '.page.home-page',
73*6dbdd20aSAndroid Build Coastguard Worker      m(
74*6dbdd20aSAndroid Build Coastguard Worker        '.home-page-center',
75*6dbdd20aSAndroid Build Coastguard Worker        m(
76*6dbdd20aSAndroid Build Coastguard Worker          '.home-page-title',
77*6dbdd20aSAndroid Build Coastguard Worker          m(`img.logo[src=${assetSrc('assets/logo-3d.png')}]`),
78*6dbdd20aSAndroid Build Coastguard Worker          'Perfetto',
79*6dbdd20aSAndroid Build Coastguard Worker        ),
80*6dbdd20aSAndroid Build Coastguard Worker        m(Hints),
81*6dbdd20aSAndroid Build Coastguard Worker        m(
82*6dbdd20aSAndroid Build Coastguard Worker          '.channel-select',
83*6dbdd20aSAndroid Build Coastguard Worker          m('', 'Feeling adventurous? Try our bleeding edge Canary version'),
84*6dbdd20aSAndroid Build Coastguard Worker          m('fieldset', mkChan('stable'), mkChan('canary'), m('.highlight')),
85*6dbdd20aSAndroid Build Coastguard Worker          m(
86*6dbdd20aSAndroid Build Coastguard Worker            `.home-page-reload${channelChanged() ? '.show' : ''}`,
87*6dbdd20aSAndroid Build Coastguard Worker            'You need to reload the page for the changes to have effect',
88*6dbdd20aSAndroid Build Coastguard Worker          ),
89*6dbdd20aSAndroid Build Coastguard Worker        ),
90*6dbdd20aSAndroid Build Coastguard Worker      ),
91*6dbdd20aSAndroid Build Coastguard Worker      m(
92*6dbdd20aSAndroid Build Coastguard Worker        'a.privacy',
93*6dbdd20aSAndroid Build Coastguard Worker        {href: 'https://policies.google.com/privacy', target: '_blank'},
94*6dbdd20aSAndroid Build Coastguard Worker        'Privacy policy',
95*6dbdd20aSAndroid Build Coastguard Worker      ),
96*6dbdd20aSAndroid Build Coastguard Worker    );
97*6dbdd20aSAndroid Build Coastguard Worker  }
98*6dbdd20aSAndroid Build Coastguard Worker}
99*6dbdd20aSAndroid Build Coastguard Worker
100*6dbdd20aSAndroid Build Coastguard Workerfunction mkChan(chan: string) {
101*6dbdd20aSAndroid Build Coastguard Worker  const checked = getNextChannel() === chan ? '[checked=true]' : '';
102*6dbdd20aSAndroid Build Coastguard Worker  return [
103*6dbdd20aSAndroid Build Coastguard Worker    m(`input[type=radio][name=chan][id=chan_${chan}]${checked}`, {
104*6dbdd20aSAndroid Build Coastguard Worker      onchange: () => {
105*6dbdd20aSAndroid Build Coastguard Worker        setChannel(chan);
106*6dbdd20aSAndroid Build Coastguard Worker      },
107*6dbdd20aSAndroid Build Coastguard Worker    }),
108*6dbdd20aSAndroid Build Coastguard Worker    m(`label[for=chan_${chan}]`, chan),
109*6dbdd20aSAndroid Build Coastguard Worker  ];
110*6dbdd20aSAndroid Build Coastguard Worker}
111