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 */
15import { TraceRow } from '../../../../src/trace/component/trace/base/TraceRow';
16import { Rect } from '../../../../src/trace/component/trace/timer-shaft/Rect';
17import {
18  jsCpuProfiler,
19  JsCpuProfilerRender,
20  JsCpuProfilerStruct,
21} from '../../../../src/trace/database/ui-worker/ProcedureWorkerCpuProfiler';
22
23jest.mock('../../../../src/trace/database/ui-worker/ProcedureWorker', () => {
24  return {};
25});
26jest.mock('../../../../src/trace/component/SpSystemTrace', () => {
27  return {};
28});
29describe('ProcedureWorkerCpuProfiler Test', () => {
30  let jsCpuProfilerRender = new JsCpuProfilerRender();
31  let traceRow = new TraceRow();
32  traceRow.frame = {height: 40, width: 1407, x: 0, y: 0};
33  it('jsCpuProfilerTest', () => {
34    const canvas = document.createElement('canvas');
35    canvas.width = 1;
36    canvas.height = 1;
37    const ctx = canvas.getContext('2d');
38    let traceRow = new TraceRow();
39    traceRow.frame = {height: 40, width: 1407, x: 0, y: 0};
40    let rect = new Rect(0, 10, 10, 10);
41    let filter = [
42      {
43        startTime: 50,
44        endTime: 1520000,
45        name: 'Snapshot2',
46        frame: {x: 0, y: 0, width: 25, height: 40},
47        id: 0,
48        depth: 1,
49        selfTime: 0,
50        url: '',
51        totalTime: 83321693463,
52        parentId: 123,
53        children: [],
54        isSelect: true,
55      },
56    ];
57    let list = [
58      {
59        startTime: 250,
60        endTime: 2333333,
61        name: 'Snapshot0',
62        frame: {x: 0, y: 0, width: 25, height: 20},
63        id: 32,
64        depth: 21,
65        selfTime: 34,
66        url: '',
67        totalTime: 32155693464,
68        parentId: 32,
69        children: [],
70        isSelect: true,
71      },
72    ];
73    jsCpuProfiler(list, filter, 100254, 100254, rect, traceRow.frame, true);
74  });
75
76  it('JsCpuProfilerStructTest01', () => {
77    const data = {
78      frame: {
79        x: 20,
80        y: 20,
81        width: 101,
82        height: 101,
83      },
84      filterID: 2,
85      startNs: 1,
86      value: 1,
87      maxValue: undefined,
88      startTime: 1,
89      size: 102,
90      cpu: 1,
91    };
92    const canvas = document.createElement('canvas');
93    canvas.width = 1;
94    canvas.height = 1;
95    const ctx = canvas.getContext('2d');
96    expect(JsCpuProfilerStruct.draw(ctx, data)).toBeUndefined();
97  });
98
99  it('JsCpuProfilerStructTest02', () => {
100    let node = {
101      startTime: 150,
102      endTime: 122000,
103      name: 'Snapshot1',
104      frame: {x: 1, y: 2, width: 25, height: 40},
105      id: 12,
106      depth: 1,
107      selfTime: 1243,
108      url: '',
109      totalTime: 882141164,
110      parentId: 1213,
111      children: [],
112      isSelect: true,
113    };
114    expect(JsCpuProfilerStruct.setJsCpuProfilerFrame(node, 0, 1, 2, traceRow.frame)).toBeUndefined();
115  });
116  it('JsCpuProfilerStructTest04', () => {
117    expect(JsCpuProfilerStruct).not.toBeUndefined();
118  });
119  it('JsCpuProfilerStructTest05 ', function () {
120    let jsCpuProfilerRender = new JsCpuProfilerRender();
121    let canvas = document.createElement('canvas') as HTMLCanvasElement;
122    let context = canvas.getContext('2d');
123    const data = {
124      context: context!,
125      useCache: true,
126      type: '',
127      traceRange: [],
128    };
129    window.postMessage = jest.fn(() => true);
130    TraceRow.range = jest.fn(() => true);
131    TraceRow.range.startNS = jest.fn(() => 1);
132    expect(jsCpuProfilerRender.renderMainThread(data, new TraceRow<JsCpuProfilerStruct>())).toBeUndefined();
133  });
134});
135