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_ciimport { query } from '../SqlLite';
16fb726d48Sopenharmony_ciimport { SelectionData } from '../../bean/BoxSelection';
17fb726d48Sopenharmony_ciimport { ThreadStruct } from '../ui-worker/ProcedureWorkerThread';
18fb726d48Sopenharmony_ciimport { WakeupBean } from '../../bean/WakeupBean';
19fb726d48Sopenharmony_ciimport { SPTChild } from '../../bean/StateProcessThread';
20fb726d48Sopenharmony_ciimport { BinderArgBean } from '../../bean/BinderArgBean';
21fb726d48Sopenharmony_ciimport { ProcessMemStruct } from '../ui-worker/ProcedureWorkerMem';
22fb726d48Sopenharmony_ciimport { AppStartupStruct } from '../ui-worker/ProcedureWorkerAppStartup';
23fb726d48Sopenharmony_ciimport { SoStruct } from '../ui-worker/ProcedureWorkerSoInit';
24fb726d48Sopenharmony_ciimport { LiveProcess, ProcessHistory } from '../../bean/AbilityMonitor';
25fb726d48Sopenharmony_ciimport { EnergyAnomalyStruct } from '../ui-worker/ProcedureWorkerEnergyAnomaly';
26fb726d48Sopenharmony_ciimport { BinderItem } from '../../bean/BinderProcessThread';
27fb726d48Sopenharmony_ciimport { Utils } from '../../component/trace/base/Utils';
28fb726d48Sopenharmony_ciimport { FuncStruct } from '../ui-worker/ProcedureWorkerFunc';
29fb726d48Sopenharmony_ci
30fb726d48Sopenharmony_ciexport const queryBinderByThreadId = (
31fb726d48Sopenharmony_ci  pIds: number[],
32fb726d48Sopenharmony_ci  tIds: Array<number>,
33fb726d48Sopenharmony_ci  leftNS: number,
34fb726d48Sopenharmony_ci  rightNS: number
35fb726d48Sopenharmony_ci): Promise<Array<BinderItem>> =>
36fb726d48Sopenharmony_ci  query<BinderItem>(
37fb726d48Sopenharmony_ci    'queryBinderByThreadId',
38fb726d48Sopenharmony_ci    `
39fb726d48Sopenharmony_ci      SELECT 
40fb726d48Sopenharmony_ci            c.name, 
41fb726d48Sopenharmony_ci            c.ts - r.start_ts AS ts, 
42fb726d48Sopenharmony_ci            c.dur, 
43fb726d48Sopenharmony_ci            t.tid,
44fb726d48Sopenharmony_ci            p.pid
45fb726d48Sopenharmony_ci          FROM 
46fb726d48Sopenharmony_ci              callstack c, trace_range r 
47fb726d48Sopenharmony_ci          LEFT JOIN 
48fb726d48Sopenharmony_ci              thread t 
49fb726d48Sopenharmony_ci          ON 
50fb726d48Sopenharmony_ci              c.callid = t.id 
51fb726d48Sopenharmony_ci          LEFT JOIN
52fb726d48Sopenharmony_ci              process p 
53fb726d48Sopenharmony_ci          ON
54fb726d48Sopenharmony_ci              t.ipid = p.id  
55fb726d48Sopenharmony_ci          WHERE 
56fb726d48Sopenharmony_ci              c.name in ('binder transaction', 'binder async rcv', 'binder reply', 'binder transaction async') 
57fb726d48Sopenharmony_ci          AND 
58fb726d48Sopenharmony_ci              t.tid in (${tIds.join(',')})
59fb726d48Sopenharmony_ci          AND 
60fb726d48Sopenharmony_ci              p.pid in (${pIds.join(',')})
61fb726d48Sopenharmony_ci          AND NOT 
62fb726d48Sopenharmony_ci              (((c.ts - r.start_ts) < ${leftNS}) 
63fb726d48Sopenharmony_ci          OR 
64fb726d48Sopenharmony_ci              ((c.ts - r.start_ts) > ${rightNS}))
65fb726d48Sopenharmony_ci        `,
66fb726d48Sopenharmony_ci    {
67fb726d48Sopenharmony_ci      $pIds: pIds,
68fb726d48Sopenharmony_ci      $tIds: tIds,
69fb726d48Sopenharmony_ci      $leftNS: leftNS,
70fb726d48Sopenharmony_ci      $rightNS: rightNS,
71fb726d48Sopenharmony_ci    },
72fb726d48Sopenharmony_ci    { traceId: Utils.currentSelectTrace }
73fb726d48Sopenharmony_ci  );
74fb726d48Sopenharmony_ci
75fb726d48Sopenharmony_ciexport const getTabBindersCount = (
76fb726d48Sopenharmony_ci  pIds: number[],
77fb726d48Sopenharmony_ci  tIds: number[],
78fb726d48Sopenharmony_ci  leftNS: number,
79fb726d48Sopenharmony_ci  rightNS: number
80fb726d48Sopenharmony_ci): Promise<Array<BinderItem>> =>
81fb726d48Sopenharmony_ci  query<BinderItem>(
82fb726d48Sopenharmony_ci    'getTabBindersCount',
83fb726d48Sopenharmony_ci    `
84fb726d48Sopenharmony_ci      SELECT 
85fb726d48Sopenharmony_ci          c.name,
86fb726d48Sopenharmony_ci          c.dur,
87fb726d48Sopenharmony_ci          1 AS count,
88fb726d48Sopenharmony_ci          c.ts,
89fb726d48Sopenharmony_ci          c.ts - r.start_ts AS startTime, 
90fb726d48Sopenharmony_ci          c.ts -r.start_ts + c.dur AS endTime,
91fb726d48Sopenharmony_ci          t.tid, 
92fb726d48Sopenharmony_ci          p.pid
93fb726d48Sopenharmony_ci        FROM 
94fb726d48Sopenharmony_ci            callstack c, trace_range r 
95fb726d48Sopenharmony_ci          LEFT JOIN
96fb726d48Sopenharmony_ci            thread t 
97fb726d48Sopenharmony_ci          ON 
98fb726d48Sopenharmony_ci            c.callid = t.id 
99fb726d48Sopenharmony_ci          LEFT JOIN
100fb726d48Sopenharmony_ci            process p 
101fb726d48Sopenharmony_ci          ON
102fb726d48Sopenharmony_ci            t.ipid = p.id 
103fb726d48Sopenharmony_ci        WHERE 
104fb726d48Sopenharmony_ci            c.name in ('binder transaction', 'binder async rcv', 'binder reply', 'binder transaction async') 
105fb726d48Sopenharmony_ci          AND 
106fb726d48Sopenharmony_ci            t.tid in (${tIds.join(',')})
107fb726d48Sopenharmony_ci          AND 
108fb726d48Sopenharmony_ci            p.pid in (${pIds.join(',')})
109fb726d48Sopenharmony_ci          AND NOT 
110fb726d48Sopenharmony_ci            ((startTime < ${leftNS}) 
111fb726d48Sopenharmony_ci          OR 
112fb726d48Sopenharmony_ci            (endTime > ${rightNS}));
113fb726d48Sopenharmony_ci      `,
114fb726d48Sopenharmony_ci    {
115fb726d48Sopenharmony_ci      $pIds: pIds,
116fb726d48Sopenharmony_ci      $tIds: tIds,
117fb726d48Sopenharmony_ci      $leftNS: leftNS,
118fb726d48Sopenharmony_ci      $rightNS: rightNS,
119fb726d48Sopenharmony_ci    }
120fb726d48Sopenharmony_ci  );
121fb726d48Sopenharmony_ci
122fb726d48Sopenharmony_ciexport const querySchedThreadStates = (
123fb726d48Sopenharmony_ci  pIds: Array<number>,
124fb726d48Sopenharmony_ci  tIds: Array<number>,
125fb726d48Sopenharmony_ci  leftStartNs: number,
126fb726d48Sopenharmony_ci  rightEndNs: number
127fb726d48Sopenharmony_ci): //@ts-ignore
128fb726d48Sopenharmony_ci  Promise<Array<unknown>> =>
129fb726d48Sopenharmony_ci  query(
130fb726d48Sopenharmony_ci    'getTabThreadStates',
131fb726d48Sopenharmony_ci    `
132fb726d48Sopenharmony_ci    select
133fb726d48Sopenharmony_ci      B.pid,
134fb726d48Sopenharmony_ci      B.tid,
135fb726d48Sopenharmony_ci      B.state,
136fb726d48Sopenharmony_ci      ifnull(B.dur,0) as dur,
137fb726d48Sopenharmony_ci      B.ts,
138fb726d48Sopenharmony_ci      ifnull(B.dur,0) + B.ts as endTs
139fb726d48Sopenharmony_ci    from
140fb726d48Sopenharmony_ci      thread_state AS B
141fb726d48Sopenharmony_ci    where
142fb726d48Sopenharmony_ci      B.tid in (${tIds.join(',')})
143fb726d48Sopenharmony_ci    and 
144fb726d48Sopenharmony_ci      B.pid in (${pIds.join(',')})
145fb726d48Sopenharmony_ci    and
146fb726d48Sopenharmony_ci      B.state='Running'
147fb726d48Sopenharmony_ci    and
148fb726d48Sopenharmony_ci      not ((B.ts + ifnull(B.dur,0) < $leftStartNs) or (B.ts > $rightEndNs))
149fb726d48Sopenharmony_ci    order by
150fb726d48Sopenharmony_ci      B.pid;
151fb726d48Sopenharmony_ci    `,
152fb726d48Sopenharmony_ci    { $leftStartNs: leftStartNs, $rightEndNs: rightEndNs }
153fb726d48Sopenharmony_ci  );
154fb726d48Sopenharmony_ci
155fb726d48Sopenharmony_ciexport const querySingleCutData = (
156fb726d48Sopenharmony_ci  funcName: string,
157fb726d48Sopenharmony_ci  tIds: string,
158fb726d48Sopenharmony_ci  leftStartNs: number,
159fb726d48Sopenharmony_ci  rightEndNs: number
160fb726d48Sopenharmony_ci): //@ts-ignore
161fb726d48Sopenharmony_ci  Promise<Array<unknown>> =>
162fb726d48Sopenharmony_ci  query(
163fb726d48Sopenharmony_ci    'querySingleCutData',
164fb726d48Sopenharmony_ci    `
165fb726d48Sopenharmony_ci    select 
166fb726d48Sopenharmony_ci      c.ts as cycleStartTime,
167fb726d48Sopenharmony_ci      c.ts + ifnull(c.dur, 0) as cycleEndTime,
168fb726d48Sopenharmony_ci      t.tid,
169fb726d48Sopenharmony_ci      p.pid
170fb726d48Sopenharmony_ci      from
171fb726d48Sopenharmony_ci      callstack c 
172fb726d48Sopenharmony_ci    left join
173fb726d48Sopenharmony_ci      thread t on c.callid = t.id 
174fb726d48Sopenharmony_ci    left join
175fb726d48Sopenharmony_ci      process p on t.ipid = p.id
176fb726d48Sopenharmony_ci    left join
177fb726d48Sopenharmony_ci      trace_range r
178fb726d48Sopenharmony_ci    where
179fb726d48Sopenharmony_ci      c.name like '${funcName}%'
180fb726d48Sopenharmony_ci    and 
181fb726d48Sopenharmony_ci      t.tid = '${tIds}'
182fb726d48Sopenharmony_ci    and
183fb726d48Sopenharmony_ci      not ((c.ts < $leftStartNs) or (c.ts + ifnull(c.dur, 0) > $rightEndNs))
184fb726d48Sopenharmony_ci    order by
185fb726d48Sopenharmony_ci      c.ts
186fb726d48Sopenharmony_ci    `,
187fb726d48Sopenharmony_ci    { $leftStartNs: leftStartNs, $rightEndNs: rightEndNs }
188fb726d48Sopenharmony_ci  );
189fb726d48Sopenharmony_ci
190fb726d48Sopenharmony_ciexport const queryLoopCutData = (
191fb726d48Sopenharmony_ci  funcName: string,
192fb726d48Sopenharmony_ci  tIds: string,
193fb726d48Sopenharmony_ci  leftStartNs: number,
194fb726d48Sopenharmony_ci  rightEndNs: number
195fb726d48Sopenharmony_ci): //@ts-ignore
196fb726d48Sopenharmony_ci  Promise<Array<unknown>> =>
197fb726d48Sopenharmony_ci  query(
198fb726d48Sopenharmony_ci    'queryLoopCutData',
199fb726d48Sopenharmony_ci    `
200fb726d48Sopenharmony_ci    select 
201fb726d48Sopenharmony_ci      c.ts as cycleStartTime,
202fb726d48Sopenharmony_ci      t.tid,
203fb726d48Sopenharmony_ci      p.pid
204fb726d48Sopenharmony_ci    from callstack c 
205fb726d48Sopenharmony_ci    left join
206fb726d48Sopenharmony_ci      thread t on c.callid = t.id 
207fb726d48Sopenharmony_ci    left join
208fb726d48Sopenharmony_ci      process p on t.ipid = p.id
209fb726d48Sopenharmony_ci    where 
210fb726d48Sopenharmony_ci      c.name like '${funcName}%' 
211fb726d48Sopenharmony_ci    and
212fb726d48Sopenharmony_ci      t.tid = '${tIds}' 
213fb726d48Sopenharmony_ci    and
214fb726d48Sopenharmony_ci      not ((c.ts < $leftStartNs) or (c.ts > $rightEndNs))
215fb726d48Sopenharmony_ci    order by
216fb726d48Sopenharmony_ci      c.ts
217fb726d48Sopenharmony_ci    `,
218fb726d48Sopenharmony_ci    { $leftStartNs: leftStartNs, $rightEndNs: rightEndNs }
219fb726d48Sopenharmony_ci  );
220fb726d48Sopenharmony_ci// 框选区域内sleeping的时间
221fb726d48Sopenharmony_ciexport const getTabSleepingTime = (
222fb726d48Sopenharmony_ci  tIds: Array<number>,
223fb726d48Sopenharmony_ci  leftNS: number,
224fb726d48Sopenharmony_ci  rightNS: number
225fb726d48Sopenharmony_ci): //@ts-ignore
226fb726d48Sopenharmony_ci  Promise<Array<unknown>> =>
227fb726d48Sopenharmony_ci  query<SelectionData>(
228fb726d48Sopenharmony_ci    'getTabRunningPersent',
229fb726d48Sopenharmony_ci    `
230fb726d48Sopenharmony_ci select
231fb726d48Sopenharmony_ci   B.pid,
232fb726d48Sopenharmony_ci   B.tid,
233fb726d48Sopenharmony_ci   B.state,
234fb726d48Sopenharmony_ci   B.cpu,
235fb726d48Sopenharmony_ci   B.dur,
236fb726d48Sopenharmony_ci   B.ts
237fb726d48Sopenharmony_ci from
238fb726d48Sopenharmony_ci   thread_state AS  B
239fb726d48Sopenharmony_ci left join
240fb726d48Sopenharmony_ci   trace_range AS TR
241fb726d48Sopenharmony_ci where
242fb726d48Sopenharmony_ci   B.tid in (${tIds.join(',')})
243fb726d48Sopenharmony_ci and
244fb726d48Sopenharmony_ci   B.state='Sleeping'
245fb726d48Sopenharmony_ci and
246fb726d48Sopenharmony_ci   not ((B.ts - TR.start_ts + ifnull(B.dur,0) < ${leftNS}) or (B.ts - TR.start_ts > ${rightNS}))
247fb726d48Sopenharmony_ci order by
248fb726d48Sopenharmony_ci   ts;`,
249fb726d48Sopenharmony_ci    { $leftNS: leftNS, $rightNS: rightNS }
250fb726d48Sopenharmony_ci  );
251fb726d48Sopenharmony_ciexport const getTabThreadStatesCpu = (
252fb726d48Sopenharmony_ci  tIds: Array<number>,
253fb726d48Sopenharmony_ci  leftNS: number,
254fb726d48Sopenharmony_ci  rightNS: number
255fb726d48Sopenharmony_ci): //@ts-ignore
256fb726d48Sopenharmony_ci  Promise<Array<unknown>> => {
257fb726d48Sopenharmony_ci  let sql = `
258fb726d48Sopenharmony_ciselect
259fb726d48Sopenharmony_ci       B.pid,
260fb726d48Sopenharmony_ci       B.tid,
261fb726d48Sopenharmony_ci       B.cpu,
262fb726d48Sopenharmony_ci       sum( min(${rightNS},(B.ts - TR.start_ts + iif(B.dur = -1 or B.dur is null, 0, B.dur))) - 
263fb726d48Sopenharmony_ci       max(${leftNS},B.ts - TR.start_ts)) wallDuration
264fb726d48Sopenharmony_cifrom thread_state as B
265fb726d48Sopenharmony_cileft join trace_range as TR
266fb726d48Sopenharmony_ciwhere cpu notnull
267fb726d48Sopenharmony_ci    and B.tid in (${tIds.join(',')})
268fb726d48Sopenharmony_ci    and not ((B.ts - TR.start_ts + iif(B.dur = -1 or B.dur is null, 0, B.dur) < ${leftNS}) 
269fb726d48Sopenharmony_ci    or (B.ts - TR.start_ts > ${rightNS}))
270fb726d48Sopenharmony_cigroup by B.tid, B.pid, B.cpu;`;
271fb726d48Sopenharmony_ci  return query<SelectionData>('getTabThreadStatesCpu', sql, {
272fb726d48Sopenharmony_ci    $leftNS: leftNS,
273fb726d48Sopenharmony_ci    $rightNS: rightNS,
274fb726d48Sopenharmony_ci  }, {
275fb726d48Sopenharmony_ci    traceId: Utils.currentSelectTrace
276fb726d48Sopenharmony_ci  });
277fb726d48Sopenharmony_ci};
278fb726d48Sopenharmony_ci
279fb726d48Sopenharmony_ci// 框选区域内running的时间
280fb726d48Sopenharmony_ciexport const getTabRunningPersent = (
281fb726d48Sopenharmony_ci  tIds: Array<number>,
282fb726d48Sopenharmony_ci  leftNS: number,
283fb726d48Sopenharmony_ci  rightNS: number
284fb726d48Sopenharmony_ci): //@ts-ignore
285fb726d48Sopenharmony_ci  Promise<Array<unknown>> =>
286fb726d48Sopenharmony_ci  query<SelectionData>(
287fb726d48Sopenharmony_ci    'getTabRunningPersent',
288fb726d48Sopenharmony_ci    `
289fb726d48Sopenharmony_ci   select
290fb726d48Sopenharmony_ci     B.pid,
291fb726d48Sopenharmony_ci     B.tid,
292fb726d48Sopenharmony_ci     B.state,
293fb726d48Sopenharmony_ci     B.cpu,
294fb726d48Sopenharmony_ci     iif(B.dur = -1 or B.dur is null, 0, B.dur) as dur,
295fb726d48Sopenharmony_ci     B.ts
296fb726d48Sopenharmony_ci   from
297fb726d48Sopenharmony_ci     thread_state AS  B
298fb726d48Sopenharmony_ci   left join
299fb726d48Sopenharmony_ci     trace_range AS TR
300fb726d48Sopenharmony_ci   where
301fb726d48Sopenharmony_ci     B.tid in (${tIds.join(',')})
302fb726d48Sopenharmony_ci   and
303fb726d48Sopenharmony_ci     B.state='Running'
304fb726d48Sopenharmony_ci   and
305fb726d48Sopenharmony_ci     not ((B.ts - TR.start_ts + iif(B.dur = -1 or B.dur is null, 0, B.dur) < ${leftNS}) 
306fb726d48Sopenharmony_ci     or (B.ts - TR.start_ts > ${rightNS}))
307fb726d48Sopenharmony_ci   order by
308fb726d48Sopenharmony_ci     ts;`,
309fb726d48Sopenharmony_ci    { $leftNS: leftNS, $rightNS: rightNS },
310fb726d48Sopenharmony_ci    { traceId: Utils.currentSelectTrace }
311fb726d48Sopenharmony_ci  );
312fb726d48Sopenharmony_ci
313fb726d48Sopenharmony_ciexport const queryThreadData = (tid: number, pid: number): Promise<Array<ThreadStruct>> =>
314fb726d48Sopenharmony_ci  query(
315fb726d48Sopenharmony_ci    'queryThreadData',
316fb726d48Sopenharmony_ci    `
317fb726d48Sopenharmony_ci    select 
318fb726d48Sopenharmony_ci      B.itid as id
319fb726d48Sopenharmony_ci     , B.tid
320fb726d48Sopenharmony_ci     , B.cpu
321fb726d48Sopenharmony_ci     , B.ts - TR.start_ts AS startTime
322fb726d48Sopenharmony_ci     , B.dur
323fb726d48Sopenharmony_ci     , B.state
324fb726d48Sopenharmony_ci     , B.pid
325fb726d48Sopenharmony_ci     , B.arg_setid as argSetID
326fb726d48Sopenharmony_cifrom thread_state AS B
327fb726d48Sopenharmony_ci    left join trace_range AS TR
328fb726d48Sopenharmony_ciwhere B.tid = $tid and B.pid = $pid;`,
329fb726d48Sopenharmony_ci    { $tid: tid, $pid: pid }
330fb726d48Sopenharmony_ci  );
331fb726d48Sopenharmony_ci
332fb726d48Sopenharmony_ciexport const queryThreadWakeUpFrom = async (itid: number, startTime: number): Promise<unknown> => {
333fb726d48Sopenharmony_ci  let sql1 = `select wakeup_from from instant where ts = ${startTime} and ref = ${itid} limit 1`;
334fb726d48Sopenharmony_ci  const result = await query('queryThreadWakeUpFrom', sql1, {}, { traceId: Utils.currentSelectTrace });
335fb726d48Sopenharmony_ci  let res: unknown = [];
336fb726d48Sopenharmony_ci  if (result && result.length > 0) { //@ts-ignore
337fb726d48Sopenharmony_ci    let wakeupFromItid = result[0].wakeup_from; // 获取wakeup_from的值  
338fb726d48Sopenharmony_ci    let sql2 = `  
339fb726d48Sopenharmony_ci            select (A.ts - B.start_ts) as ts,  
340fb726d48Sopenharmony_ci                   A.tid,  
341fb726d48Sopenharmony_ci                   A.itid,  
342fb726d48Sopenharmony_ci                   A.pid,  
343fb726d48Sopenharmony_ci                   A.cpu,  
344fb726d48Sopenharmony_ci                   A.dur,  
345fb726d48Sopenharmony_ci                   A.arg_setid as argSetID  
346fb726d48Sopenharmony_ci            from thread_state A, trace_range B  
347fb726d48Sopenharmony_ci            where A.state = 'Running'  
348fb726d48Sopenharmony_ci            and A.itid = ${wakeupFromItid}  
349fb726d48Sopenharmony_ci            and (A.ts - B.start_ts) < (${startTime} - B.start_ts)  
350fb726d48Sopenharmony_ci            order by ts desc limit 1  
351fb726d48Sopenharmony_ci          `;
352fb726d48Sopenharmony_ci    res = query('queryThreadWakeUpFrom', sql2, {}, { traceId: Utils.currentSelectTrace });
353fb726d48Sopenharmony_ci  }
354fb726d48Sopenharmony_ci  return res;
355fb726d48Sopenharmony_ci};
356fb726d48Sopenharmony_ci
357fb726d48Sopenharmony_ciexport const queryRWakeUpFrom = async (itid: number, startTime: number): Promise<unknown> => {
358fb726d48Sopenharmony_ci  let sql1 = `select wakeup_from from instant where ts = ${startTime} and ref = ${itid} limit 1`;
359fb726d48Sopenharmony_ci  const res = await query('queryRWakeUpFrom', sql1, {}, { traceId: Utils.currentSelectTrace });
360fb726d48Sopenharmony_ci  let result: unknown = [];
361fb726d48Sopenharmony_ci  if (res && res.length) {
362fb726d48Sopenharmony_ci    //@ts-ignore
363fb726d48Sopenharmony_ci    let wakeupFromItid = res[0].wakeup_from;
364fb726d48Sopenharmony_ci    let sql2 = `
365fb726d48Sopenharmony_ci      select 
366fb726d48Sopenharmony_ci        (A.ts - B.start_ts) as ts,
367fb726d48Sopenharmony_ci        A.tid,
368fb726d48Sopenharmony_ci        A.itid,
369fb726d48Sopenharmony_ci        A.arg_setid as argSetID
370fb726d48Sopenharmony_ci      from 
371fb726d48Sopenharmony_ci        thread_state A,
372fb726d48Sopenharmony_ci        trace_range B
373fb726d48Sopenharmony_ci      where 
374fb726d48Sopenharmony_ci        A.state = 'Running'
375fb726d48Sopenharmony_ci        and A.itid = ${wakeupFromItid}
376fb726d48Sopenharmony_ci        and A.ts < ${startTime}
377fb726d48Sopenharmony_ci      order by 
378fb726d48Sopenharmony_ci        ts desc 
379fb726d48Sopenharmony_ci        limit 1
380fb726d48Sopenharmony_ci    `;
381fb726d48Sopenharmony_ci    result = query('queryRWakeUpFrom', sql2, {}, { traceId: Utils.currentSelectTrace });
382fb726d48Sopenharmony_ci  }
383fb726d48Sopenharmony_ci  return result;
384fb726d48Sopenharmony_ci};
385fb726d48Sopenharmony_ciexport const queryRunnableTimeByRunning = (tid: number, startTime: number): Promise<Array<WakeupBean>> => {
386fb726d48Sopenharmony_ci  let sql = `
387fb726d48Sopenharmony_ciselect ts from thread_state,trace_range where ts + dur -start_ts = ${startTime} and state = 'R' and tid=${tid} limit 1
388fb726d48Sopenharmony_ci    `;
389fb726d48Sopenharmony_ci  return query('queryRunnableTimeByRunning', sql, {}, { traceId: Utils.currentSelectTrace });
390fb726d48Sopenharmony_ci};
391fb726d48Sopenharmony_ci
392fb726d48Sopenharmony_ciexport const queryProcessByTable = (traceId?: string): Promise<
393fb726d48Sopenharmony_ci  Array<{
394fb726d48Sopenharmony_ci    pid: number | null;
395fb726d48Sopenharmony_ci    processName: string | null;
396fb726d48Sopenharmony_ci  }>
397fb726d48Sopenharmony_ci> =>
398fb726d48Sopenharmony_ci  query(
399fb726d48Sopenharmony_ci    'queryProcessByTable',
400fb726d48Sopenharmony_ci    `
401fb726d48Sopenharmony_ci    SELECT
402fb726d48Sopenharmony_ci      pid, name as processName
403fb726d48Sopenharmony_ci    FROM
404fb726d48Sopenharmony_ci      process where pid != 0`,
405fb726d48Sopenharmony_ci    {},
406fb726d48Sopenharmony_ci    { traceId: traceId }
407fb726d48Sopenharmony_ci  );
408fb726d48Sopenharmony_ci
409fb726d48Sopenharmony_ciexport const getTabStartups = (
410fb726d48Sopenharmony_ci  ids: Array<number>,
411fb726d48Sopenharmony_ci  leftNS: number,
412fb726d48Sopenharmony_ci  rightNS: number
413fb726d48Sopenharmony_ci): //@ts-ignore
414fb726d48Sopenharmony_ci  Promise<Array<unknown>> => {
415fb726d48Sopenharmony_ci  let sql = `
416fb726d48Sopenharmony_ciselect
417fb726d48Sopenharmony_ci    P.pid,
418fb726d48Sopenharmony_ci    P.name as process,
419fb726d48Sopenharmony_ci    (A.start_time - B.start_ts) as startTs,
420fb726d48Sopenharmony_ci    (case when A.end_time = -1 then 0 else (A.end_time - A.start_time) end) as dur,
421fb726d48Sopenharmony_ci    A.start_name as startName
422fb726d48Sopenharmony_cifrom app_startup A,trace_range B
423fb726d48Sopenharmony_cileft join process P on A.ipid = P.ipid
424fb726d48Sopenharmony_ciwhere P.pid in (${ids.join(',')}) 
425fb726d48Sopenharmony_ciand not ((startTs + dur < ${leftNS}) or (startTs > ${rightNS}))
426fb726d48Sopenharmony_ciorder by start_name;`;
427fb726d48Sopenharmony_ci  return query('getTabStartups', sql, {});
428fb726d48Sopenharmony_ci};
429fb726d48Sopenharmony_ci
430fb726d48Sopenharmony_ciexport const getTabStaticInit = (
431fb726d48Sopenharmony_ci  ids: Array<number>,
432fb726d48Sopenharmony_ci  leftNS: number,
433fb726d48Sopenharmony_ci  rightNS: number
434fb726d48Sopenharmony_ci): //@ts-ignore
435fb726d48Sopenharmony_ci  Promise<Array<unknown>> => {
436fb726d48Sopenharmony_ci  let sql = `
437fb726d48Sopenharmony_ciselect
438fb726d48Sopenharmony_ci    P.pid,
439fb726d48Sopenharmony_ci    P.name as process,
440fb726d48Sopenharmony_ci    (A.start_time - B.start_ts) as startTs,
441fb726d48Sopenharmony_ci    (case when A.end_time = -1 then 0 else (A.end_time - A.start_time) end) as dur,
442fb726d48Sopenharmony_ci    A.so_name as soName
443fb726d48Sopenharmony_cifrom static_initalize A,trace_range B
444fb726d48Sopenharmony_cileft join process P on A.ipid = P.ipid
445fb726d48Sopenharmony_ciwhere P.pid in (${ids.join(',')}) 
446fb726d48Sopenharmony_ciand not ((startTs + dur < ${leftNS}) or (startTs > ${rightNS}))
447fb726d48Sopenharmony_ciorder by dur desc;`;
448fb726d48Sopenharmony_ci  return query('getTabStaticInit', sql, {});
449fb726d48Sopenharmony_ci};
450fb726d48Sopenharmony_ci
451fb726d48Sopenharmony_ciexport const queryBinderArgsByArgset = (argset: number): Promise<Array<BinderArgBean>> =>
452fb726d48Sopenharmony_ci  query(
453fb726d48Sopenharmony_ci    'queryBinderArgsByArgset',
454fb726d48Sopenharmony_ci    `
455fb726d48Sopenharmony_ci    select
456fb726d48Sopenharmony_ci      *
457fb726d48Sopenharmony_ci    from
458fb726d48Sopenharmony_ci      args_view
459fb726d48Sopenharmony_ci    where
460fb726d48Sopenharmony_ci      argset = $argset;`,
461fb726d48Sopenharmony_ci    { $argset: argset },
462fb726d48Sopenharmony_ci    { traceId: Utils.currentSelectTrace }
463fb726d48Sopenharmony_ci  );
464fb726d48Sopenharmony_ci
465fb726d48Sopenharmony_ciexport const queryProcessData = (
466fb726d48Sopenharmony_ci  pid: number,
467fb726d48Sopenharmony_ci  startNS: number,
468fb726d48Sopenharmony_ci  endNS: number
469fb726d48Sopenharmony_ci): //@ts-ignore
470fb726d48Sopenharmony_ci  Promise<Array<unknown>> =>
471fb726d48Sopenharmony_ci  query(
472fb726d48Sopenharmony_ci    'queryProcessData',
473fb726d48Sopenharmony_ci    `
474fb726d48Sopenharmony_ci    select  ta.cpu,
475fb726d48Sopenharmony_ci        dur, 
476fb726d48Sopenharmony_ci        ts-${window.recordStartNS} as startTime
477fb726d48Sopenharmony_cifrom thread_state ta
478fb726d48Sopenharmony_ciwhere ta.cpu is not null and pid=$pid and startTime between $startNS and $endNS;`,
479fb726d48Sopenharmony_ci    {
480fb726d48Sopenharmony_ci      $pid: pid,
481fb726d48Sopenharmony_ci      $startNS: startNS,
482fb726d48Sopenharmony_ci      $endNS: endNS,
483fb726d48Sopenharmony_ci    }
484fb726d48Sopenharmony_ci  );
485fb726d48Sopenharmony_ci
486fb726d48Sopenharmony_ciexport const queryProcessMem = (): //@ts-ignore
487fb726d48Sopenharmony_ci  Promise<Array<unknown>> =>
488fb726d48Sopenharmony_ci  query(
489fb726d48Sopenharmony_ci    'queryProcessMem',
490fb726d48Sopenharmony_ci    `
491fb726d48Sopenharmony_ci    select
492fb726d48Sopenharmony_ci      process_measure_filter.id as trackId,
493fb726d48Sopenharmony_ci      process_measure_filter.name as trackName,
494fb726d48Sopenharmony_ci      ipid as upid,
495fb726d48Sopenharmony_ci      process.pid,
496fb726d48Sopenharmony_ci      process.name as processName
497fb726d48Sopenharmony_ci    from
498fb726d48Sopenharmony_ci      process_measure_filter
499fb726d48Sopenharmony_ci    join
500fb726d48Sopenharmony_ci      process using (ipid)
501fb726d48Sopenharmony_ci    order by trackName;`
502fb726d48Sopenharmony_ci  );
503fb726d48Sopenharmony_ci
504fb726d48Sopenharmony_ciexport const queryProcessThreadDataCount = (): //@ts-ignore
505fb726d48Sopenharmony_ci  Promise<Array<unknown>> =>
506fb726d48Sopenharmony_ci  query(
507fb726d48Sopenharmony_ci    'queryProcessThreadDataCount',
508fb726d48Sopenharmony_ci    `select pid,count(id) as count 
509fb726d48Sopenharmony_ci    from thread_state 
510fb726d48Sopenharmony_ci    where ts between ${window.recordStartNS} and ${window.recordEndNS} group by pid;`,
511fb726d48Sopenharmony_ci    {}
512fb726d48Sopenharmony_ci  );
513fb726d48Sopenharmony_ci
514fb726d48Sopenharmony_ciexport const queryProcessFuncDataCount = (): //@ts-ignore
515fb726d48Sopenharmony_ci  Promise<Array<unknown>> =>
516fb726d48Sopenharmony_ci  query(
517fb726d48Sopenharmony_ci    'queryProcessFuncDataCount',
518fb726d48Sopenharmony_ci    `select
519fb726d48Sopenharmony_ci        P.pid,
520fb726d48Sopenharmony_ci        count(tid) as count
521fb726d48Sopenharmony_ci    from callstack C
522fb726d48Sopenharmony_ci    left join thread A on A.id = C.callid
523fb726d48Sopenharmony_ci    left join process AS P on P.id = A.ipid
524fb726d48Sopenharmony_ci    where  C.ts between ${window.recordStartNS} and ${window.recordEndNS} 
525fb726d48Sopenharmony_ci    group by pid;`,
526fb726d48Sopenharmony_ci    {}
527fb726d48Sopenharmony_ci  );
528fb726d48Sopenharmony_ci
529fb726d48Sopenharmony_ciexport const queryProcessMemDataCount = (): //@ts-ignore
530fb726d48Sopenharmony_ci  Promise<Array<unknown>> =>
531fb726d48Sopenharmony_ci  query(
532fb726d48Sopenharmony_ci    'queryProcessMemDataCount',
533fb726d48Sopenharmony_ci    `select
534fb726d48Sopenharmony_ci      p.pid as pid, count(value) count
535fb726d48Sopenharmony_ci    from process_measure c
536fb726d48Sopenharmony_ci    left join process_measure_filter f on f.id = c.filter_id
537fb726d48Sopenharmony_ci    left join process p on p.ipid = f.ipid
538fb726d48Sopenharmony_ciwhere f.id not NULL and value>0 
539fb726d48Sopenharmony_ci and c.ts between ${window.recordStartNS} and ${window.recordEndNS}
540fb726d48Sopenharmony_cigroup by p.pid`,
541fb726d48Sopenharmony_ci    {}
542fb726d48Sopenharmony_ci  );
543fb726d48Sopenharmony_ci
544fb726d48Sopenharmony_ciexport const queryProcessMemData = (trackId: number): Promise<Array<ProcessMemStruct>> =>
545fb726d48Sopenharmony_ci  query(
546fb726d48Sopenharmony_ci    'queryProcessMemData',
547fb726d48Sopenharmony_ci    `
548fb726d48Sopenharmony_ci    select
549fb726d48Sopenharmony_ci      c.type,
550fb726d48Sopenharmony_ci      ts,
551fb726d48Sopenharmony_ci      value,
552fb726d48Sopenharmony_ci      filter_id as track_id,
553fb726d48Sopenharmony_ci      c.ts-tb.start_ts startTime
554fb726d48Sopenharmony_ci    from
555fb726d48Sopenharmony_ci      process_measure c,
556fb726d48Sopenharmony_ci      trace_range tb
557fb726d48Sopenharmony_ci    where
558fb726d48Sopenharmony_ci      filter_id = $id;`,
559fb726d48Sopenharmony_ci    { $id: trackId }
560fb726d48Sopenharmony_ci  );
561fb726d48Sopenharmony_ci
562fb726d48Sopenharmony_ciexport const queryThreads = (): //@ts-ignore
563fb726d48Sopenharmony_ci  Promise<Array<unknown>> =>
564fb726d48Sopenharmony_ci  query('queryThreads', `select id,tid,(ifnull(name,'Thread') || '(' || tid || ')') name from thread where id != 0;`);
565fb726d48Sopenharmony_ci
566fb726d48Sopenharmony_ciexport const queryDataDICT = async (): Promise<Array<unknown>> => {
567fb726d48Sopenharmony_ci  let dataDictBuffer = await query(
568fb726d48Sopenharmony_ci    'queryDataDICT',
569fb726d48Sopenharmony_ci    'select * from data_dict;',
570fb726d48Sopenharmony_ci    {},
571fb726d48Sopenharmony_ci    { action: 'exec-buf' }
572fb726d48Sopenharmony_ci  );
573fb726d48Sopenharmony_ci  // @ts-ignore
574fb726d48Sopenharmony_ci  return Utils.convertJSON(dataDictBuffer);
575fb726d48Sopenharmony_ci};
576fb726d48Sopenharmony_ci
577fb726d48Sopenharmony_ciexport const queryAppStartupProcessIds = (): Promise<Array<{ pid: number }>> =>
578fb726d48Sopenharmony_ci  query(
579fb726d48Sopenharmony_ci    'queryAppStartupProcessIds',
580fb726d48Sopenharmony_ci    `
581fb726d48Sopenharmony_ci  SELECT pid FROM process 
582fb726d48Sopenharmony_ci  WHERE ipid IN (
583fb726d48Sopenharmony_ci    SELECT ipid FROM app_startup 
584fb726d48Sopenharmony_ci    UNION
585fb726d48Sopenharmony_ci    SELECT t.ipid FROM app_startup a LEFT JOIN thread t ON a.call_id = t.itid 
586fb726d48Sopenharmony_ci);`
587fb726d48Sopenharmony_ci  );
588fb726d48Sopenharmony_ci
589fb726d48Sopenharmony_ciexport const queryTaskPoolProcessIds = (): Promise<Array<{ pid: number }>> =>
590fb726d48Sopenharmony_ci  query(
591fb726d48Sopenharmony_ci    'queryAppStartupProcessIds',
592fb726d48Sopenharmony_ci    `SELECT pid 
593fb726d48Sopenharmony_ciFROM
594fb726d48Sopenharmony_ci    process 
595fb726d48Sopenharmony_ciWHERE
596fb726d48Sopenharmony_ci    ipid IN (
597fb726d48Sopenharmony_ci    SELECT DISTINCT
598fb726d48Sopenharmony_ci    ( ipid ) 
599fb726d48Sopenharmony_ci    FROM
600fb726d48Sopenharmony_ci    thread 
601fb726d48Sopenharmony_ci    WHERE
602fb726d48Sopenharmony_ci    itid IN ( SELECT DISTINCT ( callid ) FROM callstack WHERE name LIKE 'H:Task%' ) 
603fb726d48Sopenharmony_ci    AND name = 'TaskWorkThread' 
604fb726d48Sopenharmony_ci    )`
605fb726d48Sopenharmony_ci  );
606fb726d48Sopenharmony_ci
607fb726d48Sopenharmony_ciexport const queryProcessContentCount = (traceId?: string): Promise<Array<unknown>> =>
608fb726d48Sopenharmony_ci  query(
609fb726d48Sopenharmony_ci    `queryProcessContentCount`,
610fb726d48Sopenharmony_ci    `select 
611fb726d48Sopenharmony_ci    pid,
612fb726d48Sopenharmony_ci    switch_count,
613fb726d48Sopenharmony_ci    thread_count,
614fb726d48Sopenharmony_ci    slice_count,
615fb726d48Sopenharmony_ci    mem_count 
616fb726d48Sopenharmony_ci    from process;`,
617fb726d48Sopenharmony_ci    {},
618fb726d48Sopenharmony_ci    { traceId: traceId }
619fb726d48Sopenharmony_ci  );
620fb726d48Sopenharmony_ci
621fb726d48Sopenharmony_ciexport const queryProcessThreadsByTable = (traceId?: string): Promise<Array<ThreadStruct>> =>
622fb726d48Sopenharmony_ci  query(
623fb726d48Sopenharmony_ci    'queryProcessThreadsByTable',
624fb726d48Sopenharmony_ci    `
625fb726d48Sopenharmony_ci        select 
626fb726d48Sopenharmony_ci        p.pid as pid,
627fb726d48Sopenharmony_ci        p.ipid as upid,
628fb726d48Sopenharmony_ci        t.tid as tid,
629fb726d48Sopenharmony_ci        p.name as processName,
630fb726d48Sopenharmony_ci        t.name as threadName,
631fb726d48Sopenharmony_ci        t.switch_count as switchCount, 
632fb726d48Sopenharmony_ci        t.itid as utid 
633fb726d48Sopenharmony_ci        from 
634fb726d48Sopenharmony_ci        thread t left join process  p on t.ipid = p.id where t.tid != 0`,
635fb726d48Sopenharmony_ci    {},
636fb726d48Sopenharmony_ci    { traceId: traceId }
637fb726d48Sopenharmony_ci  );
638fb726d48Sopenharmony_ci
639fb726d48Sopenharmony_ciexport const queryStartupPidArray = (): Promise<Array<{ pid: number }>> =>
640fb726d48Sopenharmony_ci  query(
641fb726d48Sopenharmony_ci    'queryStartupPidArray',
642fb726d48Sopenharmony_ci    `
643fb726d48Sopenharmony_ci    select distinct pid 
644fb726d48Sopenharmony_cifrom app_startup A,trace_range B left join process P on A.ipid = p.ipid
645fb726d48Sopenharmony_ciwhere A.start_time between B.start_ts and B.end_ts;`,
646fb726d48Sopenharmony_ci    {}
647fb726d48Sopenharmony_ci  );
648fb726d48Sopenharmony_ci
649fb726d48Sopenharmony_ciexport const queryProcessStartup = (pid: number): Promise<Array<AppStartupStruct>> =>
650fb726d48Sopenharmony_ci  query(
651fb726d48Sopenharmony_ci    'queryProcessStartup',
652fb726d48Sopenharmony_ci    `
653fb726d48Sopenharmony_ci    select
654fb726d48Sopenharmony_ci    P.pid,
655fb726d48Sopenharmony_ci    A.tid,
656fb726d48Sopenharmony_ci    A.call_id as itid,
657fb726d48Sopenharmony_ci    (case when A.start_time < B.start_ts then 0 else (A.start_time - B.start_ts) end) as startTs,
658fb726d48Sopenharmony_ci    (case 
659fb726d48Sopenharmony_ci        when A.start_time < B.start_ts then (A.end_time - B.start_ts) 
660fb726d48Sopenharmony_ci        when A.end_time = -1 then 0
661fb726d48Sopenharmony_ci        else (A.end_time - A.start_time) end) as dur,
662fb726d48Sopenharmony_ci    A.start_name as startName
663fb726d48Sopenharmony_cifrom app_startup A,trace_range B
664fb726d48Sopenharmony_cileft join process P on A.ipid = P.ipid
665fb726d48Sopenharmony_ciwhere P.pid = $pid
666fb726d48Sopenharmony_ciorder by start_name;`,
667fb726d48Sopenharmony_ci    { $pid: pid }
668fb726d48Sopenharmony_ci  );
669fb726d48Sopenharmony_ci
670fb726d48Sopenharmony_ciexport const queryProcessAllAppStartup = (pids: Array<number>): Promise<Array<AppStartupStruct>> =>
671fb726d48Sopenharmony_ci  query(
672fb726d48Sopenharmony_ci    'queryProcessStartup',
673fb726d48Sopenharmony_ci    `
674fb726d48Sopenharmony_ci    select
675fb726d48Sopenharmony_ci    P.pid,
676fb726d48Sopenharmony_ci    A.tid,
677fb726d48Sopenharmony_ci    A.call_id as itid,
678fb726d48Sopenharmony_ci    (case when A.start_time < B.start_ts then 0 else (A.start_time - B.start_ts) end) as startTs,
679fb726d48Sopenharmony_ci    (case 
680fb726d48Sopenharmony_ci        when A.start_time < B.start_ts then (A.end_time - B.start_ts) 
681fb726d48Sopenharmony_ci        when A.end_time = -1 then 0
682fb726d48Sopenharmony_ci        else (A.end_time - A.start_time) end) as dur,
683fb726d48Sopenharmony_ci    A.start_name as startName
684fb726d48Sopenharmony_cifrom app_startup A,trace_range B
685fb726d48Sopenharmony_cileft join process P on A.ipid = P.ipid
686fb726d48Sopenharmony_ciwhere P.pid in(${pids.join(',')}) 
687fb726d48Sopenharmony_ciorder by start_name;`,
688fb726d48Sopenharmony_ci    { $pid: pids }
689fb726d48Sopenharmony_ci  );
690fb726d48Sopenharmony_ci
691fb726d48Sopenharmony_ciexport const querySingleAppStartupsName = (
692fb726d48Sopenharmony_ci  pid: number
693fb726d48Sopenharmony_ci): //@ts-ignore
694fb726d48Sopenharmony_ci  Promise<Array<unknown>> =>
695fb726d48Sopenharmony_ci  query(
696fb726d48Sopenharmony_ci    'queryAllAppStartupsName',
697fb726d48Sopenharmony_ci    `select name from process
698fb726d48Sopenharmony_ci    where pid=$pid`,
699fb726d48Sopenharmony_ci    { $pid: pid }
700fb726d48Sopenharmony_ci  );
701fb726d48Sopenharmony_ci
702fb726d48Sopenharmony_ciexport const queryProcessSoMaxDepth = (): Promise<Array<{ pid: number; maxDepth: number }>> =>
703fb726d48Sopenharmony_ci  query(
704fb726d48Sopenharmony_ci    'queryProcessSoMaxDepth',
705fb726d48Sopenharmony_ci    `select p.pid,max(depth) maxDepth 
706fb726d48Sopenharmony_cifrom static_initalize S,trace_range B left join process p on S.ipid = p.ipid 
707fb726d48Sopenharmony_ciwhere S.start_time between B.start_ts and B.end_ts
708fb726d48Sopenharmony_cigroup by p.pid;`,
709fb726d48Sopenharmony_ci    {}
710fb726d48Sopenharmony_ci  );
711fb726d48Sopenharmony_ciexport const queryAllThreadName = (): //@ts-ignore
712fb726d48Sopenharmony_ci  Promise<Array<unknown>> => {
713fb726d48Sopenharmony_ci  return query(
714fb726d48Sopenharmony_ci    'queryAllThreadName',
715fb726d48Sopenharmony_ci    `
716fb726d48Sopenharmony_ci          select name,tid from thread;`
717fb726d48Sopenharmony_ci  );
718fb726d48Sopenharmony_ci};
719fb726d48Sopenharmony_ci
720fb726d48Sopenharmony_ciexport const queryAllProcessNames = (): //@ts-ignore
721fb726d48Sopenharmony_ci  Promise<Array<unknown>> => {
722fb726d48Sopenharmony_ci  return query(
723fb726d48Sopenharmony_ci    'queryAllProcessNames',
724fb726d48Sopenharmony_ci    `
725fb726d48Sopenharmony_ci        select id, name, pid from process;`
726fb726d48Sopenharmony_ci  );
727fb726d48Sopenharmony_ci};
728fb726d48Sopenharmony_ci
729fb726d48Sopenharmony_ciexport const queryRsProcess = (): //@ts-ignore
730fb726d48Sopenharmony_ci  Promise<Array<unknown>> => {
731fb726d48Sopenharmony_ci  return query(
732fb726d48Sopenharmony_ci    'queryRsProcess',
733fb726d48Sopenharmony_ci    `
734fb726d48Sopenharmony_ci        SELECT p.pid FROM process p WHERE p.ipid = (SELECT t.ipid FROM thread t WHERE t.itid IN 
735fb726d48Sopenharmony_ci        ( SELECT c.callid FROM callstack c WHERE name LIKE '%H:RSMainThread::DoComposition%' LIMIT 1 ) 
736fb726d48Sopenharmony_ci      LIMIT 1 
737fb726d48Sopenharmony_ci      )`
738fb726d48Sopenharmony_ci  );
739fb726d48Sopenharmony_ci};
740fb726d48Sopenharmony_ci
741fb726d48Sopenharmony_ciexport const queryProcessSoInitData = (pid: number): Promise<Array<SoStruct>> =>
742fb726d48Sopenharmony_ci  query(
743fb726d48Sopenharmony_ci    'queryProcessSoInitData',
744fb726d48Sopenharmony_ci    `
745fb726d48Sopenharmony_ci    select
746fb726d48Sopenharmony_ci    P.pid,
747fb726d48Sopenharmony_ci    T.tid,
748fb726d48Sopenharmony_ci    A.call_id as itid,
749fb726d48Sopenharmony_ci    (A.start_time - B.start_ts) as startTs,
750fb726d48Sopenharmony_ci    (A.end_time - A.start_time) as dur,
751fb726d48Sopenharmony_ci    A.so_name as soName,
752fb726d48Sopenharmony_ci    A.depth
753fb726d48Sopenharmony_cifrom static_initalize A,trace_range B
754fb726d48Sopenharmony_cileft join process P on A.ipid = P.ipid
755fb726d48Sopenharmony_cileft join thread T on A.call_id = T.itid
756fb726d48Sopenharmony_ciwhere P.pid = $pid;`,
757fb726d48Sopenharmony_ci    { $pid: pid }
758fb726d48Sopenharmony_ci  );
759fb726d48Sopenharmony_ci
760fb726d48Sopenharmony_ciexport const queryThreadAndProcessName = (traceId?: string): //@ts-ignore
761fb726d48Sopenharmony_ci  Promise<Array<unknown>> =>
762fb726d48Sopenharmony_ci  query(
763fb726d48Sopenharmony_ci    'queryThreadAndProcessName',
764fb726d48Sopenharmony_ci    `
765fb726d48Sopenharmony_ci    select tid id,name,'t' type from thread
766fb726d48Sopenharmony_ciunion all
767fb726d48Sopenharmony_ciselect pid id,name,'p' type from process;`,
768fb726d48Sopenharmony_ci    {},
769fb726d48Sopenharmony_ci    { traceId: traceId }
770fb726d48Sopenharmony_ci  );
771fb726d48Sopenharmony_ci
772fb726d48Sopenharmony_ciexport const queryThreadStateArgs = (argset: number): Promise<Array<BinderArgBean>> =>
773fb726d48Sopenharmony_ci  query('queryThreadStateArgs',
774fb726d48Sopenharmony_ci    `select args_view.* from args_view where argset = ${argset}`, {}, {
775fb726d48Sopenharmony_ci    traceId: Utils.currentSelectTrace
776fb726d48Sopenharmony_ci  });
777fb726d48Sopenharmony_ci
778fb726d48Sopenharmony_ciexport const queryThreadStateArgsByName = (key: string, traceId?: string):
779fb726d48Sopenharmony_ci  Promise<Array<{ argset: number; strValue: string }>> =>
780fb726d48Sopenharmony_ci  query(
781fb726d48Sopenharmony_ci    'queryThreadStateArgsByName',
782fb726d48Sopenharmony_ci    `select 
783fb726d48Sopenharmony_ci    strValue, 
784fb726d48Sopenharmony_ci    argset 
785fb726d48Sopenharmony_ci    from args_view where keyName = $key`,
786fb726d48Sopenharmony_ci    { $key: key },
787fb726d48Sopenharmony_ci    { traceId: traceId }
788fb726d48Sopenharmony_ci  );
789fb726d48Sopenharmony_ci
790fb726d48Sopenharmony_ciexport const queryArgsById = (key: string, traceId?: string):
791fb726d48Sopenharmony_ci  Promise<Array<{ id: number }>> =>
792fb726d48Sopenharmony_ci  query(
793fb726d48Sopenharmony_ci    'queryArgsById',
794fb726d48Sopenharmony_ci    `select
795fb726d48Sopenharmony_ci    id 
796fb726d48Sopenharmony_ci    from data_dict 
797fb726d48Sopenharmony_ci    WHERE data = $key`,
798fb726d48Sopenharmony_ci    { $key: key },
799fb726d48Sopenharmony_ci    { traceId: traceId }
800fb726d48Sopenharmony_ci  );
801fb726d48Sopenharmony_ci
802fb726d48Sopenharmony_ciexport const queryThreadStateArgsById = (id: number, traceId?: string):
803fb726d48Sopenharmony_ci  Promise<Array<{ argset: number; strValue: string }>> =>
804fb726d48Sopenharmony_ci  query(
805fb726d48Sopenharmony_ci    'queryThreadStateArgsById',
806fb726d48Sopenharmony_ci    `select
807fb726d48Sopenharmony_ci    A.argset,
808fb726d48Sopenharmony_ci    DD.data as strValue
809fb726d48Sopenharmony_ci    from 
810fb726d48Sopenharmony_ci    (select argset,value 
811fb726d48Sopenharmony_ci    from args where key = $id) as A left join data_dict as DD
812fb726d48Sopenharmony_ci    on DD.id = A.value
813fb726d48Sopenharmony_ci    `,
814fb726d48Sopenharmony_ci    { $id: id },
815fb726d48Sopenharmony_ci    { traceId: traceId }
816fb726d48Sopenharmony_ci  );
817fb726d48Sopenharmony_ci
818fb726d48Sopenharmony_ciexport const queryThreadWakeUp = (itid: number, startTime: number, dur: number):
819fb726d48Sopenharmony_ci  Promise<Array<WakeupBean>> =>
820fb726d48Sopenharmony_ci  query(
821fb726d48Sopenharmony_ci    'queryThreadWakeUp',
822fb726d48Sopenharmony_ci    `
823fb726d48Sopenharmony_ciselect TA.tid,min(TA.ts - TR.start_ts) as ts,TA.pid,TA.dur,TA.state,TA.cpu,TA.itid,TA.arg_setid as argSetID
824fb726d48Sopenharmony_cifrom
825fb726d48Sopenharmony_ci  (select min(ts) as wakeTs,ref as itid from instant,trace_range
826fb726d48Sopenharmony_ci       where name = 'sched_wakeup'
827fb726d48Sopenharmony_ci       and wakeup_from = $itid
828fb726d48Sopenharmony_ci       and ts > start_ts + $startTime
829fb726d48Sopenharmony_ci       and ts < start_ts + $startTime + $dur
830fb726d48Sopenharmony_ci      group by ref
831fb726d48Sopenharmony_ci       ) TW
832fb726d48Sopenharmony_cileft join thread_state TA on TW.itid = TA.itid
833fb726d48Sopenharmony_cileft join trace_range TR
834fb726d48Sopenharmony_ciwhere TA.ts > TW.wakeTs
835fb726d48Sopenharmony_cigroup by TA.tid,TA.pid;
836fb726d48Sopenharmony_ci    `,
837fb726d48Sopenharmony_ci    { $itid: itid, $startTime: startTime, $dur: dur },
838fb726d48Sopenharmony_ci    { traceId: Utils.currentSelectTrace }
839fb726d48Sopenharmony_ci  );
840fb726d48Sopenharmony_ci
841fb726d48Sopenharmony_ciexport const getTabRunningPercent = (
842fb726d48Sopenharmony_ci  tIds: Array<number>,
843fb726d48Sopenharmony_ci  pIds: Array<number>,
844fb726d48Sopenharmony_ci  leftNS: number,
845fb726d48Sopenharmony_ci  rightNS: number
846fb726d48Sopenharmony_ci): Promise<
847fb726d48Sopenharmony_ci  Array<{
848fb726d48Sopenharmony_ci    pid: number;
849fb726d48Sopenharmony_ci    tid: number;
850fb726d48Sopenharmony_ci    cpu: number;
851fb726d48Sopenharmony_ci    dur: number;
852fb726d48Sopenharmony_ci    ts: number;
853fb726d48Sopenharmony_ci    process: string;
854fb726d48Sopenharmony_ci    thread: string;
855fb726d48Sopenharmony_ci  }>
856fb726d48Sopenharmony_ci> =>
857fb726d48Sopenharmony_ci  query(
858fb726d48Sopenharmony_ci    'getTabRunningPercent',
859fb726d48Sopenharmony_ci    `
860fb726d48Sopenharmony_ci          select
861fb726d48Sopenharmony_ci            B.pid,
862fb726d48Sopenharmony_ci            B.tid,
863fb726d48Sopenharmony_ci            B.cpu,
864fb726d48Sopenharmony_ci            B.dur,
865fb726d48Sopenharmony_ci            B.ts
866fb726d48Sopenharmony_ci          from
867fb726d48Sopenharmony_ci            thread_state AS B
868fb726d48Sopenharmony_ci          left join 
869fb726d48Sopenharmony_ci            trace_range AS TR
870fb726d48Sopenharmony_ci          where
871fb726d48Sopenharmony_ci            B.tid in (${tIds.join(',')})
872fb726d48Sopenharmony_ci          and
873fb726d48Sopenharmony_ci            B.state='Running'
874fb726d48Sopenharmony_ci          and
875fb726d48Sopenharmony_ci            B.pid in (${pIds.join(',')})
876fb726d48Sopenharmony_ci          and
877fb726d48Sopenharmony_ci            not ((B.ts - TR.start_ts + ifnull(B.dur,0) < ${leftNS}) or (B.ts - TR.start_ts > ${rightNS}))
878fb726d48Sopenharmony_ci          order by ts
879fb726d48Sopenharmony_ci       `,
880fb726d48Sopenharmony_ci    {},
881fb726d48Sopenharmony_ci    { traceId: Utils.currentSelectTrace }
882fb726d48Sopenharmony_ci  );
883fb726d48Sopenharmony_ci
884fb726d48Sopenharmony_ci//VM  Purgeable 点选 tab页
885fb726d48Sopenharmony_ciexport const queryProcessPurgeableSelectionTab = (
886fb726d48Sopenharmony_ci  startNs: number,
887fb726d48Sopenharmony_ci  ipid: number,
888fb726d48Sopenharmony_ci  isPin?: boolean
889fb726d48Sopenharmony_ci): //@ts-ignore
890fb726d48Sopenharmony_ci  Promise<Array<unknown>> => {
891fb726d48Sopenharmony_ci  const condition = isPin ? "'mem.purg_pin'" : "'mem.purg_sum'";
892fb726d48Sopenharmony_ci  const pinSql = isPin ? ' AND ref_count > 0' : '';
893fb726d48Sopenharmony_ci  return query(
894fb726d48Sopenharmony_ci    'queryProcessPurgeableSelectionTab',
895fb726d48Sopenharmony_ci    `SELECT
896fb726d48Sopenharmony_ci        ( CASE WHEN f.name = 'mem.purg_pin' THEN 'PinedPurg' ELSE 'TotalPurg' END ) AS name,
897fb726d48Sopenharmony_ci        SUM( m.value )  AS value 
898fb726d48Sopenharmony_ci    FROM
899fb726d48Sopenharmony_ci        process_measure m,
900fb726d48Sopenharmony_ci        trace_range tr
901fb726d48Sopenharmony_ci        left join process_measure_filter f on f.id = m.filter_id 
902fb726d48Sopenharmony_ci    WHERE
903fb726d48Sopenharmony_ci        f.name = ${condition} 
904fb726d48Sopenharmony_ci        AND m.ts - tr.start_ts = ${startNs}
905fb726d48Sopenharmony_ci    AND f.ipid = ${ipid}
906fb726d48Sopenharmony_ci    GROUP BY m.ts
907fb726d48Sopenharmony_ci    UNION
908fb726d48Sopenharmony_ci    SELECT
909fb726d48Sopenharmony_ci        'ShmPurg' AS name,
910fb726d48Sopenharmony_ci        SUM( pss ) AS size
911fb726d48Sopenharmony_ci    FROM
912fb726d48Sopenharmony_ci        memory_ashmem,
913fb726d48Sopenharmony_ci        trace_range tr
914fb726d48Sopenharmony_ci    WHERE
915fb726d48Sopenharmony_ci        ipid = ${ipid}
916fb726d48Sopenharmony_ci        AND ts - tr.start_ts = ${startNs}
917fb726d48Sopenharmony_ci        AND flag = 0
918fb726d48Sopenharmony_ci        ${pinSql}
919fb726d48Sopenharmony_ci    GROUP BY ts`
920fb726d48Sopenharmony_ci  );
921fb726d48Sopenharmony_ci};
922fb726d48Sopenharmony_ci///////////////////////////////////////////////
923fb726d48Sopenharmony_ci//VM  Purgeable 框选 tab页
924fb726d48Sopenharmony_ciexport const queryProcessPurgeableTab = (
925fb726d48Sopenharmony_ci  leftNs: number,
926fb726d48Sopenharmony_ci  rightNs: number,
927fb726d48Sopenharmony_ci  dur: number,
928fb726d48Sopenharmony_ci  ipid: number,
929fb726d48Sopenharmony_ci  isPin?: boolean
930fb726d48Sopenharmony_ci): //@ts-ignore
931fb726d48Sopenharmony_ci  Promise<Array<unknown>> => {
932fb726d48Sopenharmony_ci  const pinSql = isPin ? ' AND ref_count > 0' : '';
933fb726d48Sopenharmony_ci  let filterSql = isPin ? "'mem.purg_pin'" : "'mem.purg_sum'";
934fb726d48Sopenharmony_ci  return query(
935fb726d48Sopenharmony_ci    'queryProcessPurgeableTab',
936fb726d48Sopenharmony_ci    `SELECT name, MAX(size) AS maxSize, MIN(size) AS minSize, AVG(size) AS avgSize
937fb726d48Sopenharmony_ci    FROM
938fb726d48Sopenharmony_ci      (SELECT
939fb726d48Sopenharmony_ci        'ShmPurg' AS name, ts - tr.start_ts AS startTs, SUM( pss ) AS size
940fb726d48Sopenharmony_ci      FROM
941fb726d48Sopenharmony_ci        memory_ashmem,
942fb726d48Sopenharmony_ci        trace_range tr
943fb726d48Sopenharmony_ci      WHERE
944fb726d48Sopenharmony_ci        ipid = ${ipid}
945fb726d48Sopenharmony_ci        AND flag = 0
946fb726d48Sopenharmony_ci        ${pinSql}
947fb726d48Sopenharmony_ci      GROUP BY ts
948fb726d48Sopenharmony_ci      UNION
949fb726d48Sopenharmony_ci      SELECT
950fb726d48Sopenharmony_ci      CASE
951fb726d48Sopenharmony_ci          WHEN f.name = 'mem.purg_pin' THEN
952fb726d48Sopenharmony_ci          'PinedPurg' ELSE 'TotalPurg'
953fb726d48Sopenharmony_ci        END AS name,
954fb726d48Sopenharmony_ci        m.ts - tr.start_ts AS startTs,
955fb726d48Sopenharmony_ci        sum( m.value ) AS size
956fb726d48Sopenharmony_ci      FROM
957fb726d48Sopenharmony_ci        process_measure m,
958fb726d48Sopenharmony_ci        trace_range tr
959fb726d48Sopenharmony_ci        LEFT JOIN process_measure_filter f ON f.id = m.filter_id 
960fb726d48Sopenharmony_ci      WHERE f.name = ${filterSql}
961fb726d48Sopenharmony_ci        AND f.ipid = ${ipid}
962fb726d48Sopenharmony_ci      GROUP BY m.ts
963fb726d48Sopenharmony_ci    ) combined_data, trace_range tr
964fb726d48Sopenharmony_ci    WHERE ${leftNs} <= startTs + ${dur} AND ${rightNs} >= startTs
965fb726d48Sopenharmony_ci    GROUP BY name`
966fb726d48Sopenharmony_ci  );
967fb726d48Sopenharmony_ci};
968fb726d48Sopenharmony_ciexport const getTabPowerDetailsData = (
969fb726d48Sopenharmony_ci  leftNs: number,
970fb726d48Sopenharmony_ci  rightNs: number
971fb726d48Sopenharmony_ci): Promise<
972fb726d48Sopenharmony_ci  Array<{
973fb726d48Sopenharmony_ci    startNS: number;
974fb726d48Sopenharmony_ci    eventName: string;
975fb726d48Sopenharmony_ci    appKey: string;
976fb726d48Sopenharmony_ci    eventValue: string;
977fb726d48Sopenharmony_ci  }>
978fb726d48Sopenharmony_ci> =>
979fb726d48Sopenharmony_ci  query(
980fb726d48Sopenharmony_ci    'getTabPowerDetailsData',
981fb726d48Sopenharmony_ci    `SELECT
982fb726d48Sopenharmony_ci        ( S.ts - TR.start_ts ) AS startNS,
983fb726d48Sopenharmony_ci        D.data AS eventName,
984fb726d48Sopenharmony_ci        D2.data AS appKey,
985fb726d48Sopenharmony_ci        group_concat( ( CASE WHEN S.type = 1 THEN S.string_value ELSE S.int_value END ), ',' ) AS eventValue
986fb726d48Sopenharmony_ci        FROM
987fb726d48Sopenharmony_ci        trace_range AS TR,
988fb726d48Sopenharmony_ci        hisys_event_measure AS S
989fb726d48Sopenharmony_ci        LEFT JOIN data_dict AS D ON D.id = S.name_id
990fb726d48Sopenharmony_ci        LEFT JOIN app_name AS APP ON APP.id = S.key_id
991fb726d48Sopenharmony_ci        LEFT JOIN data_dict AS D2 ON D2.id = APP.app_key
992fb726d48Sopenharmony_ci        where
993fb726d48Sopenharmony_ci        D.data in ('POWER_IDE_CPU','POWER_IDE_LOCATION','POWER_IDE_GPU','POWER_IDE_DISPLAY',
994fb726d48Sopenharmony_ci        'POWER_IDE_CAMERA','POWER_IDE_BLUETOOTH','POWER_IDE_FLASHLIGHT','POWER_IDE_AUDIO',
995fb726d48Sopenharmony_ci        'POWER_IDE_WIFISCAN')
996fb726d48Sopenharmony_ci        and
997fb726d48Sopenharmony_ci        D2.data in ('APPNAME')
998fb726d48Sopenharmony_ci        GROUP BY
999fb726d48Sopenharmony_ci        S.serial,
1000fb726d48Sopenharmony_ci        APP.app_key,
1001fb726d48Sopenharmony_ci        D.data,
1002fb726d48Sopenharmony_ci        D2.data
1003fb726d48Sopenharmony_ci        UNION
1004fb726d48Sopenharmony_ci        SELECT
1005fb726d48Sopenharmony_ci        ( S.ts - TR.start_ts ) AS startNS,
1006fb726d48Sopenharmony_ci        D1.data AS eventName,
1007fb726d48Sopenharmony_ci        D2.data AS appKey,
1008fb726d48Sopenharmony_ci        group_concat( ( CASE WHEN S.type = 1 THEN S.string_value ELSE S.int_value END ), ',' ) AS eventValue
1009fb726d48Sopenharmony_ci        FROM
1010fb726d48Sopenharmony_ci        trace_range AS TR,
1011fb726d48Sopenharmony_ci        hisys_event_measure AS S
1012fb726d48Sopenharmony_ci        LEFT JOIN data_dict AS D1 ON D1.id = S.name_id
1013fb726d48Sopenharmony_ci        LEFT JOIN app_name AS APP ON APP.id = S.key_id
1014fb726d48Sopenharmony_ci        LEFT JOIN data_dict AS D2 ON D2.id = APP.app_key
1015fb726d48Sopenharmony_ci        where
1016fb726d48Sopenharmony_ci        D1.data in ('POWER_IDE_CPU','POWER_IDE_LOCATION','POWER_IDE_GPU','POWER_IDE_DISPLAY',
1017fb726d48Sopenharmony_ci        'POWER_IDE_CAMERA','POWER_IDE_BLUETOOTH','POWER_IDE_FLASHLIGHT','POWER_IDE_AUDIO',
1018fb726d48Sopenharmony_ci        'POWER_IDE_WIFISCAN')
1019fb726d48Sopenharmony_ci        and
1020fb726d48Sopenharmony_ci        D2.data in ('CHARGE','BACKGROUND_TIME','SCREEN_ON_TIME','SCREEN_OFF_TIME','LOAD','USAGE',
1021fb726d48Sopenharmony_ci        'DURATION','CAMERA_ID','FOREGROUND_COUNT','BACKGROUND_COUNT','SCREEN_ON_COUNT',
1022fb726d48Sopenharmony_ci        'SCREEN_OFF_COUNT','COUNT','UID','FOREGROUND_DURATION','FOREGROUND_ENERGY',
1023fb726d48Sopenharmony_ci        'BACKGROUND_DURATION','BACKGROUND_ENERGY','SCREEN_ON_DURATION','SCREEN_ON_ENERGY',
1024fb726d48Sopenharmony_ci        'SCREEN_OFF_DURATION','SCREEN_OFF_ENERGY','ENERGY')
1025fb726d48Sopenharmony_ci        and
1026fb726d48Sopenharmony_ci        (S.ts - TR.start_ts) >= $leftNS
1027fb726d48Sopenharmony_ci        and (S.ts - TR.start_ts) <= $rightNS
1028fb726d48Sopenharmony_ci        GROUP BY
1029fb726d48Sopenharmony_ci        S.serial,
1030fb726d48Sopenharmony_ci        APP.app_key,
1031fb726d48Sopenharmony_ci        D1.data,
1032fb726d48Sopenharmony_ci        D2.data
1033fb726d48Sopenharmony_ci        ORDER BY
1034fb726d48Sopenharmony_ci        eventName;`,
1035fb726d48Sopenharmony_ci    { $leftNS: leftNs, $rightNS: rightNs }
1036fb726d48Sopenharmony_ci  );
1037fb726d48Sopenharmony_ci
1038fb726d48Sopenharmony_ciexport const getTabPowerBatteryData = (
1039fb726d48Sopenharmony_ci  rightNs: number
1040fb726d48Sopenharmony_ci): Promise<
1041fb726d48Sopenharmony_ci  Array<{
1042fb726d48Sopenharmony_ci    ts: number;
1043fb726d48Sopenharmony_ci    eventName: string;
1044fb726d48Sopenharmony_ci    appKey: string;
1045fb726d48Sopenharmony_ci    eventValue: string;
1046fb726d48Sopenharmony_ci  }>
1047fb726d48Sopenharmony_ci> =>
1048fb726d48Sopenharmony_ci  query(
1049fb726d48Sopenharmony_ci    'getTabPowerBatteryData',
1050fb726d48Sopenharmony_ci    `select
1051fb726d48Sopenharmony_ci      MAX(S.ts) as ts,
1052fb726d48Sopenharmony_ci      D.data as eventName,
1053fb726d48Sopenharmony_ci      D2.data as appKey, 
1054fb726d48Sopenharmony_ci      group_concat((case when S.type==1 then S.string_value else S.int_value end), ',') as eventValue 
1055fb726d48Sopenharmony_ci      from 
1056fb726d48Sopenharmony_ci      trace_range AS TR,
1057fb726d48Sopenharmony_ci      hisys_event_measure as S 
1058fb726d48Sopenharmony_ci      left join 
1059fb726d48Sopenharmony_ci      data_dict as D 
1060fb726d48Sopenharmony_ci      on 
1061fb726d48Sopenharmony_ci      D.id=S.name_id 
1062fb726d48Sopenharmony_ci      left join 
1063fb726d48Sopenharmony_ci      app_name as APP 
1064fb726d48Sopenharmony_ci      on 
1065fb726d48Sopenharmony_ci      APP.id=S.key_id 
1066fb726d48Sopenharmony_ci      left join 
1067fb726d48Sopenharmony_ci      data_dict as D2 
1068fb726d48Sopenharmony_ci      on 
1069fb726d48Sopenharmony_ci      D2.id=APP.app_key
1070fb726d48Sopenharmony_ci      where 
1071fb726d48Sopenharmony_ci      D.data = 'POWER_IDE_BATTERY'
1072fb726d48Sopenharmony_ci      and D2.data in ('GAS_GAUGE','CHARGE','SCREEN','LEVEL','CURRENT','CAPACITY','UID')
1073fb726d48Sopenharmony_ci      and (S.ts - TR.start_ts) >= 0
1074fb726d48Sopenharmony_ci      and (S.ts - TR.start_ts) <= $rightNS 
1075fb726d48Sopenharmony_ci      group by APP.app_key,D.data,D2.data;`,
1076fb726d48Sopenharmony_ci    { $rightNS: rightNs }
1077fb726d48Sopenharmony_ci  );
1078fb726d48Sopenharmony_ciexport const queryPowerData = (): Promise<
1079fb726d48Sopenharmony_ci  Array<{
1080fb726d48Sopenharmony_ci    id: number;
1081fb726d48Sopenharmony_ci    startNS: number;
1082fb726d48Sopenharmony_ci    eventName: string;
1083fb726d48Sopenharmony_ci    appKey: string;
1084fb726d48Sopenharmony_ci    eventValue: string;
1085fb726d48Sopenharmony_ci  }>
1086fb726d48Sopenharmony_ci> =>
1087fb726d48Sopenharmony_ci  query(
1088fb726d48Sopenharmony_ci    'queryPowerData',
1089fb726d48Sopenharmony_ci    `SELECT
1090fb726d48Sopenharmony_ci         S.id,
1091fb726d48Sopenharmony_ci        ( S.ts - TR.start_ts ) AS startNS,
1092fb726d48Sopenharmony_ci        D.data AS eventName,
1093fb726d48Sopenharmony_ci        D2.data AS appKey,
1094fb726d48Sopenharmony_ci        group_concat( ( CASE WHEN S.type = 1 THEN S.string_value ELSE S.int_value END ), ',' ) AS eventValue
1095fb726d48Sopenharmony_ci        FROM
1096fb726d48Sopenharmony_ci        trace_range AS TR,
1097fb726d48Sopenharmony_ci        hisys_event_measure AS S
1098fb726d48Sopenharmony_ci        LEFT JOIN data_dict AS D
1099fb726d48Sopenharmony_ci        ON D.id = S.name_id
1100fb726d48Sopenharmony_ci        LEFT JOIN app_name AS APP
1101fb726d48Sopenharmony_ci        ON APP.id = S.key_id
1102fb726d48Sopenharmony_ci        LEFT JOIN data_dict AS D2
1103fb726d48Sopenharmony_ci        ON D2.id = APP.app_key
1104fb726d48Sopenharmony_ci        where
1105fb726d48Sopenharmony_ci        D.data in ('POWER_IDE_CPU','POWER_IDE_LOCATION','POWER_IDE_GPU','POWER_IDE_DISPLAY',
1106fb726d48Sopenharmony_ci        'POWER_IDE_CAMERA','POWER_IDE_BLUETOOTH','POWER_IDE_FLASHLIGHT','POWER_IDE_AUDIO',
1107fb726d48Sopenharmony_ci        'POWER_IDE_WIFISCAN')
1108fb726d48Sopenharmony_ci        and
1109fb726d48Sopenharmony_ci        D2.data in ('BACKGROUND_ENERGY','FOREGROUND_ENERGY','SCREEN_ON_ENERGY','SCREEN_OFF_ENERGY',
1110fb726d48Sopenharmony_ci        'ENERGY','APPNAME')
1111fb726d48Sopenharmony_ci        GROUP BY
1112fb726d48Sopenharmony_ci        S.serial,
1113fb726d48Sopenharmony_ci        APP.app_key,
1114fb726d48Sopenharmony_ci        D.data,
1115fb726d48Sopenharmony_ci        D2.data
1116fb726d48Sopenharmony_ci        ORDER BY
1117fb726d48Sopenharmony_ci        eventName;`,
1118fb726d48Sopenharmony_ci    {}
1119fb726d48Sopenharmony_ci  );
1120fb726d48Sopenharmony_ciexport const getTabLiveProcessData = (leftNs: number, rightNs: number): Promise<Array<LiveProcess>> =>
1121fb726d48Sopenharmony_ci  query<LiveProcess>(
1122fb726d48Sopenharmony_ci    'getTabLiveProcessData',
1123fb726d48Sopenharmony_ci    `SELECT
1124fb726d48Sopenharmony_ci        process.id as processId,
1125fb726d48Sopenharmony_ci        process.name as processName,
1126fb726d48Sopenharmony_ci        process.ppid as responsibleProcess,
1127fb726d48Sopenharmony_ci        process.uud as userName,
1128fb726d48Sopenharmony_ci        process.usag as cpu,
1129fb726d48Sopenharmony_ci        process.threadN as threads,
1130fb726d48Sopenharmony_ci        process.pss as memory,
1131fb726d48Sopenharmony_ci        process.cpu_time as cpuTime,
1132fb726d48Sopenharmony_ci        process.disk_reads as diskReads,
1133fb726d48Sopenharmony_ci        process.disk_writes as diskWrite
1134fb726d48Sopenharmony_ci        FROM
1135fb726d48Sopenharmony_ci        (
1136fb726d48Sopenharmony_ci        SELECT
1137fb726d48Sopenharmony_ci        tt.process_id AS id,
1138fb726d48Sopenharmony_ci        tt.process_name AS name,
1139fb726d48Sopenharmony_ci        tt.parent_process_id AS ppid,
1140fb726d48Sopenharmony_ci        tt.uid as uud,
1141fb726d48Sopenharmony_ci        tt.cpu_usage as usag,
1142fb726d48Sopenharmony_ci        tt.thread_num AS threadN,
1143fb726d48Sopenharmony_ci        mt.maxTT - TR.start_ts as endTs,
1144fb726d48Sopenharmony_ci        tt.pss_info as pss,
1145fb726d48Sopenharmony_ci        tt.cpu_time,
1146fb726d48Sopenharmony_ci        tt.disk_reads,
1147fb726d48Sopenharmony_ci        tt.disk_writes
1148fb726d48Sopenharmony_ci        FROM
1149fb726d48Sopenharmony_ci        live_process tt
1150fb726d48Sopenharmony_ci        LEFT JOIN trace_range AS TR 
1151fb726d48Sopenharmony_ci        LEFT JOIN (select re.process_id as idd, max(re.ts) as maxTT, min(re.ts) as minTT 
1152fb726d48Sopenharmony_ci        from live_process re GROUP BY re.process_name, re.process_id ) mt
1153fb726d48Sopenharmony_ci        on mt.idd = tt.process_id where endTs >= $rightNS
1154fb726d48Sopenharmony_ci        GROUP BY
1155fb726d48Sopenharmony_ci        tt.process_name,
1156fb726d48Sopenharmony_ci        tt.process_id 
1157fb726d48Sopenharmony_ci        ) process ;`,
1158fb726d48Sopenharmony_ci    { $leftNS: leftNs, $rightNS: rightNs }
1159fb726d48Sopenharmony_ci  );
1160fb726d48Sopenharmony_ci
1161fb726d48Sopenharmony_ciexport const getTabProcessHistoryData = (
1162fb726d48Sopenharmony_ci  leftNs: number,
1163fb726d48Sopenharmony_ci  rightNs: number,
1164fb726d48Sopenharmony_ci  processId: number | undefined,
1165fb726d48Sopenharmony_ci  threadId: number | undefined
1166fb726d48Sopenharmony_ci): Promise<Array<ProcessHistory>> =>
1167fb726d48Sopenharmony_ci  query<ProcessHistory>(
1168fb726d48Sopenharmony_ci    'getTabProcessHistoryData',
1169fb726d48Sopenharmony_ci    `SELECT
1170fb726d48Sopenharmony_ci        process.id as processId,
1171fb726d48Sopenharmony_ci        process.isD as alive,
1172fb726d48Sopenharmony_ci        process.startTS as firstSeen,
1173fb726d48Sopenharmony_ci        process.endTs as lastSeen,
1174fb726d48Sopenharmony_ci        process.name as processName,
1175fb726d48Sopenharmony_ci        process.ppid as responsibleProcess,
1176fb726d48Sopenharmony_ci        process.uuid as userName,
1177fb726d48Sopenharmony_ci        process.cpu_time as cpuTime,
1178fb726d48Sopenharmony_ci        0 as pss
1179fb726d48Sopenharmony_ci        FROM
1180fb726d48Sopenharmony_ci        (
1181fb726d48Sopenharmony_ci        SELECT
1182fb726d48Sopenharmony_ci        tt.process_id AS id,
1183fb726d48Sopenharmony_ci        tt.process_name AS name,
1184fb726d48Sopenharmony_ci        tt.parent_process_id AS ppid,
1185fb726d48Sopenharmony_ci        tt.uid AS uuid,
1186fb726d48Sopenharmony_ci        tt.cpu_time,
1187fb726d48Sopenharmony_ci        (mt.minTT - TR.start_ts ) AS startTS,
1188fb726d48Sopenharmony_ci        mt.maxTT - TR.start_ts as endTs,
1189fb726d48Sopenharmony_ci        (mt.maxTT - TR.start_ts - $rightNS) > 0 as isD
1190fb726d48Sopenharmony_ci        FROM
1191fb726d48Sopenharmony_ci        live_process tt
1192fb726d48Sopenharmony_ci        LEFT JOIN trace_range AS TR 
1193fb726d48Sopenharmony_ci        LEFT JOIN (select re.process_id as idd, max(re.ts) as maxTT, min(re.ts) as minTT 
1194fb726d48Sopenharmony_ci        from live_process re GROUP BY re.process_name, re.process_id ) mt
1195fb726d48Sopenharmony_ci        on mt.idd = tt.process_id 
1196fb726d48Sopenharmony_ci        GROUP BY
1197fb726d48Sopenharmony_ci        tt.process_name,
1198fb726d48Sopenharmony_ci        tt.process_id 
1199fb726d48Sopenharmony_ci        ) process;`,
1200fb726d48Sopenharmony_ci    {
1201fb726d48Sopenharmony_ci      $leftNS: leftNs,
1202fb726d48Sopenharmony_ci      $rightNS: rightNs,
1203fb726d48Sopenharmony_ci      $processID: processId,
1204fb726d48Sopenharmony_ci      $threadID: threadId,
1205fb726d48Sopenharmony_ci    }
1206fb726d48Sopenharmony_ci  );
1207fb726d48Sopenharmony_ciexport const getTabSlices = (
1208fb726d48Sopenharmony_ci  funTids: Array<number>,
1209fb726d48Sopenharmony_ci  pids: Array<number>,
1210fb726d48Sopenharmony_ci  leftNS: number,
1211fb726d48Sopenharmony_ci  rightNS: number
1212fb726d48Sopenharmony_ci): Promise<Array<unknown>> =>
1213fb726d48Sopenharmony_ci  query<SelectionData>(
1214fb726d48Sopenharmony_ci    'getTabSlices',
1215fb726d48Sopenharmony_ci    `
1216fb726d48Sopenharmony_ci    select
1217fb726d48Sopenharmony_ci      c.name as name,
1218fb726d48Sopenharmony_ci      sum(c.dur) as wallDuration,
1219fb726d48Sopenharmony_ci      count(c.name) as occurrences
1220fb726d48Sopenharmony_ci    from
1221fb726d48Sopenharmony_ci      thread T, trace_range TR
1222fb726d48Sopenharmony_ci      left join process P on T.ipid = P.id
1223fb726d48Sopenharmony_ci    left join
1224fb726d48Sopenharmony_ci      callstack C
1225fb726d48Sopenharmony_ci    on
1226fb726d48Sopenharmony_ci      T.id = C.callid
1227fb726d48Sopenharmony_ci    where
1228fb726d48Sopenharmony_ci      C.ts > 0
1229fb726d48Sopenharmony_ci      and
1230fb726d48Sopenharmony_ci      c.dur >= 0
1231fb726d48Sopenharmony_ci    and
1232fb726d48Sopenharmony_ci      T.tid in (${funTids.join(',')})
1233fb726d48Sopenharmony_ci    and
1234fb726d48Sopenharmony_ci      P.pid in (${pids.join(',')})
1235fb726d48Sopenharmony_ci    and
1236fb726d48Sopenharmony_ci      c.cookie is null
1237fb726d48Sopenharmony_ci    and
1238fb726d48Sopenharmony_ci      not ((C.ts - TR.start_ts + C.dur < $leftNS) or (C.ts - TR.start_ts > $rightNS))
1239fb726d48Sopenharmony_ci    group by
1240fb726d48Sopenharmony_ci      c.name
1241fb726d48Sopenharmony_ci    order by
1242fb726d48Sopenharmony_ci      wallDuration desc;`,
1243fb726d48Sopenharmony_ci    { $leftNS: leftNS, $rightNS: rightNS },
1244fb726d48Sopenharmony_ci    { traceId: Utils.currentSelectTrace }
1245fb726d48Sopenharmony_ci  );
1246fb726d48Sopenharmony_ci
1247fb726d48Sopenharmony_ciexport const getTabThreadStates = (
1248fb726d48Sopenharmony_ci  tIds: Array<number>,
1249fb726d48Sopenharmony_ci  leftNS: number,
1250fb726d48Sopenharmony_ci  rightNS: number
1251fb726d48Sopenharmony_ci): //@ts-ignore
1252fb726d48Sopenharmony_ci  Promise<Array<unknown>> =>
1253fb726d48Sopenharmony_ci  query<SelectionData>(
1254fb726d48Sopenharmony_ci    'getTabThreadStates',
1255fb726d48Sopenharmony_ci    `
1256fb726d48Sopenharmony_ci    select
1257fb726d48Sopenharmony_ci      B.pid,
1258fb726d48Sopenharmony_ci      B.tid,
1259fb726d48Sopenharmony_ci      B.state,
1260fb726d48Sopenharmony_ci      sum(B.dur) as wallDuration,
1261fb726d48Sopenharmony_ci      avg(ifnull(B.dur,0)) as avgDuration,
1262fb726d48Sopenharmony_ci      count(B.tid) as occurrences
1263fb726d48Sopenharmony_ci    from
1264fb726d48Sopenharmony_ci      thread_state AS B
1265fb726d48Sopenharmony_ci    left join
1266fb726d48Sopenharmony_ci      trace_range AS TR
1267fb726d48Sopenharmony_ci    where
1268fb726d48Sopenharmony_ci      B.tid in (${tIds.join(',')})
1269fb726d48Sopenharmony_ci    and
1270fb726d48Sopenharmony_ci      not ((B.ts - TR.start_ts + ifnull(B.dur,0) < $leftNS) or (B.ts - TR.start_ts > $rightNS))
1271fb726d48Sopenharmony_ci    group by
1272fb726d48Sopenharmony_ci      B.pid, B.tid, B.state
1273fb726d48Sopenharmony_ci    order by
1274fb726d48Sopenharmony_ci      wallDuration desc;`,
1275fb726d48Sopenharmony_ci    { $leftNS: leftNS, $rightNS: rightNS }
1276fb726d48Sopenharmony_ci  );
1277fb726d48Sopenharmony_ci
1278fb726d48Sopenharmony_ciexport const queryAnomalyDetailedData = (leftNs: number, rightNs: number): Promise<Array<EnergyAnomalyStruct>> =>
1279fb726d48Sopenharmony_ci  query<EnergyAnomalyStruct>(
1280fb726d48Sopenharmony_ci    'queryAnomalyDetailedData',
1281fb726d48Sopenharmony_ci    `select
1282fb726d48Sopenharmony_ci  S.ts,
1283fb726d48Sopenharmony_ci  D.data as eventName,
1284fb726d48Sopenharmony_ci  D2.data as appKey,
1285fb726d48Sopenharmony_ci  group_concat((case when S.type==1 then S.string_value else S.int_value end), ',') as Value
1286fb726d48Sopenharmony_ci  from trace_range AS TR,hisys_event_measure as S
1287fb726d48Sopenharmony_ci  left join data_dict as D on D.id=S.name_id
1288fb726d48Sopenharmony_ci  left join app_name as APP on APP.id=S.key_id
1289fb726d48Sopenharmony_ci  left join data_dict as D2 on D2.id=APP.app_key
1290fb726d48Sopenharmony_ci  where D.data in ('ANOMALY_SCREEN_OFF_ENERGY','ANOMALY_ALARM_WAKEUP','ANOMALY_KERNEL_WAKELOCK',
1291fb726d48Sopenharmony_ci  'ANOMALY_RUNNINGLOCK','ANORMALY_APP_ENERGY','ANOMALY_GNSS_ENERGY','ANOMALY_CPU_HIGH_FREQUENCY',
1292fb726d48Sopenharmony_ci  'ANOMALY_CPU_ENERGY','ANOMALY_WAKEUP')
1293fb726d48Sopenharmony_ci  and D2.data in ('APPNAME')
1294fb726d48Sopenharmony_ci  and (S.ts - TR.start_ts) >= $leftNS
1295fb726d48Sopenharmony_ci   and (S.ts - TR.start_ts) <= $rightNS
1296fb726d48Sopenharmony_ci  group by S.serial,APP.app_key,D.data,D2.data
1297fb726d48Sopenharmony_ci  union
1298fb726d48Sopenharmony_ci  select
1299fb726d48Sopenharmony_ci  S.ts,
1300fb726d48Sopenharmony_ci  D.data as eventName,
1301fb726d48Sopenharmony_ci  D2.data as appKey,
1302fb726d48Sopenharmony_ci  group_concat((case when S.type = 1 then S.string_value else S.int_value end), ',') as Value
1303fb726d48Sopenharmony_ci  from trace_range AS TR,hisys_event_measure as S
1304fb726d48Sopenharmony_ci  left join data_dict as D on D.id = S.name_id
1305fb726d48Sopenharmony_ci  left join app_name as APP on APP.id = S.key_id
1306fb726d48Sopenharmony_ci  left join data_dict as D2 on D2.id = APP.app_key
1307fb726d48Sopenharmony_ci  where D.data in ('ANOMALY_SCREEN_OFF_ENERGY', 'ANOMALY_ALARM_WAKEUP', 'ANOMALY_KERNEL_WAKELOCK',
1308fb726d48Sopenharmony_ci  'ANOMALY_RUNNINGLOCK', 'ANORMALY_APP_ENERGY', 'ANOMALY_GNSS_ENERGY', 'ANOMALY_CPU_HIGH_FREQUENCY', 
1309fb726d48Sopenharmony_ci  'ANOMALY_CPU_ENERGY', 'ANOMALY_WAKEUP')
1310fb726d48Sopenharmony_ci  and D2.data not in ('pid_', 'tid_', 'type_', 'tz_', 'uid_', 'domain_', 'id_', 'level_', 'info_', 'tag_', 'APPNAME')
1311fb726d48Sopenharmony_ci  and (S.ts - TR.start_ts) >= $leftNS
1312fb726d48Sopenharmony_ci  and (S.ts - TR.start_ts) <= $rightNS
1313fb726d48Sopenharmony_ci  group by S.serial, APP.app_key, D.data, D2.data;`,
1314fb726d48Sopenharmony_ci    { $leftNS: leftNs, $rightNS: rightNs }
1315fb726d48Sopenharmony_ci  );
1316fb726d48Sopenharmony_ci
1317fb726d48Sopenharmony_ciexport const queryBySelectExecute = (
1318fb726d48Sopenharmony_ci  executeId: string,
1319fb726d48Sopenharmony_ci  itid: number
1320fb726d48Sopenharmony_ci): Promise<
1321fb726d48Sopenharmony_ci  Array<{
1322fb726d48Sopenharmony_ci    tid: number;
1323fb726d48Sopenharmony_ci    allocation_task_row: number;
1324fb726d48Sopenharmony_ci    execute_task_row: number;
1325fb726d48Sopenharmony_ci    return_task_row: number;
1326fb726d48Sopenharmony_ci    priority: number;
1327fb726d48Sopenharmony_ci  }>
1328fb726d48Sopenharmony_ci> => {
1329fb726d48Sopenharmony_ci  let sqlStr = `SELECT thread.tid,
1330fb726d48Sopenharmony_ci                       task_pool.allocation_task_row,
1331fb726d48Sopenharmony_ci                       task_pool.execute_task_row,
1332fb726d48Sopenharmony_ci                       task_pool.return_task_row,
1333fb726d48Sopenharmony_ci                       task_pool.priority
1334fb726d48Sopenharmony_ci                FROM task_pool
1335fb726d48Sopenharmony_ci                  LEFT JOIN callstack ON callstack.id = task_pool.allocation_task_row
1336fb726d48Sopenharmony_ci                  LEFT JOIN thread ON thread.id = callstack.callid
1337fb726d48Sopenharmony_ci                WHERE task_pool.task_id = $executeId AND task_pool.execute_itid = $itid;
1338fb726d48Sopenharmony_ci    `;
1339fb726d48Sopenharmony_ci  return query('queryBySelectExecute', sqlStr, { $executeId: executeId, $itid: itid });
1340fb726d48Sopenharmony_ci};
1341fb726d48Sopenharmony_ci
1342fb726d48Sopenharmony_ciexport const queryDistributedRelationData = (traceId?: string): Promise<
1343fb726d48Sopenharmony_ci  Array<{
1344fb726d48Sopenharmony_ci    id: number;
1345fb726d48Sopenharmony_ci    chainId: string;
1346fb726d48Sopenharmony_ci    spanId: string;
1347fb726d48Sopenharmony_ci    parentSpanId: string;
1348fb726d48Sopenharmony_ci    chainFlag: string;
1349fb726d48Sopenharmony_ci  }>
1350fb726d48Sopenharmony_ci> => {
1351fb726d48Sopenharmony_ci  let sqlStr = `SELECT 
1352fb726d48Sopenharmony_ci                      c.id, 
1353fb726d48Sopenharmony_ci                      c.chainId, 
1354fb726d48Sopenharmony_ci                      c.spanId, 
1355fb726d48Sopenharmony_ci                      c.parentSpanId, 
1356fb726d48Sopenharmony_ci                      c.flag as chainFlag
1357fb726d48Sopenharmony_ci                      FROM
1358fb726d48Sopenharmony_ci                      callstack c
1359fb726d48Sopenharmony_ci                      WHERE
1360fb726d48Sopenharmony_ci                      c.chainId IS NOT NULL
1361fb726d48Sopenharmony_ci                      AND c.spanId IS NOT NULL
1362fb726d48Sopenharmony_ci                      AND c.parentSpanId IS NOT NULL;`;
1363fb726d48Sopenharmony_ci  return query('queryDistributedRelationData', sqlStr, {}, { traceId: traceId });
1364fb726d48Sopenharmony_ci};
1365fb726d48Sopenharmony_ci
1366fb726d48Sopenharmony_ciexport const queryDistributedRelationAllData = (
1367fb726d48Sopenharmony_ci  chainId: string,
1368fb726d48Sopenharmony_ci  traceId: string = ''
1369fb726d48Sopenharmony_ci): Promise<
1370fb726d48Sopenharmony_ci  Array<FuncStruct>
1371fb726d48Sopenharmony_ci> => {
1372fb726d48Sopenharmony_ci  let sqlStr = `SELECT
1373fb726d48Sopenharmony_ci                      P.pid,
1374fb726d48Sopenharmony_ci                      A.tid,
1375fb726d48Sopenharmony_ci                      C.name as chainName,
1376fb726d48Sopenharmony_ci                      C.chainId,
1377fb726d48Sopenharmony_ci                      C.spanId,
1378fb726d48Sopenharmony_ci                      C.parentSpanId,
1379fb726d48Sopenharmony_ci                      C.flag as chainFlag,
1380fb726d48Sopenharmony_ci                      C.depth,
1381fb726d48Sopenharmony_ci                      (C.ts - r.start_ts) as ts,
1382fb726d48Sopenharmony_ci                      c.dur,
1383fb726d48Sopenharmony_ci                      $traceId as traceId
1384fb726d48Sopenharmony_ci                  from callstack C, trace_range r
1385fb726d48Sopenharmony_ci                      left join thread A on A.id = C.callid
1386fb726d48Sopenharmony_ci                      left join process AS P on P.id = A.ipid
1387fb726d48Sopenharmony_ci                      where C.chainId = $chainId;`;
1388fb726d48Sopenharmony_ci  if (traceId === '') {
1389fb726d48Sopenharmony_ci    return query('queryDistributedRelationAllData', sqlStr, { $chainId: chainId, $traceId: traceId });
1390fb726d48Sopenharmony_ci  }
1391fb726d48Sopenharmony_ci  return query('queryDistributedRelationAllData', sqlStr, { $chainId: chainId, $traceId: traceId }, { traceId: traceId });
1392fb726d48Sopenharmony_ci};
1393fb726d48Sopenharmony_ci
1394fb726d48Sopenharmony_ciexport const sqlPrioCount = (args: unknown): Promise<unknown> =>
1395fb726d48Sopenharmony_ci  query(
1396fb726d48Sopenharmony_ci    'prioCount',
1397fb726d48Sopenharmony_ci    `select 
1398fb726d48Sopenharmony_ci      S.priority AS prio,
1399fb726d48Sopenharmony_ci      COUNT(S.priority) as count
1400fb726d48Sopenharmony_ci      from 
1401fb726d48Sopenharmony_ci      sched_slice AS S
1402fb726d48Sopenharmony_ci      left join
1403fb726d48Sopenharmony_ci      process P on S.ipid = P.ipid
1404fb726d48Sopenharmony_ci      left join
1405fb726d48Sopenharmony_ci      thread T on S.itid = T.itid
1406fb726d48Sopenharmony_ci      where T.tid = ${//@ts-ignore
1407fb726d48Sopenharmony_ci    args.tid}
1408fb726d48Sopenharmony_ci      and P.pid = ${//@ts-ignore
1409fb726d48Sopenharmony_ci    args.pid}
1410fb726d48Sopenharmony_ci      GROUP BY S.priority;`
1411fb726d48Sopenharmony_ci  );
1412fb726d48Sopenharmony_ci
1413fb726d48Sopenharmony_ciexport const queryRunningThread = (
1414fb726d48Sopenharmony_ci  pIds: Array<number>,
1415fb726d48Sopenharmony_ci  tIds: Array<number>,
1416fb726d48Sopenharmony_ci  leftStartNs: number,
1417fb726d48Sopenharmony_ci  rightEndNs: number
1418fb726d48Sopenharmony_ci): Promise<Array<unknown>> =>
1419fb726d48Sopenharmony_ci  query(
1420fb726d48Sopenharmony_ci    'getTabThread',
1421fb726d48Sopenharmony_ci    `
1422fb726d48Sopenharmony_ci        select
1423fb726d48Sopenharmony_ci          P.pid,
1424fb726d48Sopenharmony_ci          T.tid,
1425fb726d48Sopenharmony_ci          S.itid,
1426fb726d48Sopenharmony_ci          S.ts,
1427fb726d48Sopenharmony_ci          P.name AS pName,
1428fb726d48Sopenharmony_ci          S.dur + S.ts as endTs
1429fb726d48Sopenharmony_ci        from
1430fb726d48Sopenharmony_ci          sched_slice AS S
1431fb726d48Sopenharmony_ci        left join
1432fb726d48Sopenharmony_ci          process P on S.ipid = P.ipid
1433fb726d48Sopenharmony_ci        left join
1434fb726d48Sopenharmony_ci          thread T on S.itid = T.itid
1435fb726d48Sopenharmony_ci        where
1436fb726d48Sopenharmony_ci          T.tid in (${tIds.join(',')})
1437fb726d48Sopenharmony_ci        and 
1438fb726d48Sopenharmony_ci          P.pid in (${pIds.join(',')})
1439fb726d48Sopenharmony_ci        and
1440fb726d48Sopenharmony_ci          not ((S.ts + ifnull(S.dur,0) < $leftStartNs) or (S.ts > $rightEndNs))
1441fb726d48Sopenharmony_ci        order by
1442fb726d48Sopenharmony_ci          S.ts;
1443fb726d48Sopenharmony_ci        `,
1444fb726d48Sopenharmony_ci    { $leftStartNs: leftStartNs, $rightEndNs: rightEndNs }
1445fb726d48Sopenharmony_ci  );
1446fb726d48Sopenharmony_ci
1447fb726d48Sopenharmony_ciexport const queryCoreRunningThread = (
1448fb726d48Sopenharmony_ci  pIds: Array<number>,
1449fb726d48Sopenharmony_ci  tIds: Array<number>,
1450fb726d48Sopenharmony_ci  cpu: Array<number>,
1451fb726d48Sopenharmony_ci  leftStartNs: number,
1452fb726d48Sopenharmony_ci  rightEndNs: number
1453fb726d48Sopenharmony_ci): Promise<Array<unknown>> =>
1454fb726d48Sopenharmony_ci  query(
1455fb726d48Sopenharmony_ci    'getTabThread',
1456fb726d48Sopenharmony_ci    `
1457fb726d48Sopenharmony_ci          select
1458fb726d48Sopenharmony_ci            P.pid,
1459fb726d48Sopenharmony_ci            T.tid,
1460fb726d48Sopenharmony_ci            S.cpu,
1461fb726d48Sopenharmony_ci            S.itid,
1462fb726d48Sopenharmony_ci            S.ts,
1463fb726d48Sopenharmony_ci            P.name AS pName,
1464fb726d48Sopenharmony_ci            S.dur + S.ts as endTs
1465fb726d48Sopenharmony_ci          from
1466fb726d48Sopenharmony_ci            sched_slice AS S
1467fb726d48Sopenharmony_ci          left join
1468fb726d48Sopenharmony_ci            process P on S.ipid = P.ipid
1469fb726d48Sopenharmony_ci          left join
1470fb726d48Sopenharmony_ci            thread T on S.itid = T.itid
1471fb726d48Sopenharmony_ci          where
1472fb726d48Sopenharmony_ci            T.tid in (${tIds.join(',')})
1473fb726d48Sopenharmony_ci          and 
1474fb726d48Sopenharmony_ci            P.pid in (${pIds.join(',')})
1475fb726d48Sopenharmony_ci          and
1476fb726d48Sopenharmony_ci            S.cpu in (${cpu.join(',')})
1477fb726d48Sopenharmony_ci          and
1478fb726d48Sopenharmony_ci            not ((S.ts + ifnull(S.dur,0) < $leftStartNs) or (S.ts > $rightEndNs))
1479fb726d48Sopenharmony_ci          order by
1480fb726d48Sopenharmony_ci            S.ts;
1481fb726d48Sopenharmony_ci          `,
1482fb726d48Sopenharmony_ci    { $leftStartNs: leftStartNs, $rightEndNs: rightEndNs }
1483fb726d48Sopenharmony_ci  );
1484