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 { SpApplication } from '../../../../../src/trace/SpApplication'; 17import { SpSystemTrace } from '../../../../../src/trace/component/SpSystemTrace'; 18import { 19 getTimeString, 20 JankTreeNode, 21 TabPaneCurrentSelection, 22 ThreadTreeNode, 23} from '../../../../../src/trace/component/trace/sheet/TabPaneCurrentSelection'; 24import { AllAppStartupStruct } from '../../../../../src/trace/database/ui-worker/ProcedureWorkerAllAppStartup'; 25import { ClockStruct } from '../../../../../src/trace/database/ui-worker/ProcedureWorkerClock'; 26import { DmaFenceStruct } from '../../../../../src/trace/database/ui-worker/ProcedureWorkerDmaFence'; 27import { FuncStruct } from '../../../../../src/trace/database/ui-worker/ProcedureWorkerFunc'; 28import { HangStruct } from '../../../../../src/trace/database/ui-worker/ProcedureWorkerHang'; 29import { JankStruct } from '../../../../../src/trace/database/ui-worker/ProcedureWorkerJank'; 30import { PerfToolStruct } from '../../../../../src/trace/database/ui-worker/ProcedureWorkerPerfTool'; 31import { SoStruct } from '../../../../../src/trace/database/ui-worker/ProcedureWorkerSoInit'; 32import { ThreadStruct } from '../../../../../src/trace/database/ui-worker/ProcedureWorkerThread'; 33import { XpowerStruct } from '../../../../../src/trace/database/ui-worker/ProcedureWorkerXpower'; 34import { XpowerAppDetailStruct } from '../../../../../src/trace/database/ui-worker/ProcedureWorkerXpowerAppDetail'; 35import { XpowerWifiStruct } from '../../../../../src/trace/database/ui-worker/ProcedureWorkerXpowerWifi'; 36import { CpuStruct, WakeupBean } from '../../../../../src/trace/database/ui-worker/cpu/ProcedureWorkerCPU'; 37const processSqlite = require('../../../../../src/trace/database/sql/ProcessThread.sql'); 38jest.mock('../../../../../src/trace/database/sql/ProcessThread.sql'); 39const sqlite = require('../../../../../src/trace/database/sql/SqlLite.sql'); 40jest.mock('../../../../../src/trace/database/sql/SqlLite.sql'); 41const gpuSqlite = require('../../../../../src/trace/database/sql/Gpu.sql'); 42jest.mock('../../../../../src/trace/database/sql/Gpu.sql'); 43const clockSqlite = require('../../../../../src/trace/database/sql/Clock.sql'); 44jest.mock('../../../../../src/trace/database/sql/Clock.sql'); 45const cpuSqlite = require('../../../../../src/trace/database/sql/Cpu.sql'); 46jest.mock('../../../../../src/trace/database/sql/Cpu.sql'); 47jest.mock('../../../../../src/js-heap/model/DatabaseStruct', () => { 48 return {}; 49}); 50jest.mock('../../../../../src/trace/database/ui-worker/ProcedureWorkerSnapshot', () => { 51 return {}; 52}); 53jest.mock('../../../../../src/trace/database/ui-worker/ProcedureWorker', () => { 54 return {}; 55}); 56global.caches = { 57 match: jest.fn(), 58} as any; 59describe('TabPaneCurrentSelection Test', () => { 60 let tabPaneCurrentSelection = new TabPaneCurrentSelection(); 61 const canvas = document.createElement('canvas'); 62 canvas.width = 1; 63 canvas.height = 1; 64 let context = canvas.getContext('2d'); 65 66 it('TabPaneCurrentSelectionTest01', function () { 67 expect(tabPaneCurrentSelection.getDate(1732017213)).not.toBeUndefined; 68 }); 69 70 it('TabPaneCurrentSelectionTest02', function () { 71 let memData = [ 72 { 73 trackId: 100, 74 processName: 'processName', 75 pid: 11, 76 upid: 1, 77 trackName: 'trackName', 78 type: 'type', 79 track_id: 'track_id', 80 value: 111, 81 startTime: 0, 82 duration: 1000, 83 maxValue: 4000, 84 delta: 2, 85 }, 86 ]; 87 expect(tabPaneCurrentSelection.setMemData(memData)).toBeUndefined; 88 }); 89 90 it('TabPaneCurrentSelectionTest03', function () { 91 let result = getTimeString(3600_000_000_002); 92 expect(result).toBe('1h 2ns '); 93 }); 94 95 it('TabPaneCurrentSelectionTest04', function () { 96 let result = getTimeString(60000000001); 97 expect(result).toBe('1m 1ns '); 98 }); 99 100 it('TabPaneCurrentSelectionTest05', function () { 101 let result = getTimeString(1000000001); 102 expect(result).toBe('1s 1ns '); 103 }); 104 105 it('TabPaneCurrentSelectionTest06', function () { 106 let result = getTimeString(1000001); 107 expect(result).toBe('1ms 1ns '); 108 }); 109 110 it('TabPaneCurrentSelectionTest07', function () { 111 let result = getTimeString(1001); 112 expect(result).toBe('1μs 1ns '); 113 }); 114 115 it('TabPaneCurrentSelectionTest08', function () { 116 let result = getTimeString(101); 117 expect(result).toBe('101ns '); 118 }); 119 120 let queryRunnableTimeByRunning = processSqlite.queryRunnableTimeByRunning; 121 let queryRunnableTimeByRunningData = [ 122 { 123 ts: 5564, 124 }, 125 { 126 ts: 764, 127 }, 128 ]; 129 queryRunnableTimeByRunning.mockResolvedValue(queryRunnableTimeByRunningData); 130 131 let queryThreadWakeUpFrom = processSqlite.queryThreadWakeUpFrom; 132 let queryThreadWakeUpFromData = [ 133 { 134 ts: 5564, 135 tid: 88, 136 itid: 48, 137 pid: 756, 138 cpu: 4, 139 dur: 8456, 140 argSetID: 5, 141 }, 142 ]; 143 queryThreadWakeUpFrom.mockResolvedValue(queryThreadWakeUpFromData); 144 145 let queryRealTime = clockSqlite.queryRealTime; 146 let queryRealTimeData = [ 147 { 148 ts: 5564, 149 name: 'ds5f', 150 }, 151 { 152 ts: 5584, 153 name: 'ddsdd', 154 }, 155 ]; 156 queryRealTime.mockResolvedValue(queryRealTimeData); 157 158 let queryThreadStateArgs = processSqlite.queryThreadStateArgs; 159 let queryThreadStateArgsData = [ 160 { 161 argset: 5, 162 keyName: 'f5', 163 id: 985, 164 desc: 'dg4d', 165 strValue: 'dsfsfdf', 166 }, 167 ]; 168 queryThreadStateArgs.mockResolvedValue(queryThreadStateArgsData); 169 170 it('TabPaneCurrentSelectionTest09', function () { 171 tabPaneCurrentSelection.setCpuData = jest.fn(() => true); 172 tabPaneCurrentSelection.data = jest.fn(() => true); 173 expect(tabPaneCurrentSelection.data).toBeUndefined(); 174 }); 175 176 it('TabPaneCurrentSelectionTest10', function () { 177 let cpuData = [ 178 { 179 cpu: 2, 180 dur: 2, 181 end_state: 'string', 182 id: 14, 183 name: 'name', 184 priority: 11, 185 processCmdLine: 'processCmdLine', 186 processId: 1115, 187 processName: 'processName', 188 schedId: 221, 189 startTime: 5, 190 tid: 1081, 191 type: 'type', 192 }, 193 ]; 194 expect(tabPaneCurrentSelection.setCpuData(cpuData, undefined, 1)).toBeTruthy(); 195 }); 196 197 it('TabPaneCurrentSelectionTest11', function () { 198 expect(tabPaneCurrentSelection.initCanvas()).not.toBeUndefined(); 199 }); 200 201 it('TabPaneCurrentSelectionTest12', function () { 202 expect(tabPaneCurrentSelection.transferString('')).toBe(''); 203 }); 204 205 it('TabPaneCurrentSelectionTest13', function () { 206 expect(tabPaneCurrentSelection.drawRight(null, null)).toBeUndefined(); 207 }); 208 209 it('TabPaneCurrentSelectionTest14', function () { 210 let jankData = { 211 id: 10, 212 ts: 25415, 213 dur: 1200, 214 name: '1523', 215 depth: 1, 216 jank_tag: true, 217 cmdline: 'com.test', 218 type: '0', 219 pid: 20, 220 frame_type: 'app', 221 app_dur: 110, 222 dst_slice: 488, 223 }; 224 let result = tabPaneCurrentSelection.setJankData(jankData, undefined, 1); 225 expect(result).toBeUndefined(); 226 }); 227 228 it('TabPaneCurrentSelectionTest15', function () { 229 let jankDataRender = { 230 id: 22, 231 ts: 254152, 232 dur: 1202, 233 name: '1583', 234 depth: 1, 235 jank_tag: true, 236 cmdline: 'render.test', 237 type: '0', 238 pid: 22, 239 frame_type: 'render_service', 240 src_slice: '525', 241 rs_ts: 2562, 242 rs_vsync: '2562', 243 rs_dur: 1528, 244 rs_pid: 1252, 245 rs_name: 'name', 246 gpu_dur: 2568, 247 }; 248 let result = tabPaneCurrentSelection.setJankData(jankDataRender, undefined, 1); 249 expect(result).toBeUndefined(); 250 }); 251 252 let irqData = new SoStruct(); 253 irqData.id = 25; 254 irqData.startTs = 1526; 255 irqData.soName = 'test'; 256 irqData.dur = 125; 257 irqData.tid = 500; 258 259 it('TabPaneCurrentSelectionTest16', function () { 260 let argsetTest = processSqlite.queryBinderArgsByArgset; 261 let argsetData = [ 262 { 263 argset: 12, 264 keyName: 'test', 265 id: 123, 266 desc: 'desc', 267 strValue: 'value', 268 }, 269 { 270 argset: 11, 271 keyName: 'test', 272 id: 113, 273 desc: 'desc', 274 strValue: 'value', 275 }, 276 ]; 277 argsetTest.mockResolvedValue(argsetData); 278 let result = tabPaneCurrentSelection.setIrqData(irqData); 279 expect(result).toBeUndefined(); 280 }); 281 282 it('TabPaneCurrentSelectionTest17', function () { 283 let result = tabPaneCurrentSelection.setStartupData(irqData, 1, []); 284 expect(result).toBeUndefined(); 285 }); 286 it('TabPaneCurrentSelectionTest18', function () { 287 tabPaneCurrentSelection.startIconClickEvent = jest.fn(); 288 let result = tabPaneCurrentSelection.setStaticInitData(irqData, () => {}); 289 expect(result).toBeUndefined(); 290 }); 291 it('TabPaneCurrentSelectionTest19', function () { 292 let list: never[] = []; 293 let data = [ 294 { 295 jank_tag: 1, 296 frame_type: 'render_service', 297 }, 298 ]; 299 let result = tabPaneCurrentSelection.setJankType(data, list); 300 expect(result).toBeUndefined(); 301 }); 302 it('TabPaneCurrentSelectionTest20', function () { 303 let queryFpsSourceList = sqlite.queryFpsSourceList; 304 let queryFpsSourceListData = [ 305 { 306 tid: 5564, 307 dur: 854, 308 depth: 84, 309 ts: 998, 310 name: 'ds8f', 311 }, 312 ]; 313 queryFpsSourceList.mockResolvedValue(queryFpsSourceListData); 314 315 let data = [ 316 { 317 startTime: 22, 318 }, 319 ]; 320 let result = tabPaneCurrentSelection.setFrameAnimationData(data); 321 expect(result).toBeTruthy(); 322 }); 323 324 it('TabPaneCurrentSelectionTest21', function () { 325 let data = new CpuStruct(); 326 data.id = 555; 327 data.startTime = 84; 328 data.tid = 84; 329 let result = tabPaneCurrentSelection.queryCPUWakeUpFromData(data); 330 expect(result).toBeTruthy(); 331 }); 332 333 it('TabPaneCurrentSelectionTest22', function () { 334 let data = { 335 argsetid: 1, 336 depth: 2, 337 dur: 50, 338 funName: 'efs', 339 id: 8, 340 callid: 8, 341 is_main_thread: 74, 342 }; 343 expect(tabPaneCurrentSelection.handleNonBinder(data, [], 'sfe', 'effe')).toBeUndefined(); 344 }); 345 346 it('TabPaneCurrentSelectionTest23', function () { 347 expect(tabPaneCurrentSelection.initElements()).toBeUndefined(); 348 }); 349 350 it('TabPaneCurrentSelectionTest24', function () { 351 let data = [ 352 { 353 thread: 'fds', 354 wakeupTime: 54, 355 cpu: 85, 356 dur: 848, 357 process: 'fdsf', 358 pid: 847, 359 tid: 48, 360 schedulingDesc: 'sdf', 361 ts: 774, 362 itid: 87, 363 state: 'sfd', 364 argSetID: 48785, 365 schedulingLatency: 747, 366 }, 367 ]; 368 let queryWakeupListPriority = cpuSqlite.queryWakeupListPriority; 369 let queryWakeupListPriorityData = [ 370 { 371 itid: 5564, 372 priority: 854, 373 dur: 84, 374 ts: 998, 375 cpu: 'ds8f', 376 }, 377 ]; 378 queryWakeupListPriority.mockResolvedValue(queryWakeupListPriorityData); 379 expect(tabPaneCurrentSelection.showWakeupListTableData(data)).toBeUndefined(); 380 }); 381 382 it('TabPaneCurrentSelectionTest24', function () { 383 expect(tabPaneCurrentSelection.getRealTimeStr(74512)).not.toBeUndefined(); 384 }); 385 386 it('TabPaneCurrentSelectionTest25', function () { 387 let data = new ClockStruct(); 388 tabPaneCurrentSelection.initElements(); 389 expect(tabPaneCurrentSelection.setClockData(data)).not.toBeUndefined(); 390 }); 391 392 it('TabPaneCurrentSelectionTest26', function () { 393 let data = new XpowerStruct(); 394 tabPaneCurrentSelection.initElements(); 395 expect(tabPaneCurrentSelection.setXpowerData(data)).not.toBeUndefined(); 396 }); 397 398 it('TabPaneCurrentSelectionTest27', function () { 399 let data = new XpowerAppDetailStruct(); 400 tabPaneCurrentSelection.initElements(); 401 expect(tabPaneCurrentSelection.setXpowerDisplayData(data)).not.toBeUndefined(); 402 }); 403 404 it('TabPaneCurrentSelectionTest28', function () { 405 let data = new XpowerWifiStruct(); 406 tabPaneCurrentSelection.initElements(); 407 expect(tabPaneCurrentSelection.setXpowerWifiBytesData(data)).not.toBeUndefined(); 408 }); 409 410 it('TabPaneCurrentSelectionTest29', function () { 411 let data = new XpowerWifiStruct(); 412 tabPaneCurrentSelection.initElements(); 413 expect(tabPaneCurrentSelection.setXpowerWifiPacketsData(data)).not.toBeUndefined(); 414 }); 415 416 it('TabPaneCurrentSelectionTest30', function () { 417 let data = new CpuStruct(); 418 data.name = 'fd0'; 419 data.pid = 9; 420 data.ts = 9366; 421 data.dur = 9366; 422 tabPaneCurrentSelection.initElements(); 423 expect( 424 tabPaneCurrentSelection.setCpuData( 425 data, 426 (data: WakeupBean | null) => {} 427 ) 428 ).not.toBeUndefined(); 429 }); 430 431 it('TabPaneCurrentSelectionTest31', function () { 432 let data = new PerfToolStruct(); 433 tabPaneCurrentSelection.initElements(); 434 expect(tabPaneCurrentSelection.setPerfToolsData(data)).toBeUndefined(); 435 }); 436 437 it('TabPaneCurrentSelectionTest32', function () { 438 let data = new ThreadStruct(); 439 tabPaneCurrentSelection.initElements(); 440 expect( 441 tabPaneCurrentSelection.setThreadData( 442 data, 443 () => {}, 444 () => {}, 445 () => {} 446 ) 447 ).not.toBeUndefined(); 448 }); 449 450 it('TabPaneCurrentSelectionTest33', function () { 451 let data = new ThreadStruct(); 452 tabPaneCurrentSelection.initElements(); 453 expect(tabPaneCurrentSelection.sortByNearData([], data, [])).not.toBeUndefined(); 454 }); 455 456 it('TabPaneCurrentSelectionTest34', function () { 457 let fromBean = new WakeupBean(); 458 let wakeUps = [fromBean]; 459 tabPaneCurrentSelection.initElements(); 460 expect(tabPaneCurrentSelection.setWakeupData(fromBean, wakeUps, [])).toBeUndefined(); 461 }); 462 463 it('TabPaneCurrentSelectionTest35', function () { 464 let data = new JankStruct(); 465 data.rs_name = 'fd0'; 466 data.rs_pid = 9; 467 data.rs_ts = 9366; 468 data.rs_dur = 9366; 469 let list = []; 470 tabPaneCurrentSelection.initElements(); 471 expect(tabPaneCurrentSelection.addRenderServiceFrameDetails(data, list)).toBeUndefined(); 472 }); 473 474 it('TabPaneCurrentSelectionTest36', function () { 475 let data = new JankStruct(); 476 data.name = 'fd0'; 477 data.rs_pid = 9; 478 data.rs_ts = 9366; 479 data.rs_dur = 9366; 480 data.cmdline = 'ef'; 481 let list = []; 482 tabPaneCurrentSelection.initElements(); 483 expect(tabPaneCurrentSelection.addFollowingDetails(list, data)).toBeUndefined(); 484 }); 485 486 it('TabPaneCurrentSelectionTest37', function () { 487 let data = new JankStruct(); 488 data.name = 'fd0'; 489 data.pid = 9; 490 data.ts = 9366; 491 data.dur = 9366; 492 data.cmdline = 'ef'; 493 let list = []; 494 tabPaneCurrentSelection.initElements(); 495 expect(tabPaneCurrentSelection.addAppFrameDetails(data, list)).toBeUndefined(); 496 }); 497 498 it('TabPaneCurrentSelectionTest38', function () { 499 let data = new JankStruct(); 500 data.name = 'fd0'; 501 data.pid = 9; 502 data.ts = 9366; 503 data.dur = 9366; 504 data.cmdline = 'ef'; 505 let list = []; 506 tabPaneCurrentSelection.initElements(); 507 expect(tabPaneCurrentSelection.handleAppJank(list, data, [], () => {}, undefined)).toBeUndefined(); 508 }); 509 510 it('TabPaneCurrentSelectionTest39', function () { 511 let data = new AllAppStartupStruct(); 512 data.dur = 9366; 513 tabPaneCurrentSelection.initElements(); 514 expect(tabPaneCurrentSelection.setAllStartupData(data, () => {})).toBeUndefined(); 515 }); 516 517 it('TabPaneCurrentSelectionTest40', function () { 518 let data = new FuncStruct(); 519 data.name = 'fd0'; 520 data.pid = 9; 521 data.ts = 9366; 522 data.dur = 9366; 523 data.cmdline = 'ef'; 524 let list = []; 525 tabPaneCurrentSelection.initElements(); 526 expect(tabPaneCurrentSelection.handleBinder(data, list, [], 'dfs', () => {}, 'fds')).toBeUndefined(); 527 }); 528 529 it('TabPaneCurrentSelectionTest41', function () { 530 let data = new DmaFenceStruct(); 531 data.dur = 9366; 532 let list = []; 533 tabPaneCurrentSelection.initElements(); 534 expect(tabPaneCurrentSelection.setDmaFenceData(data, list)).toBeUndefined(); 535 }); 536 537 it('TabPaneCurrentSelectionTest42', function () { 538 let data = new JankStruct(); 539 data.dur = 9366; 540 let list = []; 541 tabPaneCurrentSelection.initElements(); 542 expect(tabPaneCurrentSelection.setJankType(data, list)).toBeUndefined(); 543 }); 544 545 it('TabPaneCurrentSelectionTest43', function () { 546 let data = new WakeupBean(); 547 data.dur = 9566; 548 let wakeup = new WakeupBean(); 549 tabPaneCurrentSelection.drawVerticalLine = jest.fn(() => {}); 550 tabPaneCurrentSelection.initElements(); 551 let canvas = tabPaneCurrentSelection.initCanvas(); 552 expect(tabPaneCurrentSelection.drawRight(canvas, wakeup)).toBeUndefined(); 553 }); 554 555 it('TabPaneCurrentSelectionTest44', function () { 556 let data = new JankStruct(); 557 data.dur = 9566; 558 let jankTreeNode = new JankTreeNode('fs', 5, 's'); 559 tabPaneCurrentSelection.initElements(); 560 expect( 561 tabPaneCurrentSelection.handleRenderServiceJank( 562 data, 563 [], 564 [jankTreeNode], 565 () => {}, 566 () => {} 567 ) 568 ).toBeUndefined(); 569 }); 570 571 it('TabPaneCurrentSelectionTest45', function () { 572 let data = new JankStruct(); 573 data.dur = 9366; 574 data.jank_tag = 1; 575 data.frameType = 'render_service'; 576 let list = []; 577 tabPaneCurrentSelection.initElements(); 578 expect(tabPaneCurrentSelection.setJankType(data, list)).toBeUndefined(); 579 }); 580 581 it('TabPaneCurrentSelectionTest46', function () { 582 let data = new JankStruct(); 583 data.dur = 9366; 584 data.jank_tag = 1; 585 data.frameType = 'app'; 586 let list = []; 587 tabPaneCurrentSelection.initElements(); 588 expect(tabPaneCurrentSelection.setJankType(data, list)).toBeUndefined(); 589 }); 590 591 it('TabPaneCurrentSelectionTest47', function () { 592 let data = new JankStruct(); 593 data.dur = 9366; 594 data.jank_tag = 1; 595 data.frameType = 'frameTime'; 596 let list = []; 597 tabPaneCurrentSelection.initElements(); 598 expect(tabPaneCurrentSelection.setJankType(data, list)).toBeUndefined(); 599 }); 600 601 it('TabPaneCurrentSelectionTest48', function () { 602 let data = new JankStruct(); 603 data.dur = 9366; 604 data.jank_tag = 3; 605 data.frameType = 'frameTime'; 606 let list = []; 607 tabPaneCurrentSelection.initElements(); 608 expect(tabPaneCurrentSelection.setJankType(data, list)).toBeUndefined(); 609 }); 610 611 it('TabPaneCurrentSelectionTest49', function () { 612 expect(tabPaneCurrentSelection.transferString('frrfsdsd')).not.toBeUndefined(); 613 }); 614 615 it('TabPaneCurrentSelectionTest50', function () { 616 let threadTreeNode = new ThreadTreeNode(5, 9, 1000); 617 expect(threadTreeNode.tid).toEqual(5); 618 }); 619}); 620