1fb726d48Sopenharmony_ci// Copyright (c) 2021 Huawei Device Co., Ltd. 2fb726d48Sopenharmony_ci// Licensed under the Apache License, Version 2.0 (the "License"); 3fb726d48Sopenharmony_ci// you may not use this file except in compliance with the License. 4fb726d48Sopenharmony_ci// You may obtain a copy of the License at 5fb726d48Sopenharmony_ci// 6fb726d48Sopenharmony_ci// http://www.apache.org/licenses/LICENSE-2.0 7fb726d48Sopenharmony_ci// 8fb726d48Sopenharmony_ci// Unless required by applicable law or agreed to in writing, software 9fb726d48Sopenharmony_ci// distributed under the License is distributed on an "AS IS" BASIS, 10fb726d48Sopenharmony_ci// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11fb726d48Sopenharmony_ci// See the License for the specific language governing permissions and 12fb726d48Sopenharmony_ci// limitations under the License. 13fb726d48Sopenharmony_ci 14fb726d48Sopenharmony_ciimport { TraficEnum } from './utils/QueryEnum'; 15fb726d48Sopenharmony_ciimport { filterDataByGroup } from './utils/DataFilter'; 16fb726d48Sopenharmony_ciimport { lrqList } from './utils/AllMemoryCache'; 17fb726d48Sopenharmony_ciimport { Args } from './CommonArgs'; 18fb726d48Sopenharmony_ci 19fb726d48Sopenharmony_ciexport const chartIrqDataSql = (args: Args): string => { 20fb726d48Sopenharmony_ci if (args.name === 'irq') { 21fb726d48Sopenharmony_ci return ` 22fb726d48Sopenharmony_ci select i.ts - ${args.recordStartNS 23fb726d48Sopenharmony_ci } as startNs, 24fb726d48Sopenharmony_ci max(i.dur) as dur, 25fb726d48Sopenharmony_ci i.depth, 26fb726d48Sopenharmony_ci ifnull(argsetid, -1) as argSetId, 27fb726d48Sopenharmony_ci i.id, 28fb726d48Sopenharmony_ci ((i.ts - ${args.recordStartNS}) / (${Math.floor((args.endNS - args.startNS) / args.width)})) as px 29fb726d48Sopenharmony_ci from irq i 30fb726d48Sopenharmony_ci where i.callid = ${args.cpu} 31fb726d48Sopenharmony_ci and ((i.cat = 'irq' and i.flag = '1') or i.cat = 'ipi') 32fb726d48Sopenharmony_ci and startNs + dur >= ${Math.floor(args.startNS)} 33fb726d48Sopenharmony_ci and startNs <= ${Math.floor(args.endNS)} 34fb726d48Sopenharmony_ci group by px; 35fb726d48Sopenharmony_ci `; 36fb726d48Sopenharmony_ci } else { 37fb726d48Sopenharmony_ci return ` 38fb726d48Sopenharmony_ci select i.ts - ${args.recordStartNS} as startNs, 39fb726d48Sopenharmony_ci max(i.dur) as dur, 40fb726d48Sopenharmony_ci i.depth, 41fb726d48Sopenharmony_ci ifnull(argsetid,-1) as argSetId, 42fb726d48Sopenharmony_ci i.id, 43fb726d48Sopenharmony_ci ((i.ts - ${args.recordStartNS}) / (${Math.floor((args.endNS - args.startNS) / args.width)})) as px 44fb726d48Sopenharmony_ci from irq i 45fb726d48Sopenharmony_ci where i.callid = ${args.cpu} 46fb726d48Sopenharmony_ci and i.cat = 'softirq' 47fb726d48Sopenharmony_ci and startNs + dur >= ${Math.floor(args.startNS)} 48fb726d48Sopenharmony_ci and startNs <= ${Math.floor(args.endNS)} 49fb726d48Sopenharmony_ci group by px; 50fb726d48Sopenharmony_ci `; 51fb726d48Sopenharmony_ci } 52fb726d48Sopenharmony_ci}; 53fb726d48Sopenharmony_ci 54fb726d48Sopenharmony_ciexport const chartIrqDataSqlMem = (args: Args): string => { 55fb726d48Sopenharmony_ci if (args.name === 'irq') { 56fb726d48Sopenharmony_ci return ` 57fb726d48Sopenharmony_ci select i.ts - t.start_ts as startNs,i.dur, 58fb726d48Sopenharmony_ci case when i.cat = 'ipi' then 'IPI' || i.name else i.name end as name, 59fb726d48Sopenharmony_ci i.depth, 60fb726d48Sopenharmony_ci ifnull(argsetid, -1) as argSetId, 61fb726d48Sopenharmony_ci i.id 62fb726d48Sopenharmony_ci from irq i,trace_range t 63fb726d48Sopenharmony_ci where i.callid = ${args.cpu} and ((i.cat = 'irq' and i.flag ='1') or i.cat = 'ipi') 64fb726d48Sopenharmony_ci `; 65fb726d48Sopenharmony_ci } else { 66fb726d48Sopenharmony_ci return ` 67fb726d48Sopenharmony_ci select i.ts - t.start_ts as startNs,i.dur,i.name,i.depth,ifnull(argsetid, -1) as argSetId,i.id from irq i, 68fb726d48Sopenharmony_citrace_range t where i.callid = ${args.cpu} and i.cat = 'softirq' 69fb726d48Sopenharmony_ci `; 70fb726d48Sopenharmony_ci } 71fb726d48Sopenharmony_ci}; 72fb726d48Sopenharmony_ci 73fb726d48Sopenharmony_ciexport function irqDataReceiver(data: unknown, proc: Function): void { 74fb726d48Sopenharmony_ci // @ts-ignore 75fb726d48Sopenharmony_ci if (data.params.trafic === TraficEnum.Memory) { 76fb726d48Sopenharmony_ci let res: unknown[]; 77fb726d48Sopenharmony_ci let list: unknown[]; 78fb726d48Sopenharmony_ci // @ts-ignore 79fb726d48Sopenharmony_ci if (!lrqList.has(data.params.cpu + data.params.name)) { 80fb726d48Sopenharmony_ci // @ts-ignore 81fb726d48Sopenharmony_ci list = proc(chartIrqDataSqlMem(data.params)); 82fb726d48Sopenharmony_ci // @ts-ignore 83fb726d48Sopenharmony_ci lrqList.set(data.params.cpu + data.params.name, list); 84fb726d48Sopenharmony_ci } else { 85fb726d48Sopenharmony_ci // @ts-ignore 86fb726d48Sopenharmony_ci list = lrqList.get(data.params.cpu + data.params.name) || []; 87fb726d48Sopenharmony_ci } 88fb726d48Sopenharmony_ci // @ts-ignore 89fb726d48Sopenharmony_ci res = filterDataByGroup(list || [], 'startNs', 'dur', data.params.startNS, data.params.endNS, data.params.width); 90fb726d48Sopenharmony_ci arrayBufferHandler(data, res, true); 91fb726d48Sopenharmony_ci } else { 92fb726d48Sopenharmony_ci // @ts-ignore 93fb726d48Sopenharmony_ci let sql = chartIrqDataSql(data.params); 94fb726d48Sopenharmony_ci let res = proc(sql); 95fb726d48Sopenharmony_ci // @ts-ignore 96fb726d48Sopenharmony_ci arrayBufferHandler(data, res, data.params.trafic !== TraficEnum.SharedArrayBuffer); 97fb726d48Sopenharmony_ci } 98fb726d48Sopenharmony_ci} 99fb726d48Sopenharmony_ci 100fb726d48Sopenharmony_cifunction arrayBufferHandler(data: unknown, res: unknown[], transfer: boolean): void { 101fb726d48Sopenharmony_ci // @ts-ignore 102fb726d48Sopenharmony_ci let startNS = new Float64Array(transfer ? res.length : data.params.sharedArrayBuffers.startNS); 103fb726d48Sopenharmony_ci // @ts-ignore 104fb726d48Sopenharmony_ci let dur = new Float64Array(transfer ? res.length : data.params.sharedArrayBuffers.dur); 105fb726d48Sopenharmony_ci // @ts-ignore 106fb726d48Sopenharmony_ci let depth = new Uint32Array(transfer ? res.length : data.params.sharedArrayBuffers.depth); 107fb726d48Sopenharmony_ci // @ts-ignore 108fb726d48Sopenharmony_ci let argSetId = new Int32Array(transfer ? res.length : data.params.sharedArrayBuffers.argSetId); 109fb726d48Sopenharmony_ci // @ts-ignore 110fb726d48Sopenharmony_ci let id = new Uint32Array(transfer ? res.length : data.params.sharedArrayBuffers.id); 111fb726d48Sopenharmony_ci res.forEach((it, i) => { 112fb726d48Sopenharmony_ci // @ts-ignore 113fb726d48Sopenharmony_ci data.params.trafic === TraficEnum.ProtoBuffer && (it = it.irqData); 114fb726d48Sopenharmony_ci // @ts-ignore 115fb726d48Sopenharmony_ci startNS[i] = it.startNs; 116fb726d48Sopenharmony_ci // @ts-ignore 117fb726d48Sopenharmony_ci dur[i] = it.dur; 118fb726d48Sopenharmony_ci // @ts-ignore 119fb726d48Sopenharmony_ci depth[i] = it.depth; 120fb726d48Sopenharmony_ci // @ts-ignore 121fb726d48Sopenharmony_ci argSetId[i] = it.argSetId; 122fb726d48Sopenharmony_ci // @ts-ignore 123fb726d48Sopenharmony_ci id[i] = it.id; 124fb726d48Sopenharmony_ci }); 125fb726d48Sopenharmony_ci (self as unknown as Worker).postMessage( 126fb726d48Sopenharmony_ci { 127fb726d48Sopenharmony_ci // @ts-ignore 128fb726d48Sopenharmony_ci id: data.id, 129fb726d48Sopenharmony_ci // @ts-ignore 130fb726d48Sopenharmony_ci action: data.action, 131fb726d48Sopenharmony_ci results: transfer 132fb726d48Sopenharmony_ci ? { 133fb726d48Sopenharmony_ci startNS: startNS.buffer, 134fb726d48Sopenharmony_ci dur: dur.buffer, 135fb726d48Sopenharmony_ci depth: depth.buffer, 136fb726d48Sopenharmony_ci argSetId: argSetId.buffer, 137fb726d48Sopenharmony_ci id: id.buffer, 138fb726d48Sopenharmony_ci } 139fb726d48Sopenharmony_ci : {}, 140fb726d48Sopenharmony_ci len: res.length, 141fb726d48Sopenharmony_ci transfer: transfer, 142fb726d48Sopenharmony_ci }, 143fb726d48Sopenharmony_ci transfer ? [startNS.buffer, dur.buffer, depth.buffer, argSetId.buffer, id.buffer] : [] 144fb726d48Sopenharmony_ci ); 145fb726d48Sopenharmony_ci} 146