• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 * Copyright (C) 2024 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';
17import {
18  XpowerGpuFreqCountRender,
19  XpowerGpuFreqCountStruct,
20} from '../../../../src/trace/database/ui-worker/ProcedureWorkerXpowerGpuFreqCount';
21import { SpSystemTrace } from '../../../../src/trace/component/SpSystemTrace';
22import {
23  Rect,
24  dataFilterHandler,
25  drawLoadingFrame,
26} from '../../../../src/trace/database/ui-worker/ProcedureWorkerCommon';
27jest.mock('../../../../src/trace/database/ui-worker/ProcedureWorker', () => {
28  return {};
29});
30jest.mock('../../../../src/trace/component/SpSystemTrace', () => {
31  return {};
32});
33jest
34  .spyOn(require('../../../../src/trace/database/ui-worker/ProcedureWorkerCommon'), 'isFrameContainPoint')
35  .mockReturnValue(true);
36describe('ProcedureWorkerXpowerGpuFreqCount Test', () => {
37  let row: TraceRow<XpowerGpuFreqCountStruct>;
38  let context: CanvasRenderingContext2D;
39  let frame = new Rect(0, 0, 100, 100);
40  // 模拟数据
41  context = {
42    save: jest.fn(),
43    translate: jest.fn(),
44    rect: jest.fn(),
45    clip: jest.fn(),
46    strokeStyle: '#000000',
47    strokeRect: jest.fn(),
48    fillRect: jest.fn(),
49    fillText: jest.fn(),
50    measureText: jest.fn().mockReturnValue({ width: 10 }),
51    beginPath: jest.fn(),
52    closePath: jest.fn(),
53    stroke: jest.fn(),
54    clearRect: jest.fn(),
55    fill: jest.fn(),
56    moveTo: jest.fn(),
57    lineTo: jest.fn(),
58    fillStyle: '#000000',
59    globalAlpha: 1,
60    font: '10px sans-serif',
61    canvas: {
62      clientWidth: 800,
63    },
64  } as unknown as CanvasRenderingContext2D;
65
66  const traceRow = {
67    dataList: [],
68    dataListCache: [],
69    frame: { x: 0, y: 0, width: 100, height: 50 },
70    isHover: false,
71    hoverX: 0,
72    hoverY: 0,
73  } as unknown as TraceRow<XpowerGpuFreqCountStruct>;
74
75  const traceRow1 = {
76    dataList: [],
77    dataListCache: [
78      {
79        startNS: 100,
80        dur: 10,
81        filterId: 10,
82        value: 10,
83        delta: 10,
84        translateY: 10,
85        frame: frame,
86        isHover: false,
87      },
88    ],
89    frame: { x: 0, y: 0, width: 100, height: 50 },
90    isHover: false,
91    hoverX: 0,
92    hoverY: 0,
93  } as unknown as TraceRow<XpowerGpuFreqCountStruct>;
94
95  const spSystemTrace = {
96    traceSheetEL: {
97      displayXpowerData: jest.fn(),
98    },
99    timerShaftEL: {
100      modifyFlagList: jest.fn(),
101    },
102  } as unknown as SpSystemTrace;
103
104  row = TraceRow.skeleton<XpowerGpuFreqCountStruct>();
105  TraceRow.range = {
106    startNS: 0,
107    endNS: 1000000,
108    totalNS: 1000000,
109    slicesTime: {
110      color: '#0ff',
111      startTime: 0,
112      endTime: 20000,
113    },
114    scale: 1,
115    startX: 10,
116    endX: 30,
117    xs: [0, 1],
118    refresh: true,
119    xsTxt: ['0', '1'],
120  };
121
122  row.dataListCache = [
123    {
124      startNS: 100,
125      dur: 10,
126      value: 10,
127      translateY: 10,
128      frame: frame,
129      isHover: false,
130    },
131  ];
132  row.frame = frame;
133  const data = new XpowerGpuFreqCountStruct();
134  data.startNS = 100;
135  data.isHover = true;
136  data.frame = frame;
137  data.value = 0;
138  const data1 = new XpowerGpuFreqCountStruct();
139  data1.startNS = 200;
140  data1.isHover = false;
141  data1.value = 10;
142
143  it('ProcedureWorkerXpowerGpuFreqCount Test01', () => {
144    const xpowerRender = new XpowerGpuFreqCountRender();
145    const xpowerReq = {
146      context: context,
147      useCache: false,
148      type: 'mainThread',
149      maxValue: 100,
150      minValue: 0,
151      index: 0,
152      maxName: 'MaxValue',
153    };
154    xpowerRender.renderMainThread(xpowerReq, traceRow);
155    expect(context.beginPath).toHaveBeenCalled();
156    expect(context.closePath).toHaveBeenCalled();
157    expect(context.fillRect).toHaveBeenCalled();
158    expect(context.fillText).toHaveBeenCalled();
159    expect(context.globalAlpha).toBe(1);
160    expect(context.fillStyle).toBe('#333');
161    expect(context.textBaseline).toBe('middle');
162
163    xpowerRender.renderMainThread(xpowerReq, traceRow1);
164    expect(context.strokeRect).toHaveBeenCalled();
165    expect(context.fillRect).toHaveBeenCalled();
166  });
167
168  it('ProcedureWorkerXpowerGpuFreqCount Test04', async () => {
169    data.frame = new Rect(0, 0, 100, 100);
170    XpowerGpuFreqCountStruct.draw(context, data, 10);
171    expect(data.frame).toBeDefined();
172    expect(context.stroke).toHaveBeenCalled();
173    expect(context.fillRect).toHaveBeenCalled();
174  });
175  it('ProcedureWorkerXpowerGpuFreqCount Test05', async () => {
176    data1.frame = new Rect(0, 0, 100, 100);
177    XpowerGpuFreqCountStruct.draw(context, data1, 10);
178    expect(data.frame).toBeDefined();
179    expect(context.strokeRect).toHaveBeenCalled();
180
181    expect(context.fillRect).toHaveBeenCalled();
182  });
183  it('ProcedureWorkerXpowerGpuFreqCount Test06', async () => {
184    expect(XpowerGpuFreqCountStruct.calculateDrawHeight(data, 10)).toBeDefined();
185    expect(XpowerGpuFreqCountStruct.calculateDrawHeight(data, 1)).toBe(1);
186    expect(XpowerGpuFreqCountStruct.calculateDrawHeight(data1, 100)).toBe(10);
187  });
188  it('ProcedureWorkerXpowerGpuFreqCount Test07', async () => {
189    let isHover = XpowerGpuFreqCountStruct.isHover(data);
190    expect(isHover).toBeFalsy();
191  });
192  it('ProcedureWorkerXpowerGpuFreqCount Test08', async () => {
193    let filterConfig = {
194      startKey: 'startNS',
195      durKey: 'dur',
196      startNS: TraceRow.range?.startNS ?? 0,
197      endNS: TraceRow.range?.endNS ?? 0,
198      totalNS: TraceRow.range?.totalNS ?? 0,
199      frame: row.frame,
200      paddingTop: 5,
201      useCache: true,
202    };
203    dataFilterHandler(row.dataList, row.dataListCache, filterConfig);
204  });
205  it('ProcedureWorkerXpowerGpuFreqCount Test09', async () => {
206    drawLoadingFrame(context, row.dataListCache, row);
207  });
208  it('ProcedureWorkerXpowerGpuFreqCount Test010', async () => {
209    XpowerGpuFreqCountStruct.resetCanvasContext(context);
210    expect(context.globalAlpha).toBe(1.0);
211    expect(context.lineWidth).toBe(1);
212  });
213});
214