xref: /aosp_15_r20/external/perfetto/ui/src/public/aggregation.ts (revision 6dbdd20afdafa5e3ca9b8809fa73465d530080dc)
1*6dbdd20aSAndroid Build Coastguard Worker// Copyright (C) 2019 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 Workerexport type Column = (
16*6dbdd20aSAndroid Build Coastguard Worker  | StringColumn
17*6dbdd20aSAndroid Build Coastguard Worker  | TimestampColumn
18*6dbdd20aSAndroid Build Coastguard Worker  | NumberColumn
19*6dbdd20aSAndroid Build Coastguard Worker  | StateColumn
20*6dbdd20aSAndroid Build Coastguard Worker) & {
21*6dbdd20aSAndroid Build Coastguard Worker  readonly title: string;
22*6dbdd20aSAndroid Build Coastguard Worker  readonly columnId: string;
23*6dbdd20aSAndroid Build Coastguard Worker};
24*6dbdd20aSAndroid Build Coastguard Worker
25*6dbdd20aSAndroid Build Coastguard Workerexport interface StringColumn {
26*6dbdd20aSAndroid Build Coastguard Worker  readonly kind: 'STRING';
27*6dbdd20aSAndroid Build Coastguard Worker  readonly data: Uint16Array;
28*6dbdd20aSAndroid Build Coastguard Worker}
29*6dbdd20aSAndroid Build Coastguard Worker
30*6dbdd20aSAndroid Build Coastguard Workerexport interface TimestampColumn {
31*6dbdd20aSAndroid Build Coastguard Worker  readonly kind: 'TIMESTAMP_NS';
32*6dbdd20aSAndroid Build Coastguard Worker  readonly data: Float64Array;
33*6dbdd20aSAndroid Build Coastguard Worker}
34*6dbdd20aSAndroid Build Coastguard Worker
35*6dbdd20aSAndroid Build Coastguard Workerexport interface NumberColumn {
36*6dbdd20aSAndroid Build Coastguard Worker  readonly kind: 'NUMBER';
37*6dbdd20aSAndroid Build Coastguard Worker  readonly data: Uint16Array;
38*6dbdd20aSAndroid Build Coastguard Worker}
39*6dbdd20aSAndroid Build Coastguard Worker
40*6dbdd20aSAndroid Build Coastguard Workerexport interface StateColumn {
41*6dbdd20aSAndroid Build Coastguard Worker  readonly kind: 'STATE';
42*6dbdd20aSAndroid Build Coastguard Worker  readonly data: Uint16Array;
43*6dbdd20aSAndroid Build Coastguard Worker}
44*6dbdd20aSAndroid Build Coastguard Worker
45*6dbdd20aSAndroid Build Coastguard Workertype TypedArrayConstructor =
46*6dbdd20aSAndroid Build Coastguard Worker  | Uint16ArrayConstructor
47*6dbdd20aSAndroid Build Coastguard Worker  | Float64ArrayConstructor
48*6dbdd20aSAndroid Build Coastguard Worker  | Uint32ArrayConstructor;
49*6dbdd20aSAndroid Build Coastguard Workerexport interface ColumnDef {
50*6dbdd20aSAndroid Build Coastguard Worker  readonly title: string;
51*6dbdd20aSAndroid Build Coastguard Worker  readonly kind: string;
52*6dbdd20aSAndroid Build Coastguard Worker  readonly sum?: boolean;
53*6dbdd20aSAndroid Build Coastguard Worker  readonly columnConstructor: TypedArrayConstructor;
54*6dbdd20aSAndroid Build Coastguard Worker  readonly columnId: string;
55*6dbdd20aSAndroid Build Coastguard Worker}
56*6dbdd20aSAndroid Build Coastguard Worker
57*6dbdd20aSAndroid Build Coastguard Workerexport interface AggregateData {
58*6dbdd20aSAndroid Build Coastguard Worker  readonly tabName: string;
59*6dbdd20aSAndroid Build Coastguard Worker  readonly columns: Column[];
60*6dbdd20aSAndroid Build Coastguard Worker  readonly columnSums: string[];
61*6dbdd20aSAndroid Build Coastguard Worker  // For string interning.
62*6dbdd20aSAndroid Build Coastguard Worker  readonly strings: string[];
63*6dbdd20aSAndroid Build Coastguard Worker  // Some aggregations will have extra info to display;
64*6dbdd20aSAndroid Build Coastguard Worker  readonly extra?: ThreadStateExtra;
65*6dbdd20aSAndroid Build Coastguard Worker}
66*6dbdd20aSAndroid Build Coastguard Worker
67*6dbdd20aSAndroid Build Coastguard Workerexport function isEmptyData(data: AggregateData) {
68*6dbdd20aSAndroid Build Coastguard Worker  return data.columns.length === 0 || data.columns[0].data.length === 0;
69*6dbdd20aSAndroid Build Coastguard Worker}
70*6dbdd20aSAndroid Build Coastguard Worker
71*6dbdd20aSAndroid Build Coastguard Workerexport interface ThreadStateExtra {
72*6dbdd20aSAndroid Build Coastguard Worker  readonly kind: 'THREAD_STATE';
73*6dbdd20aSAndroid Build Coastguard Worker  readonly states: string[];
74*6dbdd20aSAndroid Build Coastguard Worker  readonly values: Float64Array;
75*6dbdd20aSAndroid Build Coastguard Worker  readonly totalMs: number;
76*6dbdd20aSAndroid Build Coastguard Worker}
77*6dbdd20aSAndroid Build Coastguard Worker
78*6dbdd20aSAndroid Build Coastguard Workerexport interface Sorting {
79*6dbdd20aSAndroid Build Coastguard Worker  readonly column: string;
80*6dbdd20aSAndroid Build Coastguard Worker  readonly direction: 'DESC' | 'ASC';
81*6dbdd20aSAndroid Build Coastguard Worker}
82