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