1// Copyright (c) 2021 Huawei Device Co., Ltd. 2// Licensed under the Apache License, Version 2.0 (the "License"); 3// you may not use this file except in compliance with the License. 4// You may obtain a copy of the License at 5// 6// http://www.apache.org/licenses/LICENSE-2.0 7// 8// Unless required by applicable law or agreed to in writing, software 9// distributed under the License is distributed on an "AS IS" BASIS, 10// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11// See the License for the specific language governing permissions and 12// limitations under the License. 13 14import { CHART_OFFSET_LEFT, MAX_COUNT, QueryEnum, TraficEnum } from '../utils/QueryEnum'; 15import { getThreadPool } from '../../SqlLite'; 16import { TraceRow } from '../../../component/trace/base/TraceRow'; 17import { Utils } from '../../../component/trace/base/Utils'; 18import { XpowerAppDetailStruct } from '../../ui-worker/ProcedureWorkerXpowerAppDetail'; 19 20export function xpowerAppDetailDataSender( 21 row: TraceRow<XpowerAppDetailStruct>, 22 args?: unknown 23): Promise<XpowerAppDetailStruct[]> { 24 let trafic: number = TraficEnum.Memory; 25 let width = row.clientWidth - CHART_OFFSET_LEFT; 26 if (trafic === TraficEnum.SharedArrayBuffer && !row.sharedArrayBuffers) { 27 row.sharedArrayBuffers = { 28 startTime: new SharedArrayBuffer(Float64Array.BYTES_PER_ELEMENT * MAX_COUNT), 29 c1hz: new SharedArrayBuffer(Float64Array.BYTES_PER_ELEMENT * MAX_COUNT), 30 c5hz: new SharedArrayBuffer(Float64Array.BYTES_PER_ELEMENT * MAX_COUNT), 31 c10hz: new SharedArrayBuffer(Float64Array.BYTES_PER_ELEMENT * MAX_COUNT), 32 c15hz: new SharedArrayBuffer(Float64Array.BYTES_PER_ELEMENT * MAX_COUNT), 33 c24hz: new SharedArrayBuffer(Float64Array.BYTES_PER_ELEMENT * MAX_COUNT), 34 c30hz: new SharedArrayBuffer(Float64Array.BYTES_PER_ELEMENT * MAX_COUNT), 35 c45hz: new SharedArrayBuffer(Float64Array.BYTES_PER_ELEMENT * MAX_COUNT), 36 c60hz: new SharedArrayBuffer(Float64Array.BYTES_PER_ELEMENT * MAX_COUNT), 37 c90hz: new SharedArrayBuffer(Float64Array.BYTES_PER_ELEMENT * MAX_COUNT), 38 c120hz: new SharedArrayBuffer(Float64Array.BYTES_PER_ELEMENT * MAX_COUNT), 39 c180hz: new SharedArrayBuffer(Float64Array.BYTES_PER_ELEMENT * MAX_COUNT), 40 }; 41 } 42 return new Promise((resolve, reject): void => { 43 getThreadPool(row.traceId).submitProto( 44 QueryEnum.XpowerAppDetailData, 45 { 46 startNS: TraceRow.range?.startNS || 0, 47 endNS: TraceRow.range?.endNS || 0, 48 totalNS: TraceRow.range?.totalNS || 0, 49 recordStartNS: Utils.getInstance().getRecordStartNS(row.traceId), 50 recordEndNS: Utils.getInstance().getRecordEndNS(row.traceId), 51 // @ts-ignore 52 queryAll: args && args.queryAll, 53 // @ts-ignore 54 selectStartNS: args ? args.startNS : 0, 55 // @ts-ignore 56 selectEndNS: args ? args.endNS : 0, 57 // @ts-ignore 58 selectTotalNS: args ? args.endNS - args.startNS : 0, 59 t: Date.now(), 60 width: width, 61 trafic: trafic, 62 sharedArrayBuffers: row.sharedArrayBuffers, 63 }, 64 (res: unknown, len: number, transfer: boolean): void => { 65 resolve(arrayBufferHandler(transfer ? res : row.sharedArrayBuffers, len)); 66 } 67 ); 68 }); 69} 70 71function arrayBufferHandler(buffers: unknown, len: number): XpowerAppDetailStruct[] { 72 let outArr: XpowerAppDetailStruct[] = []; 73 // @ts-ignore 74 let startTime = new Float64Array(buffers.startTime); 75 // @ts-ignore 76 let c1hz = new Float64Array(buffers.c1hz); 77 // @ts-ignore 78 let c5hz = new Float64Array(buffers.c5hz); 79 // @ts-ignore 80 let c10hz = new Float64Array(buffers.c10hz); 81 // @ts-ignore 82 let c15hz = new Float64Array(buffers.c15hz); 83 // @ts-ignore 84 let c24hz = new Float64Array(buffers.c24hz); 85 // @ts-ignore 86 let c30hz = new Float64Array(buffers.c30hz); 87 // @ts-ignore 88 let c45hz = new Float64Array(buffers.c45hz); 89 // @ts-ignore 90 let c60hz = new Float64Array(buffers.c60hz); 91 // @ts-ignore 92 let c90hz = new Float64Array(buffers.c90hz); 93 // @ts-ignore 94 let c120hz = new Float64Array(buffers.c120hz); 95 // @ts-ignore 96 let c180hz = new Float64Array(buffers.c180hz); 97 for (let i = 0; i < len; i++) { 98 outArr.push({ 99 startTime: startTime[i], 100 c1hz: c1hz[i], 101 c5hz: c5hz[i], 102 c10hz: c10hz[i], 103 c15hz: c15hz[i], 104 c24hz: c24hz[i], 105 c30hz: c30hz[i], 106 c45hz: c45hz[i], 107 c60hz: c60hz[i], 108 c90hz: c90hz[i], 109 c120hz: c120hz[i], 110 c180hz: c180hz[i], 111 } as unknown as XpowerAppDetailStruct); 112 } 113 return outArr; 114} 115