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 { FrameAnimationStruct } from '../ui-worker/ProcedureWorkerFrameAnimation'; 16fb726d48Sopenharmony_ciimport { FrameSpacingStruct } from '../ui-worker/ProcedureWorkerFrameSpacing'; 17fb726d48Sopenharmony_ciimport { Args } from './CommonArgs'; 18fb726d48Sopenharmony_ci 19fb726d48Sopenharmony_ciexport const chartFrameAnimationDataProtoSql = (args: Args): string => { 20fb726d48Sopenharmony_ci return ` 21fb726d48Sopenharmony_ci SELECT 22fb726d48Sopenharmony_ci a.id AS animationId, 23fb726d48Sopenharmony_ci 0 AS status, 24fb726d48Sopenharmony_ci ( 25fb726d48Sopenharmony_ci CASE WHEN a.input_time NOT NULL 26fb726d48Sopenharmony_ci THEN ( a.input_time - ${args.recordStartNS} ) 27fb726d48Sopenharmony_ci ELSE ( a.start_point - ${args.recordStartNS} ) 28fb726d48Sopenharmony_ci END 29fb726d48Sopenharmony_ci ) AS startTs, 30fb726d48Sopenharmony_ci ( a.start_point - ${args.recordStartNS} ) AS endTs, 31fb726d48Sopenharmony_ci a.name AS name 32fb726d48Sopenharmony_ci FROM 33fb726d48Sopenharmony_ci animation AS a 34fb726d48Sopenharmony_ci UNION 35fb726d48Sopenharmony_ci SELECT 36fb726d48Sopenharmony_ci a.id AS animationId, 37fb726d48Sopenharmony_ci 1 AS status, 38fb726d48Sopenharmony_ci ( 39fb726d48Sopenharmony_ci CASE WHEN a.input_time NOT NULL 40fb726d48Sopenharmony_ci THEN ( a.input_time - ${args.recordStartNS} ) 41fb726d48Sopenharmony_ci ELSE ( a.start_point - ${args.recordStartNS} ) 42fb726d48Sopenharmony_ci END 43fb726d48Sopenharmony_ci ) AS startTs, 44fb726d48Sopenharmony_ci ( a.end_point - ${args.recordStartNS} ) AS endTs, 45fb726d48Sopenharmony_ci a.name AS name 46fb726d48Sopenharmony_ci FROM 47fb726d48Sopenharmony_ci animation AS a;`; 48fb726d48Sopenharmony_ci}; 49fb726d48Sopenharmony_ci 50fb726d48Sopenharmony_ciexport const chartFrameDynamicDataMemSql = (args: Args): string => { 51fb726d48Sopenharmony_ci return ` 52fb726d48Sopenharmony_ci SELECT 53fb726d48Sopenharmony_ci dy.id, 54fb726d48Sopenharmony_ci dy.x, 55fb726d48Sopenharmony_ci dy.y, 56fb726d48Sopenharmony_ci dy.width, 57fb726d48Sopenharmony_ci dy.height, 58fb726d48Sopenharmony_ci dy.alpha, 59fb726d48Sopenharmony_ci (dy.end_time - ${args.recordStartNS}) AS ts, 60fb726d48Sopenharmony_ci dy.name as appName 61fb726d48Sopenharmony_ci FROM 62fb726d48Sopenharmony_ci dynamic_frame AS dy 63fb726d48Sopenharmony_ci WHERE ts >= ${Math.floor(args.startNS)} 64fb726d48Sopenharmony_ci and ts <= ${Math.floor(args.endNS)}`; 65fb726d48Sopenharmony_ci}; 66fb726d48Sopenharmony_ci 67fb726d48Sopenharmony_ciexport const chartFrameSpacingDataMemSql = (args: Args): string => { 68fb726d48Sopenharmony_ci return ` 69fb726d48Sopenharmony_ci SELECT 70fb726d48Sopenharmony_ci d.id, 71fb726d48Sopenharmony_ci d.x, 72fb726d48Sopenharmony_ci d.y, 73fb726d48Sopenharmony_ci d.width AS currentFrameWidth, 74fb726d48Sopenharmony_ci d.height AS currentFrameHeight, 75fb726d48Sopenharmony_ci (d.end_time - ${args.recordStartNS}) AS currentTs, 76fb726d48Sopenharmony_ci d.name AS nameId 77fb726d48Sopenharmony_ci FROM 78fb726d48Sopenharmony_ci dynamic_frame AS d 79fb726d48Sopenharmony_ci WHERE currentTs >= ${Math.floor(args.startNS)} 80fb726d48Sopenharmony_ci and currentTs <= ${Math.floor(args.endNS)};`; 81fb726d48Sopenharmony_ci}; 82fb726d48Sopenharmony_ci 83fb726d48Sopenharmony_ciexport function frameAnimationReceiver(data: unknown, proc: Function): void { 84fb726d48Sopenharmony_ci // @ts-ignore 85fb726d48Sopenharmony_ci let res = proc(chartFrameAnimationDataProtoSql(data.params)); 86fb726d48Sopenharmony_ci // @ts-ignore 87fb726d48Sopenharmony_ci let transfer = data.params.trafic !== TraficEnum.SharedArrayBuffer; 88fb726d48Sopenharmony_ci let frameAnimation = new FrameAnimation(data, res, transfer); 89fb726d48Sopenharmony_ci let unitIndex: number = 1; 90fb726d48Sopenharmony_ci let isIntersect = (a: FrameAnimationStruct, b: FrameAnimationStruct): boolean => 91fb726d48Sopenharmony_ci Math.max(a.startTs! + a.dur!, b.startTs! + b.dur!) - Math.min(a.startTs!, b.startTs!) < a.dur! + b.dur!; 92fb726d48Sopenharmony_ci let depths: unknown[] = []; 93fb726d48Sopenharmony_ci for (let index: number = 0; index < res.length; index++) { 94fb726d48Sopenharmony_ci let itemData = res[index]; 95fb726d48Sopenharmony_ci // @ts-ignore 96fb726d48Sopenharmony_ci data.params.trafic === TraficEnum.ProtoBuffer && (itemData = itemData.frameAnimationData); 97fb726d48Sopenharmony_ci itemData.dur = itemData.endTs - itemData.startTs; 98fb726d48Sopenharmony_ci if (!itemData.dur || itemData.dur < 0) { 99fb726d48Sopenharmony_ci continue; 100fb726d48Sopenharmony_ci } 101fb726d48Sopenharmony_ci if (depths.length === 0) { 102fb726d48Sopenharmony_ci itemData.depth = 0; 103fb726d48Sopenharmony_ci depths[0] = itemData; 104fb726d48Sopenharmony_ci } else { 105fb726d48Sopenharmony_ci let depthIndex: number = 0; 106fb726d48Sopenharmony_ci let isContinue: boolean = true; 107fb726d48Sopenharmony_ci while (isContinue) { 108fb726d48Sopenharmony_ci // @ts-ignore 109fb726d48Sopenharmony_ci if (isIntersect(depths[depthIndex], itemData)) { 110fb726d48Sopenharmony_ci if (depths[depthIndex + unitIndex] === undefined || !depths[depthIndex + unitIndex]) { 111fb726d48Sopenharmony_ci itemData.depth = depthIndex + unitIndex; 112fb726d48Sopenharmony_ci depths[depthIndex + unitIndex] = itemData; 113fb726d48Sopenharmony_ci isContinue = false; 114fb726d48Sopenharmony_ci } 115fb726d48Sopenharmony_ci } else { 116fb726d48Sopenharmony_ci itemData.depth = depthIndex; 117fb726d48Sopenharmony_ci depths[depthIndex] = itemData; 118fb726d48Sopenharmony_ci isContinue = false; 119fb726d48Sopenharmony_ci } 120fb726d48Sopenharmony_ci depthIndex++; 121fb726d48Sopenharmony_ci } 122fb726d48Sopenharmony_ci } 123fb726d48Sopenharmony_ci frameAnimation.animationId[index] = itemData.animationId; 124fb726d48Sopenharmony_ci frameAnimation.status[index] = itemData.status; 125fb726d48Sopenharmony_ci frameAnimation.startTs[index] = itemData.startTs; 126fb726d48Sopenharmony_ci frameAnimation.endTs[index] = itemData.endTs; 127fb726d48Sopenharmony_ci frameAnimation.dur[index] = itemData.dur; 128fb726d48Sopenharmony_ci frameAnimation.depth[index] = itemData.depth; 129fb726d48Sopenharmony_ci } 130fb726d48Sopenharmony_ci postFrameAnimationMessage(data, transfer, frameAnimation, res.length); 131fb726d48Sopenharmony_ci} 132fb726d48Sopenharmony_cifunction postFrameAnimationMessage( 133fb726d48Sopenharmony_ci data: unknown, 134fb726d48Sopenharmony_ci transfer: boolean, 135fb726d48Sopenharmony_ci frameAnimation: FrameAnimation, 136fb726d48Sopenharmony_ci len: number 137fb726d48Sopenharmony_ci): void { 138fb726d48Sopenharmony_ci (self as unknown as Worker).postMessage( 139fb726d48Sopenharmony_ci { 140fb726d48Sopenharmony_ci // @ts-ignore 141fb726d48Sopenharmony_ci id: data.id, 142fb726d48Sopenharmony_ci // @ts-ignore 143fb726d48Sopenharmony_ci action: data.action, 144fb726d48Sopenharmony_ci results: transfer 145fb726d48Sopenharmony_ci ? { 146fb726d48Sopenharmony_ci animationId: frameAnimation.animationId.buffer, 147fb726d48Sopenharmony_ci status: frameAnimation.status.buffer, 148fb726d48Sopenharmony_ci startTs: frameAnimation.startTs.buffer, 149fb726d48Sopenharmony_ci endTs: frameAnimation.endTs.buffer, 150fb726d48Sopenharmony_ci dur: frameAnimation.dur.buffer, 151fb726d48Sopenharmony_ci depth: frameAnimation.depth.buffer, 152fb726d48Sopenharmony_ci } 153fb726d48Sopenharmony_ci : {}, 154fb726d48Sopenharmony_ci len: len, 155fb726d48Sopenharmony_ci transfer: transfer, 156fb726d48Sopenharmony_ci }, 157fb726d48Sopenharmony_ci transfer 158fb726d48Sopenharmony_ci ? [ 159fb726d48Sopenharmony_ci frameAnimation.animationId.buffer, 160fb726d48Sopenharmony_ci frameAnimation.status.buffer, 161fb726d48Sopenharmony_ci frameAnimation.startTs.buffer, 162fb726d48Sopenharmony_ci frameAnimation.endTs.buffer, 163fb726d48Sopenharmony_ci frameAnimation.dur.buffer, 164fb726d48Sopenharmony_ci frameAnimation.depth.buffer, 165fb726d48Sopenharmony_ci ] 166fb726d48Sopenharmony_ci : [] 167fb726d48Sopenharmony_ci ); 168fb726d48Sopenharmony_ci} 169fb726d48Sopenharmony_ciclass FrameAnimation { 170fb726d48Sopenharmony_ci animationId: Uint16Array; 171fb726d48Sopenharmony_ci status: Uint16Array; 172fb726d48Sopenharmony_ci startTs: Float64Array; 173fb726d48Sopenharmony_ci endTs: Float64Array; 174fb726d48Sopenharmony_ci dur: Float64Array; 175fb726d48Sopenharmony_ci depth: Uint16Array; 176fb726d48Sopenharmony_ci 177fb726d48Sopenharmony_ci constructor(data: unknown, res: unknown[], transfer: boolean) { 178fb726d48Sopenharmony_ci // @ts-ignore 179fb726d48Sopenharmony_ci this.animationId = new Uint16Array(transfer ? res.length : data.params.sharedArrayBuffers.animationId); 180fb726d48Sopenharmony_ci // @ts-ignore 181fb726d48Sopenharmony_ci this.status = new Uint16Array(transfer ? res.length : data.params.sharedArrayBuffers.status); 182fb726d48Sopenharmony_ci // @ts-ignore 183fb726d48Sopenharmony_ci this.startTs = new Float64Array(transfer ? res.length : data.params.sharedArrayBuffers.startTs); 184fb726d48Sopenharmony_ci // @ts-ignore 185fb726d48Sopenharmony_ci this.endTs = new Float64Array(transfer ? res.length : data.params.sharedArrayBuffers.endTs); 186fb726d48Sopenharmony_ci // @ts-ignore 187fb726d48Sopenharmony_ci this.dur = new Float64Array(transfer ? res.length : data.params.sharedArrayBuffers.dur); 188fb726d48Sopenharmony_ci // @ts-ignore 189fb726d48Sopenharmony_ci this.depth = new Uint16Array(transfer ? res.length : data.params.sharedArrayBuffers.depth); 190fb726d48Sopenharmony_ci } 191fb726d48Sopenharmony_ci} 192fb726d48Sopenharmony_ci 193fb726d48Sopenharmony_cilet frameSpacingList: Array<unknown> = []; 194fb726d48Sopenharmony_cilet frameDynamic: Array<unknown> = []; 195fb726d48Sopenharmony_ciexport function resetDynamicEffect(): void { 196fb726d48Sopenharmony_ci frameSpacingList = []; 197fb726d48Sopenharmony_ci frameDynamic = []; 198fb726d48Sopenharmony_ci} 199fb726d48Sopenharmony_ciexport function frameDynamicReceiver(data: unknown, proc: Function): void { 200fb726d48Sopenharmony_ci if (frameDynamic.length === 0) { 201fb726d48Sopenharmony_ci // @ts-ignore 202fb726d48Sopenharmony_ci frameDynamic = proc(chartFrameDynamicDataMemSql(data.params)); 203fb726d48Sopenharmony_ci } 204fb726d48Sopenharmony_ci // @ts-ignore 205fb726d48Sopenharmony_ci let transfer = data.params.trafic !== TraficEnum.SharedArrayBuffer; 206fb726d48Sopenharmony_ci // @ts-ignore 207fb726d48Sopenharmony_ci let id = new Uint16Array(transfer ? frameDynamic.length : data.params.sharedArrayBuffers.id); 208fb726d48Sopenharmony_ci // @ts-ignore 209fb726d48Sopenharmony_ci let x = new Float32Array(transfer ? frameDynamic.length : data.params.sharedArrayBuffers.x); 210fb726d48Sopenharmony_ci // @ts-ignore 211fb726d48Sopenharmony_ci let y = new Float32Array(transfer ? frameDynamic.length : data.params.sharedArrayBuffers.y); 212fb726d48Sopenharmony_ci // @ts-ignore 213fb726d48Sopenharmony_ci let width = new Float32Array(transfer ? frameDynamic.length : data.params.sharedArrayBuffers.width); 214fb726d48Sopenharmony_ci // @ts-ignore 215fb726d48Sopenharmony_ci let height = new Float32Array(transfer ? frameDynamic.length : data.params.sharedArrayBuffers.height); 216fb726d48Sopenharmony_ci // @ts-ignore 217fb726d48Sopenharmony_ci let alpha = new Float32Array(transfer ? frameDynamic.length : data.params.sharedArrayBuffers.alpha); 218fb726d48Sopenharmony_ci // @ts-ignore 219fb726d48Sopenharmony_ci let ts = new Float64Array(transfer ? frameDynamic.length : data.params.sharedArrayBuffers.ts); 220fb726d48Sopenharmony_ci for (let index: number = 0; index < frameDynamic.length; index++) { 221fb726d48Sopenharmony_ci let itemData = frameDynamic[index]; 222fb726d48Sopenharmony_ci // @ts-ignore 223fb726d48Sopenharmony_ci data.params.trafic === TraficEnum.ProtoBuffer && (itemData = itemData.frameDynamicData); 224fb726d48Sopenharmony_ci // @ts-ignore 225fb726d48Sopenharmony_ci id[index] = itemData.id; 226fb726d48Sopenharmony_ci // @ts-ignore 227fb726d48Sopenharmony_ci x[index] = Number(itemData.x); 228fb726d48Sopenharmony_ci // @ts-ignore 229fb726d48Sopenharmony_ci y[index] = Number(itemData.y); 230fb726d48Sopenharmony_ci // @ts-ignore 231fb726d48Sopenharmony_ci width[index] = Number(itemData.width); 232fb726d48Sopenharmony_ci // @ts-ignore 233fb726d48Sopenharmony_ci height[index] = Number(itemData.height); 234fb726d48Sopenharmony_ci // @ts-ignore 235fb726d48Sopenharmony_ci alpha[index] = Number(itemData.alpha); 236fb726d48Sopenharmony_ci // @ts-ignore 237fb726d48Sopenharmony_ci ts[index] = itemData.ts; 238fb726d48Sopenharmony_ci } 239fb726d48Sopenharmony_ci (self as unknown as Worker).postMessage( 240fb726d48Sopenharmony_ci { 241fb726d48Sopenharmony_ci // @ts-ignore 242fb726d48Sopenharmony_ci id: data.id, 243fb726d48Sopenharmony_ci // @ts-ignore 244fb726d48Sopenharmony_ci action: data.action, 245fb726d48Sopenharmony_ci results: transfer 246fb726d48Sopenharmony_ci ? { 247fb726d48Sopenharmony_ci id: id.buffer, 248fb726d48Sopenharmony_ci x: x.buffer, 249fb726d48Sopenharmony_ci y: y.buffer, 250fb726d48Sopenharmony_ci width: width.buffer, 251fb726d48Sopenharmony_ci height: height.buffer, 252fb726d48Sopenharmony_ci alpha: alpha.buffer, 253fb726d48Sopenharmony_ci ts: ts.buffer, 254fb726d48Sopenharmony_ci } 255fb726d48Sopenharmony_ci : {}, 256fb726d48Sopenharmony_ci len: frameDynamic.length, 257fb726d48Sopenharmony_ci transfer: transfer, 258fb726d48Sopenharmony_ci }, 259fb726d48Sopenharmony_ci transfer ? [id.buffer, x.buffer, y.buffer, width.buffer, height.buffer, alpha.buffer, ts.buffer] : [] 260fb726d48Sopenharmony_ci ); 261fb726d48Sopenharmony_ci} 262fb726d48Sopenharmony_ciexport function frameSpacingReceiver(data: unknown, proc: Function): void { 263fb726d48Sopenharmony_ci if (frameSpacingList.length === 0) { 264fb726d48Sopenharmony_ci // @ts-ignore 265fb726d48Sopenharmony_ci frameSpacingList = proc(chartFrameSpacingDataMemSql(data.params)); 266fb726d48Sopenharmony_ci } 267fb726d48Sopenharmony_ci // @ts-ignore 268fb726d48Sopenharmony_ci let transfer = data.params.trafic !== TraficEnum.SharedArrayBuffer; 269fb726d48Sopenharmony_ci let frameSpacing = new FrameSpacing(data, frameSpacingList, transfer); 270fb726d48Sopenharmony_ci let nameDataMap: Map<string, Array<FrameSpacingStruct>> = new Map(); 271fb726d48Sopenharmony_ci for (let index: number = 0; index < frameSpacingList.length; index++) { 272fb726d48Sopenharmony_ci let itemData = frameSpacingList[index]; 273fb726d48Sopenharmony_ci // @ts-ignore 274fb726d48Sopenharmony_ci data.params.trafic === TraficEnum.ProtoBuffer && (itemData = itemData.frameSpacingData); 275fb726d48Sopenharmony_ci // @ts-ignore 276fb726d48Sopenharmony_ci if (nameDataMap.has(itemData.nameId)) { 277fb726d48Sopenharmony_ci // @ts-ignore 278fb726d48Sopenharmony_ci setSpacingStructs(nameDataMap, itemData, data); 279fb726d48Sopenharmony_ci } else { 280fb726d48Sopenharmony_ci // @ts-ignore 281fb726d48Sopenharmony_ci setNameDataMap(nameDataMap, itemData); 282fb726d48Sopenharmony_ci } 283fb726d48Sopenharmony_ci // @ts-ignore 284fb726d48Sopenharmony_ci frameSpacing.id[index] = itemData.id; 285fb726d48Sopenharmony_ci // @ts-ignore 286fb726d48Sopenharmony_ci frameSpacing.x[index] = Number(itemData.x); 287fb726d48Sopenharmony_ci // @ts-ignore 288fb726d48Sopenharmony_ci frameSpacing.y[index] = Number(itemData.y); 289fb726d48Sopenharmony_ci // @ts-ignore 290fb726d48Sopenharmony_ci frameSpacing.currentFrameWidth[index] = Number(itemData.currentFrameWidth); 291fb726d48Sopenharmony_ci // @ts-ignore 292fb726d48Sopenharmony_ci frameSpacing.currentFrameHeight[index] = Number(itemData.currentFrameHeight); 293fb726d48Sopenharmony_ci // @ts-ignore 294fb726d48Sopenharmony_ci frameSpacing.currentTs[index] = itemData.currentTs; 295fb726d48Sopenharmony_ci // @ts-ignore 296fb726d48Sopenharmony_ci frameSpacing.frameSpacingResult[index] = Number(itemData.frameSpacingResult); 297fb726d48Sopenharmony_ci // @ts-ignore 298fb726d48Sopenharmony_ci frameSpacing.preTs[index] = itemData.preTs; 299fb726d48Sopenharmony_ci // @ts-ignore 300fb726d48Sopenharmony_ci frameSpacing.preFrameWidth[index] = Number(itemData.preFrameWidth); 301fb726d48Sopenharmony_ci // @ts-ignore 302fb726d48Sopenharmony_ci frameSpacing.preFrameHeight[index] = Number(itemData.preFrameHeight); 303fb726d48Sopenharmony_ci // @ts-ignore 304fb726d48Sopenharmony_ci frameSpacing.preX[index] = Number(itemData.preX); 305fb726d48Sopenharmony_ci // @ts-ignore 306fb726d48Sopenharmony_ci frameSpacing.preY[index] = Number(itemData.preY); 307fb726d48Sopenharmony_ci } 308fb726d48Sopenharmony_ci postFrameSpacingMessage(data, transfer, frameSpacing, frameSpacingList.length); 309fb726d48Sopenharmony_ci} 310fb726d48Sopenharmony_cifunction postFrameSpacingMessage(data: unknown, transfer: boolean, frameSpacing: FrameSpacing, len: number): void { 311fb726d48Sopenharmony_ci (self as unknown as Worker).postMessage( 312fb726d48Sopenharmony_ci { 313fb726d48Sopenharmony_ci // @ts-ignore 314fb726d48Sopenharmony_ci id: data.id, 315fb726d48Sopenharmony_ci // @ts-ignore 316fb726d48Sopenharmony_ci action: data.action, 317fb726d48Sopenharmony_ci results: transfer 318fb726d48Sopenharmony_ci ? { 319fb726d48Sopenharmony_ci id: frameSpacing.id.buffer, 320fb726d48Sopenharmony_ci x: frameSpacing.x.buffer, 321fb726d48Sopenharmony_ci y: frameSpacing.y.buffer, 322fb726d48Sopenharmony_ci currentFrameWidth: frameSpacing.currentFrameWidth.buffer, 323fb726d48Sopenharmony_ci currentFrameHeight: frameSpacing.currentFrameHeight.buffer, 324fb726d48Sopenharmony_ci currentTs: frameSpacing.currentTs.buffer, 325fb726d48Sopenharmony_ci frameSpacingResult: frameSpacing.frameSpacingResult.buffer, 326fb726d48Sopenharmony_ci preTs: frameSpacing.preTs.buffer, 327fb726d48Sopenharmony_ci preFrameWidth: frameSpacing.preFrameWidth.buffer, 328fb726d48Sopenharmony_ci preFrameHeight: frameSpacing.preFrameHeight.buffer, 329fb726d48Sopenharmony_ci preX: frameSpacing.preX.buffer, 330fb726d48Sopenharmony_ci preY: frameSpacing.preY.buffer, 331fb726d48Sopenharmony_ci } 332fb726d48Sopenharmony_ci : {}, 333fb726d48Sopenharmony_ci len: len, 334fb726d48Sopenharmony_ci transfer: transfer, 335fb726d48Sopenharmony_ci }, 336fb726d48Sopenharmony_ci transfer 337fb726d48Sopenharmony_ci ? [ 338fb726d48Sopenharmony_ci frameSpacing.id.buffer, 339fb726d48Sopenharmony_ci frameSpacing.x.buffer, 340fb726d48Sopenharmony_ci frameSpacing.y.buffer, 341fb726d48Sopenharmony_ci frameSpacing.currentFrameWidth.buffer, 342fb726d48Sopenharmony_ci frameSpacing.currentFrameHeight.buffer, 343fb726d48Sopenharmony_ci frameSpacing.currentTs.buffer, 344fb726d48Sopenharmony_ci frameSpacing.frameSpacingResult.buffer, 345fb726d48Sopenharmony_ci frameSpacing.preTs.buffer, 346fb726d48Sopenharmony_ci frameSpacing.preFrameWidth.buffer, 347fb726d48Sopenharmony_ci frameSpacing.preFrameHeight.buffer, 348fb726d48Sopenharmony_ci frameSpacing.preX.buffer, 349fb726d48Sopenharmony_ci frameSpacing.preY.buffer, 350fb726d48Sopenharmony_ci ] 351fb726d48Sopenharmony_ci : [] 352fb726d48Sopenharmony_ci ); 353fb726d48Sopenharmony_ci} 354fb726d48Sopenharmony_cifunction setSpacingStructs( 355fb726d48Sopenharmony_ci nameDataMap: Map<string, Array<FrameSpacingStruct>>, 356fb726d48Sopenharmony_ci itemData: FrameSpacingStruct, 357fb726d48Sopenharmony_ci data: unknown 358fb726d48Sopenharmony_ci): void { 359fb726d48Sopenharmony_ci let unitIndex: number = 1; 360fb726d48Sopenharmony_ci let secondToNanosecond: number = 1000_000_000; 361fb726d48Sopenharmony_ci let spacingStructs = nameDataMap.get(itemData.nameId!); 362fb726d48Sopenharmony_ci if (spacingStructs) { 363fb726d48Sopenharmony_ci let lastIndexData = spacingStructs[spacingStructs.length - 1]; 364fb726d48Sopenharmony_ci let intervalTime = (itemData.currentTs - lastIndexData.currentTs) / secondToNanosecond; 365fb726d48Sopenharmony_ci let widthDifference = Number(itemData.currentFrameWidth!) - Number(lastIndexData.currentFrameWidth!); 366fb726d48Sopenharmony_ci let heightDifference = Number(itemData.currentFrameHeight!) - Number(lastIndexData.currentFrameHeight!); 367fb726d48Sopenharmony_ci let xDifference = Number(itemData.x!) - Number(lastIndexData.x!); 368fb726d48Sopenharmony_ci let yDifference = Number(itemData.y!) - Number(lastIndexData.y!); 369fb726d48Sopenharmony_ci // @ts-ignore 370fb726d48Sopenharmony_ci let frameWidth = Math.abs(widthDifference / data.params.physicalWidth / intervalTime); 371fb726d48Sopenharmony_ci // @ts-ignore 372fb726d48Sopenharmony_ci let frameHeight = Math.abs(heightDifference / data.params.physicalHeight / intervalTime); 373fb726d48Sopenharmony_ci // @ts-ignore 374fb726d48Sopenharmony_ci let frameX = Math.abs(xDifference / data.params.physicalWidth / intervalTime); 375fb726d48Sopenharmony_ci // @ts-ignore 376fb726d48Sopenharmony_ci let frameY = Math.abs(yDifference / data.params.physicalHeight / intervalTime); 377fb726d48Sopenharmony_ci let result = Math.max(frameWidth, frameHeight, frameX, frameY); 378fb726d48Sopenharmony_ci itemData.frameSpacingResult = Number(result.toFixed(unitIndex)); 379fb726d48Sopenharmony_ci itemData.preTs = lastIndexData.currentTs; 380fb726d48Sopenharmony_ci itemData.preFrameWidth = Number(lastIndexData.currentFrameWidth); 381fb726d48Sopenharmony_ci itemData.preFrameHeight = Number(lastIndexData.currentFrameHeight); 382fb726d48Sopenharmony_ci itemData.preX = Number(lastIndexData.x); 383fb726d48Sopenharmony_ci itemData.preY = Number(lastIndexData.y); 384fb726d48Sopenharmony_ci spacingStructs.push(itemData); 385fb726d48Sopenharmony_ci } 386fb726d48Sopenharmony_ci} 387fb726d48Sopenharmony_cifunction setNameDataMap(nameDataMap: Map<string, Array<FrameSpacingStruct>>, itemData: FrameSpacingStruct): void { 388fb726d48Sopenharmony_ci itemData.frameSpacingResult = 0; 389fb726d48Sopenharmony_ci itemData.preTs = 0; 390fb726d48Sopenharmony_ci itemData.preFrameWidth = 0; 391fb726d48Sopenharmony_ci itemData.preFrameHeight = 0; 392fb726d48Sopenharmony_ci itemData.preX = 0; 393fb726d48Sopenharmony_ci itemData.preY = 0; 394fb726d48Sopenharmony_ci nameDataMap.set(itemData.nameId!, [itemData]); 395fb726d48Sopenharmony_ci} 396fb726d48Sopenharmony_ciclass FrameSpacing { 397fb726d48Sopenharmony_ci id: Uint16Array; 398fb726d48Sopenharmony_ci x: Float32Array; 399fb726d48Sopenharmony_ci y: Float32Array; 400fb726d48Sopenharmony_ci currentFrameWidth: Float32Array; 401fb726d48Sopenharmony_ci currentFrameHeight: Float32Array; 402fb726d48Sopenharmony_ci currentTs: Float64Array; 403fb726d48Sopenharmony_ci frameSpacingResult: Float32Array; 404fb726d48Sopenharmony_ci preTs: Float64Array; 405fb726d48Sopenharmony_ci preFrameWidth: Float32Array; 406fb726d48Sopenharmony_ci preFrameHeight: Float32Array; 407fb726d48Sopenharmony_ci preX: Float32Array; 408fb726d48Sopenharmony_ci preY: Float32Array; 409fb726d48Sopenharmony_ci 410fb726d48Sopenharmony_ci constructor(data: unknown, len: unknown[], transfer: boolean) { 411fb726d48Sopenharmony_ci // @ts-ignore 412fb726d48Sopenharmony_ci this.id = new Uint16Array(transfer ? len : data.params.sharedArrayBuffers.animationId); 413fb726d48Sopenharmony_ci // @ts-ignore 414fb726d48Sopenharmony_ci this.x = new Float32Array(transfer ? len : data.params.sharedArrayBuffers.animationId); 415fb726d48Sopenharmony_ci // @ts-ignore 416fb726d48Sopenharmony_ci this.y = new Float32Array(transfer ? len : data.params.sharedArrayBuffers.animationId); 417fb726d48Sopenharmony_ci // @ts-ignore 418fb726d48Sopenharmony_ci this.currentFrameWidth = new Float32Array(transfer ? len : data.params.sharedArrayBuffers.animationId); 419fb726d48Sopenharmony_ci // @ts-ignore 420fb726d48Sopenharmony_ci this.currentFrameHeight = new Float32Array(transfer ? len : data.params.sharedArrayBuffers.animationId); 421fb726d48Sopenharmony_ci // @ts-ignore 422fb726d48Sopenharmony_ci this.currentTs = new Float64Array(transfer ? len : data.params.sharedArrayBuffers.animationId); 423fb726d48Sopenharmony_ci // @ts-ignore 424fb726d48Sopenharmony_ci this.frameSpacingResult = new Float32Array(transfer ? len : data.params.sharedArrayBuffers.animationId); 425fb726d48Sopenharmony_ci // @ts-ignore 426fb726d48Sopenharmony_ci this.preTs = new Float64Array(transfer ? len : data.params.sharedArrayBuffers.animationId); 427fb726d48Sopenharmony_ci // @ts-ignore 428fb726d48Sopenharmony_ci this.preFrameWidth = new Float32Array(transfer ? len : data.params.sharedArrayBuffers.animationId); 429fb726d48Sopenharmony_ci // @ts-ignore 430fb726d48Sopenharmony_ci this.preFrameHeight = new Float32Array(transfer ? len : data.params.sharedArrayBuffers.animationId); 431fb726d48Sopenharmony_ci // @ts-ignore 432fb726d48Sopenharmony_ci this.preX = new Float32Array(transfer ? len : data.params.sharedArrayBuffers.animationId); 433fb726d48Sopenharmony_ci // @ts-ignore 434fb726d48Sopenharmony_ci this.preY = new Float32Array(transfer ? len : data.params.sharedArrayBuffers.animationId); 435fb726d48Sopenharmony_ci } 436fb726d48Sopenharmony_ci} 437