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 { processFrameList } from '../utils/AllMemoryCache'; 16fb726d48Sopenharmony_ciimport { BaseStruct } from '../../ui-worker/ProcedureWorkerCommon'; 17fb726d48Sopenharmony_ciimport { Args } from '../CommonArgs'; 18fb726d48Sopenharmony_ci 19fb726d48Sopenharmony_ciexport const chartProcessExpectedDataSql = (args: Args): string => { 20fb726d48Sopenharmony_ci const recordStartNS = args.recordStartNS; 21fb726d48Sopenharmony_ci const pid = args.pid; 22fb726d48Sopenharmony_ci return ` 23fb726d48Sopenharmony_ci SELECT 24fb726d48Sopenharmony_ci (a.ts - ${recordStartNS}) AS ts, 25fb726d48Sopenharmony_ci a.dur, 26fb726d48Sopenharmony_ci ${pid} as pid, 27fb726d48Sopenharmony_ci a.id, 28fb726d48Sopenharmony_ci a.vsync as name, 29fb726d48Sopenharmony_ci a.type, 30fb726d48Sopenharmony_ci a.depth 31fb726d48Sopenharmony_ci FROM frame_slice AS a 32fb726d48Sopenharmony_ci WHERE a.type = 1 33fb726d48Sopenharmony_ci and (a.flag <> 2 or a.flag is null) 34fb726d48Sopenharmony_ci and a.ipid in (select p.ipid from process AS p where p.pid = ${pid}) 35fb726d48Sopenharmony_ci ORDER BY a.ipid`; 36fb726d48Sopenharmony_ci}; 37fb726d48Sopenharmony_ci 38fb726d48Sopenharmony_ciexport const chartProcessExpectedProtoDataSql = (args: Args): string => { 39fb726d48Sopenharmony_ci const endNS = args.endNS; 40fb726d48Sopenharmony_ci const startNS = args.startNS; 41fb726d48Sopenharmony_ci const recordStartNS = args.recordStartNS; 42fb726d48Sopenharmony_ci const pid = args.pid; 43fb726d48Sopenharmony_ci const width = args.width; 44fb726d48Sopenharmony_ci return ` 45fb726d48Sopenharmony_ci SELECT 46fb726d48Sopenharmony_ci (a.ts - ${startNS}) AS ts, 47fb726d48Sopenharmony_ci a.dur, 48fb726d48Sopenharmony_ci ${pid} as pid, 49fb726d48Sopenharmony_ci a.id, 50fb726d48Sopenharmony_ci a.vsync as name, 51fb726d48Sopenharmony_ci a.type, 52fb726d48Sopenharmony_ci a.depth, 53fb726d48Sopenharmony_ci (a.ts - ${recordStartNS}) / (${Math.floor((endNS - startNS) / width)}) + (a.depth * ${width}) AS px 54fb726d48Sopenharmony_ci FROM frame_slice AS a 55fb726d48Sopenharmony_ci WHERE a.type = 1 56fb726d48Sopenharmony_ci and (a.flag <> 2 or a.flag is null) 57fb726d48Sopenharmony_ci and a.ipid in (select p.ipid from process AS p where p.pid = ${pid}) 58fb726d48Sopenharmony_ci and (a.ts - ${recordStartNS} + a.dur) >= ${Math.floor(startNS)} 59fb726d48Sopenharmony_ci and (a.ts - ${recordStartNS}) <= ${Math.floor(endNS)} 60fb726d48Sopenharmony_ci group by px 61fb726d48Sopenharmony_ci ORDER BY a.ipid;`; 62fb726d48Sopenharmony_ci}; 63fb726d48Sopenharmony_ci 64fb726d48Sopenharmony_ciexport function processExpectedDataReceiver(data: unknown, proc: Function): void { 65fb726d48Sopenharmony_ci //@ts-ignore 66fb726d48Sopenharmony_ci if (data.params.trafic === TraficEnum.Memory) { 67fb726d48Sopenharmony_ci //@ts-ignore 68fb726d48Sopenharmony_ci if (!processFrameList.has(`${data.params.pid}_expected`)) { 69fb726d48Sopenharmony_ci //@ts-ignore 70fb726d48Sopenharmony_ci let sql = chartProcessExpectedDataSql(data.params); //@ts-ignore 71fb726d48Sopenharmony_ci processFrameList.set(`${data.params.pid}_expected`, proc(sql)); 72fb726d48Sopenharmony_ci } //@ts-ignore 73fb726d48Sopenharmony_ci arrayBufferHandler(data, processFrameList.get(`${data.params.pid}_expected`)!, true); 74fb726d48Sopenharmony_ci } else { 75fb726d48Sopenharmony_ci //@ts-ignore 76fb726d48Sopenharmony_ci let sql = chartProcessExpectedProtoDataSql(data.params as BaseStruct); 77fb726d48Sopenharmony_ci let res = proc(sql); //@ts-ignore 78fb726d48Sopenharmony_ci arrayBufferHandler(data, res, data.params.trafic !== TraficEnum.SharedArrayBuffer); 79fb726d48Sopenharmony_ci } 80fb726d48Sopenharmony_ci} 81fb726d48Sopenharmony_ci 82fb726d48Sopenharmony_cifunction arrayBufferHandler(data: unknown, res: unknown[], transfer: boolean): void { 83fb726d48Sopenharmony_ci //@ts-ignore 84fb726d48Sopenharmony_ci let ts = new Float64Array(transfer ? res.length : data.params.sharedArrayBuffers.ts); //@ts-ignore 85fb726d48Sopenharmony_ci let dur = new Float64Array(transfer ? res.length : data.params.sharedArrayBuffers.dur); //@ts-ignore 86fb726d48Sopenharmony_ci let pid = new Int32Array(transfer ? res.length : data.params.sharedArrayBuffers.pid); //@ts-ignore 87fb726d48Sopenharmony_ci let id = new Int32Array(transfer ? res.length : data.params.sharedArrayBuffers.id); //@ts-ignore 88fb726d48Sopenharmony_ci let name = new Int32Array(transfer ? res.length : data.params.sharedArrayBuffers.name); //@ts-ignore 89fb726d48Sopenharmony_ci let type = new Int32Array(transfer ? res.length : data.params.sharedArrayBuffers.type); //@ts-ignore 90fb726d48Sopenharmony_ci let depth = new Uint16Array(transfer ? res.length : data.params.sharedArrayBuffers.depth); 91fb726d48Sopenharmony_ci for (let index = 0; index < res.length; index++) { 92fb726d48Sopenharmony_ci let itemData = res[index]; //@ts-ignore 93fb726d48Sopenharmony_ci data.params.trafic === TraficEnum.ProtoBuffer && (itemData = itemData.processJanksFramesData); //@ts-ignore 94fb726d48Sopenharmony_ci dur[index] = itemData.dur; //@ts-ignore 95fb726d48Sopenharmony_ci ts[index] = itemData.ts; //@ts-ignore 96fb726d48Sopenharmony_ci pid[index] = itemData.pid; //@ts-ignore 97fb726d48Sopenharmony_ci id[index] = itemData.id; //@ts-ignore 98fb726d48Sopenharmony_ci name[index] = itemData.name; //@ts-ignore 99fb726d48Sopenharmony_ci type[index] = itemData.type; //@ts-ignore 100fb726d48Sopenharmony_ci depth[index] = itemData.depth; 101fb726d48Sopenharmony_ci } 102fb726d48Sopenharmony_ci (self as unknown as Worker).postMessage( 103fb726d48Sopenharmony_ci { 104fb726d48Sopenharmony_ci //@ts-ignore 105fb726d48Sopenharmony_ci id: data.id, //@ts-ignore 106fb726d48Sopenharmony_ci action: data.action, 107fb726d48Sopenharmony_ci results: transfer 108fb726d48Sopenharmony_ci ? { 109fb726d48Sopenharmony_ci dur: dur.buffer, 110fb726d48Sopenharmony_ci ts: ts.buffer, 111fb726d48Sopenharmony_ci pid: pid.buffer, 112fb726d48Sopenharmony_ci id: id.buffer, 113fb726d48Sopenharmony_ci name: name.buffer, 114fb726d48Sopenharmony_ci type: name.buffer, 115fb726d48Sopenharmony_ci depth: depth.buffer, 116fb726d48Sopenharmony_ci } 117fb726d48Sopenharmony_ci : {}, 118fb726d48Sopenharmony_ci len: res.length, 119fb726d48Sopenharmony_ci transfer: transfer, 120fb726d48Sopenharmony_ci }, 121fb726d48Sopenharmony_ci transfer ? [dur.buffer, ts.buffer, pid.buffer, type.buffer, id.buffer, name.buffer, depth.buffer] : [] 122fb726d48Sopenharmony_ci ); 123fb726d48Sopenharmony_ci} 124