• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 * Copyright (C) 2022 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16import { BaseStruct } from '../../../../src/trace/bean/BaseStruct';
17import { SpXpowerChart, convertHoverValue, convertTitle } from '../../../../src/trace/component/chart/SpXpowerChart';
18import { TraceRow } from '../../../../src/trace/component/trace/base/TraceRow';
19import { XpowerStruct } from '../../../../src/trace/database/ui-worker/ProcedureWorkerXpower';
20import { XpowerAppDetailStruct } from '../../../../src/trace/database/ui-worker/ProcedureWorkerXpowerAppDetail';
21import { XpowerGpuFreqStruct } from '../../../../src/trace/database/ui-worker/ProcedureWorkerXpowerGpuFreq';
22import { XpowerGpuFreqCountStruct } from '../../../../src/trace/database/ui-worker/ProcedureWorkerXpowerGpuFreqCount';
23import { XpowerStatisticStruct } from '../../../../src/trace/database/ui-worker/ProcedureWorkerXpowerStatistic';
24import { XpowerThreadCountStruct } from '../../../../src/trace/database/ui-worker/ProcedureWorkerXpowerThreadCount';
25import { XpowerThreadInfoStruct } from '../../../../src/trace/database/ui-worker/ProcedureWorkerXpowerThreadInfo';
26import { XpowerWifiStruct } from '../../../../src/trace/database/ui-worker/ProcedureWorkerXpowerWifi';
27jest.mock('../../../../src/js-heap/model/DatabaseStruct');
28const XpowerSql = require('../../../../src/trace/database/sql/Xpower.sql');
29jest.mock('../../../../src/trace/database/sql/Xpower.sql');
30jest.mock('../../../../src/trace/component/SpSystemTrace', () => {
31  return {};
32});
33
34const intersectionObserverMock = () => ({
35  observe: () => null,
36});
37window.IntersectionObserver = jest.fn().mockImplementation(intersectionObserverMock);
38window.ResizeObserver =
39  window.ResizeObserver ||
40  jest.fn().mockImplementation(() => ({
41    disconnect: jest.fn(),
42    observe: jest.fn(),
43    unobserve: jest.fn(),
44  }));
45describe('spXpowerChart Test', () => {
46  let htmlElement: any = document.createElement('sp-system-trace');
47  let spXpowerChart = new SpXpowerChart(htmlElement);
48  let xPowerMeasureData = XpowerSql.queryXpowerMeasureData;
49  xPowerMeasureData.mockResolvedValue([
50    {
51      name: 'Battery.Capacity',
52    },
53    {
54      name: 'Battery.Level',
55    },
56    {
57      name: 'Battery.GasGauge',
58    },
59    {
60      name: 'Battery.Screen',
61    },
62    {
63      name: 'Battery.RealCurrent',
64    },
65    {
66      name: 'ThermalReport.ShellTemp',
67    },
68    {
69      name: 'ThermalReport.ThermalLevel',
70    },
71  ]);
72  xPowerMeasureData.mockResolvedValue([]);
73  let xPowerData = XpowerSql.queryXpowerData;
74  xPowerData.mockResolvedValue([
75    {
76      name: 'ThermalReport.ShellTemp',
77      num: 10,
78      maxValue: 100,
79      minValue: 10,
80    },
81    {
82      name: 'Battery.RealCurrent',
83      num: 20,
84      maxValue: 200,
85      minValue: 20,
86    },
87  ]);
88  xPowerData.mockResolvedValue([]);
89  let traceConfig = XpowerSql.queryTraceConfig;
90  traceConfig.mockResolvedValue([
91    {
92      traceSource: 'xpower_config',
93      key: 'bundleName',
94      value: 'com.sina.weibo.stage',
95    },
96    {
97      traceSource: 'xpower_config',
98      key: 'bundleName',
99      value: 'com.sina.weibo.stage',
100    },
101  ]);
102
103  let xPowerComponentTop = XpowerSql.queryXpowerComponentTop;
104  xPowerComponentTop.mockResolvedValue([
105    {
106      structType: 'xpower component',
107      startTime: 10,
108      startTimeStr: '10',
109      componentTypeId: 10,
110      componentTypeName: '10',
111      appNameStr: '10',
112      appName: 10,
113      backgroundDuration: 10,
114      backgroundEnergy: '10',
115      foregroundDuration: 10,
116      foregroundEnergy: '10',
117      screenOffDuration: 10,
118      screenOffEnergy: '10',
119      screenOnDuration: 10,
120      screenOnEnergy: '10',
121      backgroundDurationStr: '10',
122      foregroundDurationStr: '10',
123      screenOffDurationStr: '10',
124      screenOnDurationStr: '10',
125      cameraId: 10,
126      uId: 10,
127      load: '10',
128      appUsageDuration: 10,
129      appUsageDurationStr: '10',
130      appUsageEnergy: '10',
131    },
132    {
133      structType: 'xpower component',
134      startTime: 10,
135      startTimeStr: '10',
136      componentTypeId: 10,
137      componentTypeName: '10',
138      appNameStr: '10',
139      appName: 10,
140      backgroundDuration: 10,
141      backgroundEnergy: '10',
142      foregroundDuration: 10,
143      foregroundEnergy: '10',
144      screenOffDuration: 10,
145      screenOffEnergy: '10',
146      screenOnDuration: 10,
147      screenOnEnergy: '10',
148      backgroundDurationStr: '10',
149      foregroundDurationStr: '10',
150      screenOffDurationStr: '10',
151      screenOnDurationStr: '10',
152      cameraId: 10,
153      uId: 10,
154      load: '10',
155      appUsageDuration: 10,
156      appUsageDurationStr: '10',
157      appUsageEnergy: '10',
158    },
159  ]);
160  spXpowerChart.bundleNameFolder = TraceRow.skeleton<BaseStruct>();
161  let threadInfoStructArray = [
162    {
163      value: 10,
164      valueStr: '10',
165      startNS: 0,
166      startTimeStr: '0',
167      dur: 10,
168      threadTime: 10,
169      threadTimeStr: '10',
170      threadName: 'stage_CompositorGpuTh',
171      threadNameId: 320,
172      valueType: 'thread_energy',
173      translateY: 10,
174      frame: undefined,
175      isHover: true,
176    },
177    {
178      value: 10,
179      valueStr: '10',
180      startNS: 10,
181      startTimeStr: '10',
182      dur: 10,
183      threadTime: 10,
184      threadTimeStr: '10',
185      threadName: 'stage_CompositorGpuTh',
186      threadNameId: 320,
187      valueType: 'thread_loads',
188      translateY: 10,
189      frame: undefined,
190      isHover: true,
191    },
192  ];
193  let gpuFreqStructArray = [
194    {
195      value: 10,
196      valueStr: '10',
197      startNS: 0,
198      startTimeStr: '0',
199      dur: 10,
200      runTime: 10,
201      idleTime: 10,
202      runTimeStr: '10',
203      idleTimeStr: '10',
204      frequency: 10,
205      count: 10,
206      valueType: '',
207      translateY: 10,
208      frame: undefined,
209      isHover: true,
210    },
211    {
212      value: 10,
213      valueStr: '10',
214      startNS: 0,
215      startTimeStr: '0',
216      dur: 10,
217      runTime: 100,
218      idleTime: 100,
219      runTimeStr: '100',
220      idleTimeStr: '100',
221      frequency: 100,
222      count: 100,
223      valueType: '',
224      translateY: 10,
225      frame: undefined,
226      isHover: true,
227    },
228  ];
229
230  it('spXpowerChart01', function () {
231    expect(spXpowerChart.init()).toBeDefined();
232  });
233  it('spXpowerChart02', function () {
234    expect(spXpowerChart.initXpowerFolder()).toBeDefined();
235  });
236  it('spXpowerChart03', function () {
237    expect(spXpowerChart.initFolder('system', TraceRow.ROW_TYPE_XPOWER_SYSTEM_GROUP, 'System', '0')).toBeDefined();
238    expect(
239      spXpowerChart.initFolder('bundleName', TraceRow.ROW_TYPE_XPOWER_BUNDLE_NAME_GROUP, 'com.sina.weibo.stage', '0')
240    ).toBeDefined();
241  });
242  it('spXpowerChart04', function () {
243    let xpowerList = [
244      {
245        name: '',
246        num: 10,
247        maxValue: 100,
248        minValue: 10,
249      },
250    ];
251    expect(spXpowerChart.initSystemData(spXpowerChart.systemFolder, xpowerList)).toBeDefined();
252  });
253  it('spXpowerChart05', function () {
254    expect(convertTitle('Battery.Capacity')).toBe('电池容量(单位mAh)');
255    expect(convertTitle('Battery.Charge')).toBe('充电状态(充电1,非充电0)');
256    expect(convertTitle('Battery.GasGauge')).toBe('电池剩余电量(单位mAh)');
257    expect(convertTitle('Battery.Level')).toBe('电池百分比');
258    expect(convertTitle('Battery.RealCurrent')).toBe('实时电流(单位mAh,充电时为正数,耗电时为负数)');
259    expect(convertTitle('Battery.Screen')).toBe('屏幕状态(亮屏1,灭屏0)');
260    expect(convertTitle('ThermalReport.ShellTemp')).toBe('外壳温度(单位℃)');
261    expect(convertTitle('ThermalReport.ThermalLevel')).toBe('温度等级');
262    expect(convertTitle('aaa')).toBe('aaa');
263  });
264  it('spXpowerChart06', function () {
265    expect(convertHoverValue('0')).toBe('COOL');
266    expect(convertHoverValue('1')).toBe('WARM');
267    expect(convertHoverValue('2')).toBe('HOT');
268    expect(convertHoverValue('3')).toBe('OVERHEATED');
269    expect(convertHoverValue('aaa')).toBe('aaa');
270  });
271  it('spXpowerChart07', function () {
272    expect(spXpowerChart.initXpowerStatisticData(spXpowerChart.bundleNameFolder)).toBeDefined();
273    expect(spXpowerChart.initXpowerWifiData(spXpowerChart.bundleNameFolder)).toBeDefined();
274    expect(spXpowerChart.initXpowerAppDetatilDisplayData(spXpowerChart.bundleNameFolder)).toBeDefined();
275    expect(spXpowerChart.initThreadCountData(spXpowerChart.bundleNameFolder)).toBeDefined();
276    expect(spXpowerChart.initThreadInfoData(spXpowerChart.bundleNameFolder, 'thread_energy')).toBeDefined();
277    expect(spXpowerChart.initThreadInfoData(spXpowerChart.bundleNameFolder, 'thread_loads')).toBeDefined();
278    expect(spXpowerChart.initGpuFreqCountData(spXpowerChart.bundleNameFolder)).toBeDefined();
279    expect(spXpowerChart.initGpuFreqData(spXpowerChart.bundleNameFolder)).toBeDefined();
280  });
281  it('spXpowerChart08', function () {
282    let XpowerStatisticTraceRow = TraceRow.skeleton<XpowerStatisticStruct>();
283    expect(spXpowerChart.xpowerStatisticThreadHandler(XpowerStatisticTraceRow)).not.toBeDefined();
284    let XpowerTraceRow = TraceRow.skeleton<XpowerStruct>();
285    let it = {
286      name: 'Battery.Capacity',
287      num: 10,
288      maxValue: 100,
289      minValue: 10,
290    };
291    expect(spXpowerChart.xpowerThreadHandler(XpowerTraceRow, it, 0)).not.toBeDefined();
292    let XpowerThreadInfoTraceRow = TraceRow.skeleton<XpowerThreadInfoStruct>();
293    expect(spXpowerChart.xpowerThreadInfoThreadHandler(XpowerThreadInfoTraceRow, 'thread_energy')).not.toBeDefined();
294    expect(spXpowerChart.xpowerThreadInfoThreadHandler(XpowerThreadInfoTraceRow, 'thread_loads')).not.toBeDefined();
295    let XpowerAppDetailTraceRow = TraceRow.skeleton<XpowerAppDetailStruct>();
296    expect(spXpowerChart.xpowerAppDetailThreadHandler(XpowerAppDetailTraceRow)).not.toBeDefined();
297    let XpowerWifiTraceRow = TraceRow.skeleton<XpowerWifiStruct>();
298    expect(spXpowerChart.xpowerWifiThreadHandler(XpowerWifiTraceRow, 'WIFIBytes')).not.toBeDefined();
299    expect(spXpowerChart.xpowerWifiThreadHandler(XpowerWifiTraceRow, 'WIFIPackets')).not.toBeDefined();
300    let XpowerGpuFreqTraceRow = TraceRow.skeleton<XpowerGpuFreqStruct>();
301    expect(spXpowerChart.xpowerGpuFreqThreadHandler(XpowerGpuFreqTraceRow)).not.toBeDefined();
302  });
303  it('spXpowerChart09', function () {
304    expect(spXpowerChart.setDataMap(threadInfoStructArray));
305  });
306  it('spXpowerChart10', function () {
307    expect(spXpowerChart.getThreadInfoDrawData(threadInfoStructArray, 'thread_loads')).toBeDefined();
308    expect(spXpowerChart.getThreadInfoDrawData(threadInfoStructArray, 'thread_energy')).toBeDefined();
309    expect(spXpowerChart.getGpuFreqDrawData(gpuFreqStructArray)).toBeDefined();
310  });
311  it('spXpowerChart11', function () {
312    let XpowerTraceRow = TraceRow.skeleton<XpowerStruct>();
313    let it = {
314      name: 'Battery.Capacity',
315      num: 10,
316      maxValue: 100,
317      minValue: 10,
318    };
319    expect(spXpowerChart.xpowerSupplierFrame(XpowerTraceRow, it)).not.toBeDefined();
320    let XpowerThreadCountTraceRow = TraceRow.skeleton<XpowerThreadCountStruct>();
321    expect(spXpowerChart.xpowerThreadCountSupplierFrame(XpowerThreadCountTraceRow)).not.toBeDefined();
322    let XpowerThreadInfoTraceRow = TraceRow.skeleton<XpowerThreadInfoStruct>();
323    expect(spXpowerChart.xpowerThreadInfoSupplierFrame(XpowerThreadInfoTraceRow, 'thread_energy')).not.toBeDefined();
324    expect(spXpowerChart.xpowerThreadInfoSupplierFrame(XpowerThreadInfoTraceRow, 'thread_loads')).not.toBeDefined();
325    let XpowerGpuFreqCountTraceRow = TraceRow.skeleton<XpowerGpuFreqCountStruct>();
326    expect(spXpowerChart.xpowerGpuFreqCountSupplierFrame(XpowerGpuFreqCountTraceRow)).not.toBeDefined();
327    let XpowerGpuFreqTraceRow = TraceRow.skeleton<XpowerGpuFreqStruct>();
328    expect(spXpowerChart.xpowerGpuFreqSupplierFrame(XpowerGpuFreqTraceRow)).not.toBeDefined();
329  });
330});
331