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 { PerfCmdLine, PerfFile, PerfSample, PerfStack, PerfThread } from '../../bean/PerfProfile'; 16fb726d48Sopenharmony_ciimport { query } from '../SqlLite'; 17fb726d48Sopenharmony_ciimport { HiSysEventStruct } from '../ui-worker/ProcedureWorkerHiSysEvent'; 18fb726d48Sopenharmony_ciimport { TaskTabStruct } from '../../component/trace/sheet/task/TabPaneTaskFrames'; 19fb726d48Sopenharmony_ciimport { GpuCountBean, SearchGpuFuncBean } from '../../bean/GpufreqBean'; 20fb726d48Sopenharmony_ci 21fb726d48Sopenharmony_ciexport const queryPerfFiles = (): Promise<Array<PerfFile>> => 22fb726d48Sopenharmony_ci query('queryPerfFiles', `select file_id as fileId,symbol,path from perf_files`, {}); 23fb726d48Sopenharmony_ci 24fb726d48Sopenharmony_ciexport const queryPerfCallChainName = (): //@ts-ignore 25fb726d48Sopenharmony_ciPromise<Array<unknown>> => query('queryPerfCallChainName', `select callchain_id,depth,name from perf_callchain`, {}); 26fb726d48Sopenharmony_ci 27fb726d48Sopenharmony_ciexport const queryPerfProcess = (): Promise<Array<PerfThread>> => 28fb726d48Sopenharmony_ci query( 29fb726d48Sopenharmony_ci 'queryPerfThread', 30fb726d48Sopenharmony_ci `select process_id as pid,thread_name as processName from perf_thread where process_id = thread_id`, 31fb726d48Sopenharmony_ci {} 32fb726d48Sopenharmony_ci ); 33fb726d48Sopenharmony_ci 34fb726d48Sopenharmony_ciexport const queryPerfThread = (): Promise<Array<PerfThread>> => 35fb726d48Sopenharmony_ci query( 36fb726d48Sopenharmony_ci 'queryPerfThread', 37fb726d48Sopenharmony_ci `select a.thread_id as tid, 38fb726d48Sopenharmony_ci a.thread_name as threadName, 39fb726d48Sopenharmony_ci a.process_id as pid, 40fb726d48Sopenharmony_ci b.thread_name as processName 41fb726d48Sopenharmony_cifrom perf_thread a 42fb726d48Sopenharmony_ci left join (select distinct process_id, thread_name from perf_thread where process_id = thread_id) b 43fb726d48Sopenharmony_ci on a.process_id = b.process_id 44fb726d48Sopenharmony_ciorder by pid;`, 45fb726d48Sopenharmony_ci {} 46fb726d48Sopenharmony_ci ); 47fb726d48Sopenharmony_ciexport const queryPerfSampleListByTimeRange = ( 48fb726d48Sopenharmony_ci leftNs: number, 49fb726d48Sopenharmony_ci rightNs: number, 50fb726d48Sopenharmony_ci cpus: Array<number>, 51fb726d48Sopenharmony_ci processes: Array<number>, 52fb726d48Sopenharmony_ci threads: Array<number>, 53fb726d48Sopenharmony_ci eventTypeId?: number 54fb726d48Sopenharmony_ci): Promise<Array<PerfSample>> => { 55fb726d48Sopenharmony_ci let sql = ` 56fb726d48Sopenharmony_ciselect A.callchain_id as sampleId, 57fb726d48Sopenharmony_ci A.thread_id as tid, 58fb726d48Sopenharmony_ci C.thread_name as threadName, 59fb726d48Sopenharmony_ci A.thread_state as state, 60fb726d48Sopenharmony_ci C.process_id as pid, 61fb726d48Sopenharmony_ci (timestamp_trace - R.start_ts) as time, 62fb726d48Sopenharmony_ci cpu_id as core 63fb726d48Sopenharmony_cifrom perf_sample A,trace_range R 64fb726d48Sopenharmony_cileft join perf_thread C on A.thread_id = C.thread_id 65fb726d48Sopenharmony_ciwhere time >= $leftNs and time <= $rightNs and A.thread_id != 0 66fb726d48Sopenharmony_ci `; 67fb726d48Sopenharmony_ci if (eventTypeId !== undefined) { 68fb726d48Sopenharmony_ci sql = `${sql} and event_type_id = ${eventTypeId}`; 69fb726d48Sopenharmony_ci } 70fb726d48Sopenharmony_ci if (cpus.length !== 0 || processes.length !== 0 || threads.length !== 0) { 71fb726d48Sopenharmony_ci let arg1 = cpus.length > 0 ? `or core in (${cpus.join(',')}) ` : ''; 72fb726d48Sopenharmony_ci let arg2 = processes.length > 0 ? `or pid in (${processes.join(',')}) ` : ''; 73fb726d48Sopenharmony_ci let arg3 = threads.length > 0 ? `or tid in (${threads.join(',')})` : ''; 74fb726d48Sopenharmony_ci let arg = `${arg1}${arg2}${arg3}`.substring(3); 75fb726d48Sopenharmony_ci sql = `${sql} and (${arg})`; 76fb726d48Sopenharmony_ci } 77fb726d48Sopenharmony_ci return query('queryPerfSampleListByTimeRange', sql, { 78fb726d48Sopenharmony_ci $leftNs: leftNs, 79fb726d48Sopenharmony_ci $rightNs: rightNs, 80fb726d48Sopenharmony_ci }); 81fb726d48Sopenharmony_ci}; 82fb726d48Sopenharmony_ci 83fb726d48Sopenharmony_ciexport const queryPerfSampleIdsByTimeRange = ( 84fb726d48Sopenharmony_ci leftNs: number, 85fb726d48Sopenharmony_ci rightNs: number, 86fb726d48Sopenharmony_ci cpus: Array<number>, 87fb726d48Sopenharmony_ci processes: Array<number>, 88fb726d48Sopenharmony_ci threads: Array<number> 89fb726d48Sopenharmony_ci): Promise<Array<PerfSample>> => { 90fb726d48Sopenharmony_ci let sql = ` 91fb726d48Sopenharmony_ciselect A.callchain_id as sampleId 92fb726d48Sopenharmony_cifrom perf_sample A,trace_range R 93fb726d48Sopenharmony_cileft join perf_thread C on A.thread_id = C.thread_id 94fb726d48Sopenharmony_ciwhere (timestamp_trace - R.start_ts) >= $leftNs and (timestamp_trace - R.start_ts) <= $rightNs and A.thread_id != 0 95fb726d48Sopenharmony_ci `; 96fb726d48Sopenharmony_ci if (cpus.length !== 0 || processes.length !== 0 || threads.length !== 0) { 97fb726d48Sopenharmony_ci let arg1 = cpus.length > 0 ? `or A.cpu_id in (${cpus.join(',')}) ` : ''; 98fb726d48Sopenharmony_ci let arg2 = processes.length > 0 ? `or C.process_id in (${processes.join(',')}) ` : ''; 99fb726d48Sopenharmony_ci let arg3 = threads.length > 0 ? `or A.thread_id in (${threads.join(',')})` : ''; 100fb726d48Sopenharmony_ci let arg = `${arg1}${arg2}${arg3}`.substring(3); 101fb726d48Sopenharmony_ci sql = `${sql} and (${arg})`; 102fb726d48Sopenharmony_ci } 103fb726d48Sopenharmony_ci return query('queryPerfSampleIdsByTimeRange', sql, { 104fb726d48Sopenharmony_ci $leftNs: leftNs, 105fb726d48Sopenharmony_ci $rightNs: rightNs, 106fb726d48Sopenharmony_ci }); 107fb726d48Sopenharmony_ci}; 108fb726d48Sopenharmony_ci 109fb726d48Sopenharmony_ciexport const queryPerfSampleCallChain = (sampleId: number): Promise<Array<PerfStack>> => 110fb726d48Sopenharmony_ci query( 111fb726d48Sopenharmony_ci 'queryPerfSampleCallChain', 112fb726d48Sopenharmony_ci ` 113fb726d48Sopenharmony_ci select 114fb726d48Sopenharmony_ci callchain_id as callChainId, 115fb726d48Sopenharmony_ci callchain_id as sampleId, 116fb726d48Sopenharmony_ci file_id as fileId, 117fb726d48Sopenharmony_ci symbol_id as symbolId, 118fb726d48Sopenharmony_ci vaddr_in_file as vaddrInFile, 119fb726d48Sopenharmony_ci name as symbol 120fb726d48Sopenharmony_cifrom perf_callchain where callchain_id = $sampleId; 121fb726d48Sopenharmony_ci `, 122fb726d48Sopenharmony_ci { $sampleId: sampleId } 123fb726d48Sopenharmony_ci ); 124fb726d48Sopenharmony_ci 125fb726d48Sopenharmony_ciexport const queryPerfCmdline = (): Promise<Array<PerfCmdLine>> => 126fb726d48Sopenharmony_ci query( 127fb726d48Sopenharmony_ci 'queryPerfCmdline', 128fb726d48Sopenharmony_ci ` 129fb726d48Sopenharmony_ci select report_value from perf_report where report_type = 'cmdline' 130fb726d48Sopenharmony_ci `, 131fb726d48Sopenharmony_ci {} 132fb726d48Sopenharmony_ci ); 133fb726d48Sopenharmony_ciexport const queryPerfEventType = (): Promise<Array<{ id: number; report: string }>> => 134fb726d48Sopenharmony_ci query( 135fb726d48Sopenharmony_ci 'queryPerfEventType', 136fb726d48Sopenharmony_ci ` 137fb726d48Sopenharmony_ci select id,report_value as report from perf_report where id in ( 138fb726d48Sopenharmony_ciselect distinct event_type_id from perf_sample); 139fb726d48Sopenharmony_ci `, 140fb726d48Sopenharmony_ci {} 141fb726d48Sopenharmony_ci ); 142fb726d48Sopenharmony_ci/** 143fb726d48Sopenharmony_ci * HiPerf 144fb726d48Sopenharmony_ci */ 145fb726d48Sopenharmony_ciexport const queryHiPerfEventList = (): //@ts-ignore 146fb726d48Sopenharmony_ciPromise<Array<unknown>> => 147fb726d48Sopenharmony_ci query('queryHiPerfEventList', `select id,report_value from perf_report where report_type='config_name'`, {}); 148fb726d48Sopenharmony_ciexport const queryHiPerfEventListData = ( 149fb726d48Sopenharmony_ci eventTypeId: number 150fb726d48Sopenharmony_ci): //@ts-ignore 151fb726d48Sopenharmony_ciPromise<Array<unknown>> => 152fb726d48Sopenharmony_ci query( 153fb726d48Sopenharmony_ci 'queryHiPerfEventListData', 154fb726d48Sopenharmony_ci ` 155fb726d48Sopenharmony_ci select s.callchain_id, 156fb726d48Sopenharmony_ci (s.timestamp_trace-t.start_ts) startNS 157fb726d48Sopenharmony_ci from perf_sample s,trace_range t 158fb726d48Sopenharmony_ci where 159fb726d48Sopenharmony_ci event_type_id=${eventTypeId} 160fb726d48Sopenharmony_ci and s.thread_id != 0 161fb726d48Sopenharmony_ci and s.callchain_id != -1; 162fb726d48Sopenharmony_ci`, 163fb726d48Sopenharmony_ci { $eventTypeId: eventTypeId } 164fb726d48Sopenharmony_ci ); 165fb726d48Sopenharmony_ciexport const queryHiPerfEventData = ( 166fb726d48Sopenharmony_ci eventTypeId: number, 167fb726d48Sopenharmony_ci cpu: number 168fb726d48Sopenharmony_ci): //@ts-ignore 169fb726d48Sopenharmony_ciPromise<Array<unknown>> => 170fb726d48Sopenharmony_ci query( 171fb726d48Sopenharmony_ci 'queryHiPerfEventList', 172fb726d48Sopenharmony_ci ` 173fb726d48Sopenharmony_ci select s.callchain_id, 174fb726d48Sopenharmony_ci (s.timestamp_trace-t.start_ts) startNS 175fb726d48Sopenharmony_ci from perf_sample s,trace_range t 176fb726d48Sopenharmony_ci where 177fb726d48Sopenharmony_ci event_type_id=${eventTypeId} 178fb726d48Sopenharmony_ci and cpu_id=${cpu} 179fb726d48Sopenharmony_ci and s.thread_id != 0 180fb726d48Sopenharmony_ci and s.callchain_id != -1; 181fb726d48Sopenharmony_ci`, 182fb726d48Sopenharmony_ci { $eventTypeId: eventTypeId, $cpu: cpu } 183fb726d48Sopenharmony_ci ); 184fb726d48Sopenharmony_ciexport const queryHiPerfCpuData = ( 185fb726d48Sopenharmony_ci cpu: number 186fb726d48Sopenharmony_ci): //@ts-ignore 187fb726d48Sopenharmony_ciPromise<Array<unknown>> => 188fb726d48Sopenharmony_ci query( 189fb726d48Sopenharmony_ci 'queryHiPerfCpuData', 190fb726d48Sopenharmony_ci ` 191fb726d48Sopenharmony_ci select s.callchain_id, 192fb726d48Sopenharmony_ci (s.timestamp_trace-t.start_ts) startNS, event_count, event_type_id 193fb726d48Sopenharmony_ci from perf_sample s,trace_range t 194fb726d48Sopenharmony_ci where 195fb726d48Sopenharmony_ci cpu_id=${cpu} 196fb726d48Sopenharmony_ci and s.thread_id != 0;`, 197fb726d48Sopenharmony_ci { $cpu: cpu } 198fb726d48Sopenharmony_ci ); 199fb726d48Sopenharmony_ciexport const queryHiPerfCpuMergeData = (): //@ts-ignore 200fb726d48Sopenharmony_ciPromise<Array<unknown>> => 201fb726d48Sopenharmony_ci query( 202fb726d48Sopenharmony_ci 'queryHiPerfCpuData', 203fb726d48Sopenharmony_ci `select s.callchain_id,(s.timestamp_trace-t.start_ts) startNS, event_count, event_type_id from perf_sample s,trace_range t 204fb726d48Sopenharmony_ciwhere s.thread_id != 0;`, 205fb726d48Sopenharmony_ci {} 206fb726d48Sopenharmony_ci ); 207fb726d48Sopenharmony_ciexport const queryHiPerfCpuMergeData2 = (): //@ts-ignore 208fb726d48Sopenharmony_ciPromise<Array<unknown>> => 209fb726d48Sopenharmony_ci query( 210fb726d48Sopenharmony_ci 'queryHiPerfCpuData2', 211fb726d48Sopenharmony_ci `select distinct cpu_id from perf_sample where thread_id != 0 order by cpu_id desc;`, 212fb726d48Sopenharmony_ci {} 213fb726d48Sopenharmony_ci ); 214fb726d48Sopenharmony_ci 215fb726d48Sopenharmony_ciexport const queryHiPerfProcessData = ( 216fb726d48Sopenharmony_ci pid: number 217fb726d48Sopenharmony_ci): //@ts-ignore 218fb726d48Sopenharmony_ciPromise<Array<unknown>> => 219fb726d48Sopenharmony_ci query( 220fb726d48Sopenharmony_ci 'queryHiPerfProcessData', 221fb726d48Sopenharmony_ci ` 222fb726d48Sopenharmony_ciSELECT sp.callchain_id, 223fb726d48Sopenharmony_ci th.thread_name, 224fb726d48Sopenharmony_ci th.thread_id tid, 225fb726d48Sopenharmony_ci th.process_id pid, 226fb726d48Sopenharmony_ci sp.timestamp_trace - tr.start_ts startNS, 227fb726d48Sopenharmony_ci event_count, 228fb726d48Sopenharmony_ci event_type_id 229fb726d48Sopenharmony_cifrom perf_sample sp, 230fb726d48Sopenharmony_ci trace_range tr 231fb726d48Sopenharmony_ci left join perf_thread th on th.thread_id = sp.thread_id 232fb726d48Sopenharmony_ciwhere pid = ${pid} and sp.thread_id != 0 `, 233fb726d48Sopenharmony_ci { $pid: pid } 234fb726d48Sopenharmony_ci ); 235fb726d48Sopenharmony_ci 236fb726d48Sopenharmony_ciexport const queryHiPerfThreadData = ( 237fb726d48Sopenharmony_ci tid: number 238fb726d48Sopenharmony_ci): //@ts-ignore 239fb726d48Sopenharmony_ciPromise<Array<unknown>> => 240fb726d48Sopenharmony_ci query( 241fb726d48Sopenharmony_ci 'queryHiPerfThreadData', 242fb726d48Sopenharmony_ci ` 243fb726d48Sopenharmony_ciSELECT sp.callchain_id, 244fb726d48Sopenharmony_ci th.thread_name, 245fb726d48Sopenharmony_ci th.thread_id tid, 246fb726d48Sopenharmony_ci th.process_id pid, 247fb726d48Sopenharmony_ci sp.timestamp_trace - tr.start_ts startNS, 248fb726d48Sopenharmony_ci event_count, 249fb726d48Sopenharmony_ci event_type_id 250fb726d48Sopenharmony_cifrom perf_sample sp, 251fb726d48Sopenharmony_ci trace_range tr 252fb726d48Sopenharmony_ci left join perf_thread th on th.thread_id = sp.thread_id 253fb726d48Sopenharmony_ciwhere tid = ${tid} and sp.thread_id != 0 ;`, 254fb726d48Sopenharmony_ci { $tid: tid } 255fb726d48Sopenharmony_ci ); 256fb726d48Sopenharmony_ci 257fb726d48Sopenharmony_ciexport const getGpufreqDataCut = ( 258fb726d48Sopenharmony_ci tIds: string, 259fb726d48Sopenharmony_ci funcName: string, 260fb726d48Sopenharmony_ci leftNS: number, 261fb726d48Sopenharmony_ci rightNS: number, 262fb726d48Sopenharmony_ci single: boolean, 263fb726d48Sopenharmony_ci loop: boolean 264fb726d48Sopenharmony_ci): Promise<Array<SearchGpuFuncBean>> => { 265fb726d48Sopenharmony_ci let queryCondition: string = ''; 266fb726d48Sopenharmony_ci if (single) { 267fb726d48Sopenharmony_ci queryCondition += `select s.funName,s.startTime,s.dur,s.startTime+s.dur as endTime,s.tid,s.threadName,s.pid from state s 268fb726d48Sopenharmony_ci where endTime between ${leftNS} and ${rightNS}`; 269fb726d48Sopenharmony_ci } 270fb726d48Sopenharmony_ci if (loop) { 271fb726d48Sopenharmony_ci queryCondition += `select s.funName,s.startTime,s.loopEndTime-s.startTime as dur,s.loopEndTime as endTime,s.tid,s.threadName,s.pid from state s 272fb726d48Sopenharmony_ci where endTime between ${leftNS} and ${rightNS} `; 273fb726d48Sopenharmony_ci } 274fb726d48Sopenharmony_ci return query( 275fb726d48Sopenharmony_ci 'getGpufreqDataCut', 276fb726d48Sopenharmony_ci ` 277fb726d48Sopenharmony_ci with state as 278fb726d48Sopenharmony_ci (select 279fb726d48Sopenharmony_ci * 280fb726d48Sopenharmony_ci from 281fb726d48Sopenharmony_ci (select 282fb726d48Sopenharmony_ci c.name as funName, 283fb726d48Sopenharmony_ci c.ts - r.start_ts as startTime, 284fb726d48Sopenharmony_ci c.dur, 285fb726d48Sopenharmony_ci lead(c.ts - r.start_ts, 1, null) over( order by c.ts - r.start_ts) loopEndTime, 286fb726d48Sopenharmony_ci t.tid, 287fb726d48Sopenharmony_ci t.name as threadName, 288fb726d48Sopenharmony_ci p.pid 289fb726d48Sopenharmony_ci from 290fb726d48Sopenharmony_ci callstack c 291fb726d48Sopenharmony_ci left join 292fb726d48Sopenharmony_ci thread t on c.callid = t.id 293fb726d48Sopenharmony_ci left join 294fb726d48Sopenharmony_ci process p on t.ipid = p.id 295fb726d48Sopenharmony_ci left join 296fb726d48Sopenharmony_ci trace_range r 297fb726d48Sopenharmony_ci where 298fb726d48Sopenharmony_ci c.name like '${funcName}%' 299fb726d48Sopenharmony_ci and 300fb726d48Sopenharmony_ci tid = '${tIds}' 301fb726d48Sopenharmony_ci and 302fb726d48Sopenharmony_ci startTime between ${leftNS} and ${rightNS})) 303fb726d48Sopenharmony_ci ${queryCondition} 304fb726d48Sopenharmony_ci `, 305fb726d48Sopenharmony_ci { $search: funcName } 306fb726d48Sopenharmony_ci ); 307fb726d48Sopenharmony_ci}; 308fb726d48Sopenharmony_ciexport const getGpufreqData = (leftNS: number, rightNS: number, earliest: boolean): Promise<Array<GpuCountBean>> => { 309fb726d48Sopenharmony_ci let queryCondition: string = ''; 310fb726d48Sopenharmony_ci if (!earliest) { 311fb726d48Sopenharmony_ci queryCondition += ` where not ((s.ts - r.start_ts + ifnull(s.dur,0) < ${leftNS}) or (s.ts - r.start_ts > ${rightNS}))`; 312fb726d48Sopenharmony_ci } 313fb726d48Sopenharmony_ci return query( 314fb726d48Sopenharmony_ci 'getGpufreqData', 315fb726d48Sopenharmony_ci ` 316fb726d48Sopenharmony_ci with state as 317fb726d48Sopenharmony_ci (select 318fb726d48Sopenharmony_ci name, 319fb726d48Sopenharmony_ci filter_id, 320fb726d48Sopenharmony_ci ts, 321fb726d48Sopenharmony_ci endts, 322fb726d48Sopenharmony_ci endts-ts as dur, 323fb726d48Sopenharmony_ci value as val 324fb726d48Sopenharmony_ci from 325fb726d48Sopenharmony_ci (select 326fb726d48Sopenharmony_ci measure.filter_id, 327fb726d48Sopenharmony_ci clock_event_filter.name, 328fb726d48Sopenharmony_ci measure.ts, 329fb726d48Sopenharmony_ci lead(ts, 1, null) over( order by measure.ts) endts, 330fb726d48Sopenharmony_ci measure.value 331fb726d48Sopenharmony_ci from 332fb726d48Sopenharmony_ci clock_event_filter, 333fb726d48Sopenharmony_ci trace_range 334fb726d48Sopenharmony_ci left join 335fb726d48Sopenharmony_ci measure 336fb726d48Sopenharmony_ci where 337fb726d48Sopenharmony_ci clock_event_filter.name = 'gpufreq' 338fb726d48Sopenharmony_ci and 339fb726d48Sopenharmony_ci clock_event_filter.type = 'clock_set_rate' 340fb726d48Sopenharmony_ci and 341fb726d48Sopenharmony_ci clock_event_filter.id = measure.filter_id 342fb726d48Sopenharmony_ci order by measure.ts) 343fb726d48Sopenharmony_ci where 344fb726d48Sopenharmony_ci endts is not null 345fb726d48Sopenharmony_ci ) 346fb726d48Sopenharmony_ci select 347fb726d48Sopenharmony_ci s.name as thread, 348fb726d48Sopenharmony_ci s.val/1000000 as freq, 349fb726d48Sopenharmony_ci s.val*s.dur as value, 350fb726d48Sopenharmony_ci s.val, 351fb726d48Sopenharmony_ci s.ts-r.start_ts as startNS, 352fb726d48Sopenharmony_ci s.dur, 353fb726d48Sopenharmony_ci s.endts- r.start_ts as endTime 354fb726d48Sopenharmony_ci from 355fb726d48Sopenharmony_ci state s, 356fb726d48Sopenharmony_ci trace_range r 357fb726d48Sopenharmony_ci ${queryCondition} 358fb726d48Sopenharmony_ci order by ts 359fb726d48Sopenharmony_ci `, 360fb726d48Sopenharmony_ci { $leftNS: leftNS, $rightNS: rightNS } 361fb726d48Sopenharmony_ci ); 362fb726d48Sopenharmony_ci}; 363fb726d48Sopenharmony_ci 364fb726d48Sopenharmony_ciexport const queryHiSysEventTabData = (leftNs: number, rightNs: number): Promise<Array<HiSysEventStruct>> => 365fb726d48Sopenharmony_ci query( 366fb726d48Sopenharmony_ci 'queryHiSysEventTabData', 367fb726d48Sopenharmony_ci `SELECT S.id, 368fb726d48Sopenharmony_ci D2.data AS domain, 369fb726d48Sopenharmony_ci D.data AS eventName, 370fb726d48Sopenharmony_ci type AS eventType, 371fb726d48Sopenharmony_ci time_zone AS tz, 372fb726d48Sopenharmony_ci pid, 373fb726d48Sopenharmony_ci tid, 374fb726d48Sopenharmony_ci uid, 375fb726d48Sopenharmony_ci info, 376fb726d48Sopenharmony_ci level, 377fb726d48Sopenharmony_ci seq, 378fb726d48Sopenharmony_ci contents, 379fb726d48Sopenharmony_ci S.ts - TR.start_ts AS startTs, 380fb726d48Sopenharmony_ci 1 AS dur, 381fb726d48Sopenharmony_ci CASE 382fb726d48Sopenharmony_ci WHEN level = 'MINOR' THEN 383fb726d48Sopenharmony_ci 0 384fb726d48Sopenharmony_ci WHEN level = 'CRITICAL' THEN 385fb726d48Sopenharmony_ci 1 386fb726d48Sopenharmony_ci END AS depth 387fb726d48Sopenharmony_ci FROM hisys_all_event AS S ,trace_range AS TR 388fb726d48Sopenharmony_ci LEFT JOIN data_dict AS D on S.event_name_id = D.id 389fb726d48Sopenharmony_ci LEFT JOIN data_dict AS D2 on S.domain_id = D2.id 390fb726d48Sopenharmony_ci WHERE S.id is not null 391fb726d48Sopenharmony_ci and startTs >= ${Math.floor(leftNs)} 392fb726d48Sopenharmony_ci and startTs <= ${Math.floor(rightNs)} 393fb726d48Sopenharmony_ci ORDER BY S.ts` 394fb726d48Sopenharmony_ci ); 395fb726d48Sopenharmony_ciexport const queryHiSysEventData = (): Promise<Array<HiSysEventStruct>> => 396fb726d48Sopenharmony_ci query( 397fb726d48Sopenharmony_ci 'queryHiSysEventData', 398fb726d48Sopenharmony_ci `SELECT l.ts - tr.start_ts as startNs FROM hisys_all_event AS l, trace_range tr WHERE startNs > 0 LIMIT 1` 399fb726d48Sopenharmony_ci ); 400fb726d48Sopenharmony_ciexport const queryHiPerfProcessCount = ( 401fb726d48Sopenharmony_ci leftNs: number, 402fb726d48Sopenharmony_ci rightNs: number, 403fb726d48Sopenharmony_ci cpus: Array<number>, 404fb726d48Sopenharmony_ci threads: Array<number>, 405fb726d48Sopenharmony_ci processes: Array<number> 406fb726d48Sopenharmony_ci): //@ts-ignore 407fb726d48Sopenharmony_ciPromise<Array<unknown>> => { 408fb726d48Sopenharmony_ci let str = ''; 409fb726d48Sopenharmony_ci if (processes.length > 0) { 410fb726d48Sopenharmony_ci str = ` and C.process_id in (${processes.join(',')})`; 411fb726d48Sopenharmony_ci } 412fb726d48Sopenharmony_ci if (threads.length > 0) { 413fb726d48Sopenharmony_ci str = ` and A.thread_id in (${threads.join(',')}) `; 414fb726d48Sopenharmony_ci } 415fb726d48Sopenharmony_ci if (processes.length > 0 && threads.length > 0) { 416fb726d48Sopenharmony_ci str = ` and (C.process_id in (${processes.join(',')}) or A.thread_id in (${threads.join(',')}))`; 417fb726d48Sopenharmony_ci } 418fb726d48Sopenharmony_ci if (cpus.length > 0) { 419fb726d48Sopenharmony_ci str = ` and A.cpu_id in (${cpus.join(',')})`; 420fb726d48Sopenharmony_ci } 421fb726d48Sopenharmony_ci if (cpus.length > 0 && processes.length > 0) { 422fb726d48Sopenharmony_ci str = ` and (C.process_id in (${processes.join(',')}) or A.cpu_id in (${cpus.join(',')}))`; 423fb726d48Sopenharmony_ci } 424fb726d48Sopenharmony_ci return query( 425fb726d48Sopenharmony_ci 'queryHiPerfProcessCount', 426fb726d48Sopenharmony_ci ` 427fb726d48Sopenharmony_ci select C.process_id as pid, 428fb726d48Sopenharmony_ci (A.timestamp_trace - R.start_ts) as time, 429fb726d48Sopenharmony_ci C.thread_name as threadName, 430fb726d48Sopenharmony_ci A.thread_id as tid, 431fb726d48Sopenharmony_ci A.id, 432fb726d48Sopenharmony_ci A.callchain_id 433fb726d48Sopenharmony_ci from perf_sample A,trace_range R 434fb726d48Sopenharmony_ci left join perf_thread C on A.thread_id = C.thread_id and A.thread_id != 0 435fb726d48Sopenharmony_ci where time >= $leftNs and time <= $rightNs and A.callchain_id > 0 436fb726d48Sopenharmony_ci ${str} 437fb726d48Sopenharmony_ci `, 438fb726d48Sopenharmony_ci { $leftNs: leftNs, $rightNs: rightNs } 439fb726d48Sopenharmony_ci ); 440fb726d48Sopenharmony_ci}; 441fb726d48Sopenharmony_ciexport const queryTransferList = (): Promise<Array<{ id: number; cmdStr: string }>> => 442fb726d48Sopenharmony_ci query('queryTransferList', `select id, report_value as cmdStr from perf_report where report_type = 'config_name'`); 443fb726d48Sopenharmony_ciexport const queryConcurrencyTask = ( 444fb726d48Sopenharmony_ci itid: number, 445fb726d48Sopenharmony_ci selectStartTime: number, 446fb726d48Sopenharmony_ci selectEndTime: number 447fb726d48Sopenharmony_ci): Promise<TaskTabStruct[]> => 448fb726d48Sopenharmony_ci query<TaskTabStruct>( 449fb726d48Sopenharmony_ci 'queryConcurrencyTask', 450fb726d48Sopenharmony_ci `SELECT thread.tid, 451fb726d48Sopenharmony_ci thread.ipid, 452fb726d48Sopenharmony_ci callstack.name AS funName, 453fb726d48Sopenharmony_ci callstack.ts AS startTs, 454fb726d48Sopenharmony_ci (case when callstack.dur = -1 then (SELECT end_ts FROM trace_range) else callstack.dur end) as dur, 455fb726d48Sopenharmony_ci callstack.id, 456fb726d48Sopenharmony_ci task_pool.priority, 457fb726d48Sopenharmony_ci task_pool.allocation_task_row AS allocationTaskRow, 458fb726d48Sopenharmony_ci task_pool.execute_task_row AS executeTaskRow, 459fb726d48Sopenharmony_ci task_pool.return_task_row AS returnTaskRow, 460fb726d48Sopenharmony_ci task_pool.task_id AS executeId 461fb726d48Sopenharmony_ci FROM thread 462fb726d48Sopenharmony_ci LEFT JOIN callstack ON thread.id = callstack.callid 463fb726d48Sopenharmony_ci LEFT JOIN task_pool ON callstack.id = task_pool.execute_task_row 464fb726d48Sopenharmony_ci WHERE ipid in (SELECT thread.ipid 465fb726d48Sopenharmony_ci FROM thread 466fb726d48Sopenharmony_ci WHERE thread.itid = $itid) 467fb726d48Sopenharmony_ci AND thread.name LIKE '%TaskWork%' 468fb726d48Sopenharmony_ci AND callstack.name LIKE 'H:Task Perform:%' 469fb726d48Sopenharmony_ci AND -- 左包含 470fb726d48Sopenharmony_ci (($selectStartTime <= callstack.ts AND $selectEndTime > callstack.ts) 471fb726d48Sopenharmony_ci OR -- 右包含 472fb726d48Sopenharmony_ci ($selectStartTime < callstack.ts + callstack.dur AND $selectEndTime >= callstack.ts + callstack.dur) 473fb726d48Sopenharmony_ci OR -- 包含 474fb726d48Sopenharmony_ci ($selectStartTime >= callstack.ts AND $selectEndTime <= callstack.ts + 475fb726d48Sopenharmony_ci (case when callstack.dur = -1 then (SELECT end_ts FROM trace_range) else callstack.dur end)) 476fb726d48Sopenharmony_ci OR -- 被包含 477fb726d48Sopenharmony_ci ($selectStartTime <= callstack.ts AND $selectEndTime >= callstack.ts + callstack.dur)) 478fb726d48Sopenharmony_ci ORDER BY callstack.ts;`, 479fb726d48Sopenharmony_ci { $itid: itid, $selectStartTime: selectStartTime, $selectEndTime: selectEndTime } 480fb726d48Sopenharmony_ci ); 481