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 { FuncStruct } from '../ui-worker/ProcedureWorkerFunc';
17fb726d48Sopenharmony_ciimport { SearchFuncBean } from '../../bean/SearchFuncBean';
18fb726d48Sopenharmony_ciimport { SelectionData } from '../../bean/BoxSelection';
19fb726d48Sopenharmony_ciimport { HeapTraceFunctionInfo } from '../../../js-heap/model/DatabaseStruct';
20fb726d48Sopenharmony_ciimport { FunctionItem } from '../../bean/BinderProcessThread';
21fb726d48Sopenharmony_ciimport { StateGroup } from '../../bean/StateModle';
22fb726d48Sopenharmony_ciimport { FuncNameCycle } from '../../bean/BinderProcessThread';
23fb726d48Sopenharmony_ciimport { Utils } from '../../component/trace/base/Utils';
24fb726d48Sopenharmony_ci
25fb726d48Sopenharmony_ciexport const queryFuncNameCycle = (
26fb726d48Sopenharmony_ci  funcName: string,
27fb726d48Sopenharmony_ci  tIds: string,
28fb726d48Sopenharmony_ci  leftNS: number,
29fb726d48Sopenharmony_ci  rightNS: number
30fb726d48Sopenharmony_ci): Promise<Array<FunctionItem>> =>
31fb726d48Sopenharmony_ci  query(
32fb726d48Sopenharmony_ci    'queryFuncNameCycle',
33fb726d48Sopenharmony_ci    `
34fb726d48Sopenharmony_ci        SELECT  
35fb726d48Sopenharmony_ci              c.ts - r.start_ts AS cycleStartTime, 
36fb726d48Sopenharmony_ci              c.dur,
37fb726d48Sopenharmony_ci              c.id,
38fb726d48Sopenharmony_ci              t.tid,
39fb726d48Sopenharmony_ci              p.pid
40fb726d48Sopenharmony_ci            FROM 
41fb726d48Sopenharmony_ci                callstack c, trace_range r 
42fb726d48Sopenharmony_ci            LEFT JOIN 
43fb726d48Sopenharmony_ci                thread t 
44fb726d48Sopenharmony_ci            ON 
45fb726d48Sopenharmony_ci                c.callid = t.id 
46fb726d48Sopenharmony_ci            LEFT JOIN
47fb726d48Sopenharmony_ci                process p 
48fb726d48Sopenharmony_ci            ON
49fb726d48Sopenharmony_ci                t.ipid = p.id  
50fb726d48Sopenharmony_ci            WHERE 
51fb726d48Sopenharmony_ci                c.name like '${funcName}%' 
52fb726d48Sopenharmony_ci            AND 
53fb726d48Sopenharmony_ci                t.tid = ${tIds} 
54fb726d48Sopenharmony_ci            AND NOT 
55fb726d48Sopenharmony_ci                ((cycleStartTime < ${leftNS}) 
56fb726d48Sopenharmony_ci            OR 
57fb726d48Sopenharmony_ci                ((c.ts - r.start_ts + c.dur) > ${rightNS}))
58fb726d48Sopenharmony_ci          `,
59fb726d48Sopenharmony_ci    {
60fb726d48Sopenharmony_ci      $funcName: funcName,
61fb726d48Sopenharmony_ci      $tIds: tIds,
62fb726d48Sopenharmony_ci      $leftNS: leftNS,
63fb726d48Sopenharmony_ci      $rightNS: rightNS,
64fb726d48Sopenharmony_ci    },
65fb726d48Sopenharmony_ci    { traceId: Utils.currentSelectTrace }
66fb726d48Sopenharmony_ci  );
67fb726d48Sopenharmony_ci
68fb726d48Sopenharmony_ciexport const querySingleFuncNameCycle = (
69fb726d48Sopenharmony_ci  funcName: string,
70fb726d48Sopenharmony_ci  tIds: string,
71fb726d48Sopenharmony_ci  leftNS: number,
72fb726d48Sopenharmony_ci  rightNS: number
73fb726d48Sopenharmony_ci): Promise<Array<FunctionItem>> =>
74fb726d48Sopenharmony_ci  query(
75fb726d48Sopenharmony_ci    'querySingleFuncNameCycle',
76fb726d48Sopenharmony_ci    `
77fb726d48Sopenharmony_ci      SELECT 
78fb726d48Sopenharmony_ci            c.name AS funcName, 
79fb726d48Sopenharmony_ci            c.ts - r.start_ts AS cycleStartTime, 
80fb726d48Sopenharmony_ci            c.dur AS cycleDur,
81fb726d48Sopenharmony_ci            c.id,
82fb726d48Sopenharmony_ci            t.tid,
83fb726d48Sopenharmony_ci            p.pid,
84fb726d48Sopenharmony_ci            c.ts - r.start_ts + c.dur AS endTime
85fb726d48Sopenharmony_ci          FROM 
86fb726d48Sopenharmony_ci              callstack c, trace_range r 
87fb726d48Sopenharmony_ci          LEFT JOIN 
88fb726d48Sopenharmony_ci              thread t 
89fb726d48Sopenharmony_ci          ON 
90fb726d48Sopenharmony_ci              c.callid = t.id 
91fb726d48Sopenharmony_ci          LEFT JOIN
92fb726d48Sopenharmony_ci              process p 
93fb726d48Sopenharmony_ci          ON
94fb726d48Sopenharmony_ci              t.ipid = p.id  
95fb726d48Sopenharmony_ci          WHERE 
96fb726d48Sopenharmony_ci              c.name = '${funcName}'
97fb726d48Sopenharmony_ci          AND 
98fb726d48Sopenharmony_ci              t.tid = ${tIds} 
99fb726d48Sopenharmony_ci          AND NOT 
100fb726d48Sopenharmony_ci              ((cycleStartTime < ${leftNS}) 
101fb726d48Sopenharmony_ci          OR 
102fb726d48Sopenharmony_ci              (endTime > ${rightNS}))
103fb726d48Sopenharmony_ci        `,
104fb726d48Sopenharmony_ci    {
105fb726d48Sopenharmony_ci      $funcName: funcName,
106fb726d48Sopenharmony_ci      $tIds: tIds,
107fb726d48Sopenharmony_ci      $leftNS: leftNS,
108fb726d48Sopenharmony_ci      $rightNS: rightNS,
109fb726d48Sopenharmony_ci    }
110fb726d48Sopenharmony_ci  );
111fb726d48Sopenharmony_ci
112fb726d48Sopenharmony_ciexport const queryAllFuncNames = async (traceId?: string): Promise<Array<unknown>> => {
113fb726d48Sopenharmony_ci  let list = await query(
114fb726d48Sopenharmony_ci    'queryIsColorIndex',
115fb726d48Sopenharmony_ci    `select
116fb726d48Sopenharmony_ci        colorIndex
117fb726d48Sopenharmony_ci      from
118fb726d48Sopenharmony_ci        callstack
119fb726d48Sopenharmony_ci      limit 1;`,
120fb726d48Sopenharmony_ci    {},
121fb726d48Sopenharmony_ci    { traceId: traceId, action: 'exec-buf' }
122fb726d48Sopenharmony_ci  );
123fb726d48Sopenharmony_ci  let isColorIndex = list.length !== 0 ? true : false;
124fb726d48Sopenharmony_ci  let colorIndexStr = isColorIndex ? ',colorIndex' : '';
125fb726d48Sopenharmony_ci  let allFuncNamesBuffer = await query(
126fb726d48Sopenharmony_ci    'queryAllFuncNames',
127fb726d48Sopenharmony_ci    `select 
128fb726d48Sopenharmony_ci        id,
129fb726d48Sopenharmony_ci        name
130fb726d48Sopenharmony_ci        ${colorIndexStr} 
131fb726d48Sopenharmony_ci      from
132fb726d48Sopenharmony_ci        callstack;`,
133fb726d48Sopenharmony_ci    {},
134fb726d48Sopenharmony_ci    { traceId: traceId, action: 'exec-buf' }
135fb726d48Sopenharmony_ci  );
136fb726d48Sopenharmony_ci  // @ts-ignore
137fb726d48Sopenharmony_ci  return Utils.convertJSON(allFuncNamesBuffer);
138fb726d48Sopenharmony_ci};
139fb726d48Sopenharmony_ci
140fb726d48Sopenharmony_ciexport const queryProcessAsyncFunc = (
141fb726d48Sopenharmony_ci  traceRange: {
142fb726d48Sopenharmony_ci    startTs: number;
143fb726d48Sopenharmony_ci    endTs: number;
144fb726d48Sopenharmony_ci  },
145fb726d48Sopenharmony_ci  traceId?: string
146fb726d48Sopenharmony_ci): //@ts-ignore
147fb726d48Sopenharmony_ci  Promise<Array<unknown>> =>
148fb726d48Sopenharmony_ci  query(
149fb726d48Sopenharmony_ci    'queryProcessAsyncFunc',
150fb726d48Sopenharmony_ci    `SELECT
151fb726d48Sopenharmony_ci      A.tid,
152fb726d48Sopenharmony_ci      P.pid,
153fb726d48Sopenharmony_ci      c.ts-${traceRange.startTs} as startTs,
154fb726d48Sopenharmony_ci      c.dur,
155fb726d48Sopenharmony_ci      c.cat,
156fb726d48Sopenharmony_ci      c.id,
157fb726d48Sopenharmony_ci      c.depth,
158fb726d48Sopenharmony_ci      c.argsetid,
159fb726d48Sopenharmony_ci      c.cookie
160fb726d48Sopenharmony_ci    FROM
161fb726d48Sopenharmony_ci      (SELECT id, ts, parent_id, dur, depth, argsetid, cookie, cat from callstack where cookie NOT NULL) c
162fb726d48Sopenharmony_ci    LEFT JOIN thread A ON A.id = c.parent_id
163fb726d48Sopenharmony_ci    LEFT JOIN process P ON P.id = A.ipid
164fb726d48Sopenharmony_ci    WHERE
165fb726d48Sopenharmony_ci      startTs NOT NULL;`,
166fb726d48Sopenharmony_ci    {},
167fb726d48Sopenharmony_ci    { traceId: traceId }
168fb726d48Sopenharmony_ci  );
169fb726d48Sopenharmony_ci
170fb726d48Sopenharmony_ciexport const queryProcessAsyncFuncCat = (
171fb726d48Sopenharmony_ci  traceRange: {
172fb726d48Sopenharmony_ci    startTs: number;
173fb726d48Sopenharmony_ci    endTs: number;
174fb726d48Sopenharmony_ci  }
175fb726d48Sopenharmony_ci): Promise<Array<unknown>> =>
176fb726d48Sopenharmony_ci  query(
177fb726d48Sopenharmony_ci    'queryProcessAsyncFuncCat',
178fb726d48Sopenharmony_ci    `
179fb726d48Sopenharmony_ci    select 
180fb726d48Sopenharmony_ci      A.tid,
181fb726d48Sopenharmony_ci      P.pid,   
182fb726d48Sopenharmony_ci      c.cat as threadName,
183fb726d48Sopenharmony_ci      c.name as funName,
184fb726d48Sopenharmony_ci      c.ts-${traceRange.startTs} as startTs,
185fb726d48Sopenharmony_ci      c.dur,
186fb726d48Sopenharmony_ci      c.depth,
187fb726d48Sopenharmony_ci      c.cookie
188fb726d48Sopenharmony_ci    from 
189fb726d48Sopenharmony_ci      (select callid, name, ts, dur, cat, depth, cookie, parent_id from callstack where cookie not null and cat not null and parent_id is null) C
190fb726d48Sopenharmony_ci		left join 
191fb726d48Sopenharmony_ci      thread A on A.id = C.callid
192fb726d48Sopenharmony_ci    left join 
193fb726d48Sopenharmony_ci      process P on P.id = A.ipid      
194fb726d48Sopenharmony_ci    where 
195fb726d48Sopenharmony_ci      startTs not null 
196fb726d48Sopenharmony_ci    order by cat;
197fb726d48Sopenharmony_ci  `,
198fb726d48Sopenharmony_ci    {}
199fb726d48Sopenharmony_ci  );
200fb726d48Sopenharmony_ci
201fb726d48Sopenharmony_ciexport const getMaxDepthByTid = (traceId?: string): //@ts-ignore
202fb726d48Sopenharmony_ci  Promise<Array<unknown>> =>
203fb726d48Sopenharmony_ci  query(
204fb726d48Sopenharmony_ci    'getMaxDepthByTid',
205fb726d48Sopenharmony_ci    `SELECT 
206fb726d48Sopenharmony_ci      tid,
207fb726d48Sopenharmony_ci      ipid,
208fb726d48Sopenharmony_ci      maxDepth 
209fb726d48Sopenharmony_ci    FROM
210fb726d48Sopenharmony_ci      thread T
211fb726d48Sopenharmony_ci      LEFT JOIN (
212fb726d48Sopenharmony_ci      SELECT
213fb726d48Sopenharmony_ci        callid,
214fb726d48Sopenharmony_ci        MAX( c.depth + 1 ) AS maxDepth 
215fb726d48Sopenharmony_ci      FROM
216fb726d48Sopenharmony_ci        callstack C 
217fb726d48Sopenharmony_ci      WHERE
218fb726d48Sopenharmony_ci        c.ts IS NOT NULL 
219fb726d48Sopenharmony_ci        AND c.cookie IS NULL 
220fb726d48Sopenharmony_ci      GROUP BY
221fb726d48Sopenharmony_ci        callid 
222fb726d48Sopenharmony_ci      ) C ON T.id = C.callid 
223fb726d48Sopenharmony_ci    WHERE
224fb726d48Sopenharmony_ci      maxDepth NOT NULL`,
225fb726d48Sopenharmony_ci    {},
226fb726d48Sopenharmony_ci    { traceId: traceId }
227fb726d48Sopenharmony_ci  );
228fb726d48Sopenharmony_ci
229fb726d48Sopenharmony_ciexport const querySearchFuncData = (
230fb726d48Sopenharmony_ci  funcName: string,
231fb726d48Sopenharmony_ci  tIds: number,
232fb726d48Sopenharmony_ci  leftNS: number,
233fb726d48Sopenharmony_ci  rightNS: number
234fb726d48Sopenharmony_ci): Promise<Array<SearchFuncBean>> =>
235fb726d48Sopenharmony_ci  query(
236fb726d48Sopenharmony_ci    'querySearchFuncData',
237fb726d48Sopenharmony_ci    `select 
238fb726d48Sopenharmony_ci      c.ts - r.start_ts as startTime,
239fb726d48Sopenharmony_ci      c.dur
240fb726d48Sopenharmony_ci    from 
241fb726d48Sopenharmony_ci      callstack c 
242fb726d48Sopenharmony_ci    left join 
243fb726d48Sopenharmony_ci      thread t 
244fb726d48Sopenharmony_ci    on 
245fb726d48Sopenharmony_ci      c.callid = t.id 
246fb726d48Sopenharmony_ci    left join 
247fb726d48Sopenharmony_ci      process p 
248fb726d48Sopenharmony_ci    on 
249fb726d48Sopenharmony_ci      t.ipid = p.id
250fb726d48Sopenharmony_ci    left join 
251fb726d48Sopenharmony_ci      trace_range r
252fb726d48Sopenharmony_ci    where 
253fb726d48Sopenharmony_ci      c.name like '${funcName}%' 
254fb726d48Sopenharmony_ci    and 
255fb726d48Sopenharmony_ci      t.tid = ${tIds} 
256fb726d48Sopenharmony_ci    and
257fb726d48Sopenharmony_ci      not ((startTime < ${leftNS}) or (startTime > ${rightNS}));
258fb726d48Sopenharmony_ci      `
259fb726d48Sopenharmony_ci  );
260fb726d48Sopenharmony_ci
261fb726d48Sopenharmony_ciexport const queryFuncRowData = (funcName: string, tIds: number): Promise<Array<SearchFuncBean>> =>
262fb726d48Sopenharmony_ci  query(
263fb726d48Sopenharmony_ci    'queryFuncRowData',
264fb726d48Sopenharmony_ci    `select 
265fb726d48Sopenharmony_ci      c.name as funName,
266fb726d48Sopenharmony_ci      c.ts - r.start_ts as startTime,
267fb726d48Sopenharmony_ci      t.tid as tid
268fb726d48Sopenharmony_ci    from 
269fb726d48Sopenharmony_ci      callstack c 
270fb726d48Sopenharmony_ci    left join 
271fb726d48Sopenharmony_ci      thread t 
272fb726d48Sopenharmony_ci    on 
273fb726d48Sopenharmony_ci      c.callid = t.id 
274fb726d48Sopenharmony_ci    left join 
275fb726d48Sopenharmony_ci      process p 
276fb726d48Sopenharmony_ci    on 
277fb726d48Sopenharmony_ci      t.ipid = p.id
278fb726d48Sopenharmony_ci    left join 
279fb726d48Sopenharmony_ci      trace_range r
280fb726d48Sopenharmony_ci    where 
281fb726d48Sopenharmony_ci      c.name like '${funcName}%' 
282fb726d48Sopenharmony_ci    and 
283fb726d48Sopenharmony_ci      t.tid = ${tIds} 
284fb726d48Sopenharmony_ci              `,
285fb726d48Sopenharmony_ci    { $search: funcName }
286fb726d48Sopenharmony_ci  );
287fb726d48Sopenharmony_ci
288fb726d48Sopenharmony_ciexport const fuzzyQueryFuncRowData = (funcName: string, tIds: number):
289fb726d48Sopenharmony_ci  Promise<Array<SearchFuncBean>> =>
290fb726d48Sopenharmony_ci  query(
291fb726d48Sopenharmony_ci    'fuzzyQueryFuncRowData',
292fb726d48Sopenharmony_ci    `select 
293fb726d48Sopenharmony_ci        c.name as funName,
294fb726d48Sopenharmony_ci        c.ts - r.start_ts as startTime,
295fb726d48Sopenharmony_ci        c.ts - r.start_ts + c.dur as endTime,
296fb726d48Sopenharmony_ci        t.tid as tid
297fb726d48Sopenharmony_ci      from 
298fb726d48Sopenharmony_ci        callstack c 
299fb726d48Sopenharmony_ci      left join 
300fb726d48Sopenharmony_ci        thread t 
301fb726d48Sopenharmony_ci      on 
302fb726d48Sopenharmony_ci        c.callid = t.id 
303fb726d48Sopenharmony_ci      left join 
304fb726d48Sopenharmony_ci        process p 
305fb726d48Sopenharmony_ci      on 
306fb726d48Sopenharmony_ci        t.ipid = p.id
307fb726d48Sopenharmony_ci      left join 
308fb726d48Sopenharmony_ci        trace_range r
309fb726d48Sopenharmony_ci      where 
310fb726d48Sopenharmony_ci        c.name like '%${funcName}%' 
311fb726d48Sopenharmony_ci      and 
312fb726d48Sopenharmony_ci        t.tid = ${tIds} 
313fb726d48Sopenharmony_ci              `,
314fb726d48Sopenharmony_ci    { $search: funcName }
315fb726d48Sopenharmony_ci  );
316fb726d48Sopenharmony_ci
317fb726d48Sopenharmony_ciexport const getTabSlicesAsyncFunc = (
318fb726d48Sopenharmony_ci  asyncNames: string[],
319fb726d48Sopenharmony_ci  asyncPid: number,
320fb726d48Sopenharmony_ci  asyncTid: number | undefined,
321fb726d48Sopenharmony_ci  leftNS: number,
322fb726d48Sopenharmony_ci  rightNS: number
323fb726d48Sopenharmony_ci): //@ts-ignore
324fb726d48Sopenharmony_ci  Promise<Array<unknown>> => {
325fb726d48Sopenharmony_ci  let condition = `${asyncTid !== null && asyncTid !== undefined ? `and A.tid = ${asyncTid}` : ''}`;
326fb726d48Sopenharmony_ci  let sql = `
327fb726d48Sopenharmony_ci    SELECT 
328fb726d48Sopenharmony_ci      c.name AS name,
329fb726d48Sopenharmony_ci      sum( c.dur ) AS wallDuration,
330fb726d48Sopenharmony_ci      count( c.name ) AS occurrences 
331fb726d48Sopenharmony_ci      FROM
332fb726d48Sopenharmony_ci      (SELECT id, ts, parent_id, dur, name from callstack where cookie NOT NULL) C,
333fb726d48Sopenharmony_ci      trace_range D
334fb726d48Sopenharmony_ci      LEFT JOIN thread A ON A.id = C.parent_id
335fb726d48Sopenharmony_ci      LEFT JOIN process P ON P.id = A.ipid
336fb726d48Sopenharmony_ci    where
337fb726d48Sopenharmony_ci      C.ts > 0
338fb726d48Sopenharmony_ci    and
339fb726d48Sopenharmony_ci      c.dur >= -1
340fb726d48Sopenharmony_ci    and
341fb726d48Sopenharmony_ci      P.pid = ${asyncPid}
342fb726d48Sopenharmony_ci    and
343fb726d48Sopenharmony_ci      c.name in (${asyncNames.map((it) => '\"' + it + '\"').join(',')})
344fb726d48Sopenharmony_ci    and
345fb726d48Sopenharmony_ci      not ((C.ts - D.start_ts + C.dur <  ${leftNS}) or (C.ts - D.start_ts > ${rightNS})) ${condition}
346fb726d48Sopenharmony_ci    group by
347fb726d48Sopenharmony_ci      c.name
348fb726d48Sopenharmony_ci    order by
349fb726d48Sopenharmony_ci    wallDuration desc;`;
350fb726d48Sopenharmony_ci  return query<SelectionData>('getTabSlicesAsyncFunc', sql, {});
351fb726d48Sopenharmony_ci};
352fb726d48Sopenharmony_ci
353fb726d48Sopenharmony_ciexport const getTabDetails = (
354fb726d48Sopenharmony_ci  asyncNames: Array<string>,
355fb726d48Sopenharmony_ci  asyncPid: Array<number>,
356fb726d48Sopenharmony_ci  funTids: Array<number>,
357fb726d48Sopenharmony_ci  leftNS: number,
358fb726d48Sopenharmony_ci  rightNS: number
359fb726d48Sopenharmony_ci): //@ts-ignore
360fb726d48Sopenharmony_ci  Promise<Array<unknown>> => {
361fb726d48Sopenharmony_ci  let condition = `
362fb726d48Sopenharmony_ci      and A.tid in (${funTids!.join(',')})
363fb726d48Sopenharmony_ci      and c.cookie is null
364fb726d48Sopenharmony_ci      ${`and P.pid in (${asyncPid.join(',')})`}
365fb726d48Sopenharmony_ci      ${`and c.name in (${asyncNames.map((it) => '\"' + it + '\"').join(',')})`}
366fb726d48Sopenharmony_ci    `;
367fb726d48Sopenharmony_ci  let sql = `
368fb726d48Sopenharmony_ci      SELECT 
369fb726d48Sopenharmony_ci        c.name AS name,
370fb726d48Sopenharmony_ci        c.dur AS duration,
371fb726d48Sopenharmony_ci        P.pid AS processId,
372fb726d48Sopenharmony_ci        P.name AS process,
373fb726d48Sopenharmony_ci        A.tid AS threadId,
374fb726d48Sopenharmony_ci        A.name AS thread,
375fb726d48Sopenharmony_ci        c.ts - D.start_ts as startNs   
376fb726d48Sopenharmony_ci      FROM
377fb726d48Sopenharmony_ci        thread A,trace_range D
378fb726d48Sopenharmony_ci        LEFT JOIN process P ON P.id = A.ipid
379fb726d48Sopenharmony_ci        LEFT JOIN callstack C ON A.id = C.callid
380fb726d48Sopenharmony_ci      where
381fb726d48Sopenharmony_ci          C.ts > 0
382fb726d48Sopenharmony_ci        and
383fb726d48Sopenharmony_ci          c.dur >= -1
384fb726d48Sopenharmony_ci        and
385fb726d48Sopenharmony_ci          not ((C.ts - D.start_ts + C.dur < ${leftNS}) or (C.ts - D.start_ts > ${rightNS})) ${condition}
386fb726d48Sopenharmony_ci    `;
387fb726d48Sopenharmony_ci  return query('getTabDetails', sql, {});
388fb726d48Sopenharmony_ci};
389fb726d48Sopenharmony_ciexport const getSfDetails = (
390fb726d48Sopenharmony_ci  asyncNames: Array<string>,
391fb726d48Sopenharmony_ci  asyncPid: number,
392fb726d48Sopenharmony_ci  asyncTid: number | undefined,
393fb726d48Sopenharmony_ci  leftNS: number,
394fb726d48Sopenharmony_ci  rightNS: number
395fb726d48Sopenharmony_ci): //@ts-ignore
396fb726d48Sopenharmony_ci  Promise<Array<unknown>> => {
397fb726d48Sopenharmony_ci  let condition = `
398fb726d48Sopenharmony_ci      and c.parent_id not null
399fb726d48Sopenharmony_ci      ${asyncTid !== null && asyncTid !== undefined ? `and A.tid = ${asyncTid}` : ''}
400fb726d48Sopenharmony_ci      ${`and P.pid = ${asyncPid}`}
401fb726d48Sopenharmony_ci      ${`and c.name in (${asyncNames.map((it) => '\"' + it + '\"').join(',')})`}
402fb726d48Sopenharmony_ci    `;
403fb726d48Sopenharmony_ci  let sql = `
404fb726d48Sopenharmony_ci      SELECT 
405fb726d48Sopenharmony_ci        c.name AS name,
406fb726d48Sopenharmony_ci        c.dur AS duration,
407fb726d48Sopenharmony_ci        P.pid AS processId,
408fb726d48Sopenharmony_ci        P.name AS process,
409fb726d48Sopenharmony_ci        A.tid AS threadId,
410fb726d48Sopenharmony_ci        A.name AS thread,
411fb726d48Sopenharmony_ci        c.ts - D.start_ts as startNs
412fb726d48Sopenharmony_ci        FROM
413fb726d48Sopenharmony_ci        (SELECT id, ts, parent_id, dur, name from callstack where cookie NOT NULL) C,
414fb726d48Sopenharmony_ci        trace_range D
415fb726d48Sopenharmony_ci        LEFT JOIN thread A ON A.id = C.parent_id
416fb726d48Sopenharmony_ci        LEFT JOIN process P ON P.id = A.ipid
417fb726d48Sopenharmony_ci      where
418fb726d48Sopenharmony_ci          C.ts > 0
419fb726d48Sopenharmony_ci        and
420fb726d48Sopenharmony_ci          c.dur >= -1
421fb726d48Sopenharmony_ci        and
422fb726d48Sopenharmony_ci          not ((C.ts - D.start_ts + C.dur < ${leftNS}) or (C.ts - D.start_ts > ${rightNS})) ${condition}
423fb726d48Sopenharmony_ci    `;
424fb726d48Sopenharmony_ci  return query('getSfDetails', sql, {});
425fb726d48Sopenharmony_ci};
426fb726d48Sopenharmony_ciexport const getGhDetails = (
427fb726d48Sopenharmony_ci  asyncNames: Array<string>,
428fb726d48Sopenharmony_ci  catName: string,
429fb726d48Sopenharmony_ci  asyncPid: number,
430fb726d48Sopenharmony_ci  leftNS: number,
431fb726d48Sopenharmony_ci  rightNS: number
432fb726d48Sopenharmony_ci): //@ts-ignore
433fb726d48Sopenharmony_ci  Promise<Array<unknown>> => {
434fb726d48Sopenharmony_ci  let sql = `
435fb726d48Sopenharmony_ci        SELECT 
436fb726d48Sopenharmony_ci          c.name AS name,
437fb726d48Sopenharmony_ci          c.dur AS duration,
438fb726d48Sopenharmony_ci          P.pid AS processId,
439fb726d48Sopenharmony_ci          P.name AS process,
440fb726d48Sopenharmony_ci          A.tid AS threadId,
441fb726d48Sopenharmony_ci          A.name AS thread,
442fb726d48Sopenharmony_ci          c.ts - D.start_ts as startNs
443fb726d48Sopenharmony_ci        FROM
444fb726d48Sopenharmony_ci          thread A,trace_range D
445fb726d48Sopenharmony_ci          LEFT JOIN process P ON P.id = A.ipid
446fb726d48Sopenharmony_ci          LEFT JOIN callstack C ON A.id = C.callid
447fb726d48Sopenharmony_ci        where
448fb726d48Sopenharmony_ci            C.ts > 0
449fb726d48Sopenharmony_ci          and
450fb726d48Sopenharmony_ci            c.dur >= -1
451fb726d48Sopenharmony_ci          and 
452fb726d48Sopenharmony_ci            c.cookie not null
453fb726d48Sopenharmony_ci          and 
454fb726d48Sopenharmony_ci            c.cat not null
455fb726d48Sopenharmony_ci          and 
456fb726d48Sopenharmony_ci            c.parent_id is null
457fb726d48Sopenharmony_ci          and 
458fb726d48Sopenharmony_ci            P.pid = ${asyncPid}
459fb726d48Sopenharmony_ci          and
460fb726d48Sopenharmony_ci            cat = '${catName}'
461fb726d48Sopenharmony_ci          and 
462fb726d48Sopenharmony_ci            c.name in (${asyncNames.map((it) => '\"' + it + '\"').join(',')})
463fb726d48Sopenharmony_ci          and
464fb726d48Sopenharmony_ci          not ((C.ts - D.start_ts + C.dur < ${leftNS}) or (C.ts - D.start_ts > ${rightNS}))
465fb726d48Sopenharmony_ci      `;
466fb726d48Sopenharmony_ci  return query('getGhDetails', sql, {});
467fb726d48Sopenharmony_ci};
468fb726d48Sopenharmony_ciexport const getTabSlicesAsyncCatFunc = (
469fb726d48Sopenharmony_ci  asyncCatNames: string,
470fb726d48Sopenharmony_ci  asyncCatPid: number,
471fb726d48Sopenharmony_ci  leftNS: number,
472fb726d48Sopenharmony_ci  rightNS: number
473fb726d48Sopenharmony_ci): Promise<Array<unknown>> =>
474fb726d48Sopenharmony_ci  query<SelectionData>(
475fb726d48Sopenharmony_ci    'getTabSlicesAsyncCatFunc',
476fb726d48Sopenharmony_ci    `
477fb726d48Sopenharmony_ci        select
478fb726d48Sopenharmony_ci          c.name as name,
479fb726d48Sopenharmony_ci          sum(c.dur) as wallDuration,
480fb726d48Sopenharmony_ci          count(c.name) as occurrences
481fb726d48Sopenharmony_ci        from
482fb726d48Sopenharmony_ci          thread A, trace_range D
483fb726d48Sopenharmony_ci        left join process P on P.id = A.ipid
484fb726d48Sopenharmony_ci        left join callstack C on A.id = C.callid
485fb726d48Sopenharmony_ci        where
486fb726d48Sopenharmony_ci          C.ts > 0
487fb726d48Sopenharmony_ci        and
488fb726d48Sopenharmony_ci          c.dur >= -1
489fb726d48Sopenharmony_ci        and 
490fb726d48Sopenharmony_ci          c.cookie not null
491fb726d48Sopenharmony_ci        and
492fb726d48Sopenharmony_ci          c.cat not null
493fb726d48Sopenharmony_ci        and 
494fb726d48Sopenharmony_ci          c.parent_id is null
495fb726d48Sopenharmony_ci        and
496fb726d48Sopenharmony_ci          P.pid = ${asyncCatPid}
497fb726d48Sopenharmony_ci        and
498fb726d48Sopenharmony_ci          c.cat = '${asyncCatNames}'
499fb726d48Sopenharmony_ci        and
500fb726d48Sopenharmony_ci          not ((C.ts - D.start_ts + C.dur < ${leftNS}) or (C.ts - D.start_ts > ${rightNS}))
501fb726d48Sopenharmony_ci        group by
502fb726d48Sopenharmony_ci          c.name
503fb726d48Sopenharmony_ci        order by
504fb726d48Sopenharmony_ci          wallDuration desc;`,
505fb726d48Sopenharmony_ci    { $leftNS: leftNS, $rightNS: rightNS }
506fb726d48Sopenharmony_ci  );
507fb726d48Sopenharmony_ci
508fb726d48Sopenharmony_ciexport const querySearchFunc = (search: string): Promise<Array<SearchFuncBean>> =>
509fb726d48Sopenharmony_ci  query(
510fb726d48Sopenharmony_ci    'querySearchFunc',
511fb726d48Sopenharmony_ci    `
512fb726d48Sopenharmony_ci   select c.cookie,
513fb726d48Sopenharmony_ci          c.id,
514fb726d48Sopenharmony_ci          c.name as funName,
515fb726d48Sopenharmony_ci          c.ts - r.start_ts as startTime,
516fb726d48Sopenharmony_ci          c.dur,
517fb726d48Sopenharmony_ci          c.depth,
518fb726d48Sopenharmony_ci          t.tid,
519fb726d48Sopenharmony_ci          t.name as threadName,
520fb726d48Sopenharmony_ci          p.pid,
521fb726d48Sopenharmony_ci          c.argsetid,
522fb726d48Sopenharmony_ci          'func' as type 
523fb726d48Sopenharmony_ci   from callstack c left join thread t on c.callid = t.id left join process p on t.ipid = p.id
524fb726d48Sopenharmony_ci   left join trace_range r 
525fb726d48Sopenharmony_ci   where c.name like '%${search}%' and startTime > 0 and cookie IS NULL;
526fb726d48Sopenharmony_ci    `,
527fb726d48Sopenharmony_ci    { $search: search },
528fb726d48Sopenharmony_ci    { traceId: Utils.currentSelectTrace }
529fb726d48Sopenharmony_ci  );
530fb726d48Sopenharmony_ci
531fb726d48Sopenharmony_ciexport const querySceneSearchFunc = (search: string, processList: Array<string>):
532fb726d48Sopenharmony_ci  Promise<Array<SearchFuncBean>> =>
533fb726d48Sopenharmony_ci  query(
534fb726d48Sopenharmony_ci    'querySceneSearchFunc',
535fb726d48Sopenharmony_ci    `select c.cookie,
536fb726d48Sopenharmony_ci          c.id,
537fb726d48Sopenharmony_ci          c.name as funName,
538fb726d48Sopenharmony_ci          c.ts - r.start_ts as startTime,
539fb726d48Sopenharmony_ci          c.dur,
540fb726d48Sopenharmony_ci          c.depth,
541fb726d48Sopenharmony_ci          t.tid,
542fb726d48Sopenharmony_ci          t.name as threadName,
543fb726d48Sopenharmony_ci          p.pid,
544fb726d48Sopenharmony_ci          c.argsetid,
545fb726d48Sopenharmony_ci          'func' as type 
546fb726d48Sopenharmony_ci   from callstack c left join thread t on c.callid = t.id left join process p on t.ipid = p.id
547fb726d48Sopenharmony_ci   left join trace_range r
548fb726d48Sopenharmony_ci   where c.name like '%${search}%' ESCAPE '\\' and startTime > 0 and p.pid in (${processList.join(',')}) 
549fb726d48Sopenharmony_ci   and cookie IS NULL;
550fb726d48Sopenharmony_ci    `,
551fb726d48Sopenharmony_ci    { $search: search },
552fb726d48Sopenharmony_ci    { traceId: Utils.currentSelectTrace }
553fb726d48Sopenharmony_ci  );
554fb726d48Sopenharmony_ci
555fb726d48Sopenharmony_ciexport const queryHeapFunction = (fileId: number): Promise<Array<HeapTraceFunctionInfo>> =>
556fb726d48Sopenharmony_ci  query(
557fb726d48Sopenharmony_ci    'queryHeapFunction',
558fb726d48Sopenharmony_ci    `SELECT 
559fb726d48Sopenharmony_ci      function_index as index ,
560fb726d48Sopenharmony_ci      function_id as id ,
561fb726d48Sopenharmony_ci      name,
562fb726d48Sopenharmony_ci      script_name as scriptName,
563fb726d48Sopenharmony_ci      script_id as scriptId,
564fb726d48Sopenharmony_ci      line,
565fb726d48Sopenharmony_ci      column
566fb726d48Sopenharmony_ci    FROM js_heap_trace_function_info WHERE file_id = ${fileId}`
567fb726d48Sopenharmony_ci  );
568fb726d48Sopenharmony_ci
569fb726d48Sopenharmony_ciexport const queryHeapTraceNode = (
570fb726d48Sopenharmony_ci  fileId: number
571fb726d48Sopenharmony_ci): //@ts-ignore
572fb726d48Sopenharmony_ci  Promise<Array<unknown>> =>
573fb726d48Sopenharmony_ci  query(
574fb726d48Sopenharmony_ci    'queryHeapTraceNode',
575fb726d48Sopenharmony_ci    `SELECT F.name,
576fb726d48Sopenharmony_ci        F.script_name as scriptName,
577fb726d48Sopenharmony_ci        F.script_id as scriptId,
578fb726d48Sopenharmony_ci        F.column,
579fb726d48Sopenharmony_ci        F.line,
580fb726d48Sopenharmony_ci        N.id,
581fb726d48Sopenharmony_ci        N.function_info_index as functionInfoIndex,
582fb726d48Sopenharmony_ci        N.parent_id as parentId,
583fb726d48Sopenharmony_ci        N.count,
584fb726d48Sopenharmony_ci        N.size,
585fb726d48Sopenharmony_ci        IFNULL( S.live_count, 0 ) AS liveCount,
586fb726d48Sopenharmony_ci        IFNULL( S.live_size, 0 ) AS liveSize
587fb726d48Sopenharmony_ci    FROM
588fb726d48Sopenharmony_ci        js_heap_trace_node N
589fb726d48Sopenharmony_ci        LEFT JOIN (
590fb726d48Sopenharmony_ci            SELECT
591fb726d48Sopenharmony_ci                trace_node_id as traceNodeId,
592fb726d48Sopenharmony_ci                SUM( self_size ) AS liveSize,
593fb726d48Sopenharmony_ci                count( * ) AS liveCount
594fb726d48Sopenharmony_ci            FROM
595fb726d48Sopenharmony_ci                js_heap_nodes
596fb726d48Sopenharmony_ci            WHERE
597fb726d48Sopenharmony_ci                file_id = ${fileId}
598fb726d48Sopenharmony_ci                AND trace_node_id != 0
599fb726d48Sopenharmony_ci            GROUP BY
600fb726d48Sopenharmony_ci                trace_node_id
601fb726d48Sopenharmony_ci        ) S ON N.id = S.trace_node_id
602fb726d48Sopenharmony_ci    LEFT JOIN js_heap_trace_function_info F ON (F.file_id = N.file_id
603fb726d48Sopenharmony_ci                AND F.function_index = N.function_info_index)
604fb726d48Sopenharmony_ci    WHERE
605fb726d48Sopenharmony_ci        N.file_id = ${fileId}
606fb726d48Sopenharmony_ci    ORDER BY
607fb726d48Sopenharmony_ci        N.id`
608fb726d48Sopenharmony_ci  );
609fb726d48Sopenharmony_ci
610fb726d48Sopenharmony_ciexport const queryTaskPoolOtherRelationData = (ids: Array<number>, tid: number):
611fb726d48Sopenharmony_ci  Promise<Array<FuncStruct>> => {
612fb726d48Sopenharmony_ci  let sqlStr = `select
613fb726d48Sopenharmony_ci                    c.ts-D.start_ts as startTs,
614fb726d48Sopenharmony_ci                    c.dur,
615fb726d48Sopenharmony_ci                    c.name as funName,
616fb726d48Sopenharmony_ci                    c.argsetid,
617fb726d48Sopenharmony_ci                    c.depth,
618fb726d48Sopenharmony_ci                    c.id as id,
619fb726d48Sopenharmony_ci                    A.itid as itid,
620fb726d48Sopenharmony_ci                    A.ipid as ipid
621fb726d48Sopenharmony_ci                from thread A,trace_range D
622fb726d48Sopenharmony_ci                                  left join callstack C on A.id = C.callid
623fb726d48Sopenharmony_ci                where startTs not null and c.cookie is null and tid = $tid and c.id in (${ids.join(',')})`;
624fb726d48Sopenharmony_ci  return query('queryTaskPoolOtherRelationData', sqlStr, { $ids: ids, $tid: tid });
625fb726d48Sopenharmony_ci};
626fb726d48Sopenharmony_ci
627fb726d48Sopenharmony_ciexport const queryTaskPoolRelationData = (ids: Array<number>, tids: Array<number>):
628fb726d48Sopenharmony_ci  Promise<Array<FuncStruct>> => {
629fb726d48Sopenharmony_ci  let sqlStr = `select
630fb726d48Sopenharmony_ci        c.ts-D.start_ts as startTs,
631fb726d48Sopenharmony_ci        c.dur,
632fb726d48Sopenharmony_ci        c.name as funName,
633fb726d48Sopenharmony_ci        c.argsetid,
634fb726d48Sopenharmony_ci        c.depth,
635fb726d48Sopenharmony_ci        c.id as id,
636fb726d48Sopenharmony_ci        A.itid as itid,
637fb726d48Sopenharmony_ci        A.ipid as ipid
638fb726d48Sopenharmony_ci    from thread A,trace_range D
639fb726d48Sopenharmony_ci                      left join callstack C on A.id = C.callid
640fb726d48Sopenharmony_ci    where startTs not null and c.cookie is null and c.id in (${ids.join(',')}) and tid in (${tids.join(
641fb726d48Sopenharmony_ci    ','
642fb726d48Sopenharmony_ci  )})`;
643fb726d48Sopenharmony_ci  return query('queryTaskPoolRelationData', sqlStr, { $ids: ids, $tids: tids });
644fb726d48Sopenharmony_ci};
645fb726d48Sopenharmony_ci
646fb726d48Sopenharmony_ciexport const queryStatesCut = (tIds: Array<number>, leftNS: number, rightNS: number):
647fb726d48Sopenharmony_ci  Promise<Array<StateGroup>> =>
648fb726d48Sopenharmony_ci  query<StateGroup>(
649fb726d48Sopenharmony_ci    'queryBinderByThreadId',
650fb726d48Sopenharmony_ci    `
651fb726d48Sopenharmony_ci    select
652fb726d48Sopenharmony_ci    B.id,
653fb726d48Sopenharmony_ci    B.pid,
654fb726d48Sopenharmony_ci    B.tid,
655fb726d48Sopenharmony_ci    B.dur,
656fb726d48Sopenharmony_ci    B.cpu,
657fb726d48Sopenharmony_ci    B.state,
658fb726d48Sopenharmony_ci    B.ts - C.start_ts AS ts,
659fb726d48Sopenharmony_ci    B.dur + B.ts as endTs
660fb726d48Sopenharmony_ci  from
661fb726d48Sopenharmony_ci    thread_state AS B,trace_range AS C
662fb726d48Sopenharmony_ci  where
663fb726d48Sopenharmony_ci    B.tid in (${tIds.join(',')})
664fb726d48Sopenharmony_ci  and
665fb726d48Sopenharmony_ci    not ((B.ts + + ifnull(B.dur,0) < ($leftStartNs + C.start_ts)) 
666fb726d48Sopenharmony_ci    or (B.ts + B.dur > ($rightEndNs + C.start_ts)))
667fb726d48Sopenharmony_ci  order by
668fb726d48Sopenharmony_ci    B.pid;
669fb726d48Sopenharmony_ci        `,
670fb726d48Sopenharmony_ci    {
671fb726d48Sopenharmony_ci      $tIds: tIds,
672fb726d48Sopenharmony_ci      $leftStartNs: leftNS,
673fb726d48Sopenharmony_ci      $rightEndNs: rightNS,
674fb726d48Sopenharmony_ci    }
675fb726d48Sopenharmony_ci  );
676fb726d48Sopenharmony_ci
677fb726d48Sopenharmony_ciexport const queryLoopFuncNameCycle = (
678fb726d48Sopenharmony_ci  funcName: string,
679fb726d48Sopenharmony_ci  tIds: string,
680fb726d48Sopenharmony_ci  leftNS: number,
681fb726d48Sopenharmony_ci  rightNS: number
682fb726d48Sopenharmony_ci): Promise<Array<FuncNameCycle>> =>
683fb726d48Sopenharmony_ci  query(
684fb726d48Sopenharmony_ci    'queryLoopFuncNameCycle',
685fb726d48Sopenharmony_ci    `
686fb726d48Sopenharmony_ci        SELECT 
687fb726d48Sopenharmony_ci            c.name AS funcName,
688fb726d48Sopenharmony_ci            c.ts - r.start_ts AS cycleStartTime,
689fb726d48Sopenharmony_ci            0 AS cycleDur,
690fb726d48Sopenharmony_ci            c.id,
691fb726d48Sopenharmony_ci            t.tid,
692fb726d48Sopenharmony_ci            p.pid
693fb726d48Sopenharmony_ci          FROM
694fb726d48Sopenharmony_ci              callstack c, trace_range r 
695fb726d48Sopenharmony_ci            LEFT JOIN 
696fb726d48Sopenharmony_ci              thread t 
697fb726d48Sopenharmony_ci            ON 
698fb726d48Sopenharmony_ci              c.callid = t.id 
699fb726d48Sopenharmony_ci            LEFT JOIN  
700fb726d48Sopenharmony_ci              process p 
701fb726d48Sopenharmony_ci            ON 
702fb726d48Sopenharmony_ci              t.ipid = p.id  
703fb726d48Sopenharmony_ci          WHERE 
704fb726d48Sopenharmony_ci              c.name like '${funcName}%'  
705fb726d48Sopenharmony_ci            AND 
706fb726d48Sopenharmony_ci              t.tid = ${tIds}
707fb726d48Sopenharmony_ci            AND NOT 
708fb726d48Sopenharmony_ci              ((cycleStartTime < ${leftNS}) 
709fb726d48Sopenharmony_ci            OR  
710fb726d48Sopenharmony_ci              (cycleStartTime > ${rightNS})) 
711fb726d48Sopenharmony_ci          `,
712fb726d48Sopenharmony_ci    {
713fb726d48Sopenharmony_ci      $funcName: funcName,
714fb726d48Sopenharmony_ci      $tIds: tIds,
715fb726d48Sopenharmony_ci      $leftNS: leftNS,
716fb726d48Sopenharmony_ci      $rightNS: rightNS,
717fb726d48Sopenharmony_ci    }
718fb726d48Sopenharmony_ci  );
719fb726d48Sopenharmony_ci
720fb726d48Sopenharmony_ciexport const querySingleFuncNameCycleStates = (
721fb726d48Sopenharmony_ci  funcName: string,
722fb726d48Sopenharmony_ci  tIds: string,
723fb726d48Sopenharmony_ci  leftNS: number,
724fb726d48Sopenharmony_ci  rightNS: number
725fb726d48Sopenharmony_ci): Promise<Array<FuncNameCycle>> =>
726fb726d48Sopenharmony_ci  query(
727fb726d48Sopenharmony_ci    'querySingleFuncNameCycle',
728fb726d48Sopenharmony_ci    `
729fb726d48Sopenharmony_ci          SELECT 
730fb726d48Sopenharmony_ci                c.name AS funcName, 
731fb726d48Sopenharmony_ci                c.ts - r.start_ts AS cycleStartTime, 
732fb726d48Sopenharmony_ci                c.dur AS cycleDur,
733fb726d48Sopenharmony_ci                c.id,
734fb726d48Sopenharmony_ci                t.tid,
735fb726d48Sopenharmony_ci                p.pid,
736fb726d48Sopenharmony_ci                c.ts - r.start_ts + c.dur AS endTime
737fb726d48Sopenharmony_ci              FROM 
738fb726d48Sopenharmony_ci                  callstack c, trace_range r 
739fb726d48Sopenharmony_ci              LEFT JOIN 
740fb726d48Sopenharmony_ci                  thread t 
741fb726d48Sopenharmony_ci              ON 
742fb726d48Sopenharmony_ci                  c.callid = t.id 
743fb726d48Sopenharmony_ci              LEFT JOIN
744fb726d48Sopenharmony_ci                  process p 
745fb726d48Sopenharmony_ci              ON
746fb726d48Sopenharmony_ci                  t.ipid = p.id  
747fb726d48Sopenharmony_ci              WHERE 
748fb726d48Sopenharmony_ci                  c.name like '${funcName}%' 
749fb726d48Sopenharmony_ci              AND 
750fb726d48Sopenharmony_ci                  t.tid = ${tIds} 
751fb726d48Sopenharmony_ci              AND NOT 
752fb726d48Sopenharmony_ci                  ((cycleStartTime < ${leftNS}) 
753fb726d48Sopenharmony_ci              OR 
754fb726d48Sopenharmony_ci                  (endTime > ${rightNS}))
755fb726d48Sopenharmony_ci            `,
756fb726d48Sopenharmony_ci    {
757fb726d48Sopenharmony_ci      $funcName: funcName,
758fb726d48Sopenharmony_ci      $tIds: tIds,
759fb726d48Sopenharmony_ci      $leftNS: leftNS,
760fb726d48Sopenharmony_ci      $rightNS: rightNS,
761fb726d48Sopenharmony_ci    }
762fb726d48Sopenharmony_ci  );
763