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
16jest.mock('../../../../src/trace/component/trace/base/TraceRow', () => {
17  return {};
18});
19
20import {
21  HiPerfReport,
22  HiPerfReportStruct,
23  HiperfReportRender,
24} from '../../../../src/trace/database/ui-worker/hiperf/ProcedureWorkerHiPerfReport';
25import { Rect } from '../../../../src/trace/database/ui-worker/ProcedureWorkerCommon';
26
27
28describe('ProcedureWorkerHiPerfReport Test', () => {
29  it('ProcedureWorkerHiPerfReportTest01', () => {
30    let frame = {
31      x: 5,
32      y: 95,
33      width: 50,
34      height: 10,
35    };
36    let dataList = new Array();
37    dataList.push({
38      startTime: 50,
39      dur: 50,
40      frame: { x: 50, y: 9, width: 105, height: 150 },
41    });
42    dataList.push({ startTime: 51, dur: 511 });
43    let dataList2 = new Array();
44    dataList2.push({
45      startTime: 50,
46      dur: 190,
47      frame: { x: 60, y: 99, width: 610, height: 16 },
48    });
49    dataList2.push({ startTime: 61, dur: 691 });
50    let rect = new Rect(0, 10, 60, 10);
51    HiPerfReport(dataList, dataList2, '', [{ length: 1 }], 1, 1024, 1024, frame, true, 1, true);
52  });
53
54  it('ProcedureWorkerHiPerfReportTest02', () => {
55    let frame = {
56      x: 33,
57      y: 39,
58      width: 130,
59      height: 130,
60    };
61    let hiPerfReportDataList = new Array();
62    hiPerfReportDataList.push({
63      startTime: 1,
64      dur: 11,
65      frame: { x: 10, y: 91, width: 110, height: 310 },
66    });
67    hiPerfReportDataList.push({
68      startTime: 31,
69      dur: 131,
70      frame: { x: 30, y: 4, width: 130, height: 103 },
71    });
72    let rect = new Rect(0, 30, 13, 13);
73    let dataList2 = new Array();
74    dataList2.push({
75      startTime: 3,
76      dur: 132,
77      frame: { x: 23, y: 32, width: 130, height: 32 },
78    });
79    dataList2.push({ startTime: 21, dur: 133 });
80    HiPerfReport(hiPerfReportDataList, dataList2, '', [{ length: 0 }], 1, 1024, 1024, frame, true, 1, false);
81  });
82
83  it('ProcedureWorkerHiPerfReportTest07', () => {
84    let frame = {
85      x: 70,
86      y: 97,
87      width: 60,
88      height: 170,
89    };
90    let hiPerfReportDataList = new Array();
91    hiPerfReportDataList.push({
92      startTime: 5,
93      dur: 5,
94      frame: { x: 4, y: 93, width: 350, height: 130 },
95    });
96    hiPerfReportDataList.push({
97      startTime: 12,
98      dur: 21,
99      frame: { x: 50, y: 95, width: 50, height: 640 },
100    });
101    let rect = new Rect(0, 60, 60, 60);
102    let dataList2 = new Array();
103    dataList2.push({
104      startTime: 60,
105      dur: 40,
106      frame: { x: 40, y: 49, width: 40, height: 14 },
107    });
108    dataList2.push({ startTime: 17, dur: 16 });
109    HiPerfReport(hiPerfReportDataList, dataList2, '', [{ length: 0 }], 1, 1024, 1024, frame, false, 1, false);
110  });
111
112  it('ProcedureWorkerHiPerfReportTest03', () => {
113    const data = {
114      frame: {
115        x: 15,
116        y: 8,
117        width: 98,
118        height: 80,
119      },
120      cpu: 1,
121      startNs: 13,
122      value: 198,
123    };
124    const canvas = document.createElement('canvas');
125    canvas.width = 1;
126    canvas.height = 1;
127    const ctx = canvas.getContext('2d');
128    expect(HiPerfReportStruct.drawRoundRectPath(ctx, 1, 0, 10, 10, 12)).toBeUndefined();
129  });
130
131  it('ProcedureWorkerHiPerfReportTest04', function () {
132    let node = {
133      frame: {
134        x: 29,
135        y: 27,
136        width: 107,
137        height: 170,
138      },
139      startNS: 70,
140      value: 57,
141      startTs: 34,
142      dur: 121,
143      height: 22,
144    };
145    let frame = {
146      x: 30,
147      y: 690,
148      width: 199,
149      height: 109,
150    };
151    expect(HiPerfReportStruct.setFrame(node, 2, 1, 2, frame)).toBeUndefined();
152  });
153
154  it('ProcedureWorkerHiPerfReportTest05', function () {
155    let node = {
156      frame: {
157        x: 30,
158        y: 90,
159        width: 220,
160        height: 1520,
161      },
162      startNS: 55,
163      value: 522,
164      startTs: 19,
165      dur: 98,
166      height: 8
167    };
168    let frame = {
169      x: 150,
170      y: 20,
171      width: 400,
172      height: 400,
173    };
174    expect(HiPerfReportStruct.setFrame(node, 2, 1, 2, frame)).toBeUndefined();
175  });
176
177  it('ProcedureWorkerHiPerfReportTest06', function () {
178    expect(HiPerfReportStruct.reportGroupBy10MS([{ ps: 1 }, { coX: '1' }], 10)).toEqual([
179      { dur: 10000000, height: NaN, startNS: NaN, sum: NaN },
180    ]);
181  });
182  it('ProcedureWorkerHiPerfProcessTest05', function () {
183    let hiperfReportRender = new HiperfReportRender();
184    let req = {
185      lazyRefresh: true,
186      type: '',
187      startNS: 1,
188      endNS: 1,
189      totalNS: 1,
190      frame: {
191        x: 210,
192        y: 120,
193        width: 100,
194        height: 100,
195      },
196      useCache: false,
197      range: {
198        refresh: '',
199      },
200      canvas: 'a',
201      context: {
202        font: '11px sans-serif',
203        fillStyle: '#ec407a',
204        globalAlpha: 0.6,
205        clearRect: jest.fn(() => true),
206        beginPath: jest.fn(() => true),
207        fillRect: jest.fn(() => true),
208        fillText: jest.fn(() => true),
209        fill: jest.fn(() => true),
210        stroke: jest.fn(() => true),
211        closePath: jest.fn(() => true),
212        measureText: jest.fn(() => true),
213      },
214      lineColor: '',
215      hoverX: 1,
216      params: '',
217      isHover: '',
218      flagMoveInfo: '',
219      height: 100,
220      flagSelectedInfo: '',
221      slicesTime: 3,
222      id: 1,
223      x: 20,
224      y: 20,
225      width: 100,
226      wakeupBean: undefined,
227      scale: 100_000_001,
228    };
229    window.postMessage = jest.fn(() => true);
230    expect(hiperfReportRender.render(req, [], [], [])).toBeUndefined();
231  });
232});
233