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 { FpsStruct } from '../ui-worker/ProcedureWorkerFPS'; 16import { Counter, Fps } from '../../bean/BoxSelection'; 17import { NativeEvent, NativeEventHeap } from '../../bean/NativeHook'; 18import { HeapTreeDataBean } from '../logic-worker/ProcedureLogicWorkerCommon'; 19import { EnergyAnomalyStruct } from '../ui-worker/ProcedureWorkerEnergyAnomaly'; 20import { SystemDetailsEnergy } from '../../bean/EnergyStruct'; 21import { EnergyStateStruct } from '../ui-worker/ProcedureWorkerEnergyState'; 22import { FileInfo } from '../../../js-heap/model/UiStruct'; 23import { HeapEdge, HeapLocation, HeapNode, HeapSample } from '../../../js-heap/model/DatabaseStruct'; 24import { TaskTabStruct } from '../../component/trace/sheet/task/TabPaneTaskFrames'; 25import type { FrameAnimationStruct } from '../ui-worker/ProcedureWorkerFrameAnimation'; 26import type { FrameDynamicStruct } from '../ui-worker/ProcedureWorkerFrameDynamic'; 27import type { FrameSpacingStruct } from '../ui-worker/ProcedureWorkerFrameSpacing'; 28import type { DeviceStruct } from '../../bean/FrameComponentBean'; 29import { LogStruct } from '../ui-worker/ProcedureWorkerLog'; 30import { query } from '../SqlLite'; 31import { Utils } from '../../component/trace/base/Utils'; 32 33export const queryEventCountMap = ( 34 traceId?: string 35): Promise< 36 Array<{ 37 eventName: string; 38 count: number; 39 }> 40> => 41 query( 42 'queryEventCountMap', 43 `select 44 event_name as eventName, 45 count 46 from stat where stat_type = 'received';`, 47 {}, 48 { traceId: traceId } 49 ); 50 51export const queryTotalTime = ( 52 traceId?: string 53): Promise<Array<{ total: number; recordStartNS: number; recordEndNS: number }>> => 54 query( 55 'queryTotalTime', 56 `select start_ts as recordStartNS,end_ts as recordEndNS,end_ts-start_ts as total 57 from 58 trace_range;`, 59 {}, 60 { traceId: traceId } 61 ); 62export const getFps = (): Promise<FpsStruct[]> => 63 query<FpsStruct>( 64 'getFps', 65 ` 66 select 67 distinct(ts-tb.start_ts) as startNS, fps 68 from 69 hidump c ,trace_range tb 70 where 71 startNS >= 0 72 --order by startNS; 73 `, 74 {} 75 ); 76 77export const getTabFps = (leftNs: number, rightNs: number): Promise<Array<Fps>> => 78 query<Fps>( 79 'getTabFps', 80 ` 81 select 82 distinct(ts-tb.start_ts) as startNS, 83 fps 84 from 85 hidump c, 86 trace_range tb 87 where 88 startNS <= $rightNS 89 and 90 startNS >= 0 91 --order by startNS; 92 `, 93 { $leftNS: leftNs, $rightNS: rightNs } 94 ); 95 96export const getTabVirtualCounters = (virtualFilterIds: Array<number>, startTime: number): Promise<Counter[]> => 97 query<Counter>( 98 'getTabVirtualCounters', 99 ` 100 select 101 table1.filter_id as trackId, 102 table2.name, 103 value, 104 table1.ts - table3.start_ts as startTime 105 from 106 sys_mem_measure table1 107 left join 108 sys_event_filter table2 109 on 110 table1.filter_id = table2.id 111 left join 112 trace_range table3 113 where 114 filter_id in (${virtualFilterIds.join(',')}) 115 and 116 startTime <= $startTime 117 `, 118 { $startTime: startTime } 119 ); 120 121export const queryAllSoInitNames = (): //@ts-ignore 122Promise<Array<unknown>> => { 123 return query( 124 'queryAllSoInitNames', 125 ` 126 select id,so_name as name from static_initalize;` 127 ); 128}; 129 130export const queryAllSrcSlices = (): //@ts-ignore 131Promise<Array<unknown>> => { 132 return query( 133 'queryAllSrcSlices', 134 ` 135 select src,id from frame_slice;` 136 ); 137}; 138 139/*-------------------------------------------------------------------------------------*/ 140export const queryHeapGroupByEvent = (type: string): Promise<Array<NativeEventHeap>> => { 141 let sql1 = ` 142 SELECT 143 event_type AS eventType, 144 sum(heap_size) AS sumHeapSize 145 FROM 146 native_hook 147 WHERE 148 event_type = 'AllocEvent' 149 UNION ALL 150 SELECT 151 event_type AS eventType, 152 sum(heap_size) AS sumHeapSize 153 FROM 154 native_hook 155 WHERE 156 event_type = 'MmapEvent' 157 `; 158 let sql2 = ` 159 select (case when type = 0 then 'AllocEvent' else 'MmapEvent' end) eventType, 160 sum(apply_size) sumHeapSize 161 from native_hook_statistic 162 group by eventType; 163 `; 164 return query('queryHeapGroupByEvent', type === 'native_hook' ? sql1 : sql2, {}); 165}; 166 167export const queryAllHeapByEvent = (): Promise<Array<NativeEvent>> => 168 query( 169 'queryAllHeapByEvent', 170 ` 171 select * from ( 172 select h.start_ts - t.start_ts as startTime, 173 h.heap_size as heapSize, 174 h.event_type as eventType 175from native_hook h ,trace_range t 176where h.start_ts >= t.start_ts and h.start_ts <= t.end_ts 177and (h.event_type = 'AllocEvent' or h.event_type = 'MmapEvent') 178union 179select h.end_ts - t.start_ts as startTime, 180 h.heap_size as heapSize, 181 (case when h.event_type = 'AllocEvent' then 'FreeEvent' else 'MunmapEvent' end) as eventType 182from native_hook h ,trace_range t 183where h.start_ts >= t.start_ts and h.start_ts <= t.end_ts 184and (h.event_type = 'AllocEvent' or h.event_type = 'MmapEvent') 185and h.end_ts not null ) order by startTime; 186`, 187 {} 188 ); 189 190export const queryHeapAllData = ( 191 startTs: number, 192 endTs: number, 193 ipids: Array<number> 194): Promise<Array<HeapTreeDataBean>> => 195 query( 196 'queryHeapAllData', 197 ` 198 select 199 h.start_ts - t.start_ts as startTs, 200 h.end_ts - t.start_ts as endTs, 201 h.heap_size as heapSize, 202 h.event_type as eventType, 203 h.callchain_id as eventId 204 from 205 native_hook h 206 inner join 207 trace_range t 208 where 209 event_type = 'AllocEvent' 210 and 211 ipid in (${ipids.join(',')}) 212 and 213 (h.start_ts - t.start_ts between ${startTs} and ${endTs} 214 or h.end_ts - t.start_ts between ${startTs} and ${endTs})`, 215 { ipids: ipids, $startTs: startTs, $endTs: endTs } 216 ); 217 218export const querySelectTraceStats = (): Promise< 219 Array<{ 220 event_name: string; 221 stat_type: string; 222 count: number; 223 source: string; 224 serverity: string; 225 }> 226> => query('querySelectTraceStats', 'select event_name,stat_type,count,source,serverity from stat'); 227 228export const queryCustomizeSelect = ( 229 sql: string 230): //@ts-ignore 231Promise<Array<unknown>> => query('queryCustomizeSelect', sql); 232 233export const queryDistributedTerm = (): Promise< 234 Array<{ 235 threadId: string; 236 threadName: string; 237 processId: string; 238 processName: string; 239 funName: string; 240 dur: string; 241 ts: string; 242 chainId: string; 243 spanId: string; 244 parentSpanId: string; 245 flag: string; 246 trace_name: string; 247 }> 248> => 249 query( 250 'queryDistributedTerm', 251 ` 252 select 253 group_concat(thread.id,',') as threadId, 254 group_concat(thread.name,',') as threadName, 255 group_concat(process.id,',') as processId, 256 group_concat(process.name,',') as processName, 257 group_concat(callstack.name,',') as funName, 258 group_concat(callstack.dur,',') as dur, 259 group_concat(callstack.ts,',') as ts, 260 cast(callstack.chainId as varchar) as chainId, 261 callstack.spanId as spanId, 262 callstack.parentSpanId as parentSpanId, 263 group_concat(callstack.flag,',') as flag, 264 (select 265 value 266 from 267 meta 268 where 269 name='source_name') as trace_name 270 from 271 callstack 272 inner join thread on callstack.callid = thread.id 273 inner join process on process.id = thread.ipid 274 where (callstack.flag='S' or callstack.flag='C') 275 group by callstack.chainId,callstack.spanId,callstack.parentSpanId` 276 ); 277export const queryTraceTaskName = (): Promise< 278 Array<{ 279 id: string; 280 pid: string; 281 process_name: string; 282 thread_name: string; 283 }> 284> => 285 query( 286 'queryTraceTaskName', 287 ` 288 select 289 P.id as id, 290 P.pid as pid, 291 P.name as process_name, 292 group_concat(T.name,',') as thread_name 293 from process as P left join thread as T where P.id = T.ipid 294 group by pid` 295 ); 296 297export const queryTraceMetaData = (): Promise< 298 Array<{ 299 name: string; 300 valueText: string; 301 }> 302> => 303 query( 304 'queryTraceMetaData', 305 ` 306 select 307 cast(name as varchar) as name, 308 cast(value as varchar) as valueText 309 from meta 310 UNION 311 select 'start_ts',cast(start_ts as varchar) from trace_range 312 UNION 313 select 'end_ts',cast(end_ts as varchar) from trace_range` 314 ); 315 316export const querySystemCalls = (): Promise< 317 Array<{ 318 frequency: string; 319 minDur: number; 320 maxDur: number; 321 avgDur: number; 322 funName: string; 323 }> 324> => 325 query( 326 'querySystemCalls', 327 ` 328 select 329 count(*) as frequency, 330 min(dur) as minDur, 331 max(dur) as maxDur, 332 avg(dur) as avgDur, 333 name as funName 334 from 335 callstack 336 group by name 337 order by 338 frequency desc limit 100` 339 ); 340 341export const queryNetWorkMaxData = (): //@ts-ignore 342Promise<Array<unknown>> => 343 query( 344 'queryNetWorkMaxData', 345 `select 346 ifnull(max(tx_speed),0) as maxIn, 347 ifnull(max(rx_speed),0) as maxOut, 348 ifnull(max(packet_in_sec),0) as maxPacketIn, 349 ifnull(max(packet_in_sec),0) as maxPacketOut 350 from network` 351 ); 352 353export const queryDiskIoMaxData = (): //@ts-ignore 354Promise<Array<unknown>> => 355 query( 356 'queryDiskIoMaxData', 357 `select 358 ifnull(max(rd_speed),0) as bytesRead, 359 ifnull(max(wr_speed),0) as bytesWrite, 360 ifnull(max(rd_count_speed),0) as readOps, 361 ifnull(max(wr_count_speed),0) as writeOps 362 from diskio` 363 ); 364//@ts-ignore 365export const queryStartTime = (): Promise<Array<unknown>> => 366 query('queryStartTime', 'SELECT start_ts FROM trace_range'); 367//@ts-ignore 368export const queryRangeTime = (): Promise<Array<unknown>> => 369 query('queryRangeTime', `SELECT start_ts, end_ts FROM trace_range`); 370 371export const queryBinderBySliceId = ( 372 id: number 373): //@ts-ignore 374Promise<Array<unknown>> => 375 query( 376 'queryBinderBySliceId', 377 `SELECT 378 c.ts - D.start_ts AS startTs, 379 c.dur, 380 t.tid, 381 p.pid, 382 c.depth, 383 c.argsetid, 384 c.name AS funName, 385 c.cookie 386 FROM 387 callstack c, 388 trace_range D 389 LEFT JOIN thread t ON c.callid = t.id 390 LEFT JOIN process p ON p.id = t.ipid 391 WHERE 392 cat = 'binder' and c.id = $id;`, 393 { $id: id }, 394 { traceId: Utils.currentSelectTrace } 395 ); 396 397export const queryThreadByItid = ( 398 itid: number, 399 ts: number 400): //@ts-ignore 401Promise<Array<unknown>> => 402 query( 403 'queryThreadByItid', 404 `SELECT 405 tid, 406 pid, 407 c.dur, 408 c.depth, 409 c.name 410 FROM 411 thread t 412 LEFT JOIN process p ON t.ipid = p.ipid 413 LEFT JOIN callstack c ON t.itid = c.callid 414 WHERE itid = $itid and c.ts = $ts;`, 415 { $itid: itid, $ts: ts } 416 ); 417export const queryBinderByArgsId = ( 418 id: number, 419 startTime: number, 420 isNext: boolean 421): //@ts-ignore 422Promise<Array<unknown>> => { 423 let sql = `select c.ts - D.start_ts as startTs, 424 c.dur, 425 t.tid, 426 p.pid, 427 c.depth, 428 c.argsetid, 429 c.name as funName, 430 c.cookie 431 from callstack c,trace_range D 432 left join thread t on c.callid = t.id 433 left join process p on p.id = t.ipid 434where cat = 'binder' and c.argsetid = $id`; 435 if (isNext) { 436 sql += ' and c.ts > $startTime + D.start_ts'; 437 } else { 438 sql += ' and c.ts < $startTime + D.start_ts'; 439 } 440 return query('queryBinderByArgsId', sql, { $id: id, $startTime: startTime}, 441 { traceId : Utils.currentSelectTrace } 442 ); 443}; 444 445export const getTabPaneFilesystemStatisticsFather = ( 446 leftNs: number, 447 rightNs: number 448): //@ts-ignore 449Promise<Array<unknown>> => 450 query( 451 'getTabPaneFilesystemStatisticsFather', 452 ` 453 select SUM(dur) as allDuration, 454 count(f.type) as count, 455 min(dur) as minDuration, 456 max(dur) as maxDuration, 457 round(avg(dur),2) as avgDuration, 458 p.name, 459 f.type, 460 p.pid, 461 sum(ifnull(size,0)) as size 462 from file_system_sample as f 463 left join process as p on f.ipid=p.ipid 464 where f.start_ts >= $leftNs 465 and end_ts <= $rightNs 466 group by f.type; 467 `, 468 { $leftNs: leftNs, $rightNs: rightNs } 469 ); 470 471export const getTabPaneFilesystemStatisticsChild = ( 472 leftNs: number, 473 rightNs: number 474): //@ts-ignore 475Promise<Array<unknown>> => 476 query( 477 'getTabPaneFilesystemStatisticsChild', 478 ` 479 select SUM(dur) as allDuration, 480 count(f.type) as count, 481 min(dur) as minDuration, 482 max(dur) as maxDuration, 483 round(avg(dur),2) as avgDuration, 484 p.name, 485 p.pid, 486 f.type, 487 sum(ifnull(size,0)) as size 488 from file_system_sample as f left join process as p on f.ipid=p.ipid 489 where f.start_ts >= $leftNs 490 and end_ts <= $rightNs 491 group by f.type, f.ipid; 492`, 493 { $leftNs: leftNs, $rightNs: rightNs } 494 ); 495 496export const getTabPaneFilesystemStatisticsAll = ( 497 leftNs: number, 498 rightNs: number 499): //@ts-ignore 500Promise<Array<unknown>> => 501 query( 502 'getTabPaneFilesystemStatisticsAll', 503 ` 504 select SUM(dur) as allDuration, 505 count(type) as count, 506 min(dur) as minDuration, 507 max(dur) as maxDuration, 508 round(avg(dur),2) as avgDuration, 509 type 510 from file_system_sample 511 where start_ts <= $rightNs 512 and end_ts >= $leftNs; 513`, 514 { $leftNs: leftNs, $rightNs: rightNs } 515 ); 516 517export const getTabPaneFilesystemStatistics = ( 518 leftNs: number, 519 rightNs: number, 520 types: number[] 521): //@ts-ignore 522Promise<Array<unknown>> => 523 query( 524 'getTabPaneFilesystemStatistics', 525 ` 526 select p.pid, 527 ifnull(p.name,'Process') as name, 528 f.type, 529 count(f.ipid) as count, 530 sum(ifnull(size,0)) as size, 531 sum(case when f.type = 2 then ifnull(size,0) else 0 end) as logicalReads, 532 sum(case when f.type = 3 then ifnull(size,0) else 0 end) as logicalWrites, 533 sum(case when f.type != 2 and f.type != 3 then ifnull(size,0) else 0 end) as otherFile, 534 sum(dur) as allDuration, 535 min(dur) as minDuration, 536 max(dur) as maxDuration, 537 avg(dur) as avgDuration 538 from file_system_sample as f left join process as p on f.ipid=p.ipid 539 where f.end_ts >= $leftNs 540 and f.start_ts <= $rightNs 541 and f.type in (${types.join(',')}) 542 group by f.type,f.ipid 543 order by f.type; 544`, 545 { $leftNs: leftNs, $rightNs: rightNs } 546 ); 547 548export const getTabPaneIOTierStatisticsData = ( 549 leftNs: number, 550 rightNs: number, 551 diskIOipids: Array<number> 552): //@ts-ignore 553Promise<Array<unknown>> => { 554 let str = ''; 555 if (diskIOipids.length > 0) { 556 str = ` and i.ipid in (${diskIOipids.join(',')})`; 557 } 558 return query( 559 'getTabPaneIOTierStatisticsData', 560 ` 561 select p.pid, 562 ifnull(p.name,'Process') as pname, 563 i.tier, 564 i.ipid, 565 path_id as path, 566 count(i.ipid) as count, 567 sum(latency_dur) as allDuration, 568 min(latency_dur) as minDuration, 569 max(latency_dur) as maxDuration, 570 avg(latency_dur) as avgDuration 571 from bio_latency_sample as i left join process as p on i.ipid=p.ipid 572 where i.end_ts+latency_dur >= $leftNs 573 and i.start_ts+latency_dur <= $rightNs 574 ${str} 575 group by i.tier,i.ipid,i.path_id 576 order by i.tier; 577`, 578 { $leftNs: leftNs, $rightNs: rightNs } 579 ); 580}; 581 582export const getTabPaneFrequencySampleData = ( 583 leftNs: number, 584 rightNs: number, 585 cpuFreqFilterIds: Array<number> 586): //@ts-ignore 587Promise<Array<unknown>> => { 588 let str = ''; 589 if (cpuFreqFilterIds.length > 0) { 590 str = ` and filter_id in (${cpuFreqFilterIds.join(',')})`; 591 } 592 return query( 593 'getTabPaneFrequencySampleData', 594 ` 595 select value, filter_id as filterId, ts, f.cpu 596 from measure left join cpu_measure_filter as f on f.id=filter_id 597 where 598 ts <= $rightNs${str} order by ts asc; 599`, 600 { $leftNs: leftNs, $rightNs: rightNs }, {traceId: Utils.currentSelectTrace} 601 ); 602}; 603 604export const getFileSysChartDataByType = ( 605 type: number 606): //@ts-ignore 607Promise<Array<unknown>> => 608 query( 609 'getFileSysChartData', 610 ` 611 select 612 (A.start_ts -B.start_ts) as startNS, 613 (A.end_ts - B.start_ts) as endNS, 614 dur 615 from file_system_sample A,trace_range B 616 where type = $type and startNS > 0;`, 617 { $type: type } 618 ); 619 620export const getDiskIOProcess = (): //@ts-ignore 621Promise<Array<unknown>> => 622 query( 623 'getDiskIOProcess', 624 ` 625 select name,B.ipid,pid 626 from (select distinct ipid from bio_latency_sample A,trace_range B 627 where A.start_ts between B.start_ts and B.end_ts) A 628 left join process B on A.ipid = B.ipid;`, 629 {} 630 ); 631 632export const getDiskIOLatencyChartDataByProcess = ( 633 all: boolean, 634 ipid: number, 635 typeArr: Array<number> 636): //@ts-ignore 637Promise<Array<unknown>> => 638 query( 639 'getDiskIOLatencyChartDataByProcess', 640 ` 641 select 642 (A.start_ts -B.start_ts) as startNS, 643 (A.start_ts - B.start_ts + A.latency_dur) as endNS, 644 latency_dur as dur 645 from bio_latency_sample A,trace_range B 646 where type in (${typeArr.join(',')}) and startNS > 0 647 ${all ? '' : 'and ipid = ' + ipid} 648 order by A.start_ts;`, 649 {} 650 ); 651 652export const queryAnomalyData = (): Promise<Array<EnergyAnomalyStruct>> => 653 query( 654 'queryAnomalyData', 655 `select 656 S.id, 657 (S.ts - TR.start_ts) as startNS, 658 D.data as eventName, 659 D2.data as appKey, 660 (case when S.type==1 then group_concat(S.string_value,',') else group_concat(S.int_value,',') 661 end) as Value 662 from trace_range AS TR,hisys_event_measure as S 663 left join data_dict as D on D.id=S.name_id 664 left join app_name as APP on APP.id=S.key_id 665 left join data_dict as D2 on D2.id=APP.app_key 666 where D.data in ('ANOMALY_SCREEN_OFF_ENERGY','ANOMALY_KERNEL_WAKELOCK', 667 'ANOMALY_CPU_HIGH_FREQUENCY','ANOMALY_WAKEUP') 668 or (D.data in ('ANOMALY_RUNNINGLOCK','ANORMALY_APP_ENERGY','ANOMALY_GNSS_ENERGY', 669 'ANOMALY_CPU_ENERGY','ANOMALY_ALARM_WAKEUP') and D2.data in ("APPNAME")) 670 group by S.serial,D.data` 671 ); 672 673export const querySystemLocationData = (): Promise< 674 Array<{ 675 ts: string; 676 eventName: string; 677 appKey: string; 678 Value: string; 679 }> 680> => 681 query( 682 'querySystemLocationData', 683 `SELECT 684 ( S.ts - TR.start_ts ) AS ts, 685 D.data AS eventName, 686 D2.data AS appKey, 687 group_concat( ( CASE WHEN S.type == 1 THEN S.string_value ELSE S.int_value END ), ',' ) AS Value 688 FROM 689 trace_range AS TR, 690 hisys_event_measure AS S 691 LEFT JOIN data_dict AS D ON D.id = S.name_id 692 LEFT JOIN app_name AS APP ON APP.id = S.key_id 693 LEFT JOIN data_dict AS D2 ON D2.id = APP.app_key 694 WHERE 695 D.data = 'GNSS_STATE' AND D2.data = 'STATE' 696 GROUP BY 697 S.serial, 698 APP.app_key, 699 D.data, 700 D2.data;` 701 ); 702 703export const querySystemLockData = (): Promise< 704 Array<{ 705 ts: string; 706 eventName: string; 707 appKey: string; 708 Value: string; 709 }> 710> => 711 query( 712 'querySystemLockData', 713 `SELECT 714 ( S.ts - TR.start_ts ) AS ts, 715 D.data AS eventName, 716 D2.data AS appKey, 717 group_concat(( CASE WHEN S.type == 1 THEN S.string_value ELSE S.int_value END ), ',' ) AS Value 718 FROM 719 trace_range AS TR, 720 hisys_event_measure AS S 721 LEFT JOIN data_dict AS D ON D.id = S.name_id 722 LEFT JOIN app_name AS APP ON APP.id = S.key_id 723 LEFT JOIN data_dict AS D2 ON D2.id = APP.app_key 724 WHERE 725 ( D.data = 'POWER_RUNNINGLOCK' AND D2.data in ('TAG','MESSAGE')) 726 GROUP BY 727 S.serial;` 728 ); 729 730export const querySystemAllData = (): Promise< 731 Array<{ 732 id: number; 733 eventName: string; 734 eventValue: string; 735 }> 736> => 737 query( 738 'querySystemAllData', 739 `SELECT 740 S.id, 741 D.data AS eventName, 742 contents AS eventValue 743 FROM 744 trace_range AS TR, 745 hisys_all_event AS S 746 LEFT JOIN data_dict AS D ON S.event_name_id = D.id 747 LEFT JOIN data_dict AS D2 ON S.domain_id = D2.id 748 WHERE 749 eventName IN ( 'POWER_RUNNINGLOCK', 'GNSS_STATE', 'WORK_REMOVE', 'WORK_STOP', 'WORK_ADD' );` 750 ); 751 752export const querySystemSchedulerData = (): Promise< 753 Array<{ 754 startNs: string; 755 eventName: string; 756 appKey: string; 757 Value: string; 758 }> 759> => 760 query( 761 'querySystemSchedulerData', 762 `SELECT 763 ( S.ts - TR.start_ts ) AS startNs, 764 D.data AS eventName, 765 group_concat(D2.data, ',') AS appKey, 766 group_concat( ( CASE WHEN S.type == 1 THEN S.string_value ELSE S.int_value END ), ',' ) AS Value 767 FROM 768 trace_range AS TR, 769 hisys_event_measure AS S 770 LEFT JOIN data_dict AS D ON D.id = S.name_id 771 LEFT JOIN app_name AS APP ON APP.id = S.key_id 772 LEFT JOIN data_dict AS D2 ON D2.id = APP.app_key 773 WHERE 774 D.data IN ( 'WORK_REMOVE', 'WORK_STOP', 'WORK_ADD' ) AND D2.data in ('NAME','TYPE','WORKID') 775 GROUP BY 776 S.serial;` 777 ); 778 779export const querySystemDetailsData = (rightNs: number, eventName: string): Promise<Array<SystemDetailsEnergy>> => 780 query( 781 'querySystemDetailsData', 782 `SELECT 783 ( S.ts - TR.start_ts ) AS ts, 784 D.data AS eventName, 785 D2.data AS appKey, 786 group_concat( ( CASE WHEN S.type == 1 THEN S.string_value ELSE S.int_value END ), ',' ) AS appValue 787 FROM 788 trace_range AS TR, 789 hisys_event_measure AS S 790 LEFT JOIN data_dict AS D ON D.id = S.name_id 791 LEFT JOIN app_name AS APP ON APP.id = S.key_id 792 LEFT JOIN data_dict AS D2 ON D2.id = APP.app_key 793 WHERE 794 D.data in ($eventName) 795 AND 796 D2.data in ('UID', 'TYPE', 'WORKID', 'NAME', 'INTERVAL', 'TAG', 'STATE', 'STACK', 'APPNAME', 797 'MESSAGE', 'PID', 'LOG_LEVEL') 798 AND 799 (S.ts - TR.start_ts) <= $rightNS 800 GROUP BY 801 S.serial, 802 APP.app_key, 803 D.data, 804 D2.data;`, 805 { $rightNS: rightNs, $eventName: eventName } 806 ); 807 808export const querySystemWorkData = (rightNs: number): Promise<Array<SystemDetailsEnergy>> => 809 query( 810 'querySystemWorkData', 811 `SELECT 812 ( S.ts - TR.start_ts ) AS ts, 813 D.data AS eventName, 814 D2.data AS appKey, 815 group_concat( ( CASE WHEN S.type == 1 THEN S.string_value ELSE S.int_value END ), ',' ) AS appValue 816 FROM 817 trace_range AS TR, 818 hisys_event_measure AS S 819 LEFT JOIN data_dict AS D 820 ON D.id = S.name_id 821 LEFT JOIN app_name AS APP 822 ON APP.id = S.key_id 823 LEFT JOIN data_dict AS D2 824 ON D2.id = APP.app_key 825 WHERE 826 D.data in ("WORK_REMOVE", "WORK_STOP", "WORK_ADD", "WORK_START") 827 and 828 D2.data in ('UID', 'TYPE', 'WORKID', 'NAME', 'INTERVAL', 'TAG', 'STATE', 'STACK', 'APPNAME', 829 'MESSAGE', 'PID', 'LOG_LEVEL') 830 and (S.ts - TR.start_ts) <= $rightNS 831 GROUP BY 832 S.serial, 833 APP.app_key, 834 D.data, 835 D2.data;`, 836 { $rightNS: rightNs } 837 ); 838 839export const queryMaxPowerValue = ( 840 appName: string 841): Promise< 842 Array<{ 843 maxValue: number; 844 }> 845> => 846 query( 847 'queryMaxPowerValue', 848 `SELECT 849 max( item ) AS maxValue 850 FROM 851 ( 852 SELECT 853 sum( energy + background_energy + screen_on_energy + screen_off_energy + foreground_energy ) AS item 854 FROM 855 energy 856 WHERE 857 app_name = $appName 858 GROUP BY 859 startNs);`, 860 { $appName: appName } 861 ); 862 863export const queryMaxStateValue = ( 864 eventName: string 865): Promise< 866 Array<{ 867 type: string; 868 maxValue: number; 869 }> 870> => 871 query( 872 'queryMaxStateValue', 873 `select 874 D.data as type, 875 max(S.int_value) as maxValue 876 from trace_range AS TR,hisys_event_measure as S 877 left join data_dict as D on D.id=S.name_id 878 left join app_name as APP on APP.id=S.key_id 879 left join data_dict as D2 on D2.id=APP.app_key 880 where (case when 'SENSOR_STATE'==$eventName then D.data like '%SENSOR%' else D.data = $eventName end) 881 and D2.data in ('BRIGHTNESS','STATE','VALUE','LEVEL','VOLUME','OPER_TYPE','VOLUME') 882 group by APP.app_key,D.data,D2.data;`, 883 { $eventName: eventName } 884 ); 885 886export const queryStateData = (eventName: string): Promise<Array<EnergyStateStruct>> => 887 query( 888 'queryStateData', 889 `select 890 (S.ts-TR.start_ts) as startNs, 891 D.data as type, 892 D2.data as appKey, 893 S.int_value as value 894 from trace_range AS TR,hisys_event_measure as S 895 left join data_dict as D on D.id=S.name_id 896 left join app_name as APP on APP.id=S.key_id 897 left join data_dict as D2 on D2.id=APP.app_key 898 where (case when 'SENSOR_STATE'==$eventName then D.data like '%SENSOR%' else D.data = $eventName end) 899 and D2.data in ('BRIGHTNESS','STATE','VALUE','LEVEL','VOLUME','OPER_TYPE','VOLUME') 900 group by S.serial,APP.app_key,D.data,D2.data;`, 901 { $eventName: eventName } 902 ); 903 904export const queryEnergyAppName = (): Promise< 905 Array<{ 906 string_value: string | null; 907 }> 908> => 909 query( 910 'queryEnergyAppName', 911 ` 912 SELECT 913 DISTINCT hisys_event_measure.string_value from data_dict 914 left join app_name on app_name.app_key=data_dict.id 915 left join hisys_event_measure on hisys_event_measure.key_id = app_name.id 916 where data_dict.data = "APPNAME"` 917 ); 918 919export const getTabIoCompletionTimesType = (startTime: number, endTime: number): Promise<Array<string>> => 920 query( 921 'getTabIoCompletionTimesType', 922 ` 923 SELECT tier from bio_latency_sample s,trace_range t 924 WHERE s.start_ts + s.latency_dur >= $startTime + t.start_ts 925 and s.start_ts <= $endTime + t.start_ts group by tier`, 926 { $startTime: startTime, $endTime: endTime } 927 ); 928 929export const queryEnergyEventExits = (): //@ts-ignore 930Promise<Array<unknown>> => 931 query( 932 'queryEnergyEventExits', 933 `select 934 event_name 935 from stat s 936 where s.event_name = 'trace_hisys_event' 937 and s.stat_type ='received' and s.count > 0` 938 ); 939 940export const querySysLockDetailsData = (rightNs: number, eventName: string): Promise<Array<SystemDetailsEnergy>> => 941 query( 942 'querySysLockDetailsData', 943 `SELECT 944 ( S.ts - TR.start_ts ) AS ts, 945 D.data AS eventName, 946 D2.data AS appKey, 947 group_concat( ( CASE WHEN S.type == 1 THEN S.string_value ELSE S.int_value END ), ',' ) AS appValue 948 FROM 949 trace_range AS TR, 950 hisys_event_measure AS S 951 LEFT JOIN data_dict AS D ON D.id = S.name_id 952 LEFT JOIN app_name AS APP ON APP.id = S.key_id 953 LEFT JOIN data_dict AS D2 ON D2.id = APP.app_key 954 WHERE 955 D.data in ($eventName) 956 AND 957 D2.data in ('UID', 'TYPE', 'WORKID', 'NAME', 'INTERVAL', 'TAG', 'STATE', 'STACK', 'APPNAME', 958 'MESSAGE', 'PID', 'LOG_LEVEL') 959 AND 960 (S.ts - TR.start_ts) <= $rightNS 961 GROUP BY 962 S.serial, APP.app_key, D.data, D2.data;`, 963 { $rightNS: rightNs, $eventName: eventName } 964 ); 965 966export const queryStateInitValue = (eventName: string, keyName: string): Promise<Array<EnergyStateStruct>> => 967 query( 968 'queryStateInitValue', 969 `select 970 0 as startNs, 971 $eventName as type, 972 '' as appKey, 973 (case $keyName 974 when 'brightness' then device_state.brightness 975 when 'wifi' then device_state.wifi 976 when 'bt_state' then device_state.bt_state 977 when 'location' then device_state.location 978 else 0 end) as value 979 from device_state;`, 980 { $eventName: eventName, $keyName: keyName } 981 ); 982 983export const querySysLocationDetailsData = (rightNs: number, eventName: string): Promise<Array<SystemDetailsEnergy>> => 984 query( 985 'querySysLocationDetailsData', 986 `SELECT 987 ( S.ts - TR.start_ts ) AS ts, 988 D.data AS eventName, 989 D2.data AS appKey, 990 group_concat( ( CASE WHEN S.type == 1 THEN S.string_value ELSE S.int_value END ), ',' ) AS appValue 991 FROM 992 trace_range AS TR, 993 hisys_event_measure AS S 994 LEFT JOIN data_dict AS D ON D.id = S.name_id 995 LEFT JOIN app_name AS APP ON APP.id = S.key_id 996 LEFT JOIN data_dict AS D2 ON D2.id = APP.app_key 997 WHERE 998 D.data in ($eventName) 999 and 1000 D2.data in ('UID', 'TYPE', 'WORKID', 'NAME', 'INTERVAL', 'TAG', 'STATE', 'STACK', 1001 'APPNAME', 'MESSAGE', 'PID', 'LOG_LEVEL') 1002 and (S.ts - TR.start_ts) <= $rightNS 1003 GROUP BY 1004 S.serial, 1005 APP.app_key, 1006 D.data, 1007 D2.data;`, 1008 { $rightNS: rightNs, $eventName: eventName } 1009 ); 1010export const queryConfigEnergyAppName = (): Promise< 1011 Array<{ 1012 process_name: string; 1013 }> 1014> => 1015 query( 1016 'queryConfigEnergyAppName', 1017 ` 1018 SELECT value from trace_config where trace_source = 'hisys_event' and key = 'process_name'` 1019 ); 1020 1021export const queryAllExpectedData = (): //@ts-ignore 1022Promise<Array<unknown>> => 1023 query( 1024 'queryAllExpectedData', 1025 ` 1026 SELECT 1027 a.id, 1028 (a.ts - TR.start_ts) AS ts, 1029 a.vsync as name, 1030 a.type, 1031 a.dur, 1032 p.pid, 1033 p.name as cmdline 1034 FROM frame_slice AS a, trace_range AS TR 1035 LEFT JOIN process AS p ON a.ipid = p.ipid 1036 WHERE a.type = 1 1037 and (a.flag <> 2 or a.flag is null) 1038 ORDER BY a.ipid,ts;` 1039 ); 1040 1041export const queryFlowsData = ( 1042 src_slice: Array<string> 1043): //@ts-ignore 1044Promise<Array<unknown>> => 1045 query( 1046 'queryFlowsData', 1047 ` 1048 SELECT fs.vsync AS name, 1049 p.pid, 1050 p.name AS cmdline, 1051 fs.type 1052 FROM frame_slice AS fs 1053 LEFT JOIN process AS p ON fs.ipid = p.ipid 1054 WHERE fs.type = 0 1055 AND fs.id IN (${src_slice.join(',')});` 1056 ); 1057 1058export const queryPrecedingData = ( 1059 dst_slice: string 1060): //@ts-ignore 1061Promise<Array<unknown>> => 1062 query( 1063 'queryFlowsData', 1064 ` 1065 SELECT a.vsync AS name, 1066 p.pid, 1067 p.name AS cmdline, 1068 a.type 1069 FROM frame_slice AS a 1070 LEFT JOIN process AS p ON a.ipid = p.ipid 1071 WHERE a.type = 0 1072 AND a.id = $dst_slice;`, 1073 { $dst_slice: dst_slice } 1074 ); 1075 1076export const queryFrameTimeData = (): //@ts-ignore 1077Promise<Array<unknown>> => 1078 query( 1079 'queryFrameTimeData', 1080 ` 1081 SELECT DISTINCT p.pid 1082 FROM frame_slice AS a 1083 LEFT JOIN process AS p 1084 ON a.ipid = p.ipid;` 1085 ); 1086 1087export const queryAllSnapshotNames = (): Promise<Array<FileInfo>> => 1088 query( 1089 'queryAllSnapshotNames', 1090 `SELECT f.id, 1091 f.file_name AS name 1092 FROM 1093 js_heap_files f, 1094 trace_range t 1095 WHERE 1096 ( t.end_ts >= f.end_time AND f.file_name != 'Timeline' ) 1097 OR f.file_name = 'Timeline'` 1098 ); 1099export const queryHeapFile = (): Promise<Array<FileInfo>> => 1100 query( 1101 'queryHeapFile', 1102 `SELECT f.id, 1103 f.file_name AS name, 1104 f.start_time - t.start_ts AS startTs, 1105 f.end_time - t.start_ts AS endTs, 1106 f.self_size AS size, 1107 c.pid 1108 FROM 1109 js_heap_files f, 1110 trace_range t, 1111 js_config c 1112 WHERE 1113 ( t.end_ts >= f.end_time AND f.file_name != 'Timeline' ) 1114 OR f.file_name = 'Timeline'` 1115 ); 1116 1117export const queryHeapInfo = ( 1118 fileId: number 1119): //@ts-ignore 1120Promise<Array<unknown>> => 1121 query( 1122 'queryHeapInfo', 1123 `SELECT file_id as fileId, key, type, int_value as intValue, str_value as strValue 1124 FROM js_heap_info WHERE file_id = ${fileId}` 1125 ); 1126 1127export const queryHeapNode = (fileId: number): Promise<Array<HeapNode>> => 1128 query( 1129 'queryHeapNode', 1130 `SELECT 1131 node_index as nodeIndex, 1132 type, 1133 name as nameIdx, 1134 id, 1135 self_size as selfSize, 1136 edge_count as edgeCount, 1137 trace_node_id as traceNodeId, 1138 detachedness 1139 FROM js_heap_nodes WHERE file_id = ${fileId}` 1140 ); 1141 1142export const queryHeapEdge = (fileId: number): Promise<Array<HeapEdge>> => 1143 query( 1144 'queryHeapEdge', 1145 `SELECT 1146 edge_index as edgeIndex, 1147 type, 1148 name_or_index as nameOrIndex, 1149 to_node as nodeId, 1150 from_node_id as fromNodeId, 1151 to_node_id as toNodeId 1152 FROM js_heap_edges WHERE file_id = ${fileId}` 1153 ); 1154export const queryHeapSample = (fileId: number): Promise<Array<HeapSample>> => 1155 query( 1156 'queryHeapSample', 1157 `SELECT timestamp_us as timestamp , last_assigned_id as lastAssignedId, 0 as size 1158 FROM js_heap_sample WHERE file_id = ${fileId}` 1159 ); 1160 1161export const queryHeapLocation = (fileId: number): Promise<Array<HeapLocation>> => 1162 query( 1163 'queryHeapLocation', 1164 `SELECT object_index as objectIndex,script_id as scriptId ,column 1165 FROM js_heap_location WHERE file_id = ${fileId}` 1166 ); 1167 1168export const queryHeapString = ( 1169 fileId: number 1170): //@ts-ignore 1171Promise<Array<unknown>> => 1172 query( 1173 'queryHeapString', 1174 `SELECT string 1175 FROM js_heap_string WHERE file_id = ${fileId}` 1176 ); 1177export const queryTraceRange = (): Promise<Array<unknown>> => 1178 query( 1179 'queryTraceRange', 1180 `SELECT 1181 t.start_ts as startTs, 1182 t.end_ts as endTs 1183 FROM trace_range t` 1184 ); 1185 1186export const queryBySelectAllocationOrReturn = ( 1187 executeId: string, 1188 itid: number 1189): Promise< 1190 Array<{ 1191 tid: number; 1192 allocation_task_row: number; 1193 execute_task_row: number; 1194 return_task_row: number; 1195 priority: number; 1196 }> 1197> => { 1198 let sqlStr = `SELECT thread.tid, 1199 task_pool.allocation_task_row, 1200 task_pool.execute_task_row, 1201 task_pool.return_task_row, 1202 task_pool.priority 1203 FROM task_pool 1204 LEFT JOIN callstack ON callstack.id = task_pool.execute_task_row 1205 LEFT JOIN thread ON thread.id = callstack.callid 1206 WHERE task_pool.execute_task_row IS NOT NULL AND task_pool.task_id = $executeId 1207 AND task_pool.allocation_itid = $itid; 1208 `; 1209 return query('queryBySelectAllocationOrReturn', sqlStr, { $executeId: executeId, $itid: itid }); 1210}; 1211 1212export const queryTaskListByExecuteTaskIds = ( 1213 executeTaskIds: Array<number>, 1214 ipid: number 1215): Promise<Array<TaskTabStruct>> => { 1216 let sqlStr = ` 1217 SELECT thread.ipid, 1218 task_pool.allocation_task_row AS allocationTaskRow, 1219 task_pool.execute_task_row AS executeTaskRow, 1220 task_pool.return_task_row AS returnTaskRow, 1221 task_pool.task_id AS executeId, 1222 task_pool.priority 1223 FROM task_pool 1224 LEFT JOIN callstack ON callstack.id = task_pool.allocation_task_row 1225 LEFT JOIN thread ON thread.id = callstack.callid 1226 WHERE task_pool.task_id IN (${executeTaskIds.join(',')}) 1227 AND thread.ipid = $ipid 1228 AND task_pool.execute_task_row IS NOT NULL; 1229 `; 1230 return query('queryTaskListByExecuteTaskIds', sqlStr, { $executeTaskIds: executeTaskIds, $ipid: ipid }); 1231}; 1232 1233export const queryTaskPoolCallStack = (): Promise<Array<{ id: number; ts: number; dur: number; name: string }>> => { 1234 let sqlStr = ` 1235 select 1236 * 1237 from callstack where name like 'H:Task%';`; 1238 return query('queryTaskPoolCallStack', sqlStr, {}); 1239}; 1240 1241export const queryTaskPoolTotalNum = (itid: number): Promise<number[]> => 1242 query<number>( 1243 'queryTaskPoolTotalNum', 1244 `SELECT thread.tid 1245 FROM thread 1246 LEFT JOIN callstack ON thread.id = callstack.callid 1247 WHERE ipid in (SELECT thread.ipid 1248 FROM thread 1249 WHERE thread.itid = $itid) 1250 AND thread.name LIKE '%TaskWork%' 1251 GROUP BY thread.tid;`, 1252 { $itid: itid } 1253 ); 1254 1255export const queryFrameAnimationData = (): Promise<Array<FrameAnimationStruct>> => 1256 query( 1257 'queryFrameAnimationData', 1258 `SELECT a.id AS animationId, 1259 'Response delay' as status, 1260 (CASE WHEN a.input_time NOT NULL 1261 THEN ( a.input_time - R.start_ts ) 1262 ELSE ( a.start_point - R.start_ts ) END 1263 ) AS startTs, 1264 (a.start_point - R.start_ts) AS endTs, 1265 0 AS frameInfo, 1266 a.name AS name 1267 FROM 1268 animation AS a, 1269 trace_range AS R 1270 UNION 1271 SELECT a.id AS animationId, 1272 'Completion delay' as status, 1273 (CASE WHEN a.input_time NOT NULL 1274 THEN ( a.input_time - R.start_ts ) 1275 ELSE ( a.start_point - R.start_ts ) END 1276 ) AS startTs, 1277 (a.end_point - R.start_ts) AS endTs, 1278 a.frame_info AS frameInfo, 1279 a.name AS name 1280 FROM 1281 animation AS a, 1282 trace_range AS R 1283 ORDER BY 1284 endTs;` 1285 ); 1286 1287export const queryAnimationTimeRangeData = (): Promise<Array<FrameAnimationStruct>> => 1288 query( 1289 'queryAnimationTimeRangeData', 1290 `SELECT 'Response delay' as status, 1291 (CASE WHEN a.input_time NOT NULL 1292 THEN ( a.input_time - R.start_ts ) 1293 ELSE ( a.start_point - R.start_ts ) END 1294 ) AS startTs, 1295 (a.start_point - R.start_ts) AS endTs 1296 FROM 1297 animation AS a, 1298 trace_range AS R 1299 UNION 1300 SELECT 'Completion delay' as status, 1301 (CASE WHEN a.input_time NOT NULL 1302 THEN ( a.input_time - R.start_ts ) 1303 ELSE ( a.start_point - R.start_ts ) END 1304 ) AS startTs, 1305 (a.end_point - R.start_ts) AS endTs 1306 FROM 1307 animation AS a, 1308 trace_range AS R 1309 ORDER BY 1310 endTs;` 1311 ); 1312 1313export const queryFrameDynamicData = (): Promise<FrameDynamicStruct[]> => 1314 query( 1315 'queryFrameDynamicData', 1316 `SELECT d.id, 1317 d.x, 1318 d.y, 1319 d.width, 1320 d.height, 1321 d.alpha, 1322 d.name AS appName, 1323 (d.end_time - R.start_ts) AS ts 1324 FROM 1325 dynamic_frame AS d, 1326 trace_range AS R 1327 ORDER BY 1328 d.end_time;` 1329 ); 1330 1331export const queryDynamicIdAndNameData = (): Promise<Array<{ id: number; appName: string }>> => 1332 query('queryDynamicIdAndNameData', 'SELECT id, name AS appName FROM dynamic_frame;'); 1333 1334export const queryAnimationIdAndNameData = (): Promise< 1335 Array<{ 1336 id: number; 1337 name: string; 1338 info: string; 1339 }> 1340> => query('queryAnimationIdAndNameData', 'SELECT id, name, frame_info as info FROM animation;'); 1341 1342export const queryFrameApp = (): Promise< 1343 Array<{ 1344 name: string; 1345 }> 1346> => 1347 query( 1348 'queryFrameApp', 1349 `SELECT 1350 DISTINCT d.name 1351 FROM 1352 dynamic_frame AS d, 1353 trace_range AS R 1354 WHERE 1355 d.end_time >= R.start_ts 1356 AND 1357 d.end_time <= R.end_ts;` 1358 ); 1359 1360export const queryFrameSpacing = (): Promise<Array<FrameSpacingStruct>> => 1361 query( 1362 'queryFrameSpacing', 1363 `SELECT d.id, 1364 d.width AS currentFrameWidth, 1365 d.height AS currentFrameHeight, 1366 d.name AS nameId, 1367 (d.end_time - R.start_ts) AS currentTs, 1368 d.x, 1369 d.y 1370 FROM 1371 dynamic_frame AS d, 1372 trace_range AS R 1373 ORDER BY 1374 d.end_time;` 1375 ); 1376 1377export const queryPhysicalData = (): Promise<Array<DeviceStruct>> => 1378 query( 1379 'queryPhysicalData', 1380 `SELECT physical_width AS physicalWidth, 1381 physical_height AS physicalHeight, 1382 physical_frame_rate AS physicalFrameRate 1383 FROM device_info;` 1384 ); 1385export const getSystemLogsData = (): Promise< 1386 Array<{ 1387 id: number; 1388 ts: number; 1389 processName: string; 1390 tid: number; 1391 level: string; 1392 tag: string; 1393 message: string; 1394 des: number; 1395 }> 1396> => 1397 query( 1398 'getSystemLogsData', 1399 `SELECT ROW_NUMBER() OVER (ORDER BY l.ts) AS processName, 1400 l.seq AS id, 1401 (l.ts - TR.start_ts) AS ts, 1402 l.pid AS indexs, 1403 l.tid, 1404 l.level, 1405 l.tag, 1406 l.context AS message, 1407 l.origints AS des 1408 FROM trace_range AS TR, 1409 log AS l 1410 ORDER BY ts` 1411 ); 1412 1413export const queryLogData = (): Promise<Array<LogStruct>> => 1414 query( 1415 'queryLogData', 1416 `SELECT 1417 l.ts - tr.start_ts as startNs 1418 FROM log AS l, trace_range tr WHERE startNs > 0 LIMIT 1;` 1419 ); 1420 1421export const queryMetric = (metricName: string): Promise<Array<string>> => 1422 query('queryMetric', metricName, '', { action: 'exec-metric' }); 1423 1424export const queryExistFtrace = (): Promise<Array<number>> => 1425 query( 1426 'queryExistFtrace', 1427 `select 1 from thread_state 1428 UNION 1429 select 1 from args;` 1430 ); 1431 1432export const queryTraceType = (): Promise< 1433 Array<{ 1434 value: string; 1435 }> 1436> => 1437 query( 1438 'queryTraceType', 1439 `SELECT m.value 1440 FROM 1441 meta AS m 1442 WHERE 1443 m.name = 'source_type';` 1444 ); 1445 1446export const queryLogAllData = (oneDayTime: number, leftNs: number, rightNs: number): Promise<Array<LogStruct>> => 1447 query( 1448 'queryLogAllData', 1449 `SELECT l.seq AS id, 1450 CASE 1451 WHEN l.ts < ${oneDayTime} THEN 0 1452 ELSE (l.ts - TR.start_ts) 1453 END AS startTs, 1454 CASE l.level 1455 WHEN 'D' THEN 'Debug' 1456 WHEN 'I' THEN 'Info' 1457 WHEN 'W' THEN 'Warn' 1458 WHEN 'E' THEN 'Error' 1459 WHEN 'F' THEN 'Fatal' 1460 END AS level, 1461 l.tag AS tag, 1462 l.context AS context, 1463 (strftime( '%m-%d %H:%M:%S', l.origints / 1000000000, 'unixepoch', 'localtime' ) || 1464 '.' || printf('%03d', (l.origints / 1000000) % 1000)) AS originTime, 1465 COALESCE(p.name, 'Process ' || l.pid) AS processName 1466 FROM 1467 log AS l 1468 LEFT JOIN trace_range AS TR ON l.ts >= TR.start_ts 1469 LEFT JOIN process AS p ON p.pid = l.pid 1470 WHERE 1471 startTs >= ${Math.floor(leftNs)} 1472 AND startTs <= ${Math.floor(rightNs)} 1473 ORDER BY 1474 l.ts;`, 1475 { $oneDayTime: oneDayTime } 1476 ); 1477 1478export const queryFpsSourceList = ( 1479 inputTime: number, 1480 endTime: number, 1481 name: string 1482): Promise< 1483 Array<{ 1484 name: string; 1485 ts: number; 1486 dur: number; 1487 pid: number; 1488 tid: number; 1489 depth: number; 1490 }> 1491> => 1492 query( 1493 'queryFpsSourceList', 1494 `SELECT t.tid, 1495 c.dur, 1496 c.depth, 1497 c.ts, 1498 c.name 1499 FROM 1500 callstack c 1501 INNER JOIN thread t ON c.callid = t.itid 1502 WHERE 1503 c.name LIKE '%${name}%' 1504 AND 1505 c.ts BETWEEN ${inputTime} and ${endTime} 1506 AND 1507 t.name = 'render_service';` 1508 ); 1509 1510export const queryStateFreqList = ( 1511 startTime: number, 1512 endTime: number, 1513 cpu: number 1514): //@ts-ignore 1515Promise<Array<unknown>> => { 1516 let sql = `select c.value, 1517 c.ts, 1518 c.dur, 1519 c.ts - r.start_ts AS startTime, 1520 c.ts - r.start_ts + c.dur AS endTime 1521 from 1522 measure c, trace_range r 1523 inner join 1524 cpu_measure_filter t 1525 on 1526 c.filter_id = t.id 1527 where 1528 (name = 'cpufreq' or name='cpu_frequency') 1529 and 1530 t.cpu = $cpu 1531 and 1532 (((startTime < $startTime) and (endtime > $endTime)) 1533 or ((startTime < $startTime) and ($startTime < endtime and endtime < $endTime)) 1534 or ((startTime > $startTime) and ( $startTime < endtime and endtime < $endTime)) 1535 or ((startTime > $startTime and startTime < $endTime) and (endtime > $endTime)))`; 1536 return query('queryBinderByArgsId', sql, { 1537 $endTime: endTime, 1538 $startTime: startTime, 1539 $cpu: cpu, 1540 }); 1541}; 1542export const queryPerfOutputData = (): Promise<Array<unknown>> => 1543 query( 1544 'queryPerfOutputData', 1545 `SELECT 1546 name, 1547 ts 1548 FROM callstack where name like '%PERFORMANCE_DATA%'` 1549 ); 1550 1551export const queryPerfToolsDur = (): Promise<Array<unknown>> => 1552 query( 1553 'queryPerfToolsDur', 1554 `SELECT 1555 name, 1556 ts, 1557 dur 1558 FROM callstack where name = 'H:GRAB'` 1559 ); 1560