/* * Copyright (C) 2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import { query } from '../SqlLite'; import { ClockStruct } from '../ui-worker/ProcedureWorkerClock'; export const queryClockData = (): Promise< Array<{ name: string; num: number; srcname: string; maxValue?: number; }> > => query( 'queryClockData', ` select name || ' Frequency' name, COUNT(*) num, name srcname from (select id, name from clock_event_filter where type = 'clock_set_rate') group by name union select name || ' State' name, COUNT(*) num, name srcname from (select id, name from clock_event_filter where type != 'clock_set_rate') group by name; ` ); export const queryClockFrequency = (clockName: string): Promise> => query( 'queryClockFrequency', `with freq as ( select measure.filter_id, measure.ts, measure.type, measure.value from clock_event_filter left join measure where clock_event_filter.name = $clockName and clock_event_filter.type = 'clock_set_rate' and clock_event_filter.id = measure.filter_id order by measure.ts) select freq.filter_id as filterId,freq.ts - r.start_ts as startNS,freq.type,freq.value from freq,trace_range r order by startNS`, { $clockName: clockName } ); export const queryClockState = (clockName: string): Promise> => query( 'queryClockState', `with state as ( select filter_id, ts, endts, endts-ts as dur, type, value from (select measure.filter_id, measure.ts, lead(ts, 1, null) over( order by measure.ts) endts, measure.type, measure.value from clock_event_filter,trace_range left join measure where clock_event_filter.name = $clockName and clock_event_filter.type != 'clock_set_rate' and clock_event_filter.id = measure.filter_id order by measure.ts)) 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`, { $clockName: clockName } ); export const queryBootTime = (): //@ts-ignore Promise> => query( 'queryBootTime', `select CS.ts -TR.start_ts as ts ,clock_name from clock_snapshot as CS ,trace_range as TR where clock_name = 'boottime'`, {} ); export const queryScreenState = (): Promise> => query( 'queryScreenState', `select m.type, m.ts-r.start_ts as startNS, value, filter_id as filterId from measure m,trace_range r where filter_id in (select id from process_measure_filter where name = 'ScreenState') order by startNS; ` ); export const queryRealTime = (): Promise< Array<{ ts: number; name: string; }> > => query( 'queryRealTime', `SELECT ( CASE WHEN CS.clock_name = 'realtime' THEN CS.ts ELSE CS.ts - TR.start_ts END ) AS ts, CS.clock_name AS name FROM clock_snapshot AS CS, trace_range AS TR WHERE CS.clock_name = 'realtime' OR CS.clock_name = 'boottime';` );