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 { TraficEnum } from './utils/QueryEnum'; 16fb726d48Sopenharmony_ciimport { hiSysEventList } from './utils/AllMemoryCache'; 17fb726d48Sopenharmony_ciimport { filterDataByGroupLayer } from './utils/DataFilter'; 18fb726d48Sopenharmony_ciimport { Args } from './CommonArgs'; 19fb726d48Sopenharmony_ci 20fb726d48Sopenharmony_ciexport const chartHiSysEventDataSql = (args: Args): string => { 21fb726d48Sopenharmony_ci return ` 22fb726d48Sopenharmony_ci SELECT S.id, 23fb726d48Sopenharmony_ci (S.ts - ${ 24fb726d48Sopenharmony_ci args.recordStartNS 25fb726d48Sopenharmony_ci }) AS startNs, 26fb726d48Sopenharmony_ci pid, 27fb726d48Sopenharmony_ci tid, 28fb726d48Sopenharmony_ci uid, 29fb726d48Sopenharmony_ci seq, 30fb726d48Sopenharmony_ci CASE 31fb726d48Sopenharmony_ci WHEN S.level = 'MINOR' THEN 0 32fb726d48Sopenharmony_ci WHEN S.level = 'CRITICAL' THEN 1 33fb726d48Sopenharmony_ci END 34fb726d48Sopenharmony_ci AS depth, 35fb726d48Sopenharmony_ci 1 AS dur, 36fb726d48Sopenharmony_ci ((S.ts - ${args.recordStartNS}) / (${Math.floor((args.endNS - args.startNS) / args.width)})) + (CASE 37fb726d48Sopenharmony_ci WHEN S.level = 'MINOR' 38fb726d48Sopenharmony_ci THEN 0 39fb726d48Sopenharmony_ci WHEN S.level = 'CRITICAL' 40fb726d48Sopenharmony_ci THEN 1 41fb726d48Sopenharmony_ci END * 42fb726d48Sopenharmony_ci ${ 43fb726d48Sopenharmony_ci args.width 44fb726d48Sopenharmony_ci }) AS px 45fb726d48Sopenharmony_ci FROM hisys_all_event AS S 46fb726d48Sopenharmony_ci where S.id is not null 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_ciexport const chartHiSysEventSql = (args: Args): string => { 53fb726d48Sopenharmony_ci return ` 54fb726d48Sopenharmony_ci SELECT S.id, 55fb726d48Sopenharmony_ci (S.ts - ${args.recordStartNS}) AS startNs, 56fb726d48Sopenharmony_ci pid, 57fb726d48Sopenharmony_ci tid, 58fb726d48Sopenharmony_ci uid, 59fb726d48Sopenharmony_ci seq, 60fb726d48Sopenharmony_ci CASE 61fb726d48Sopenharmony_ci WHEN S.level = 'MINOR' THEN 0 62fb726d48Sopenharmony_ci WHEN S.level = 'CRITICAL' THEN 1 63fb726d48Sopenharmony_ci END 64fb726d48Sopenharmony_ci AS depth, 65fb726d48Sopenharmony_ci 1 AS dur 66fb726d48Sopenharmony_ci FROM hisys_all_event AS S 67fb726d48Sopenharmony_ci where S.id is not null 68fb726d48Sopenharmony_ci ORDER BY S.id`; 69fb726d48Sopenharmony_ci}; 70fb726d48Sopenharmony_ci 71fb726d48Sopenharmony_ciexport function hiSysEventDataReceiver(data: unknown, proc: Function): void { 72fb726d48Sopenharmony_ci // @ts-ignore 73fb726d48Sopenharmony_ci if (data.params.trafic === TraficEnum.Memory) { 74fb726d48Sopenharmony_ci // @ts-ignore 75fb726d48Sopenharmony_ci if (!hiSysEventList.has(data.params.id)) { 76fb726d48Sopenharmony_ci // @ts-ignore 77fb726d48Sopenharmony_ci let sql = chartHiSysEventSql(data.params); 78fb726d48Sopenharmony_ci // @ts-ignore 79fb726d48Sopenharmony_ci hiSysEventList.set(data.params.id, proc(sql)); 80fb726d48Sopenharmony_ci } 81fb726d48Sopenharmony_ci // @ts-ignore 82fb726d48Sopenharmony_ci let list = hiSysEventList.get(data.params.id) || []; 83fb726d48Sopenharmony_ci let res = filterDataByGroupLayer( 84fb726d48Sopenharmony_ci list || [], 85fb726d48Sopenharmony_ci 'depth', 86fb726d48Sopenharmony_ci 'startNs', 87fb726d48Sopenharmony_ci 'dur', 88fb726d48Sopenharmony_ci // @ts-ignore 89fb726d48Sopenharmony_ci data.params.startNS, 90fb726d48Sopenharmony_ci // @ts-ignore 91fb726d48Sopenharmony_ci data.params.endNS, 92fb726d48Sopenharmony_ci // @ts-ignore 93fb726d48Sopenharmony_ci data.params.width 94fb726d48Sopenharmony_ci ); 95fb726d48Sopenharmony_ci // @ts-ignore 96fb726d48Sopenharmony_ci arrayBufferHandler(data, res, data.params.trafic !== TraficEnum.SharedArrayBuffer); 97fb726d48Sopenharmony_ci } else { 98fb726d48Sopenharmony_ci // @ts-ignore 99fb726d48Sopenharmony_ci let sql = chartHiSysEventDataSql(data.params); 100fb726d48Sopenharmony_ci let res = proc(sql); 101fb726d48Sopenharmony_ci // @ts-ignore 102fb726d48Sopenharmony_ci arrayBufferHandler(data, res, data.params.trafic !== TraficEnum.SharedArrayBuffer); 103fb726d48Sopenharmony_ci } 104fb726d48Sopenharmony_ci} 105fb726d48Sopenharmony_ci 106fb726d48Sopenharmony_cifunction arrayBufferHandler(data: unknown, res: unknown[], transfer: boolean): void { 107fb726d48Sopenharmony_ci // @ts-ignore 108fb726d48Sopenharmony_ci let id = new Uint16Array(transfer ? res.length : data.params.sharedArrayBuffers.id); 109fb726d48Sopenharmony_ci // @ts-ignore 110fb726d48Sopenharmony_ci let ts = new Float64Array(transfer ? res.length : data.params.sharedArrayBuffers.ts); 111fb726d48Sopenharmony_ci // @ts-ignore 112fb726d48Sopenharmony_ci let pid = new Uint16Array(transfer ? res.length : data.params.sharedArrayBuffers.pid); 113fb726d48Sopenharmony_ci // @ts-ignore 114fb726d48Sopenharmony_ci let tid = new Uint16Array(transfer ? res.length : data.params.sharedArrayBuffers.tid); 115fb726d48Sopenharmony_ci // @ts-ignore 116fb726d48Sopenharmony_ci let seq = new Float64Array(transfer ? res.length : data.params.sharedArrayBuffers.seq); 117fb726d48Sopenharmony_ci // @ts-ignore 118fb726d48Sopenharmony_ci let uid = new Uint16Array(transfer ? res.length : data.params.sharedArrayBuffers.uid); 119fb726d48Sopenharmony_ci // @ts-ignore 120fb726d48Sopenharmony_ci let dur = new Uint16Array(transfer ? res.length : data.params.sharedArrayBuffers.dur); 121fb726d48Sopenharmony_ci // @ts-ignore 122fb726d48Sopenharmony_ci let depth = new Uint16Array(transfer ? res.length : data.params.sharedArrayBuffers.depth); 123fb726d48Sopenharmony_ci res.forEach((it, index) => { 124fb726d48Sopenharmony_ci // @ts-ignore 125fb726d48Sopenharmony_ci data.params.trafic === TraficEnum.ProtoBuffer && (it = it.hiSysEventData); 126fb726d48Sopenharmony_ci // @ts-ignore 127fb726d48Sopenharmony_ci uid[index] = it.uid; 128fb726d48Sopenharmony_ci // @ts-ignore 129fb726d48Sopenharmony_ci id[index] = it.id; 130fb726d48Sopenharmony_ci // @ts-ignore 131fb726d48Sopenharmony_ci ts[index] = it.startNs || it.ts; 132fb726d48Sopenharmony_ci // @ts-ignore 133fb726d48Sopenharmony_ci pid[index] = it.pid; 134fb726d48Sopenharmony_ci // @ts-ignore 135fb726d48Sopenharmony_ci tid[index] = it.tid; 136fb726d48Sopenharmony_ci // @ts-ignore 137fb726d48Sopenharmony_ci seq[index] = it.seq; 138fb726d48Sopenharmony_ci // @ts-ignore 139fb726d48Sopenharmony_ci dur[index] = it.dur; 140fb726d48Sopenharmony_ci // @ts-ignore 141fb726d48Sopenharmony_ci depth[index] = it.depth; 142fb726d48Sopenharmony_ci }); 143fb726d48Sopenharmony_ci (self as unknown as Worker).postMessage( 144fb726d48Sopenharmony_ci { 145fb726d48Sopenharmony_ci // @ts-ignore 146fb726d48Sopenharmony_ci id: data.id, 147fb726d48Sopenharmony_ci // @ts-ignore 148fb726d48Sopenharmony_ci action: data.action, 149fb726d48Sopenharmony_ci results: transfer 150fb726d48Sopenharmony_ci ? { 151fb726d48Sopenharmony_ci uid: uid.buffer, 152fb726d48Sopenharmony_ci id: id.buffer, 153fb726d48Sopenharmony_ci ts: ts.buffer, 154fb726d48Sopenharmony_ci pid: pid.buffer, 155fb726d48Sopenharmony_ci tid: tid.buffer, 156fb726d48Sopenharmony_ci seq: seq.buffer, 157fb726d48Sopenharmony_ci dur: dur.buffer, 158fb726d48Sopenharmony_ci depth: depth.buffer, 159fb726d48Sopenharmony_ci } 160fb726d48Sopenharmony_ci : {}, 161fb726d48Sopenharmony_ci len: res.length, 162fb726d48Sopenharmony_ci transfer: transfer, 163fb726d48Sopenharmony_ci }, 164fb726d48Sopenharmony_ci transfer ? [id.buffer, ts.buffer, pid.buffer, tid.buffer, uid.buffer, dur.buffer, seq.buffer, depth.buffer] : [] 165fb726d48Sopenharmony_ci ); 166fb726d48Sopenharmony_ci} 167