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