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  heap,
22  HeapStruct,
23  NativeMemoryRender,
24  HeapRender,
25} from '../../../../src/trace/database/ui-worker/ProcedureWorkerHeap';
26import { Rect } from '../../../../src/trace/component/trace/timer-shaft/Rect';
27jest.mock('../../../../src/trace/component/SpSystemTrace', () => {
28  return {};
29});
30describe(' Test', () => {
31  it('HeapTest01', () => {
32    let heapDataList = new Array();
33    heapDataList.push({
34      startTime: 40,
35      dur: 150,
36      frame: { x: 0, y: 19, width: 20, height: 10 },
37    });
38    heapDataList.push({ startTime: 12, dur: 21 });
39    let rect = new Rect(0, 10, 30, 10);
40    let res = [
41      {
42        startTs: 11,
43        dur: 166,
44        length: 15,
45        frame: '',
46      },
47    ];
48    heap(heapDataList, res, 1, 100254, 100254, rect, true);
49  });
50
51  it('HeapTest02', () => {
52    let heapHataList = new Array();
53    heapHataList.push({
54      startTime: 1,
55      dur: 118,
56      frame: { x: 60, y: 9, width: 10, height: 10 },
57    });
58    heapHataList.push({
59      startTime: 1,
60      dur: 15,
61      frame: { x: 0, y: 19, width: 110, height: 130 },
62    });
63    let rect = new Rect(0, 10, 10, 10);
64    let res = [
65      {
66        startTs: 0,
67        dur: 10,
68        length: 0,
69        frame: '',
70      },
71    ];
72    heap(heapHataList, res, 1, 100254, 100254, rect, false);
73  });
74
75  it('HeapTest03', () => {
76    const canvas = document.createElement('canvas');
77    canvas.width = 11;
78    canvas.height = 12;
79    const ctx = canvas.getContext('2d');
80
81    const data = {
82      frame: {
83        x: 250,
84        y: 250,
85        width: 100,
86        height: 100,
87      },
88      startNS: 200,
89      value: 50,
90    };
91    expect(HeapStruct.drawHeap(ctx, data, 0)).toBeUndefined();
92  });
93  it('HeapTest04', () => {
94    const canvas = document.createElement('canvas');
95    canvas.width = 11;
96    canvas.height = 11;
97    const ctx = canvas.getContext('2d');
98
99    const data = {
100      frame: {
101        x: 205,
102        y: 205,
103        width: 100,
104        height: 100,
105      },
106      maxHeapSize: 200,
107      value: 50,
108    };
109    expect(HeapStruct.drawHeap(ctx, data, 1)).toBeUndefined();
110  });
111
112  it('HeapTest05', function () {
113    let heapRender = new HeapRender();
114    let heapReq = [{
115      lazyRefresh: true,
116      type: '',
117      startNS: 3,
118      endNS: 9,
119      totalNS: 6,
120      frame: {
121        x: 20,
122        y: 20,
123        width: 200,
124        height: 200,
125      },
126      useCache: false,
127      range: {
128        refresh: '',
129      },
130      canvas: 'canvas',
131      context: {
132        font: '11px sans-serif',
133        fillStyle: '#ec407a',
134        globalAlpha: 0.56,
135        clearRect: jest.fn(() => true),
136        beginPath: jest.fn(() => false),
137        closePath: jest.fn(() => true),
138        measureText: jest.fn(() => true),
139        stroke: jest.fn(() => true),
140        fillRect: jest.fn(() => true),
141        fillText: jest.fn(() => true),
142      },
143      lineColor: '#666666',
144      isHover: '',
145      hoverX: 1,
146      params: 'params',
147      wakeupBean: undefined,
148      flagMoveInfo: '',
149      flagSelectedInfo: '',
150      slicesTime: 1,
151      id: 1,
152      x: 20,
153      y: 20,
154      width: 320,
155      height: 320,
156    }];
157    window.postMessage = jest.fn(() => true);
158    let frame = { x: 0, y: 9, width: 10, height: 10 };
159    expect(heap(heapReq, heapReq, 0, 52100, 3569,frame , true)).toBeUndefined();
160  });
161  it('HeapTest04', () => {
162    const canvas = document.createElement('canvas');
163    canvas.width = 1;
164    canvas.height = 1;
165    const ctx = canvas.getContext('2d');
166
167    const data = {
168      frame: {
169        x: 20,
170        y: 20,
171        width: 100,
172        height: 100,
173      },
174      startNS: 200,
175      value: 50,
176    };
177    const node = {
178      frame: {
179        x: 20,
180        y: 20,
181        width: 100,
182        height: 100,
183      },
184      startNS: 200,
185      value: 50,
186    };
187    expect(HeapStruct.setFrame(node, 2, 1, 5, 4, data)).toBeUndefined();
188  });
189  it('HeapTest07', function () {
190    let heapRender = new HeapRender();
191    let canvas = document.createElement('canvas') as HTMLCanvasElement;
192    let context = canvas.getContext('2d');
193    const data = {
194      context: context!,
195      useCache: true,
196      type: '',
197      traceRange: [],
198    };
199    window.postMessage = jest.fn(() => true);
200    expect(heapRender.renderMainThread(data, new TraceRow())).toBeUndefined();
201  });
202});
203