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