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