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 { CHART_OFFSET_LEFT, MAX_COUNT, QueryEnum, TraficEnum } from './utils/QueryEnum'; 17fb726d48Sopenharmony_ciimport { threadPool } from '../SqlLite'; 18fb726d48Sopenharmony_ciimport { TraceRow } from '../../component/trace/base/TraceRow'; 19fb726d48Sopenharmony_ciimport { SnapshotStruct } from '../ui-worker/ProcedureWorkerSnapshot'; 20fb726d48Sopenharmony_ci 21fb726d48Sopenharmony_ciexport function sMapsDataSender(rowName: string, row: TraceRow<SnapshotStruct>): Promise<SnapshotStruct[]> { 22fb726d48Sopenharmony_ci let trafic: number = TraficEnum.ProtoBuffer; 23fb726d48Sopenharmony_ci let width = row.clientWidth - CHART_OFFSET_LEFT; 24fb726d48Sopenharmony_ci if (trafic === TraficEnum.SharedArrayBuffer && !row.sharedArrayBuffers) { 25fb726d48Sopenharmony_ci row.sharedArrayBuffers = { 26fb726d48Sopenharmony_ci value: new SharedArrayBuffer(Uint32Array.BYTES_PER_ELEMENT * MAX_COUNT), 27fb726d48Sopenharmony_ci startNs: new SharedArrayBuffer(Float64Array.BYTES_PER_ELEMENT * MAX_COUNT), 28fb726d48Sopenharmony_ci }; 29fb726d48Sopenharmony_ci } 30fb726d48Sopenharmony_ci return new Promise((resolve, reject) => { 31fb726d48Sopenharmony_ci threadPool.submitProto( 32fb726d48Sopenharmony_ci QueryEnum.VmTrackerSmapsData, 33fb726d48Sopenharmony_ci { 34fb726d48Sopenharmony_ci startNs: TraceRow.range?.startNS || 0, 35fb726d48Sopenharmony_ci endNs: TraceRow.range?.endNS || 0, 36fb726d48Sopenharmony_ci recordStartNS: window.recordStartNS, 37fb726d48Sopenharmony_ci recordEndNS: window.recordEndNS, 38fb726d48Sopenharmony_ci width: width, 39fb726d48Sopenharmony_ci trafic: trafic, 40fb726d48Sopenharmony_ci sharedArrayBuffers: row.sharedArrayBuffers, 41fb726d48Sopenharmony_ci name: rowName, 42fb726d48Sopenharmony_ci }, // @ts-ignore 43fb726d48Sopenharmony_ci (res: unknown, len: number, transfer: boolean) => { 44fb726d48Sopenharmony_ci resolve(arrayBufferHandler(res, len)); 45fb726d48Sopenharmony_ci } 46fb726d48Sopenharmony_ci ); 47fb726d48Sopenharmony_ci }); 48fb726d48Sopenharmony_ci} 49fb726d48Sopenharmony_ci 50fb726d48Sopenharmony_ciexport function dmaDataSender(ipid: number, row: TraceRow<SnapshotStruct>): Promise<SnapshotStruct[]> { 51fb726d48Sopenharmony_ci let trafic: number = TraficEnum.ProtoBuffer; 52fb726d48Sopenharmony_ci let dmaWidth = row.clientWidth - CHART_OFFSET_LEFT; 53fb726d48Sopenharmony_ci if (trafic === TraficEnum.SharedArrayBuffer && !row.sharedArrayBuffers) { 54fb726d48Sopenharmony_ci row.sharedArrayBuffers = { 55fb726d48Sopenharmony_ci startNs: new SharedArrayBuffer(Float64Array.BYTES_PER_ELEMENT * MAX_COUNT), 56fb726d48Sopenharmony_ci value: new SharedArrayBuffer(Uint32Array.BYTES_PER_ELEMENT * MAX_COUNT), 57fb726d48Sopenharmony_ci }; 58fb726d48Sopenharmony_ci } 59fb726d48Sopenharmony_ci return new Promise((resolve, reject) => { 60fb726d48Sopenharmony_ci threadPool.submitProto( 61fb726d48Sopenharmony_ci QueryEnum.VmTrackerDmaData, 62fb726d48Sopenharmony_ci { 63fb726d48Sopenharmony_ci startNs: TraceRow.range?.startNS || 0, 64fb726d48Sopenharmony_ci endNs: TraceRow.range?.endNS || 0, 65fb726d48Sopenharmony_ci recordStartNS: window.recordStartNS, 66fb726d48Sopenharmony_ci recordEndNS: window.recordEndNS, 67fb726d48Sopenharmony_ci width: dmaWidth, 68fb726d48Sopenharmony_ci trafic: trafic, 69fb726d48Sopenharmony_ci ipid: ipid, 70fb726d48Sopenharmony_ci sharedArrayBuffers: row.sharedArrayBuffers, 71fb726d48Sopenharmony_ci }, // @ts-ignore 72fb726d48Sopenharmony_ci (res: unknown, len: number, transfer: boolean) => { 73fb726d48Sopenharmony_ci resolve(arrayBufferHandler(res, len)); 74fb726d48Sopenharmony_ci } 75fb726d48Sopenharmony_ci ); 76fb726d48Sopenharmony_ci }); 77fb726d48Sopenharmony_ci} 78fb726d48Sopenharmony_ci 79fb726d48Sopenharmony_ciexport function gpuMemoryDataSender(ipid: number, row: TraceRow<SnapshotStruct>): Promise<SnapshotStruct[]> { 80fb726d48Sopenharmony_ci let trafic: number = TraficEnum.ProtoBuffer; 81fb726d48Sopenharmony_ci let gpuMemWidth = row.clientWidth - CHART_OFFSET_LEFT; 82fb726d48Sopenharmony_ci if (trafic === TraficEnum.SharedArrayBuffer && !row.sharedArrayBuffers) { 83fb726d48Sopenharmony_ci row.sharedArrayBuffers = { 84fb726d48Sopenharmony_ci startNs: new SharedArrayBuffer(Float64Array.BYTES_PER_ELEMENT * MAX_COUNT), 85fb726d48Sopenharmony_ci value: new SharedArrayBuffer(Uint32Array.BYTES_PER_ELEMENT * MAX_COUNT), 86fb726d48Sopenharmony_ci }; 87fb726d48Sopenharmony_ci } 88fb726d48Sopenharmony_ci return new Promise((resolve, reject) => { 89fb726d48Sopenharmony_ci threadPool.submitProto( 90fb726d48Sopenharmony_ci QueryEnum.VmTrackerGpuMemoryData, 91fb726d48Sopenharmony_ci { 92fb726d48Sopenharmony_ci startNs: TraceRow.range?.startNS || 0, 93fb726d48Sopenharmony_ci endNs: TraceRow.range?.endNS || 0, 94fb726d48Sopenharmony_ci recordStartNS: window.recordStartNS, 95fb726d48Sopenharmony_ci recordEndNS: window.recordEndNS, 96fb726d48Sopenharmony_ci width: gpuMemWidth, 97fb726d48Sopenharmony_ci trafic: trafic, 98fb726d48Sopenharmony_ci ipid: ipid, 99fb726d48Sopenharmony_ci sharedArrayBuffers: row.sharedArrayBuffers, 100fb726d48Sopenharmony_ci }, // @ts-ignore 101fb726d48Sopenharmony_ci (res: unknown, len: number, transfer: boolean) => { 102fb726d48Sopenharmony_ci resolve(arrayBufferHandler(res, len)); 103fb726d48Sopenharmony_ci } 104fb726d48Sopenharmony_ci ); 105fb726d48Sopenharmony_ci }); 106fb726d48Sopenharmony_ci} 107fb726d48Sopenharmony_ciexport function gpuResourceDataSender(scratchId: number, row: TraceRow<SnapshotStruct>): Promise<SnapshotStruct[]> { 108fb726d48Sopenharmony_ci let trafic: number = TraficEnum.ProtoBuffer; 109fb726d48Sopenharmony_ci let gpuResWidth = row.clientWidth - CHART_OFFSET_LEFT; 110fb726d48Sopenharmony_ci if (trafic === TraficEnum.SharedArrayBuffer && !row.sharedArrayBuffers) { 111fb726d48Sopenharmony_ci row.sharedArrayBuffers = { 112fb726d48Sopenharmony_ci startNs: new SharedArrayBuffer(Float64Array.BYTES_PER_ELEMENT * MAX_COUNT), 113fb726d48Sopenharmony_ci value: new SharedArrayBuffer(Uint32Array.BYTES_PER_ELEMENT * MAX_COUNT), 114fb726d48Sopenharmony_ci }; 115fb726d48Sopenharmony_ci } 116fb726d48Sopenharmony_ci return new Promise((resolve, reject) => { 117fb726d48Sopenharmony_ci threadPool.submitProto( 118fb726d48Sopenharmony_ci QueryEnum.VmTrackerGpuResourceData, 119fb726d48Sopenharmony_ci { 120fb726d48Sopenharmony_ci startNs: TraceRow.range?.startNS || 0, 121fb726d48Sopenharmony_ci endNs: TraceRow.range?.endNS || 0, 122fb726d48Sopenharmony_ci recordStartNS: window.recordStartNS, 123fb726d48Sopenharmony_ci recordEndNS: window.recordEndNS, 124fb726d48Sopenharmony_ci width: gpuResWidth, 125fb726d48Sopenharmony_ci trafic: trafic, 126fb726d48Sopenharmony_ci sharedArrayBuffers: row.sharedArrayBuffers, 127fb726d48Sopenharmony_ci scratchId: scratchId, 128fb726d48Sopenharmony_ci }, // @ts-ignore 129fb726d48Sopenharmony_ci (res: unknown, len: number, transfer: boolean) => { 130fb726d48Sopenharmony_ci resolve(arrayBufferHandler(res, len)); 131fb726d48Sopenharmony_ci } 132fb726d48Sopenharmony_ci ); 133fb726d48Sopenharmony_ci }); 134fb726d48Sopenharmony_ci} 135fb726d48Sopenharmony_ci 136fb726d48Sopenharmony_ciexport function gpuGpuDataSender(ipid: number, name: string, row: TraceRow<SnapshotStruct>): Promise<SnapshotStruct[]> { 137fb726d48Sopenharmony_ci let trafic: number = TraficEnum.ProtoBuffer; 138fb726d48Sopenharmony_ci let gpuWidth = row.clientWidth - CHART_OFFSET_LEFT; 139fb726d48Sopenharmony_ci if (trafic === TraficEnum.SharedArrayBuffer && !row.sharedArrayBuffers) { 140fb726d48Sopenharmony_ci row.sharedArrayBuffers = { 141fb726d48Sopenharmony_ci startNs: new SharedArrayBuffer(Float64Array.BYTES_PER_ELEMENT * MAX_COUNT), 142fb726d48Sopenharmony_ci value: new SharedArrayBuffer(Uint32Array.BYTES_PER_ELEMENT * MAX_COUNT), 143fb726d48Sopenharmony_ci }; 144fb726d48Sopenharmony_ci } 145fb726d48Sopenharmony_ci return new Promise((resolve, reject) => { 146fb726d48Sopenharmony_ci threadPool.submitProto( 147fb726d48Sopenharmony_ci QueryEnum.VmTrackerGpuData, 148fb726d48Sopenharmony_ci { 149fb726d48Sopenharmony_ci startNs: TraceRow.range?.startNS || 0, 150fb726d48Sopenharmony_ci endNs: TraceRow.range?.endNS || 0, 151fb726d48Sopenharmony_ci recordStartNS: window.recordStartNS, 152fb726d48Sopenharmony_ci recordEndNS: window.recordEndNS, 153fb726d48Sopenharmony_ci width: gpuWidth, 154fb726d48Sopenharmony_ci trafic: trafic, 155fb726d48Sopenharmony_ci sharedArrayBuffers: row.sharedArrayBuffers, 156fb726d48Sopenharmony_ci ipid: ipid, 157fb726d48Sopenharmony_ci name: name, 158fb726d48Sopenharmony_ci }, // @ts-ignore 159fb726d48Sopenharmony_ci (res: unknown, len: number, transfer: boolean) => { 160fb726d48Sopenharmony_ci resolve(arrayBufferHandler(res, len)); 161fb726d48Sopenharmony_ci } 162fb726d48Sopenharmony_ci ); 163fb726d48Sopenharmony_ci }); 164fb726d48Sopenharmony_ci} 165fb726d48Sopenharmony_ci 166fb726d48Sopenharmony_ciexport function gpuTotalDataSender(moduleId: number | null, row: TraceRow<SnapshotStruct>): Promise<SnapshotStruct[]> { 167fb726d48Sopenharmony_ci let trafic: number = TraficEnum.ProtoBuffer; 168fb726d48Sopenharmony_ci let gpuTotalwidth = row.clientWidth - CHART_OFFSET_LEFT; 169fb726d48Sopenharmony_ci if (trafic === TraficEnum.SharedArrayBuffer && !row.sharedArrayBuffers) { 170fb726d48Sopenharmony_ci row.sharedArrayBuffers = { 171fb726d48Sopenharmony_ci startNs: new SharedArrayBuffer(Float64Array.BYTES_PER_ELEMENT * MAX_COUNT), 172fb726d48Sopenharmony_ci value: new SharedArrayBuffer(Uint32Array.BYTES_PER_ELEMENT * MAX_COUNT), 173fb726d48Sopenharmony_ci }; 174fb726d48Sopenharmony_ci } 175fb726d48Sopenharmony_ci return new Promise((resolve, reject) => { 176fb726d48Sopenharmony_ci threadPool.submitProto( 177fb726d48Sopenharmony_ci QueryEnum.VmTrackerGpuTotalData, 178fb726d48Sopenharmony_ci { 179fb726d48Sopenharmony_ci startNs: TraceRow.range?.startNS || 0, 180fb726d48Sopenharmony_ci endNs: TraceRow.range?.endNS || 0, 181fb726d48Sopenharmony_ci recordStartNS: window.recordStartNS, 182fb726d48Sopenharmony_ci recordEndNS: window.recordEndNS, 183fb726d48Sopenharmony_ci width: gpuTotalwidth, 184fb726d48Sopenharmony_ci trafic: trafic, 185fb726d48Sopenharmony_ci sharedArrayBuffers: row.sharedArrayBuffers, 186fb726d48Sopenharmony_ci moduleId: moduleId, 187fb726d48Sopenharmony_ci }, // @ts-ignore 188fb726d48Sopenharmony_ci (res: unknown, len: number, transfer: boolean) => { 189fb726d48Sopenharmony_ci resolve(arrayBufferHandler(res, len)); 190fb726d48Sopenharmony_ci } 191fb726d48Sopenharmony_ci ); 192fb726d48Sopenharmony_ci }); 193fb726d48Sopenharmony_ci} 194fb726d48Sopenharmony_ci 195fb726d48Sopenharmony_ciexport function gpuWindowDataSender( 196fb726d48Sopenharmony_ci windowId: number | null, 197fb726d48Sopenharmony_ci moduleId: number | null, 198fb726d48Sopenharmony_ci row: TraceRow<SnapshotStruct> 199fb726d48Sopenharmony_ci): Promise<SnapshotStruct[]> { 200fb726d48Sopenharmony_ci let trafic: number = TraficEnum.ProtoBuffer; 201fb726d48Sopenharmony_ci let gpuWindowWidth = row.clientWidth - CHART_OFFSET_LEFT; 202fb726d48Sopenharmony_ci if (trafic === TraficEnum.SharedArrayBuffer && !row.sharedArrayBuffers) { 203fb726d48Sopenharmony_ci row.sharedArrayBuffers = { 204fb726d48Sopenharmony_ci startNs: new SharedArrayBuffer(Float64Array.BYTES_PER_ELEMENT * MAX_COUNT), 205fb726d48Sopenharmony_ci value: new SharedArrayBuffer(Uint32Array.BYTES_PER_ELEMENT * MAX_COUNT), 206fb726d48Sopenharmony_ci }; 207fb726d48Sopenharmony_ci } 208fb726d48Sopenharmony_ci return new Promise((resolve, reject) => { 209fb726d48Sopenharmony_ci threadPool.submitProto( 210fb726d48Sopenharmony_ci QueryEnum.VmTrackerGpuWindowData, 211fb726d48Sopenharmony_ci { 212fb726d48Sopenharmony_ci startNs: TraceRow.range?.startNS || 0, 213fb726d48Sopenharmony_ci endNs: TraceRow.range?.endNS || 0, 214fb726d48Sopenharmony_ci recordStartNS: window.recordStartNS, 215fb726d48Sopenharmony_ci recordEndNS: window.recordEndNS, 216fb726d48Sopenharmony_ci width: gpuWindowWidth, 217fb726d48Sopenharmony_ci trafic: trafic, 218fb726d48Sopenharmony_ci sharedArrayBuffers: row.sharedArrayBuffers, 219fb726d48Sopenharmony_ci windowId: windowId, 220fb726d48Sopenharmony_ci moduleId: moduleId, 221fb726d48Sopenharmony_ci }, // @ts-ignore 222fb726d48Sopenharmony_ci (res: unknown, len: number, transfer: boolean) => { 223fb726d48Sopenharmony_ci resolve(arrayBufferHandler(res, len)); 224fb726d48Sopenharmony_ci } 225fb726d48Sopenharmony_ci ); 226fb726d48Sopenharmony_ci }); 227fb726d48Sopenharmony_ci} 228fb726d48Sopenharmony_ci 229fb726d48Sopenharmony_ciexport function shmDataSender(ipid: number, row: TraceRow<SnapshotStruct>): Promise<SnapshotStruct[]> { 230fb726d48Sopenharmony_ci let trafic: number = TraficEnum.ProtoBuffer; 231fb726d48Sopenharmony_ci let width = row.clientWidth - CHART_OFFSET_LEFT; 232fb726d48Sopenharmony_ci if (trafic === TraficEnum.SharedArrayBuffer && !row.sharedArrayBuffers) { 233fb726d48Sopenharmony_ci row.sharedArrayBuffers = { 234fb726d48Sopenharmony_ci startNs: new SharedArrayBuffer(Float64Array.BYTES_PER_ELEMENT * MAX_COUNT), 235fb726d48Sopenharmony_ci value: new SharedArrayBuffer(Uint32Array.BYTES_PER_ELEMENT * MAX_COUNT), 236fb726d48Sopenharmony_ci }; 237fb726d48Sopenharmony_ci } 238fb726d48Sopenharmony_ci return new Promise((resolve, reject) => { 239fb726d48Sopenharmony_ci threadPool.submitProto( 240fb726d48Sopenharmony_ci QueryEnum.VmTrackerShmData, 241fb726d48Sopenharmony_ci { 242fb726d48Sopenharmony_ci startNs: TraceRow.range?.startNS || 0, 243fb726d48Sopenharmony_ci endNs: TraceRow.range?.endNS || 0, 244fb726d48Sopenharmony_ci recordStartNS: window.recordStartNS, 245fb726d48Sopenharmony_ci recordEndNS: window.recordEndNS, 246fb726d48Sopenharmony_ci width: width, 247fb726d48Sopenharmony_ci trafic: trafic, 248fb726d48Sopenharmony_ci sharedArrayBuffers: row.sharedArrayBuffers, 249fb726d48Sopenharmony_ci ipid: ipid, 250fb726d48Sopenharmony_ci }, // @ts-ignore 251fb726d48Sopenharmony_ci (res: unknown, len: number, transfer: boolean) => { 252fb726d48Sopenharmony_ci resolve(arrayBufferHandler(res, len)); 253fb726d48Sopenharmony_ci } 254fb726d48Sopenharmony_ci ); 255fb726d48Sopenharmony_ci }); 256fb726d48Sopenharmony_ci} 257fb726d48Sopenharmony_ci 258fb726d48Sopenharmony_ciexport function purgeableDataSender( 259fb726d48Sopenharmony_ci ipid: number, 260fb726d48Sopenharmony_ci row: TraceRow<SnapshotStruct>, 261fb726d48Sopenharmony_ci isPin?: boolean 262fb726d48Sopenharmony_ci): Promise<SnapshotStruct[]> { 263fb726d48Sopenharmony_ci let trafic: number = TraficEnum.ProtoBuffer; 264fb726d48Sopenharmony_ci let purgeWidth = row.clientWidth - CHART_OFFSET_LEFT; 265fb726d48Sopenharmony_ci if (trafic === TraficEnum.SharedArrayBuffer && !row.sharedArrayBuffers) { 266fb726d48Sopenharmony_ci row.sharedArrayBuffers = { 267fb726d48Sopenharmony_ci startNs: new SharedArrayBuffer(Float64Array.BYTES_PER_ELEMENT * MAX_COUNT), 268fb726d48Sopenharmony_ci value: new SharedArrayBuffer(Uint32Array.BYTES_PER_ELEMENT * MAX_COUNT), 269fb726d48Sopenharmony_ci }; 270fb726d48Sopenharmony_ci } 271fb726d48Sopenharmony_ci return new Promise((resolve, reject) => { 272fb726d48Sopenharmony_ci threadPool.submitProto( 273fb726d48Sopenharmony_ci QueryEnum.VmTrackerPurgeableData, 274fb726d48Sopenharmony_ci { 275fb726d48Sopenharmony_ci ipid: ipid, 276fb726d48Sopenharmony_ci isPin: isPin, 277fb726d48Sopenharmony_ci startNs: TraceRow.range?.startNS || 0, 278fb726d48Sopenharmony_ci endNs: TraceRow.range?.endNS || 0, 279fb726d48Sopenharmony_ci recordStartNS: window.recordStartNS, 280fb726d48Sopenharmony_ci recordEndNS: window.recordEndNS, 281fb726d48Sopenharmony_ci width: purgeWidth, 282fb726d48Sopenharmony_ci trafic: trafic, 283fb726d48Sopenharmony_ci sharedArrayBuffers: row.sharedArrayBuffers, 284fb726d48Sopenharmony_ci }, // @ts-ignore 285fb726d48Sopenharmony_ci (res: unknown, len: number, transfer: boolean): void => { 286fb726d48Sopenharmony_ci resolve(arrayBufferHandler(res, len)); 287fb726d48Sopenharmony_ci } 288fb726d48Sopenharmony_ci ); 289fb726d48Sopenharmony_ci }); 290fb726d48Sopenharmony_ci} 291fb726d48Sopenharmony_ci 292fb726d48Sopenharmony_ciexport function abilityPurgeableDataSender( 293fb726d48Sopenharmony_ci row: TraceRow<SnapshotStruct>, 294fb726d48Sopenharmony_ci dur: number, 295fb726d48Sopenharmony_ci isPin: Boolean 296fb726d48Sopenharmony_ci): Promise<SnapshotStruct[]> { 297fb726d48Sopenharmony_ci let trafic: number = TraficEnum.ProtoBuffer; 298fb726d48Sopenharmony_ci let width = row.clientWidth - CHART_OFFSET_LEFT; 299fb726d48Sopenharmony_ci if (trafic === TraficEnum.SharedArrayBuffer && !row.sharedArrayBuffers) { 300fb726d48Sopenharmony_ci row.sharedArrayBuffers = { 301fb726d48Sopenharmony_ci value: new SharedArrayBuffer(Float64Array.BYTES_PER_ELEMENT * MAX_COUNT), 302fb726d48Sopenharmony_ci startNs: new SharedArrayBuffer(Float64Array.BYTES_PER_ELEMENT * MAX_COUNT), 303fb726d48Sopenharmony_ci }; 304fb726d48Sopenharmony_ci } 305fb726d48Sopenharmony_ci return new Promise((resolve, reject) => { 306fb726d48Sopenharmony_ci threadPool.submitProto( 307fb726d48Sopenharmony_ci QueryEnum.AbilityPurgeableData, 308fb726d48Sopenharmony_ci { 309fb726d48Sopenharmony_ci startNs: TraceRow.range?.startNS || 0, 310fb726d48Sopenharmony_ci endNs: TraceRow.range?.endNS || 0, 311fb726d48Sopenharmony_ci recordStartNS: window.recordStartNS, 312fb726d48Sopenharmony_ci recordEndNS: window.recordEndNS, 313fb726d48Sopenharmony_ci width: width, 314fb726d48Sopenharmony_ci trafic: trafic, 315fb726d48Sopenharmony_ci sharedArrayBuffers: row.sharedArrayBuffers, 316fb726d48Sopenharmony_ci dur: dur, 317fb726d48Sopenharmony_ci isPin: isPin, 318fb726d48Sopenharmony_ci }, // @ts-ignore 319fb726d48Sopenharmony_ci (res: unknown, len: number, transfer: boolean) => { 320fb726d48Sopenharmony_ci resolve(arrayBufferHandler(res, len)); 321fb726d48Sopenharmony_ci } 322fb726d48Sopenharmony_ci ); 323fb726d48Sopenharmony_ci }); 324fb726d48Sopenharmony_ci} 325fb726d48Sopenharmony_ci 326fb726d48Sopenharmony_ciexport function abilityDmaDataSender(row: TraceRow<SnapshotStruct>, dur: number): Promise<SnapshotStruct[]> { 327fb726d48Sopenharmony_ci let trafic: number = TraficEnum.ProtoBuffer; 328fb726d48Sopenharmony_ci let width = row.clientWidth - CHART_OFFSET_LEFT; 329fb726d48Sopenharmony_ci if (trafic === TraficEnum.SharedArrayBuffer && !row.sharedArrayBuffers) { 330fb726d48Sopenharmony_ci row.sharedArrayBuffers = { 331fb726d48Sopenharmony_ci value: new SharedArrayBuffer(Float64Array.BYTES_PER_ELEMENT * MAX_COUNT), 332fb726d48Sopenharmony_ci startNs: new SharedArrayBuffer(Float64Array.BYTES_PER_ELEMENT * MAX_COUNT), 333fb726d48Sopenharmony_ci expTaskComm: new SharedArrayBuffer(Float64Array.BYTES_PER_ELEMENT * MAX_COUNT), 334fb726d48Sopenharmony_ci flag: new SharedArrayBuffer(Float64Array.BYTES_PER_ELEMENT * MAX_COUNT), 335fb726d48Sopenharmony_ci }; 336fb726d48Sopenharmony_ci } 337fb726d48Sopenharmony_ci return new Promise((resolve, reject) => { 338fb726d48Sopenharmony_ci threadPool.submitProto( 339fb726d48Sopenharmony_ci QueryEnum.AbilityDmaData, 340fb726d48Sopenharmony_ci { 341fb726d48Sopenharmony_ci startNs: TraceRow.range?.startNS || 0, 342fb726d48Sopenharmony_ci endNs: TraceRow.range?.endNS || 0, 343fb726d48Sopenharmony_ci recordStartNS: window.recordStartNS, 344fb726d48Sopenharmony_ci recordEndNS: window.recordEndNS, 345fb726d48Sopenharmony_ci width: width, 346fb726d48Sopenharmony_ci trafic: trafic, 347fb726d48Sopenharmony_ci sharedArrayBuffers: row.sharedArrayBuffers, 348fb726d48Sopenharmony_ci dma: 'dma', 349fb726d48Sopenharmony_ci dur: dur, 350fb726d48Sopenharmony_ci }, // @ts-ignore 351fb726d48Sopenharmony_ci (res: unknown, len: number, transfer: boolean) => { 352fb726d48Sopenharmony_ci resolve(arrayBufferHandler(res, len)); 353fb726d48Sopenharmony_ci } 354fb726d48Sopenharmony_ci ); 355fb726d48Sopenharmony_ci }); 356fb726d48Sopenharmony_ci} 357fb726d48Sopenharmony_ci 358fb726d48Sopenharmony_ciexport function abilityGpuMemoryDataSender(row: TraceRow<SnapshotStruct>, dur: number): Promise<SnapshotStruct[]> { 359fb726d48Sopenharmony_ci let trafic: number = TraficEnum.ProtoBuffer; 360fb726d48Sopenharmony_ci let abilityGpuWidth = row.clientWidth - CHART_OFFSET_LEFT; 361fb726d48Sopenharmony_ci if (trafic === TraficEnum.SharedArrayBuffer && !row.sharedArrayBuffers) { 362fb726d48Sopenharmony_ci row.sharedArrayBuffers = { 363fb726d48Sopenharmony_ci value: new SharedArrayBuffer(Float64Array.BYTES_PER_ELEMENT * MAX_COUNT), 364fb726d48Sopenharmony_ci startNs: new SharedArrayBuffer(Float64Array.BYTES_PER_ELEMENT * MAX_COUNT), 365fb726d48Sopenharmony_ci }; 366fb726d48Sopenharmony_ci } 367fb726d48Sopenharmony_ci return new Promise((resolve, reject) => { 368fb726d48Sopenharmony_ci threadPool.submitProto( 369fb726d48Sopenharmony_ci QueryEnum.AbilityGpuMemoryData, 370fb726d48Sopenharmony_ci { 371fb726d48Sopenharmony_ci startNs: TraceRow.range?.startNS || 0, 372fb726d48Sopenharmony_ci endNs: TraceRow.range?.endNS || 0, 373fb726d48Sopenharmony_ci recordStartNS: window.recordStartNS, 374fb726d48Sopenharmony_ci recordEndNS: window.recordEndNS, 375fb726d48Sopenharmony_ci width: abilityGpuWidth, 376fb726d48Sopenharmony_ci trafic: trafic, 377fb726d48Sopenharmony_ci sharedArrayBuffers: row.sharedArrayBuffers, 378fb726d48Sopenharmony_ci dur: dur, 379fb726d48Sopenharmony_ci }, // @ts-ignore 380fb726d48Sopenharmony_ci (res: unknown, len: number, transfer: boolean) => { 381fb726d48Sopenharmony_ci resolve(arrayBufferHandler(res, len)); 382fb726d48Sopenharmony_ci } 383fb726d48Sopenharmony_ci ); 384fb726d48Sopenharmony_ci }); 385fb726d48Sopenharmony_ci} 386fb726d48Sopenharmony_ci// @ts-ignore 387fb726d48Sopenharmony_cifunction arrayBufferHandler(buffers: unknown, len: number): SnapshotStruct[] { 388fb726d48Sopenharmony_ci let outArr: SnapshotStruct[] = []; // @ts-ignore 389fb726d48Sopenharmony_ci let startNs = new Float64Array(buffers.startNs); // @ts-ignore 390fb726d48Sopenharmony_ci let value = new Uint32Array(buffers.value); 391fb726d48Sopenharmony_ci for (let i = 0; i < len; i++) { 392fb726d48Sopenharmony_ci outArr.push({ 393fb726d48Sopenharmony_ci value: value[i], 394fb726d48Sopenharmony_ci startNs: startNs[i], 395fb726d48Sopenharmony_ci } as SnapshotStruct); 396fb726d48Sopenharmony_ci } 397fb726d48Sopenharmony_ci return outArr; 398fb726d48Sopenharmony_ci} 399