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 { KeyPathStruct } from '../../bean/KeyPathStruct';
17fb726d48Sopenharmony_ciimport { CpuStruct } from '../ui-worker/cpu/ProcedureWorkerCPU';
18fb726d48Sopenharmony_ciimport { query } from '../SqlLite';
19fb726d48Sopenharmony_ciimport { CpuUsage, Freq } from '../../bean/CpuUsage';
20fb726d48Sopenharmony_ciimport { Counter } from '../../bean/BoxSelection';
21fb726d48Sopenharmony_ciimport { CpuFreqStruct } from '../ui-worker/ProcedureWorkerFreq';
22fb726d48Sopenharmony_ciimport { CpuFreqLimitsStruct } from '../ui-worker/cpu/ProcedureWorkerCpuFreqLimits';
23fb726d48Sopenharmony_ciimport { CpuFreqRowLimit } from '../../component/chart/SpFreqChart';
24fb726d48Sopenharmony_ciimport { Utils } from '../../component/trace/base/Utils';
25fb726d48Sopenharmony_ci
26fb726d48Sopenharmony_ciexport const queryCpuKeyPathData = (threads: Array<KeyPathStruct>): Promise<Array<CpuStruct>> => {
27fb726d48Sopenharmony_ci  const sqlArray: Array<string> = [];
28fb726d48Sopenharmony_ci  sqlArray.push(' 1 = 0');
29fb726d48Sopenharmony_ci  for (const thread of threads) {
30fb726d48Sopenharmony_ci    sqlArray.push(` or  (tid = ${thread.tid} and ts in (${thread.tsArray}))`);
31fb726d48Sopenharmony_ci  }
32fb726d48Sopenharmony_ci  let sql = sqlArray.join(' ');
33fb726d48Sopenharmony_ci  return query(
34fb726d48Sopenharmony_ci    'queryCpuKeyPathData',
35fb726d48Sopenharmony_ci    `SELECT B.pid as processId,
36fb726d48Sopenharmony_ci        B.cpu,
37fb726d48Sopenharmony_ci        B.tid,
38fb726d48Sopenharmony_ci        B.itid  as id,
39fb726d48Sopenharmony_ci        B.dur  AS dur,
40fb726d48Sopenharmony_ci        B.ts - T.start_ts  AS startTime,
41fb726d48Sopenharmony_ci        B.arg_setid   as argSetID,
42fb726d48Sopenharmony_ci        1 as isKeyPath
43fb726d48Sopenharmony_ci    from thread_state AS B
44fb726d48Sopenharmony_ci    left join trace_range as T
45fb726d48Sopenharmony_ci    where ${sql}`
46fb726d48Sopenharmony_ci  );
47fb726d48Sopenharmony_ci};
48fb726d48Sopenharmony_ci
49fb726d48Sopenharmony_ciexport const getTabCpuUsage = (cpus: Array<number>, leftNs: number, rightNs: number,
50fb726d48Sopenharmony_ci  traceId?: string): Promise<Array<CpuUsage>> =>
51fb726d48Sopenharmony_ci  query<CpuUsage>(
52fb726d48Sopenharmony_ci    'getTabCpuUsage',
53fb726d48Sopenharmony_ci    `
54fb726d48Sopenharmony_ci    select
55fb726d48Sopenharmony_ci      cpu,
56fb726d48Sopenharmony_ci      sum(case
57fb726d48Sopenharmony_ci        when (A.ts - B.start_ts) < $leftNS
58fb726d48Sopenharmony_ci          then (A.ts - B.start_ts + A.dur - $leftNS)
59fb726d48Sopenharmony_ci        when (A.ts - B.start_ts) >= $leftNS
60fb726d48Sopenharmony_ci          and (A.ts - B.start_ts + A.dur) <= $rightNS
61fb726d48Sopenharmony_ci          then A.dur
62fb726d48Sopenharmony_ci        when (A.ts - B.start_ts + A.dur) > $rightNS
63fb726d48Sopenharmony_ci          then ($rightNS - (A.ts - B.start_ts)) end) / cast($rightNS - $leftNS as float) as usage
64fb726d48Sopenharmony_ci    from
65fb726d48Sopenharmony_ci      thread_state A,
66fb726d48Sopenharmony_ci      trace_range B
67fb726d48Sopenharmony_ci    where
68fb726d48Sopenharmony_ci      (A.ts - B.start_ts) > 0 and A.dur > 0
69fb726d48Sopenharmony_ci    and
70fb726d48Sopenharmony_ci      cpu in (${cpus.join(',')})
71fb726d48Sopenharmony_ci    and
72fb726d48Sopenharmony_ci      (A.ts - B.start_ts + A.dur) > $leftNS
73fb726d48Sopenharmony_ci    and
74fb726d48Sopenharmony_ci      (A.ts - B.start_ts) < $rightNS
75fb726d48Sopenharmony_ci    group by
76fb726d48Sopenharmony_ci      cpu`,
77fb726d48Sopenharmony_ci    { $leftNS: leftNs, $rightNS: rightNs },
78fb726d48Sopenharmony_ci    { traceId: traceId }
79fb726d48Sopenharmony_ci  );
80fb726d48Sopenharmony_ci
81fb726d48Sopenharmony_ciexport const getTabCpuFreq = (cpus: Array<number>, leftNs: number, rightNs: number,
82fb726d48Sopenharmony_ci  traceId?: string): Promise<Array<Freq>> =>
83fb726d48Sopenharmony_ci  query<Freq>(
84fb726d48Sopenharmony_ci    'getTabCpuFreq',
85fb726d48Sopenharmony_ci    `
86fb726d48Sopenharmony_ci    select
87fb726d48Sopenharmony_ci      cpu,
88fb726d48Sopenharmony_ci      value,
89fb726d48Sopenharmony_ci      (ts - tr.start_ts) as startNs
90fb726d48Sopenharmony_ci    from
91fb726d48Sopenharmony_ci      measure m,
92fb726d48Sopenharmony_ci      trace_range tr
93fb726d48Sopenharmony_ci    inner join
94fb726d48Sopenharmony_ci      cpu_measure_filter t
95fb726d48Sopenharmony_ci    on
96fb726d48Sopenharmony_ci      m.filter_id = t.id
97fb726d48Sopenharmony_ci    where
98fb726d48Sopenharmony_ci      (name = 'cpufreq' or name='cpu_frequency')
99fb726d48Sopenharmony_ci    and
100fb726d48Sopenharmony_ci      cpu in (${cpus.join(',')})
101fb726d48Sopenharmony_ci    and
102fb726d48Sopenharmony_ci      startNs > 0
103fb726d48Sopenharmony_ci    and
104fb726d48Sopenharmony_ci      startNs < $rightNS
105fb726d48Sopenharmony_ci    --order by startNs
106fb726d48Sopenharmony_ci    `,
107fb726d48Sopenharmony_ci    { $leftNS: leftNs, $rightNS: rightNs },
108fb726d48Sopenharmony_ci    { traceId: traceId }
109fb726d48Sopenharmony_ci  );
110fb726d48Sopenharmony_ci
111fb726d48Sopenharmony_ciexport const getTabCounters = (
112fb726d48Sopenharmony_ci  processFilterIds: Array<number>,
113fb726d48Sopenharmony_ci  virtualFilterIds: Array<number>,
114fb726d48Sopenharmony_ci  startTime: number
115fb726d48Sopenharmony_ci): //@ts-ignore
116fb726d48Sopenharmony_ciPromise<unknown> => {
117fb726d48Sopenharmony_ci  let processSql = `select
118fb726d48Sopenharmony_ci        t1.filter_id as trackId,
119fb726d48Sopenharmony_ci        t2.name,
120fb726d48Sopenharmony_ci        value,
121fb726d48Sopenharmony_ci        t1.ts - t3.start_ts as startTime
122fb726d48Sopenharmony_ci      from
123fb726d48Sopenharmony_ci        process_measure t1
124fb726d48Sopenharmony_ci      left join
125fb726d48Sopenharmony_ci        process_measure_filter t2
126fb726d48Sopenharmony_ci      on
127fb726d48Sopenharmony_ci        t1.filter_id = t2.id
128fb726d48Sopenharmony_ci      left join
129fb726d48Sopenharmony_ci        trace_range t3
130fb726d48Sopenharmony_ci      where
131fb726d48Sopenharmony_ci        filter_id in (${processFilterIds.join(',')})
132fb726d48Sopenharmony_ci      and
133fb726d48Sopenharmony_ci        startTime <= ${startTime}`;
134fb726d48Sopenharmony_ci  let virtualSql = `select
135fb726d48Sopenharmony_ci        t1.filter_id as trackId,
136fb726d48Sopenharmony_ci        t2.name,
137fb726d48Sopenharmony_ci        value,
138fb726d48Sopenharmony_ci        t1.ts - t3.start_ts as startTime
139fb726d48Sopenharmony_ci      from
140fb726d48Sopenharmony_ci        sys_mem_measure t1
141fb726d48Sopenharmony_ci      left join
142fb726d48Sopenharmony_ci        sys_event_filter t2
143fb726d48Sopenharmony_ci      on
144fb726d48Sopenharmony_ci        t1.filter_id = t2.id
145fb726d48Sopenharmony_ci      left join
146fb726d48Sopenharmony_ci        trace_range t3
147fb726d48Sopenharmony_ci      where
148fb726d48Sopenharmony_ci        filter_id in (${virtualFilterIds.join(',')})
149fb726d48Sopenharmony_ci      and
150fb726d48Sopenharmony_ci        startTime <= ${startTime}`;
151fb726d48Sopenharmony_ci  let sql = '';
152fb726d48Sopenharmony_ci  if (processFilterIds.length > 0 && virtualFilterIds.length > 0) {
153fb726d48Sopenharmony_ci    sql = `${processSql} union ${virtualSql}`;
154fb726d48Sopenharmony_ci  } else {
155fb726d48Sopenharmony_ci    if (processFilterIds.length > 0) {
156fb726d48Sopenharmony_ci      sql = processSql;
157fb726d48Sopenharmony_ci    } else {
158fb726d48Sopenharmony_ci      sql = virtualSql;
159fb726d48Sopenharmony_ci    }
160fb726d48Sopenharmony_ci  }
161fb726d48Sopenharmony_ci  return query<Counter>('getTabCounters', sql, {});
162fb726d48Sopenharmony_ci};
163fb726d48Sopenharmony_ciexport const getTabCpuByProcess = (
164fb726d48Sopenharmony_ci  cpus: Array<number>,
165fb726d48Sopenharmony_ci  leftNS: number,
166fb726d48Sopenharmony_ci  rightNS: number,
167fb726d48Sopenharmony_ci  traceId?: string
168fb726d48Sopenharmony_ci): //@ts-ignore
169fb726d48Sopenharmony_ciPromise<unknown[]> => //@ts-ignore
170fb726d48Sopenharmony_ci  query<unknown>(
171fb726d48Sopenharmony_ci    'getTabCpuByProcess',
172fb726d48Sopenharmony_ci    `
173fb726d48Sopenharmony_ci    select
174fb726d48Sopenharmony_ci      B.pid as pid,
175fb726d48Sopenharmony_ci      sum(iif(B.dur = -1 or B.dur is null, 0, B.dur)) as wallDuration,
176fb726d48Sopenharmony_ci      avg(iif(B.dur = -1 or B.dur is null, 0, B.dur)) as avgDuration,
177fb726d48Sopenharmony_ci      count(B.tid) as occurrences
178fb726d48Sopenharmony_ci    from
179fb726d48Sopenharmony_ci      thread_state AS B
180fb726d48Sopenharmony_ci    left join
181fb726d48Sopenharmony_ci      trace_range AS TR
182fb726d48Sopenharmony_ci    where
183fb726d48Sopenharmony_ci      B.cpu in (${cpus.join(',')})
184fb726d48Sopenharmony_ci    and
185fb726d48Sopenharmony_ci      not ((B.ts - TR.start_ts + iif(B.dur = -1 or B.dur is null, 0, B.dur) < $leftNS) 
186fb726d48Sopenharmony_ci      or (B.ts - TR.start_ts > $rightNS ))
187fb726d48Sopenharmony_ci    group by
188fb726d48Sopenharmony_ci      B.pid
189fb726d48Sopenharmony_ci    order by
190fb726d48Sopenharmony_ci      wallDuration desc;`,
191fb726d48Sopenharmony_ci    { $rightNS: rightNS, $leftNS: leftNS },
192fb726d48Sopenharmony_ci    { traceId: traceId }
193fb726d48Sopenharmony_ci  );
194fb726d48Sopenharmony_ci
195fb726d48Sopenharmony_ciexport const getTabCpuByThread = (cpus: Array<number>, leftNS: number, rightNS: number,
196fb726d48Sopenharmony_ci  traceId?: string): Promise<unknown[]> =>
197fb726d48Sopenharmony_ci  query<unknown>(
198fb726d48Sopenharmony_ci    'getTabCpuByThread',
199fb726d48Sopenharmony_ci    `
200fb726d48Sopenharmony_ci    select
201fb726d48Sopenharmony_ci      TS.pid as pid,
202fb726d48Sopenharmony_ci      TS.tid as tid,
203fb726d48Sopenharmony_ci      TS.cpu,
204fb726d48Sopenharmony_ci      sum( min(${rightNS},(TS.ts - TR.start_ts + iif(TS.dur = -1 or TS.dur is null, 0, TS.dur))) - 
205fb726d48Sopenharmony_ci      max(${leftNS},TS.ts - TR.start_ts)) wallDuration,
206fb726d48Sopenharmony_ci      count(TS.tid) as occurrences
207fb726d48Sopenharmony_ci    from
208fb726d48Sopenharmony_ci      thread_state AS TS
209fb726d48Sopenharmony_ci    left join
210fb726d48Sopenharmony_ci      trace_range AS TR
211fb726d48Sopenharmony_ci    where
212fb726d48Sopenharmony_ci      TS.cpu in (${cpus.join(',')})
213fb726d48Sopenharmony_ci    and
214fb726d48Sopenharmony_ci      not ((TS.ts - TR.start_ts + iif(TS.dur = -1 or TS.dur is null, 0, TS.dur) < $leftNS) 
215fb726d48Sopenharmony_ci      or (TS.ts - TR.start_ts > $rightNS))
216fb726d48Sopenharmony_ci    group by
217fb726d48Sopenharmony_ci      TS.cpu,
218fb726d48Sopenharmony_ci      TS.pid,
219fb726d48Sopenharmony_ci      TS.tid
220fb726d48Sopenharmony_ci    order by
221fb726d48Sopenharmony_ci      wallDuration desc;`,
222fb726d48Sopenharmony_ci    { $rightNS: rightNS, $leftNS: leftNS },
223fb726d48Sopenharmony_ci    { traceId: traceId }
224fb726d48Sopenharmony_ci  );
225fb726d48Sopenharmony_ci
226fb726d48Sopenharmony_ciexport const queryCpuData = (cpu: number, startNS: number, endNS: number): Promise<Array<CpuStruct>> =>
227fb726d48Sopenharmony_ci  query(
228fb726d48Sopenharmony_ci    'queryCpuData',
229fb726d48Sopenharmony_ci    `
230fb726d48Sopenharmony_ci    SELECT
231fb726d48Sopenharmony_ci    B.pid as processId,
232fb726d48Sopenharmony_ci    B.cpu,
233fb726d48Sopenharmony_ci    B.tid,
234fb726d48Sopenharmony_ci    B.itid as id,
235fb726d48Sopenharmony_ci    B.dur,
236fb726d48Sopenharmony_ci    B.ts - TR.start_ts AS startTime,
237fb726d48Sopenharmony_ci    B.arg_setid as argSetID
238fb726d48Sopenharmony_cifrom thread_state AS B
239fb726d48Sopenharmony_ci    left join trace_range AS TR
240fb726d48Sopenharmony_ciwhere B.itid is not null
241fb726d48Sopenharmony_ci    and
242fb726d48Sopenharmony_ci      B.cpu = $cpu
243fb726d48Sopenharmony_ci    and
244fb726d48Sopenharmony_ci      startTime between $startNS and $endNS;`,
245fb726d48Sopenharmony_ci    {
246fb726d48Sopenharmony_ci      $cpu: cpu,
247fb726d48Sopenharmony_ci      $startNS: startNS,
248fb726d48Sopenharmony_ci      $endNS: endNS,
249fb726d48Sopenharmony_ci    }
250fb726d48Sopenharmony_ci  );
251fb726d48Sopenharmony_ci
252fb726d48Sopenharmony_ciexport const queryCpuFreq = (traceId?: string): Promise<Array<{ cpu: number; filterId: number }>> =>
253fb726d48Sopenharmony_ci  query(
254fb726d48Sopenharmony_ci    'queryCpuFreq',
255fb726d48Sopenharmony_ci    `
256fb726d48Sopenharmony_ci    select
257fb726d48Sopenharmony_ci      cpu,id as filterId
258fb726d48Sopenharmony_ci    from
259fb726d48Sopenharmony_ci      cpu_measure_filter
260fb726d48Sopenharmony_ci    where
261fb726d48Sopenharmony_ci      (name='cpufreq' or name='cpu_frequency')
262fb726d48Sopenharmony_ci    order by cpu;
263fb726d48Sopenharmony_ci    `, {}, { traceId: traceId }
264fb726d48Sopenharmony_ci  );
265fb726d48Sopenharmony_ci
266fb726d48Sopenharmony_ciexport const queryCpuFreqData = (cpu: number): Promise<Array<CpuFreqStruct>> =>
267fb726d48Sopenharmony_ci  query<CpuFreqStruct>(
268fb726d48Sopenharmony_ci    'queryCpuFreqData',
269fb726d48Sopenharmony_ci    `
270fb726d48Sopenharmony_ci    select
271fb726d48Sopenharmony_ci      cpu,
272fb726d48Sopenharmony_ci      value,
273fb726d48Sopenharmony_ci      ifnull(dur,tb.end_ts - c.ts) dur,
274fb726d48Sopenharmony_ci      ts-tb.start_ts as startNS
275fb726d48Sopenharmony_ci    from
276fb726d48Sopenharmony_ci      measure c,
277fb726d48Sopenharmony_ci      trace_range tb
278fb726d48Sopenharmony_ci    inner join
279fb726d48Sopenharmony_ci      cpu_measure_filter t
280fb726d48Sopenharmony_ci    on
281fb726d48Sopenharmony_ci      c.filter_id = t.id
282fb726d48Sopenharmony_ci    where
283fb726d48Sopenharmony_ci      (name = 'cpufreq' or name='cpu_frequency')
284fb726d48Sopenharmony_ci    and
285fb726d48Sopenharmony_ci      cpu= $cpu
286fb726d48Sopenharmony_ci    --order by ts;
287fb726d48Sopenharmony_ci    `,
288fb726d48Sopenharmony_ci    { $cpu: cpu }
289fb726d48Sopenharmony_ci  );
290fb726d48Sopenharmony_ci
291fb726d48Sopenharmony_ciexport const queryCpuMax = (traceId?: string): //@ts-ignore
292fb726d48Sopenharmony_ciPromise<Array<unknown>> =>
293fb726d48Sopenharmony_ci  query(
294fb726d48Sopenharmony_ci    'queryCpuMax',
295fb726d48Sopenharmony_ci    `
296fb726d48Sopenharmony_ci    select
297fb726d48Sopenharmony_ci      cpu
298fb726d48Sopenharmony_ci    from
299fb726d48Sopenharmony_ci      sched_slice
300fb726d48Sopenharmony_ci    order by
301fb726d48Sopenharmony_ci      cpu
302fb726d48Sopenharmony_ci    desc limit 1;`,
303fb726d48Sopenharmony_ci    {},
304fb726d48Sopenharmony_ci    { traceId: traceId }
305fb726d48Sopenharmony_ci  );
306fb726d48Sopenharmony_ci
307fb726d48Sopenharmony_ciexport const queryCpuDataCount = (): Promise<unknown[]> =>
308fb726d48Sopenharmony_ci  query('queryCpuDataCount',
309fb726d48Sopenharmony_ci    'select count(1) as count,cpu from thread_state where cpu not null group by cpu');
310fb726d48Sopenharmony_ci
311fb726d48Sopenharmony_ciexport const queryCpuCount = (traceId?: string): //@ts-ignore
312fb726d48Sopenharmony_ciPromise<Array<unknown>> =>
313fb726d48Sopenharmony_ci  query(
314fb726d48Sopenharmony_ci    'queryCpuCount',
315fb726d48Sopenharmony_ci    `
316fb726d48Sopenharmony_ci   select max(cpuCount) cpuCount from
317fb726d48Sopenharmony_ci(select ifnull((max(cpu) + 1),0) cpuCount  from cpu_measure_filter where name in ('cpu_frequency','cpu_idle')
318fb726d48Sopenharmony_ci union all
319fb726d48Sopenharmony_ci select ifnull((max(callid)+1),0) cpuCount from irq
320fb726d48Sopenharmony_ci) A;`,
321fb726d48Sopenharmony_ci    {},
322fb726d48Sopenharmony_ci    { traceId: traceId }
323fb726d48Sopenharmony_ci  );
324fb726d48Sopenharmony_ci
325fb726d48Sopenharmony_ciexport const queryCpuSchedSlice = async (traceId?: string): Promise<Array<unknown>> => {
326fb726d48Sopenharmony_ci  let cpuSchedSliceBuffer = await query(
327fb726d48Sopenharmony_ci    'queryCpuSchedSlice',
328fb726d48Sopenharmony_ci    `select 
329fb726d48Sopenharmony_ci      (ts - start_ts) as ts,
330fb726d48Sopenharmony_ci       itid,
331fb726d48Sopenharmony_ci       end_state as endState,
332fb726d48Sopenharmony_ci       priority
333fb726d48Sopenharmony_ci    from
334fb726d48Sopenharmony_ci      sched_slice,
335fb726d48Sopenharmony_ci      trace_range;`,
336fb726d48Sopenharmony_ci    {},
337fb726d48Sopenharmony_ci    { traceId: traceId, action: 'exec-buf' }
338fb726d48Sopenharmony_ci  );
339fb726d48Sopenharmony_ci  // @ts-ignore
340fb726d48Sopenharmony_ci  return Utils.convertJSON(cpuSchedSliceBuffer);
341fb726d48Sopenharmony_ci};
342fb726d48Sopenharmony_ci
343fb726d48Sopenharmony_ciexport const queryCpuStateFilter = (traceId?: string):
344fb726d48Sopenharmony_ciPromise<Array<{ cpu: number; filterId: number }>> =>
345fb726d48Sopenharmony_ci  query(
346fb726d48Sopenharmony_ci    'queryCpuStateFilter',
347fb726d48Sopenharmony_ci    `select cpu,id as filterId 
348fb726d48Sopenharmony_ci    from cpu_measure_filter 
349fb726d48Sopenharmony_ci    where name = 'cpu_idle' order by cpu;`,
350fb726d48Sopenharmony_ci    {},
351fb726d48Sopenharmony_ci    { traceId: traceId }
352fb726d48Sopenharmony_ci  );
353fb726d48Sopenharmony_ci
354fb726d48Sopenharmony_ciexport const queryCpuState = (
355fb726d48Sopenharmony_ci  cpuFilterId: number
356fb726d48Sopenharmony_ci): //@ts-ignore
357fb726d48Sopenharmony_ciPromise<Array<unknown>> =>
358fb726d48Sopenharmony_ci  query(
359fb726d48Sopenharmony_ci    'queryCpuState',
360fb726d48Sopenharmony_ci    `
361fb726d48Sopenharmony_ci        select (A.ts - B.start_ts) as startTs,ifnull(dur,B.end_ts - A.ts) dur,
362fb726d48Sopenharmony_ci            value
363fb726d48Sopenharmony_ci        from measure A,trace_range B
364fb726d48Sopenharmony_ci        where filter_id = $filterId;`,
365fb726d48Sopenharmony_ci    { $filterId: cpuFilterId }
366fb726d48Sopenharmony_ci  );
367fb726d48Sopenharmony_ci
368fb726d48Sopenharmony_ciexport const queryCpuMaxFreq = (traceId?: string):
369fb726d48Sopenharmony_ciPromise<Array<{
370fb726d48Sopenharmony_ci  maxFreq: number
371fb726d48Sopenharmony_ci}>> =>
372fb726d48Sopenharmony_ci  query(
373fb726d48Sopenharmony_ci    'queryCpuMaxFreq',
374fb726d48Sopenharmony_ci    `
375fb726d48Sopenharmony_ci    select
376fb726d48Sopenharmony_ci      max(value) as maxFreq
377fb726d48Sopenharmony_ci    from
378fb726d48Sopenharmony_ci      measure c
379fb726d48Sopenharmony_ci    inner join
380fb726d48Sopenharmony_ci      cpu_measure_filter t
381fb726d48Sopenharmony_ci    on
382fb726d48Sopenharmony_ci      c.filter_id = t.id
383fb726d48Sopenharmony_ci    where
384fb726d48Sopenharmony_ci      (name = 'cpufreq' or name='cpu_frequency');`, {}, { traceId: traceId }
385fb726d48Sopenharmony_ci  );
386fb726d48Sopenharmony_ci
387fb726d48Sopenharmony_ciexport const queryTraceCpu = (): Promise<
388fb726d48Sopenharmony_ci  Array<{
389fb726d48Sopenharmony_ci    tid: string;
390fb726d48Sopenharmony_ci    pid: string;
391fb726d48Sopenharmony_ci    cpu: string;
392fb726d48Sopenharmony_ci    dur: string;
393fb726d48Sopenharmony_ci    min_freq: string;
394fb726d48Sopenharmony_ci    max_freq: string;
395fb726d48Sopenharmony_ci    avg_frequency: string;
396fb726d48Sopenharmony_ci  }>
397fb726d48Sopenharmony_ci> =>
398fb726d48Sopenharmony_ci  query(
399fb726d48Sopenharmony_ci    'queryTraceCpu',
400fb726d48Sopenharmony_ci    `SELECT 
401fb726d48Sopenharmony_ci        itid AS tid, 
402fb726d48Sopenharmony_ci        ipid AS pid, 
403fb726d48Sopenharmony_ci        group_concat(cpu, ',') AS cpu, 
404fb726d48Sopenharmony_ci        group_concat(dur, ',') AS dur, 
405fb726d48Sopenharmony_ci        group_concat(min_freq, ',') AS min_freq, 
406fb726d48Sopenharmony_ci        group_concat(max_freq, ',') AS max_freq, 
407fb726d48Sopenharmony_ci        group_concat(avg_frequency, ',') AS avg_frequency 
408fb726d48Sopenharmony_ci        FROM 
409fb726d48Sopenharmony_ci        (SELECT 
410fb726d48Sopenharmony_ci            itid, 
411fb726d48Sopenharmony_ci            ipid, 
412fb726d48Sopenharmony_ci            cpu, 
413fb726d48Sopenharmony_ci            CAST (SUM(dur) AS INT) AS dur, 
414fb726d48Sopenharmony_ci            CAST (MIN(freq) AS INT) AS min_freq, 
415fb726d48Sopenharmony_ci            CAST (MAX(freq) AS INT) AS max_freq, 
416fb726d48Sopenharmony_ci            CAST ( (SUM(dur * freq) / SUM(dur) ) AS INT) AS avg_frequency 
417fb726d48Sopenharmony_ci            from 
418fb726d48Sopenharmony_ci            result 
419fb726d48Sopenharmony_ci            group by 
420fb726d48Sopenharmony_ci            itid, cpu
421fb726d48Sopenharmony_ci        ) 
422fb726d48Sopenharmony_ci        GROUP BY 
423fb726d48Sopenharmony_ci        ipid, itid 
424fb726d48Sopenharmony_ci        ORDER BY 
425fb726d48Sopenharmony_ci        ipid
426fb726d48Sopenharmony_ci    `
427fb726d48Sopenharmony_ci  );
428fb726d48Sopenharmony_ci
429fb726d48Sopenharmony_ciexport const queryTraceCpuTop = (): Promise<
430fb726d48Sopenharmony_ci  Array<{
431fb726d48Sopenharmony_ci    tid: string;
432fb726d48Sopenharmony_ci    pid: string;
433fb726d48Sopenharmony_ci    cpu: string;
434fb726d48Sopenharmony_ci    duration: string;
435fb726d48Sopenharmony_ci    min_freq: string;
436fb726d48Sopenharmony_ci    max_freq: string;
437fb726d48Sopenharmony_ci    avg_frequency: string;
438fb726d48Sopenharmony_ci    sumNum: string;
439fb726d48Sopenharmony_ci  }>
440fb726d48Sopenharmony_ci> =>
441fb726d48Sopenharmony_ci  query(
442fb726d48Sopenharmony_ci    'queryTraceCpuTop',
443fb726d48Sopenharmony_ci    `SELECT
444fb726d48Sopenharmony_ci         ipid AS pid,
445fb726d48Sopenharmony_ci         itid AS tid, 
446fb726d48Sopenharmony_ci        group_concat(cpu, ',') AS cpu, 
447fb726d48Sopenharmony_ci        group_concat(dur, ',') AS dur,
448fb726d48Sopenharmony_ci        group_concat(avg_frequency, ',') AS avg_frequency,
449fb726d48Sopenharmony_ci        group_concat(min_freq, ',') AS min_freq, 
450fb726d48Sopenharmony_ci        group_concat(max_freq, ',') AS max_freq, 
451fb726d48Sopenharmony_ci        sum(dur * avg_frequency) AS sumNum 
452fb726d48Sopenharmony_ci        FROM 
453fb726d48Sopenharmony_ci        (SELECT 
454fb726d48Sopenharmony_ci            itid, 
455fb726d48Sopenharmony_ci            ipid, 
456fb726d48Sopenharmony_ci            cpu, 
457fb726d48Sopenharmony_ci            CAST (SUM(dur) AS INT) AS dur, 
458fb726d48Sopenharmony_ci            CAST (MIN(freq) AS INT) AS min_freq, 
459fb726d48Sopenharmony_ci            CAST (MAX(freq) AS INT) AS max_freq, 
460fb726d48Sopenharmony_ci            CAST ( (SUM(dur * freq) / SUM(dur) ) AS INT) AS avg_frequency 
461fb726d48Sopenharmony_ci            from result group by itid, cpu
462fb726d48Sopenharmony_ci        ) 
463fb726d48Sopenharmony_ci        GROUP BY 
464fb726d48Sopenharmony_ci        ipid, itid 
465fb726d48Sopenharmony_ci        ORDER BY 
466fb726d48Sopenharmony_ci        sumNum 
467fb726d48Sopenharmony_ci        DESC 
468fb726d48Sopenharmony_ci        LIMIT 10;
469fb726d48Sopenharmony_ci    `
470fb726d48Sopenharmony_ci  );
471fb726d48Sopenharmony_ci
472fb726d48Sopenharmony_ciexport const queryCpuFreqUsageData = (
473fb726d48Sopenharmony_ci  Ids: Array<number>
474fb726d48Sopenharmony_ci): Promise<
475fb726d48Sopenharmony_ci  Array<{
476fb726d48Sopenharmony_ci    startNS: number;
477fb726d48Sopenharmony_ci    filter_id: number;
478fb726d48Sopenharmony_ci    value: number;
479fb726d48Sopenharmony_ci    dur: number;
480fb726d48Sopenharmony_ci  }>
481fb726d48Sopenharmony_ci> =>
482fb726d48Sopenharmony_ci  query(
483fb726d48Sopenharmony_ci    'queryCpuFreqUsageData',
484fb726d48Sopenharmony_ci    `select
485fb726d48Sopenharmony_ci          value,
486fb726d48Sopenharmony_ci          ifnull(dur,tb.end_ts - c.ts) dur,
487fb726d48Sopenharmony_ci          ts-tb.start_ts as startNS,
488fb726d48Sopenharmony_ci          filter_id
489fb726d48Sopenharmony_ci        from
490fb726d48Sopenharmony_ci          measure c,
491fb726d48Sopenharmony_ci          trace_range tb
492fb726d48Sopenharmony_ci        where
493fb726d48Sopenharmony_ci          c.filter_id in (${Ids.join(',')})
494fb726d48Sopenharmony_ci       `,
495fb726d48Sopenharmony_ci    {},
496fb726d48Sopenharmony_ci    { traceId: Utils.currentSelectTrace }
497fb726d48Sopenharmony_ci  );
498fb726d48Sopenharmony_ci
499fb726d48Sopenharmony_ciexport const queryCpuFreqFilterId = (): Promise<
500fb726d48Sopenharmony_ci  Array<{
501fb726d48Sopenharmony_ci    id: number;
502fb726d48Sopenharmony_ci    cpu: number;
503fb726d48Sopenharmony_ci  }>
504fb726d48Sopenharmony_ci> =>
505fb726d48Sopenharmony_ci  query(
506fb726d48Sopenharmony_ci    'queryCpuFreqFilterId',
507fb726d48Sopenharmony_ci    `
508fb726d48Sopenharmony_ci        select
509fb726d48Sopenharmony_ci          id,
510fb726d48Sopenharmony_ci          cpu
511fb726d48Sopenharmony_ci        from
512fb726d48Sopenharmony_ci          cpu_measure_filter 
513fb726d48Sopenharmony_ci        where
514fb726d48Sopenharmony_ci          name='cpufreq'
515fb726d48Sopenharmony_ci        or
516fb726d48Sopenharmony_ci          name='cpu_frequency'
517fb726d48Sopenharmony_ci     `,
518fb726d48Sopenharmony_ci    {},
519fb726d48Sopenharmony_ci    { traceId: Utils.currentSelectTrace }
520fb726d48Sopenharmony_ci  );
521fb726d48Sopenharmony_ci
522fb726d48Sopenharmony_ciexport const searchCpuData = (
523fb726d48Sopenharmony_ci  keyword: string
524fb726d48Sopenharmony_ci): //@ts-ignore
525fb726d48Sopenharmony_ciPromise<Array<unknown>> => {
526fb726d48Sopenharmony_ci  let id = parseInt(keyword);
527fb726d48Sopenharmony_ci  let sql = `
528fb726d48Sopenharmony_ci  select B.pid                        as processId,
529fb726d48Sopenharmony_ci       B.cpu,
530fb726d48Sopenharmony_ci       B.tid,
531fb726d48Sopenharmony_ci       'cpu'                          as type,
532fb726d48Sopenharmony_ci       B.itid                         as id,
533fb726d48Sopenharmony_ci       B.dur                          as dur,
534fb726d48Sopenharmony_ci       B.ts - TR.start_ts             as startTime,
535fb726d48Sopenharmony_ci       B.arg_setid                    as argSetID
536fb726d48Sopenharmony_cifrom thread_state AS B, trace_range TR
537fb726d48Sopenharmony_ci         left join process p on B.pid = p.pid
538fb726d48Sopenharmony_ci         left join thread t on B.itid = t.itid
539fb726d48Sopenharmony_ciwhere B.cpu not null and B.ts between TR.start_ts and TR.end_ts 
540fb726d48Sopenharmony_ci  and (
541fb726d48Sopenharmony_ci        t.name like '%${keyword}%'
542fb726d48Sopenharmony_ci        or B.tid = ${Number.isNaN(id) ? -1 : id}
543fb726d48Sopenharmony_ci        or B.pid = ${Number.isNaN(id) ? -1 : id}
544fb726d48Sopenharmony_ci        or p.name like '%${keyword}%'
545fb726d48Sopenharmony_ci    )
546fb726d48Sopenharmony_ciorder by startTime;`;
547fb726d48Sopenharmony_ci  return query('searchCpuData', sql, {});
548fb726d48Sopenharmony_ci};
549fb726d48Sopenharmony_ci
550fb726d48Sopenharmony_ciexport const getTabPaneCounterSampleData = (
551fb726d48Sopenharmony_ci  leftNs: number,
552fb726d48Sopenharmony_ci  rightNs: number,
553fb726d48Sopenharmony_ci  cpuStateFilterIds: Array<number>
554fb726d48Sopenharmony_ci): //@ts-ignore
555fb726d48Sopenharmony_ciPromise<Array<unknown>> => {
556fb726d48Sopenharmony_ci  let str = '';
557fb726d48Sopenharmony_ci  if (cpuStateFilterIds.length > 0) {
558fb726d48Sopenharmony_ci    str = ` and filter_id in (${cpuStateFilterIds.join(',')})`;
559fb726d48Sopenharmony_ci  }
560fb726d48Sopenharmony_ci  return query(
561fb726d48Sopenharmony_ci    'getTabPaneCounterSampleData',
562fb726d48Sopenharmony_ci    `
563fb726d48Sopenharmony_ci    select value, filter_id as filterId, ts, f.cpu
564fb726d48Sopenharmony_ci    from measure left join cpu_measure_filter as f on f.id=filter_id
565fb726d48Sopenharmony_ci    where
566fb726d48Sopenharmony_ci    ts <= $rightNs${str} order by ts asc;
567fb726d48Sopenharmony_ci`,
568fb726d48Sopenharmony_ci    { $leftNs: leftNs, $rightNs: rightNs }, {traceId: Utils.currentSelectTrace}
569fb726d48Sopenharmony_ci  );
570fb726d48Sopenharmony_ci};
571fb726d48Sopenharmony_ciexport const queryJsCpuProfilerConfig = (): //@ts-ignore
572fb726d48Sopenharmony_ciPromise<Array<unknown>> =>
573fb726d48Sopenharmony_ci  query('queryJsCpuProfilerConfig',
574fb726d48Sopenharmony_ci    'SELECT pid, type, enable_cpu_Profiler as enableCpuProfiler FROM js_config');
575fb726d48Sopenharmony_ci
576fb726d48Sopenharmony_ciexport const queryJsCpuProfilerData = (): //@ts-ignore
577fb726d48Sopenharmony_ciPromise<Array<unknown>> => query('queryJsCpuProfilerData',
578fb726d48Sopenharmony_ci  'SELECT 1 WHERE EXISTS(select 1 from js_cpu_profiler_node)');
579fb726d48Sopenharmony_ci
580fb726d48Sopenharmony_ciexport const querySystemCallsTop = (): Promise<
581fb726d48Sopenharmony_ci  Array<{
582fb726d48Sopenharmony_ci    tid: string;
583fb726d48Sopenharmony_ci    pid: string;
584fb726d48Sopenharmony_ci    funName: string;
585fb726d48Sopenharmony_ci    frequency: string;
586fb726d48Sopenharmony_ci    minDur: string;
587fb726d48Sopenharmony_ci    maxDur: string;
588fb726d48Sopenharmony_ci    avgDur: string;
589fb726d48Sopenharmony_ci  }>
590fb726d48Sopenharmony_ci> =>
591fb726d48Sopenharmony_ci  query(
592fb726d48Sopenharmony_ci    'querySystemCallsTop',
593fb726d48Sopenharmony_ci    `SELECT 
594fb726d48Sopenharmony_ci        cpu.tid AS tid, 
595fb726d48Sopenharmony_ci        cpu.pid AS pid, 
596fb726d48Sopenharmony_ci        callstack.name AS funName, 
597fb726d48Sopenharmony_ci        count(callstack.name) AS frequency, 
598fb726d48Sopenharmony_ci        min(callstack.dur) AS minDur, 
599fb726d48Sopenharmony_ci        max(callstack.dur) AS maxDur, 
600fb726d48Sopenharmony_ci        round(avg(callstack.dur)) AS avgDur 
601fb726d48Sopenharmony_ci        FROM 
602fb726d48Sopenharmony_ci        callstack 
603fb726d48Sopenharmony_ci        INNER JOIN 
604fb726d48Sopenharmony_ci        (SELECT 
605fb726d48Sopenharmony_ci            itid AS tid, 
606fb726d48Sopenharmony_ci            ipid AS pid, 
607fb726d48Sopenharmony_ci            group_concat(cpu, ',') AS cpu, 
608fb726d48Sopenharmony_ci            group_concat(dur, ',') AS dur, 
609fb726d48Sopenharmony_ci            group_concat(min_freq, ',') AS min_freq, 
610fb726d48Sopenharmony_ci            group_concat(max_freq, ',') AS max_freq, 
611fb726d48Sopenharmony_ci            group_concat(avg_frequency, ',') AS avg_frequency, 
612fb726d48Sopenharmony_ci            sum(dur * avg_frequency) AS sumNum 
613fb726d48Sopenharmony_ci            FROM 
614fb726d48Sopenharmony_ci            (SELECT 
615fb726d48Sopenharmony_ci                itid, 
616fb726d48Sopenharmony_ci                ipid, 
617fb726d48Sopenharmony_ci                cpu, 
618fb726d48Sopenharmony_ci                CAST (SUM(dur) AS INT) AS dur, 
619fb726d48Sopenharmony_ci                CAST (MIN(freq) AS INT) AS min_freq, 
620fb726d48Sopenharmony_ci                CAST (MAX(freq) AS INT) AS max_freq, 
621fb726d48Sopenharmony_ci                CAST ( (SUM(dur * freq) / SUM(dur) ) AS INT) AS avg_frequency 
622fb726d48Sopenharmony_ci                FROM 
623fb726d48Sopenharmony_ci                result 
624fb726d48Sopenharmony_ci                GROUP BY 
625fb726d48Sopenharmony_ci                itid, cpu
626fb726d48Sopenharmony_ci            ) 
627fb726d48Sopenharmony_ci            GROUP BY 
628fb726d48Sopenharmony_ci            ipid, itid 
629fb726d48Sopenharmony_ci            ORDER BY 
630fb726d48Sopenharmony_ci            sumNum 
631fb726d48Sopenharmony_ci            DESC 
632fb726d48Sopenharmony_ci            LIMIT 10
633fb726d48Sopenharmony_ci        ) AS cpu 
634fb726d48Sopenharmony_ci        ON 
635fb726d48Sopenharmony_ci        callstack.callid = cpu.tid 
636fb726d48Sopenharmony_ci        GROUP BY 
637fb726d48Sopenharmony_ci        callstack.name 
638fb726d48Sopenharmony_ci        ORDER BY 
639fb726d48Sopenharmony_ci        frequency 
640fb726d48Sopenharmony_ci        DESC
641fb726d48Sopenharmony_ci    LIMIT 10`
642fb726d48Sopenharmony_ci  );
643fb726d48Sopenharmony_ci
644fb726d48Sopenharmony_ciexport const queryWakeupListPriority = (
645fb726d48Sopenharmony_ci  itid: number[],
646fb726d48Sopenharmony_ci  ts: number[],
647fb726d48Sopenharmony_ci  cpus: number[]
648fb726d48Sopenharmony_ci): //@ts-ignore
649fb726d48Sopenharmony_ciPromise<Array<unknown>> =>
650fb726d48Sopenharmony_ci  query(
651fb726d48Sopenharmony_ci    'queryWakeupListPriority',
652fb726d48Sopenharmony_ci    `
653fb726d48Sopenharmony_ci    select itid, priority, (ts - start_ts) as ts, dur, cpu
654fb726d48Sopenharmony_ci    from sched_slice,trace_range where cpu in (${cpus.join(',')})
655fb726d48Sopenharmony_ci    and itid in (${itid.join(',')})
656fb726d48Sopenharmony_ci    and ts - start_ts in (${ts.join(',')})
657fb726d48Sopenharmony_ci    `,
658fb726d48Sopenharmony_ci    {},
659fb726d48Sopenharmony_ci    { traceId: Utils.currentSelectTrace }
660fb726d48Sopenharmony_ci  );
661fb726d48Sopenharmony_ci
662fb726d48Sopenharmony_ciexport const getCpuLimitFreqBoxSelect = (
663fb726d48Sopenharmony_ci  arr: Array<{
664fb726d48Sopenharmony_ci    maxFilterId: string;
665fb726d48Sopenharmony_ci    minFilterId: string;
666fb726d48Sopenharmony_ci    cpu: string;
667fb726d48Sopenharmony_ci  }>,
668fb726d48Sopenharmony_ci  rightNS: number
669fb726d48Sopenharmony_ci): //@ts-ignore
670fb726d48Sopenharmony_ciPromise<Array<unknown>> => {
671fb726d48Sopenharmony_ci  let ids = [];
672fb726d48Sopenharmony_ci  let condition = `(case`;
673fb726d48Sopenharmony_ci  for (let item of arr) {
674fb726d48Sopenharmony_ci    condition = `${condition} when filter_id in (${item.maxFilterId}, ${item.minFilterId}) then ${item.cpu}`;
675fb726d48Sopenharmony_ci    ids.push(item.maxFilterId, item.minFilterId);
676fb726d48Sopenharmony_ci  }
677fb726d48Sopenharmony_ci  condition = `${condition} else -1 end) as cpu`;
678fb726d48Sopenharmony_ci  let sql = `
679fb726d48Sopenharmony_ci  select 
680fb726d48Sopenharmony_ci    ts - T.start_ts as startNs,
681fb726d48Sopenharmony_ci    dur,
682fb726d48Sopenharmony_ci    max(value) as max,
683fb726d48Sopenharmony_ci    min(value) as min,
684fb726d48Sopenharmony_ci    ${condition}
685fb726d48Sopenharmony_ci  from measure,trace_range T 
686fb726d48Sopenharmony_ci  where filter_id in (${ids.join(',')})
687fb726d48Sopenharmony_ci    and ts - T.start_ts < ${rightNS} 
688fb726d48Sopenharmony_ci  group by ts
689fb726d48Sopenharmony_ci  `;
690fb726d48Sopenharmony_ci  return query('getCpuLimitFreqBoxSelect', sql, {}, {traceId: Utils.currentSelectTrace});
691fb726d48Sopenharmony_ci};
692fb726d48Sopenharmony_ci
693fb726d48Sopenharmony_ciexport const getCpuLimitFreq = (maxId: number, minId: number, cpu: number):
694fb726d48Sopenharmony_ci  Promise<Array<CpuFreqLimitsStruct>> =>
695fb726d48Sopenharmony_ci  query(
696fb726d48Sopenharmony_ci    'getCpuLimitFreq',
697fb726d48Sopenharmony_ci    `
698fb726d48Sopenharmony_ci    select ts - T.start_ts as startNs,
699fb726d48Sopenharmony_ci           dur,
700fb726d48Sopenharmony_ci           max(value) as max,
701fb726d48Sopenharmony_ci           min(value) as min,
702fb726d48Sopenharmony_ci            $cpu as cpu 
703fb726d48Sopenharmony_ci    from measure,trace_range T where filter_id in ($maxId,$minId) group by ts
704fb726d48Sopenharmony_ci`,
705fb726d48Sopenharmony_ci    { $maxId: maxId, $minId: minId, $cpu: cpu }
706fb726d48Sopenharmony_ci  );
707fb726d48Sopenharmony_ci
708fb726d48Sopenharmony_ciexport const getCpuLimitFreqId = (traceId?: string): Promise<Array<CpuFreqRowLimit>> =>
709fb726d48Sopenharmony_ci  query(
710fb726d48Sopenharmony_ci    'getCpuMaxMinFreqId',
711fb726d48Sopenharmony_ci    `
712fb726d48Sopenharmony_ci    select 
713fb726d48Sopenharmony_ci    cpu,
714fb726d48Sopenharmony_ci    MAX(iif(name = 'cpu_frequency_limits_max',id,0)) as maxFilterId,
715fb726d48Sopenharmony_ci    MAX(iif(name = 'cpu_frequency_limits_min',id,0)) as minFilterId 
716fb726d48Sopenharmony_ci    from cpu_measure_filter 
717fb726d48Sopenharmony_ci    where name in ('cpu_frequency_limits_max','cpu_frequency_limits_min') group by cpu
718fb726d48Sopenharmony_ci`,
719fb726d48Sopenharmony_ci    {},
720fb726d48Sopenharmony_ci    { traceId: traceId }
721fb726d48Sopenharmony_ci  );
722fb726d48Sopenharmony_ci
723fb726d48Sopenharmony_ciexport const getCpuLimitFreqMax = (
724fb726d48Sopenharmony_ci  filterIds: string,
725fb726d48Sopenharmony_ci  traceId?: string
726fb726d48Sopenharmony_ci): Promise<Array<{ maxValue: number; filterId: number }>> => {
727fb726d48Sopenharmony_ci  return query(
728fb726d48Sopenharmony_ci    'getCpuLimitFreqMax',
729fb726d48Sopenharmony_ci    `
730fb726d48Sopenharmony_ci    select max(value) as maxValue,filter_id as filterId 
731fb726d48Sopenharmony_ci    from measure where filter_id in (${filterIds}) group by filter_id
732fb726d48Sopenharmony_ci`,
733fb726d48Sopenharmony_ci    {},
734fb726d48Sopenharmony_ci    { traceId: traceId }
735fb726d48Sopenharmony_ci  );
736fb726d48Sopenharmony_ci};
737