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 ); 1312export const querySourceTypen = (): Promise<Array<unknown>> => 1313 query( 1314 'querySourceTypen', 1315 `SELECT 1316 value 1317 FROM 1318 meta 1319 where 1320 name = 'source_type' 1321 ` 1322 ); 1323 1324export const queryFrameDynamicData = (): Promise<FrameDynamicStruct[]> => 1325 query( 1326 'queryFrameDynamicData', 1327 `SELECT d.id, 1328 d.x, 1329 d.y, 1330 d.width, 1331 d.height, 1332 d.alpha, 1333 d.name AS appName, 1334 (d.end_time - R.start_ts) AS ts 1335 FROM 1336 dynamic_frame AS d, 1337 trace_range AS R 1338 ORDER BY 1339 d.end_time;` 1340 ); 1341 1342export const queryDynamicIdAndNameData = (): Promise<Array<{ id: number; appName: string }>> => 1343 query('queryDynamicIdAndNameData', 'SELECT id, name AS appName FROM dynamic_frame;'); 1344 1345export const queryAnimationIdAndNameData = (): Promise< 1346 Array<{ 1347 id: number; 1348 name: string; 1349 info: string; 1350 }> 1351> => query('queryAnimationIdAndNameData', 'SELECT id, name, frame_info as info FROM animation;'); 1352 1353export const queryFrameApp = (): Promise< 1354 Array<{ 1355 name: string; 1356 }> 1357> => 1358 query( 1359 'queryFrameApp', 1360 `SELECT 1361 DISTINCT d.name 1362 FROM 1363 dynamic_frame AS d, 1364 trace_range AS R 1365 WHERE 1366 d.end_time >= R.start_ts 1367 AND 1368 d.end_time <= R.end_ts;` 1369 ); 1370 1371export const queryFrameSpacing = (): Promise<Array<FrameSpacingStruct>> => 1372 query( 1373 'queryFrameSpacing', 1374 `SELECT d.id, 1375 d.width AS currentFrameWidth, 1376 d.height AS currentFrameHeight, 1377 d.name AS nameId, 1378 (d.end_time - R.start_ts) AS currentTs, 1379 d.x, 1380 d.y 1381 FROM 1382 dynamic_frame AS d, 1383 trace_range AS R 1384 ORDER BY 1385 d.end_time;` 1386 ); 1387 1388export const queryPhysicalData = (): Promise<Array<DeviceStruct>> => 1389 query( 1390 'queryPhysicalData', 1391 `SELECT physical_width AS physicalWidth, 1392 physical_height AS physicalHeight, 1393 physical_frame_rate AS physicalFrameRate 1394 FROM device_info;` 1395 ); 1396export const getSystemLogsData = (): Promise< 1397 Array<{ 1398 id: number; 1399 ts: number; 1400 processName: string; 1401 tid: number; 1402 level: string; 1403 tag: string; 1404 message: string; 1405 des: number; 1406 }> 1407> => 1408 query( 1409 'getSystemLogsData', 1410 `SELECT ROW_NUMBER() OVER (ORDER BY l.ts) AS processName, 1411 l.seq AS id, 1412 (l.ts - TR.start_ts) AS ts, 1413 l.pid AS indexs, 1414 l.tid, 1415 l.level, 1416 l.tag, 1417 l.context AS message, 1418 l.origints AS des 1419 FROM trace_range AS TR, 1420 log AS l 1421 ORDER BY ts` 1422 ); 1423 1424export const queryLogData = (): Promise<Array<LogStruct>> => 1425 query( 1426 'queryLogData', 1427 `SELECT 1428 l.ts - tr.start_ts as startNs 1429 FROM log AS l, trace_range tr WHERE startNs > 0 LIMIT 1;` 1430 ); 1431 1432export const queryMetric = (metricName: string): Promise<Array<string>> => 1433 query('queryMetric', metricName, '', { action: 'exec-metric' }); 1434 1435export const queryExistFtrace = (): Promise<Array<number>> => 1436 query( 1437 'queryExistFtrace', 1438 `select 1 from thread_state 1439 UNION 1440 select 1 from args;` 1441 ); 1442 1443export const queryTraceType = (): Promise< 1444 Array<{ 1445 value: string; 1446 }> 1447> => 1448 query( 1449 'queryTraceType', 1450 `SELECT m.value 1451 FROM 1452 meta AS m 1453 WHERE 1454 m.name = 'source_type';` 1455 ); 1456 1457export const queryLogAllData = (oneDayTime: number, leftNs: number, rightNs: number): Promise<Array<LogStruct>> => 1458 query( 1459 'queryLogAllData', 1460 `SELECT l.seq AS id, 1461 CASE 1462 WHEN l.ts < ${oneDayTime} THEN 0 1463 ELSE (l.ts - TR.start_ts) 1464 END AS startTs, 1465 CASE l.level 1466 WHEN 'D' THEN 'Debug' 1467 WHEN 'I' THEN 'Info' 1468 WHEN 'W' THEN 'Warn' 1469 WHEN 'E' THEN 'Error' 1470 WHEN 'F' THEN 'Fatal' 1471 END AS level, 1472 l.tag AS tag, 1473 l.context AS context, 1474 (strftime( '%m-%d %H:%M:%S', l.origints / 1000000000, 'unixepoch', 'localtime' ) || 1475 '.' || printf('%03d', (l.origints / 1000000) % 1000)) AS originTime, 1476 COALESCE(p.name, 'Process ' || l.pid) AS processName 1477 FROM 1478 log AS l 1479 LEFT JOIN trace_range AS TR ON l.ts >= TR.start_ts 1480 LEFT JOIN process AS p ON p.pid = l.pid 1481 WHERE 1482 startTs >= ${Math.floor(leftNs)} 1483 AND startTs <= ${Math.floor(rightNs)} 1484 ORDER BY 1485 l.ts;`, 1486 { $oneDayTime: oneDayTime } 1487 ); 1488 1489export const queryFpsSourceList = ( 1490 inputTime: number, 1491 endTime: number, 1492 name: string 1493): Promise< 1494 Array<{ 1495 name: string; 1496 ts: number; 1497 dur: number; 1498 pid: number; 1499 tid: number; 1500 depth: number; 1501 }> 1502> => 1503 query( 1504 'queryFpsSourceList', 1505 `SELECT t.tid, 1506 c.dur, 1507 c.depth, 1508 c.ts, 1509 c.name 1510 FROM 1511 callstack c 1512 INNER JOIN thread t ON c.callid = t.itid 1513 WHERE 1514 c.name LIKE '%${name}%' 1515 AND 1516 c.ts BETWEEN ${inputTime} and ${endTime} 1517 AND 1518 t.name = 'render_service';` 1519 ); 1520 1521export const queryStateFreqList = ( 1522 startTime: number, 1523 endTime: number, 1524 cpu: number 1525): //@ts-ignore 1526Promise<Array<unknown>> => { 1527 let sql = `select c.value, 1528 c.ts, 1529 c.dur, 1530 c.ts - r.start_ts AS startTime, 1531 c.ts - r.start_ts + c.dur AS endTime 1532 from 1533 measure c, trace_range r 1534 inner join 1535 cpu_measure_filter t 1536 on 1537 c.filter_id = t.id 1538 where 1539 (name = 'cpufreq' or name='cpu_frequency') 1540 and 1541 t.cpu = $cpu 1542 and 1543 (((startTime < $startTime) and (endtime > $endTime)) 1544 or ((startTime < $startTime) and ($startTime < endtime and endtime < $endTime)) 1545 or ((startTime > $startTime) and ( $startTime < endtime and endtime < $endTime)) 1546 or ((startTime > $startTime and startTime < $endTime) and (endtime > $endTime)))`; 1547 return query('queryBinderByArgsId', sql, { 1548 $endTime: endTime, 1549 $startTime: startTime, 1550 $cpu: cpu, 1551 }); 1552}; 1553export const queryPerfOutputData = (): Promise<Array<unknown>> => 1554 query( 1555 'queryPerfOutputData', 1556 `SELECT 1557 name, 1558 ts 1559 FROM callstack where name like '%PERFORMANCE_DATA%'` 1560 ); 1561 1562export const queryPerfToolsDur = (): Promise<Array<unknown>> => 1563 query( 1564 'queryPerfToolsDur', 1565 `SELECT 1566 name, 1567 ts, 1568 dur 1569 FROM callstack where name = 'H:GRAB'` 1570 ); 1571