• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 { TraficEnum } from '../utils/QueryEnum';
15import { xpowerWifiList } from '../utils/AllMemoryCache';
16import { Args } from '../CommonArgs';
17
18export const chartXpowerWifiMemoryDataSql = (args: Args): string => {
19  if (args.xpowerName === 'WIFIPackets') {
20    return `
21          SELECT start_time - start_ts as startTime,
22                 ifnull(tx_packets, 0) as tx,
23                 ifnull(rx_packets, 0) as rx
24          FROM xpower_app_detail_wifi, trace_range`;
25  } else {
26    return `
27          SELECT start_time - start_ts as startTime,
28                 ifnull(tx_bytes, 0) as tx,
29                 ifnull(rx_bytes, 0) as rx
30          FROM xpower_app_detail_wifi, trace_range`;
31  }
32};
33
34export const chartXpowerStatisticDataSql = (args: Args): string => {
35  if (args.xpowerName === 'WIFIPackets') {
36    return `
37          SELECT start_time - start_ts as startTime,
38                 ifnull(tx_packets, 0) as tx,
39                 ifnull(rx_packets, 0) as rx
40          FROM xpower_app_detail_wifi, trace_range`;
41  } else {
42    return `
43          SELECT start_time - start_ts as startTime,
44                 ifnull(tx_bytes, 0) as tx,
45                 ifnull(rx_bytes, 0) as rx
46          FROM xpower_app_detail_wifi, trace_range`;
47  }
48};
49
50export function xpowerWifiDataReceiver(data: unknown, proc: Function): void {
51  // @ts-ignore
52  if (data.params.trafic === TraficEnum.Memory) {
53    let list: unknown[];
54    // @ts-ignore
55    if (!xpowerWifiList.has(data.params.xpowerName)) {
56      // @ts-ignore
57      list = proc(chartXpowerWifiMemoryDataSql(data.params));
58      // @ts-ignore
59      xpowerWifiList.set(data.params.xpowerName, list);
60    } else {
61      // @ts-ignore
62      list = xpowerWifiList.get(data.params.xpowerName) || [];
63    }
64    // @ts-ignore
65    if (data.params.queryAll) {
66      list = (list || []).filter(
67        // @ts-ignore
68        (it) => it.startTime + 3000000000 >= data.params.selectStartNS && it.startTime <= data.params.selectEndNS
69      );
70    }
71    arrayBufferHandler(data, list, true);
72  } else {
73    // @ts-ignore
74    let sql = chartXpowerStatisticDataSql(data.params);
75    let res = proc(sql);
76    // @ts-ignore
77    arrayBufferHandler(data, res, data.params.trafic !== TraficEnum.SharedArrayBuffer);
78  }
79}
80
81function arrayBufferHandler(data: unknown, res: unknown[], transfer: boolean): void {
82  // @ts-ignore
83  let startTime = new Float64Array(transfer ? res.length : data.params.sharedArrayBuffers.dur);
84  // @ts-ignore
85  let tx = new Float64Array(transfer ? res.length : data.params.sharedArrayBuffers.startTime);
86  // @ts-ignore
87  let rx = new Float64Array(transfer ? res.length : data.params.sharedArrayBuffers.energy);
88  res.forEach((it, i) => {
89    // @ts-ignore
90    data.params.trafic === TraficEnum.ProtoBuffer && (it = it.xpowerWifiData);
91    // @ts-ignore
92    startTime[i] = it.startTime;
93    // @ts-ignore
94    tx[i] = it.tx;
95    // @ts-ignore
96    rx[i] = it.rx;
97  });
98
99  (self as unknown as Worker).postMessage(
100    {
101      // @ts-ignore
102      id: data.id,
103      // @ts-ignore
104      action: data.action,
105      results: transfer
106        ? {
107            startTime: startTime.buffer,
108            tx: tx.buffer,
109            rx: rx.buffer,
110          }
111        : {},
112      len: res.length,
113      transfer: transfer,
114    },
115    transfer ? [startTime.buffer, tx.buffer, rx.buffer] : []
116  );
117}
118