1fb726d48Sopenharmony_ci/*
2fb726d48Sopenharmony_ci * Copyright (C) 2022 Huawei Device Co., Ltd.
3fb726d48Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4fb726d48Sopenharmony_ci * you may not use this file except in compliance with the License.
5fb726d48Sopenharmony_ci * You may obtain a copy of the License at
6fb726d48Sopenharmony_ci *
7fb726d48Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8fb726d48Sopenharmony_ci *
9fb726d48Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10fb726d48Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11fb726d48Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12fb726d48Sopenharmony_ci * See the License for the specific language governing permissions and
13fb726d48Sopenharmony_ci * limitations under the License.
14fb726d48Sopenharmony_ci */
15fb726d48Sopenharmony_ci
16fb726d48Sopenharmony_ciimport { query } from '../SqlLite';
17fb726d48Sopenharmony_ciimport { ClockStruct } from '../ui-worker/ProcedureWorkerClock';
18fb726d48Sopenharmony_ci
19fb726d48Sopenharmony_ciexport const queryClockData = (traceId?: string): Promise<
20fb726d48Sopenharmony_ci  Array<{
21fb726d48Sopenharmony_ci    name: string;
22fb726d48Sopenharmony_ci    num: number;
23fb726d48Sopenharmony_ci    srcname: string;
24fb726d48Sopenharmony_ci    maxValue?: number;
25fb726d48Sopenharmony_ci  }>
26fb726d48Sopenharmony_ci> =>
27fb726d48Sopenharmony_ci  query(
28fb726d48Sopenharmony_ci    'queryClockData',
29fb726d48Sopenharmony_ci    `
30fb726d48Sopenharmony_ci    select name || ' Frequency' name, COUNT(*) num, name srcname
31fb726d48Sopenharmony_cifrom (select id, name
32fb726d48Sopenharmony_ci      from clock_event_filter
33fb726d48Sopenharmony_ci      where type = 'clock_set_rate')
34fb726d48Sopenharmony_cigroup by name
35fb726d48Sopenharmony_ciunion
36fb726d48Sopenharmony_ciselect name || ' State' name, COUNT(*) num, name srcname
37fb726d48Sopenharmony_cifrom (select id, name
38fb726d48Sopenharmony_ci      from clock_event_filter
39fb726d48Sopenharmony_ci      where type != 'clock_set_rate')
40fb726d48Sopenharmony_cigroup by name;
41fb726d48Sopenharmony_ci`, {}, {traceId: traceId}
42fb726d48Sopenharmony_ci  );
43fb726d48Sopenharmony_ci
44fb726d48Sopenharmony_ciexport const queryClockFrequency = (clockName: string): Promise<Array<ClockStruct>> =>
45fb726d48Sopenharmony_ci  query(
46fb726d48Sopenharmony_ci    'queryClockFrequency',
47fb726d48Sopenharmony_ci    `with freq as (  select measure.filter_id, measure.ts, measure.type, measure.value from clock_event_filter
48fb726d48Sopenharmony_ci      left join measure
49fb726d48Sopenharmony_ci      where 
50fb726d48Sopenharmony_ci      clock_event_filter.name = $clockName 
51fb726d48Sopenharmony_ci      and 
52fb726d48Sopenharmony_ci      clock_event_filter.type = 'clock_set_rate' 
53fb726d48Sopenharmony_ci      and 
54fb726d48Sopenharmony_ci      clock_event_filter.id = measure.filter_id
55fb726d48Sopenharmony_ci      order by measure.ts)
56fb726d48Sopenharmony_ci      select 
57fb726d48Sopenharmony_ci      freq.filter_id as filterId,
58fb726d48Sopenharmony_ci      freq.ts - r.start_ts as startNS,freq.type,freq.value from freq,trace_range r order by startNS`,
59fb726d48Sopenharmony_ci    { $clockName: clockName }
60fb726d48Sopenharmony_ci  );
61fb726d48Sopenharmony_ci
62fb726d48Sopenharmony_ciexport const queryClockState = (clockName: string): Promise<Array<ClockStruct>> =>
63fb726d48Sopenharmony_ci  query(
64fb726d48Sopenharmony_ci    'queryClockState',
65fb726d48Sopenharmony_ci    `with state as (
66fb726d48Sopenharmony_ci          select 
67fb726d48Sopenharmony_ci          filter_id, 
68fb726d48Sopenharmony_ci          ts, 
69fb726d48Sopenharmony_ci          endts, 
70fb726d48Sopenharmony_ci          endts-ts as dur, 
71fb726d48Sopenharmony_ci          type, 
72fb726d48Sopenharmony_ci          value 
73fb726d48Sopenharmony_ci          from
74fb726d48Sopenharmony_ci            (select 
75fb726d48Sopenharmony_ci            measure.filter_id, 
76fb726d48Sopenharmony_ci            measure.ts, 
77fb726d48Sopenharmony_ci            lead(ts, 1, null) over( order by measure.ts) endts, 
78fb726d48Sopenharmony_ci            measure.type, 
79fb726d48Sopenharmony_ci            measure.value 
80fb726d48Sopenharmony_ci            from clock_event_filter,trace_range
81fb726d48Sopenharmony_ci            left join measure
82fb726d48Sopenharmony_ci            where 
83fb726d48Sopenharmony_ci            clock_event_filter.name = $clockName 
84fb726d48Sopenharmony_ci            and clock_event_filter.type != 'clock_set_rate' and clock_event_filter.id = measure.filter_id
85fb726d48Sopenharmony_ci            order by measure.ts))
86fb726d48Sopenharmony_ci            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`,
87fb726d48Sopenharmony_ci    { $clockName: clockName }
88fb726d48Sopenharmony_ci  );
89fb726d48Sopenharmony_ci
90fb726d48Sopenharmony_ciexport const queryBootTime = (): //@ts-ignore
91fb726d48Sopenharmony_ciPromise<Array<unknown>> =>
92fb726d48Sopenharmony_ci  query(
93fb726d48Sopenharmony_ci    'queryBootTime',
94fb726d48Sopenharmony_ci    `select CS.ts -TR.start_ts as ts ,clock_name from clock_snapshot as CS ,trace_range as TR
95fb726d48Sopenharmony_ci      where clock_name = 'boottime'`,
96fb726d48Sopenharmony_ci    {}
97fb726d48Sopenharmony_ci  );
98fb726d48Sopenharmony_ci
99fb726d48Sopenharmony_ciexport const queryScreenState = (): Promise<Array<ClockStruct>> =>
100fb726d48Sopenharmony_ci  query(
101fb726d48Sopenharmony_ci    'queryScreenState',
102fb726d48Sopenharmony_ci    `select 
103fb726d48Sopenharmony_ci    m.type, 
104fb726d48Sopenharmony_ci    m.ts-r.start_ts as startNS, 
105fb726d48Sopenharmony_ci    value, filter_id as filterId 
106fb726d48Sopenharmony_ci    from 
107fb726d48Sopenharmony_ci    measure m,trace_range r 
108fb726d48Sopenharmony_ci    where filter_id in (select id from process_measure_filter where name = 'ScreenState')  order by startNS;
109fb726d48Sopenharmony_ci`
110fb726d48Sopenharmony_ci  );
111fb726d48Sopenharmony_ci
112fb726d48Sopenharmony_ciexport const queryRealTime = (): Promise<
113fb726d48Sopenharmony_ci  Array<{
114fb726d48Sopenharmony_ci    ts: number;
115fb726d48Sopenharmony_ci    name: string;
116fb726d48Sopenharmony_ci  }>
117fb726d48Sopenharmony_ci> =>
118fb726d48Sopenharmony_ci  query(
119fb726d48Sopenharmony_ci    'queryRealTime',
120fb726d48Sopenharmony_ci    `SELECT
121fb726d48Sopenharmony_ci  ( CASE WHEN CS.clock_name = 'realtime' THEN CS.ts ELSE CS.ts - TR.start_ts END ) AS ts,
122fb726d48Sopenharmony_ci  CS.clock_name AS name 
123fb726d48Sopenharmony_ci  FROM
124fb726d48Sopenharmony_ci  clock_snapshot AS CS,
125fb726d48Sopenharmony_ci  trace_range AS TR 
126fb726d48Sopenharmony_ci  WHERE
127fb726d48Sopenharmony_ci  CS.clock_name = 'realtime' 
128fb726d48Sopenharmony_ci  OR CS.clock_name = 'boottime';`
129fb726d48Sopenharmony_ci  );
130