• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 * Copyright (C) 2022 Huawei Device Co., Ltd.
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 */
15
16import { query } from '../SqlLite';
17import { ClockStruct } from '../ui-worker/ProcedureWorkerClock';
18
19export const queryClockData = (traceId?: string): Promise<
20  Array<{
21    name: string;
22    num: number;
23    srcname: string;
24    maxValue?: number;
25  }>
26> =>
27  query(
28    'queryClockData',
29    `
30    select name || ' Frequency' name, COUNT(*) num, name srcname
31from (select id, name
32      from clock_event_filter
33      where type = 'clock_set_rate')
34group by name
35union
36select name || ' State' name, COUNT(*) num, name srcname
37from (select id, name
38      from clock_event_filter
39      where type != 'clock_set_rate')
40group by name;
41`, {}, {traceId: traceId}
42  );
43
44export const queryClockFrequency = (clockName: string): Promise<Array<ClockStruct>> =>
45  query(
46    'queryClockFrequency',
47    `with freq as (  select measure.filter_id, measure.ts, measure.type, measure.value from clock_event_filter
48      left join measure
49      where
50      clock_event_filter.name = $clockName
51      and
52      clock_event_filter.type = 'clock_set_rate'
53      and
54      clock_event_filter.id = measure.filter_id
55      order by measure.ts)
56      select
57      freq.filter_id as filterId,
58      freq.ts - r.start_ts as startNS,freq.type,freq.value from freq,trace_range r order by startNS`,
59    { $clockName: clockName }
60  );
61
62export const queryClockState = (clockName: string): Promise<Array<ClockStruct>> =>
63  query(
64    'queryClockState',
65    `with state as (
66          select
67          filter_id,
68          ts,
69          endts,
70          endts-ts as dur,
71          type,
72          value
73          from
74            (select
75            measure.filter_id,
76            measure.ts,
77            lead(ts, 1, null) over( order by measure.ts) endts,
78            measure.type,
79            measure.value
80            from clock_event_filter,trace_range
81            left join measure
82            where
83            clock_event_filter.name = $clockName
84            and clock_event_filter.type != 'clock_set_rate' and clock_event_filter.id = measure.filter_id
85            order by measure.ts))
86            select s.filter_id as filterId,s.ts-r.start_ts as startNS,s.type,s.value,s.dur from state s,trace_range r`,
87    { $clockName: clockName }
88  );
89
90export const queryBootTime = (): //@ts-ignore
91Promise<Array<unknown>> =>
92  query(
93    'queryBootTime',
94    `select CS.ts -TR.start_ts as ts ,clock_name from clock_snapshot as CS ,trace_range as TR
95      where clock_name = 'boottime'`,
96    {}
97  );
98
99export const queryScreenState = (): Promise<Array<ClockStruct>> =>
100  query(
101    'queryScreenState',
102    `select
103    m.type,
104    m.ts-r.start_ts as startNS,
105    value, filter_id as filterId
106    from
107    measure m,trace_range r
108    where filter_id in (select id from process_measure_filter where name = 'ScreenState')  order by startNS;
109`
110  );
111
112export const queryRealTime = (): Promise<
113  Array<{
114    ts: number;
115    name: string;
116  }>
117> =>
118  query(
119    'queryRealTime',
120    `SELECT
121  ( CASE WHEN CS.clock_name = 'realtime' THEN CS.ts ELSE CS.ts - TR.start_ts END ) AS ts,
122  CS.clock_name AS name
123  FROM
124  clock_snapshot AS CS,
125  trace_range AS TR
126  WHERE
127  CS.clock_name = 'realtime'
128  OR CS.clock_name = 'boottime';`
129  );
130