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 { TraceRow } from '../../../../src/trace/component/trace/base/TraceRow';
17jest.mock('../../../../src/trace/database/ui-worker/ProcedureWorker', () => {
18  return {};
19});
20import {
21  HiPerfProcessStruct,
22  HiperfProcessRender2,
23} from '../../../../src/trace/database/ui-worker/hiperf/ProcedureWorkerHiPerfProcess2';
24import { hiPerf } from '../../../../src/trace/database/ui-worker/ProcedureWorkerCommon';
25jest.mock('../../../../src/trace/component/SpSystemTrace', () => {
26  return {};
27});
28describe('ProcedureWorkerHiPerfProcess Test', () => {
29  it('ProcedureWorkerHiPerfProcessTest01', () => {
30    const data = {
31      frame: undefined,
32      cpu: 1,
33      startNs: 41,
34      value: 41,
35    };
36    const canvas = document.createElement('canvas');
37    canvas.width = 1;
38    canvas.height = 2;
39    const ctx = canvas.getContext('2d');
40    expect(HiPerfProcessStruct.draw(ctx, '', data, true)).toBeUndefined();
41  });
42
43  it('ProcedureWorkerHiPerfProcessTest02', function () {
44    let dataList = new Array();
45    dataList.push({
46      startNS: 0,
47      dur: 10,
48      length: 1,
49      frame: { x: 0, y: 9, width: 10, height: 10 },
50    });
51    dataList.push({ startNS: 1, dur: 2, length: 1 });
52    hiPerf(dataList, [{ length: 0 }], dataList, 8, 3, '', true, 1, true);
53  });
54
55  it('ProcedureWorkerHiPerfProcessTest03', function () {
56    let dataList = new Array();
57    dataList.push({
58      startNS: 0,
59      dur: 10,
60      length: 1,
61      frame: { x: 0, y: 9, width: 10, height: 10 },
62    });
63    dataList.push({ startNS: 1, dur: 2, length: 1 });
64    hiPerf(dataList, [{ length: 0 }], dataList, 8, 3, '', false, 1, false);
65  });
66
67  it('ProcedureWorkerHiPerfProcessTest04', function () {
68    expect(HiPerfProcessStruct.groupBy10MS([{ a: '1', b: 2, c: 3 }], 10)).toEqual([
69      { dur: 10000000, height: NaN, eventCount: undefined, startNS: NaN, sampleCount : undefined},
70      { dur: 10000000, height: NaN, eventCount: undefined, startNS: NaN, sampleCount : 1},
71    ]);
72  });
73
74  it('ProcedureWorkerHiPerfProcessTest05', function () {
75    let hiperfProcessRender = new HiperfProcessRender2();
76    let hiperfProcessReq = {
77      lazyRefresh: true,
78      type: '',
79      startNS: 1,
80      endNS: 12,
81      totalNS: 11,
82      frame: {
83        x: 145,
84        y: 202,
85        width: 110,
86        height: 101,
87      },
88      useCache: false,
89      range: {
90        refresh: '',
91      },
92      canvas: 's',
93      context: {
94        font: '11px sans-serif',
95        fillStyle: '#ec407a',
96        globalAlpha: 0.3,
97        clearRect: jest.fn(() => true),
98        beginPath: jest.fn(() => true),
99        fillText: jest.fn(() => true),
100        fill: jest.fn(() => false),
101        stroke: jest.fn(() => true),
102        closePath: jest.fn(() => true),
103        measureText: jest.fn(() => ''),
104        fillRect: jest.fn(() => true),
105      },
106      lineColor: '',
107      isHover: '',
108      hoverX: 1,
109      params: 'q',
110      wakeupBean: undefined,
111      flagMoveInfo: '',
112      flagSelectedInfo: '',
113      slicesTime: 7,
114      id: 1,
115      x: 27,
116      y: 27,
117      width: 100,
118      height: 100,
119      scale: 100_070_001,
120    };
121    window.postMessage = jest.fn(() => true);
122    expect(hiperfProcessRender.render(hiperfProcessReq, [], [], [])).toBeUndefined();
123  });
124  it('ProcedureWorkerHiPerfProcessTest06', function () {
125    let hiperfProcessRender = new HiperfProcessRender2();
126    let canvas = document.createElement('canvas') as HTMLCanvasElement;
127    let context = canvas.getContext('2d');
128    const data = {
129      context: context!,
130      useCache: true,
131      type: '',
132      traceRange: [],
133    };
134    window.postMessage = jest.fn(() => true);
135    expect(hiperfProcessRender.renderMainThread(data, new TraceRow())).toBeUndefined();
136  });
137});
138