xref: /aosp_15_r20/external/perfetto/ui/src/components/widgets/sched.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 {SchedSqlId} from '../sql_utils/core_types';
17*6dbdd20aSAndroid Build Coastguard Workerimport {Anchor} from '../../widgets/anchor';
18*6dbdd20aSAndroid Build Coastguard Workerimport {Icons} from '../../base/semantic_icons';
19*6dbdd20aSAndroid Build Coastguard Workerimport {AppImpl} from '../../core/app_impl';
20*6dbdd20aSAndroid Build Coastguard Worker
21*6dbdd20aSAndroid Build Coastguard Workerinterface SchedRefAttrs {
22*6dbdd20aSAndroid Build Coastguard Worker  // The id of the referenced sched slice in the sched_slice table.
23*6dbdd20aSAndroid Build Coastguard Worker  readonly id: SchedSqlId;
24*6dbdd20aSAndroid Build Coastguard Worker
25*6dbdd20aSAndroid Build Coastguard Worker  // If not present, a placeholder name will be used.
26*6dbdd20aSAndroid Build Coastguard Worker  readonly name?: string;
27*6dbdd20aSAndroid Build Coastguard Worker
28*6dbdd20aSAndroid Build Coastguard Worker  // Whether clicking on the reference should change the current tab
29*6dbdd20aSAndroid Build Coastguard Worker  // to "current selection" tab in addition to updating the selection
30*6dbdd20aSAndroid Build Coastguard Worker  // and changing the viewport. True by default.
31*6dbdd20aSAndroid Build Coastguard Worker  readonly switchToCurrentSelectionTab?: boolean;
32*6dbdd20aSAndroid Build Coastguard Worker}
33*6dbdd20aSAndroid Build Coastguard Worker
34*6dbdd20aSAndroid Build Coastguard Workerexport function goToSchedSlice(id: SchedSqlId) {
35*6dbdd20aSAndroid Build Coastguard Worker  // TODO(primiano): the Trace object should be properly injected here.
36*6dbdd20aSAndroid Build Coastguard Worker  AppImpl.instance.trace?.selection.selectSqlEvent('sched_slice', id, {
37*6dbdd20aSAndroid Build Coastguard Worker    scrollToSelection: true,
38*6dbdd20aSAndroid Build Coastguard Worker  });
39*6dbdd20aSAndroid Build Coastguard Worker}
40*6dbdd20aSAndroid Build Coastguard Worker
41*6dbdd20aSAndroid Build Coastguard Workerexport class SchedRef implements m.ClassComponent<SchedRefAttrs> {
42*6dbdd20aSAndroid Build Coastguard Worker  view(vnode: m.Vnode<SchedRefAttrs>) {
43*6dbdd20aSAndroid Build Coastguard Worker    return m(
44*6dbdd20aSAndroid Build Coastguard Worker      Anchor,
45*6dbdd20aSAndroid Build Coastguard Worker      {
46*6dbdd20aSAndroid Build Coastguard Worker        icon: Icons.UpdateSelection,
47*6dbdd20aSAndroid Build Coastguard Worker        onclick: () => {
48*6dbdd20aSAndroid Build Coastguard Worker          // TODO(primiano): the Trace object should be properly injected here.
49*6dbdd20aSAndroid Build Coastguard Worker          AppImpl.instance.trace?.selection.selectSqlEvent(
50*6dbdd20aSAndroid Build Coastguard Worker            'sched_slice',
51*6dbdd20aSAndroid Build Coastguard Worker            vnode.attrs.id,
52*6dbdd20aSAndroid Build Coastguard Worker            {
53*6dbdd20aSAndroid Build Coastguard Worker              switchToCurrentSelectionTab:
54*6dbdd20aSAndroid Build Coastguard Worker                vnode.attrs.switchToCurrentSelectionTab ?? true,
55*6dbdd20aSAndroid Build Coastguard Worker              scrollToSelection: true,
56*6dbdd20aSAndroid Build Coastguard Worker            },
57*6dbdd20aSAndroid Build Coastguard Worker          );
58*6dbdd20aSAndroid Build Coastguard Worker        },
59*6dbdd20aSAndroid Build Coastguard Worker      },
60*6dbdd20aSAndroid Build Coastguard Worker      vnode.attrs.name ?? `Sched ${vnode.attrs.id}`,
61*6dbdd20aSAndroid Build Coastguard Worker    );
62*6dbdd20aSAndroid Build Coastguard Worker  }
63*6dbdd20aSAndroid Build Coastguard Worker}
64