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