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