From 64d0a8cae38f8596485aba62ff099f4f83618722 Mon Sep 17 00:00:00 2001 From: wangziyi Date: Thu, 23 Nov 2023 18:46:56 +0800 Subject: [PATCH 1/2] modify rate line Signed-off-by: wangziyi --- ide/src/trace/component/SpSystemTrace.ts | 9 -- .../trace/component/trace/base/RangeSelect.ts | 32 +++-- .../trace/component/trace/base/TraceRow.ts | 11 +- ide/src/trace/database/SqlLite.ts | 118 +++++++++--------- .../ui-worker/ProcedureWorkerCommon.ts | 17 ++- 5 files changed, 99 insertions(+), 88 deletions(-) diff --git a/ide/src/trace/component/SpSystemTrace.ts b/ide/src/trace/component/SpSystemTrace.ts index 956d81aaa..e9d15c658 100644 --- a/ide/src/trace/component/SpSystemTrace.ts +++ b/ide/src/trace/component/SpSystemTrace.ts @@ -1384,15 +1384,6 @@ export class SpSystemTrace extends BaseElement { } this.timerShaftEL!.selectionList.push(selection); // 保持选中对象,为后面的再次选中该框选区域做准备。 this.selectionParam = selection; - - let currentRangeTid: Array = this.selectionParam.funTids - // 如果只框选了一个方法行 - if (currentRangeTid.length === 1) { - TraceRow.currentRowId = currentRangeTid[0] - setTimeout(() => { - this.refreshCanvas(true) - }, 50); - } }; // @ts-ignore new ResizeObserver((entries) => { diff --git a/ide/src/trace/component/trace/base/RangeSelect.ts b/ide/src/trace/component/trace/base/RangeSelect.ts index 06220d927..4246a5d55 100644 --- a/ide/src/trace/component/trace/base/RangeSelect.ts +++ b/ide/src/trace/component/trace/base/RangeSelect.ts @@ -81,17 +81,24 @@ export class RangeSelect { this.selectHandler(this.rangeTraceRow || [], !this.isHover); } //如果只框选了一条泳道,查询H:RSMainThread::DoComposition数据 - if (this.rangeTraceRow?.length === 1) { - querySearchRowFuncData('H:RSMainThread::DoComposition', TraceRow.currentRowId!).then((res) => { - if (res.length) { + let docompositionData: Array = [] + if (this.rangeTraceRow) { + this.rangeTraceRow.forEach((row) => { + row.docompositionList = []; + }); + docompositionData = [] + if (this.rangeTraceRow.length === 1 && this.rangeTraceRow[0]?.getAttribute('row-type') === 'func') { + querySearchRowFuncData( + 'H:RSMainThread::DoComposition', + Number(this.rangeTraceRow[0]?.getAttribute('row-id')), + TraceRow.rangeSelectObject!.startNS!, + TraceRow.rangeSelectObject!.endNS!, + ).then((res) => { res.forEach((item) => { - TraceRow.docompositionData.push(item.startTime!); - }); - } - }) - } else { - if (TraceRow.docompositionData.length) { - TraceRow.docompositionData = [] + docompositionData.push(item.startTime!) + }) + this.rangeTraceRow![0].docompositionList = docompositionData; + }); } } } @@ -230,6 +237,11 @@ export class RangeSelect { return false; } }); + if (this.rangeTraceRow && this.rangeTraceRow.length) { + this.rangeTraceRow!.forEach((row) => { + row.docompositionList = []; + }); + } this.timerShaftEL!.sportRuler!.isRangeSelect = this.rangeTraceRow?.length > 0; this.timerShaftEL!.sportRuler!.draw(); } diff --git a/ide/src/trace/component/trace/base/TraceRow.ts b/ide/src/trace/component/trace/base/TraceRow.ts index 41cf9d28a..e845dc9b6 100644 --- a/ide/src/trace/component/trace/base/TraceRow.ts +++ b/ide/src/trace/component/trace/base/TraceRow.ts @@ -121,8 +121,6 @@ export class TraceRow extends HTMLElement { static range: TimeRange | undefined | null; static rangeSelectObject: RangeSelectStruct | undefined; static ROW_TYPE_HI_SYSEVENT = 'hi-sysevent'; - static docompositionData: Array = []; // 存储查询到的docomposition数据 - static currentRowId: number | undefined; // 存储当前行id public obj: TraceRowObject | undefined | null; isHover: boolean = false; hoverX: number = 0; @@ -174,6 +172,7 @@ export class TraceRow extends HTMLElement { childrenList: Array> = []; parentRowEl: TraceRow | undefined; _rowSettingList: Array | null | undefined; + _docompositionList: Array | undefined; focusHandler?: (ev: MouseEvent) => void | undefined; findHoverStruct?: () => void | undefined; @@ -415,6 +414,14 @@ export class TraceRow extends HTMLElement { ); } + get docompositionList(): Array | undefined { + return this._docompositionList; + } + + set docompositionList(value: Array | undefined) { + this._docompositionList = value; + } + childRowToFragment(expansion: boolean): void { for (const childrenRow of this.childrenList) { if (!childrenRow.collect) { diff --git a/ide/src/trace/database/SqlLite.ts b/ide/src/trace/database/SqlLite.ts index 75c4132d6..527b02014 100644 --- a/ide/src/trace/database/SqlLite.ts +++ b/ide/src/trace/database/SqlLite.ts @@ -947,7 +947,7 @@ export const getTabThreadStatesDetail = (tIds: Array, leftNS: number, ri { $leftNS: leftNS, $rightNS: rightNS } ); // 查询线程状态信息 - export const getTabThreadStates = (tIds: Array, leftNS: number, rightNS: number): Promise> => +export const getTabThreadStates = (tIds: Array, leftNS: number, rightNS: number): Promise> => query( 'getTabThreadStates', ` @@ -973,11 +973,11 @@ export const getTabThreadStatesDetail = (tIds: Array, leftNS: number, ri { $leftNS: leftNS, $rightNS: rightNS } ); - // 框选区域内running的时间 +// 框选区域内running的时间 export const getTabRunningPersent = (tIds: Array, leftNS: number, rightNS: number): Promise> => -query( - 'getTabRunningPersent', - ` + query( + 'getTabRunningPersent', + ` select B.pid, B.tid, @@ -997,13 +997,13 @@ query( not ((B.ts - TR.start_ts + ifnull(B.dur,0) < ${leftNS}) or (B.ts - TR.start_ts > ${rightNS})) order by ts;`, - { $leftNS: leftNS, $rightNS: rightNS } -); + { $leftNS: leftNS, $rightNS: rightNS } + ); // 框选区域内sleeping的时间 -export const getTabSleepingTime=(tIds: Array, leftNS: number, rightNS: number): Promise>=> -query( -'getTabRunningPersent', -` +export const getTabSleepingTime = (tIds: Array, leftNS: number, rightNS: number): Promise> => + query( + 'getTabRunningPersent', + ` select B.pid, B.tid, @@ -1023,8 +1023,8 @@ and not ((B.ts - TR.start_ts + ifnull(B.dur,0) < ${leftNS}) or (B.ts - TR.start_ts > ${rightNS})) order by ts;`, -{ $leftNS: leftNS, $rightNS: rightNS } -); + { $leftNS: leftNS, $rightNS: rightNS } + ); export const getTabThreadStatesCpu = (tIds: Array, leftNS: number, rightNS: number): Promise> => { let sql = ` @@ -1825,27 +1825,27 @@ export const queryHiPerfEventListData = (eventTypeId: number): Promise> => -query( - 'querySfVSyncData', - `SELECT ts,value,c.ts-tb.start_ts startTime + query( + 'querySfVSyncData', + `SELECT ts,value,c.ts-tb.start_ts startTime FROM process_measure c, trace_range tb WHERE - c.filter_id IN (SELECT process_measure_filter.id AS traceId FROM process_measure_filter JOIN process USING (ipid) WHERE process.name = ${`'` + String.fromCharCode(115,117,114,102,97,99,101,102,108,105,110,103,101,114) + `'`} - AND process_measure_filter.name = ${`'` + String.fromCharCode(86,83,89,78,67,45,97,112,112) + `'`})` -) -export const querySingleVSyncData = ():Promise> => -query( - 'querySingleVSyncData', - `SELECT ts,c.ts-tb.start_ts startTime + c.filter_id IN (SELECT process_measure_filter.id AS traceId FROM process_measure_filter JOIN process USING (ipid) WHERE process.name = ${`'` + String.fromCharCode(115, 117, 114, 102, 97, 99, 101, 102, 108, 105, 110, 103, 101, 114) + `'`} + AND process_measure_filter.name = ${`'` + String.fromCharCode(86, 83, 89, 78, 67, 45, 97, 112, 112) + `'`})` + ) +export const querySingleVSyncData = (): Promise> => + query( + 'querySingleVSyncData', + `SELECT ts,c.ts-tb.start_ts startTime FROM callstack c, trace_range tb WHERE - c.id IN (SELECT callstack.id AS trackId FROM callstack JOIN process WHERE process.name = ${`'` + String.fromCharCode(114,101,110,100,101,114,95,115,101,114,118,105,99,101) + `'`} - AND callstack.name like ${`'` + String.fromCharCode(72,58,71,101,110,101,114,97,116,101,86,115,121,110,99,67,111,117,110,116,37) + `'`})` -) + c.id IN (SELECT callstack.id AS trackId FROM callstack JOIN process WHERE process.name = ${`'` + String.fromCharCode(114, 101, 110, 100, 101, 114, 95, 115, 101, 114, 118, 105, 99, 101) + `'`} + AND callstack.name like ${`'` + String.fromCharCode(72, 58, 71, 101, 110, 101, 114, 97, 116, 101, 86, 115, 121, 110, 99, 67, 111, 117, 110, 116, 37) + `'`})` + ) export const queryHiPerfEventData = (eventTypeId: number, cpu: number): Promise> => query( 'queryHiPerfEventList', @@ -5636,8 +5636,8 @@ export const queryTransferList = (): Promise, - leftNS: number, + tIds: Array, + leftNS: number, rightNS: number ): Promise> => query( @@ -5772,36 +5772,40 @@ export const queryHiSysEventData = (): Promise> => ORDER BY S.ts` ); -export const querySearchRowFuncData = (funcName: string, tIds: number): Promise> => +export const querySearchRowFuncData = ( + funcName: string, + tIds: number, + leftNS: number, + rightNS: number +): Promise> => query( - 'querySearchFuncData', + 'querySearchRowFuncData', ` - select - c.cookie, - c.id, - c.name as funName, - c.ts - r.start_ts as startTime, - c.dur,c.depth, - t.tid, - t.name as threadName, - p.pid, - 'func' as type - from - callstack c - left join - thread t - on - c.callid = t.id - left join - process p - on - t.ipid = p.id - left join - trace_range r - where - c.name = '${funcName}' - and - t.tid = ${tIds}; - `, + select + c.name as funName, + c.ts - r.start_ts as startTime, + t.tid, + t.name as threadName, + 'func' as type + from + callstack c + left join + thread t + on + c.callid = t.id + left join + process p + on + t.ipid = p.id + left join + trace_range r + where + c.name like '${funcName}' + and + t.tid = ${tIds} + and + not ((startTime < ${leftNS}) or (startTime > ${rightNS})); + `, { $search: funcName } ); + diff --git a/ide/src/trace/database/ui-worker/ProcedureWorkerCommon.ts b/ide/src/trace/database/ui-worker/ProcedureWorkerCommon.ts index 7b69400a2..57eec57d3 100644 --- a/ide/src/trace/database/ui-worker/ProcedureWorkerCommon.ts +++ b/ide/src/trace/database/ui-worker/ProcedureWorkerCommon.ts @@ -744,11 +744,8 @@ export function drawSelectionRange(context: any, params: TraceRow) { } // 绘制方法H:RSMainThread::DoComposition平均帧率的箭头指示线条 - if (TraceRow.docompositionData.length && params.getAttribute('row-type') === 'func') { - let rateList: Array = TraceRow.docompositionData.filter(function (item: number) { - return item >= TraceRow.rangeSelectObject!.startNS! && item <= TraceRow.rangeSelectObject!.endNS! - }) - rateList = [...new Set(rateList)]; + if (params._docompositionList?.length) { + const rateList: Array = [...new Set(params.docompositionList)]; if (rateList.length >= 2) { // 计算平均帧率 let cutres: number = (rateList[rateList.length - 1]! - rateList[0]!); @@ -1475,13 +1472,13 @@ export function drawVsync( startNS: number, endNS: number, totalNS: number, - frame:Rect, - color:string -){ + frame: Rect, + color: string +) { vsyncContext.lineWidth = 2; - vsyncContext.fillStyle = color?color:"#808080"; + vsyncContext.fillStyle = color ? color : "#808080"; vsyncContext.globalAlpha = 0.4; - vsyncContext.fillRect(frame.x,frame.y,frame.width,frame.height); + vsyncContext.fillRect(frame.x, frame.y, frame.width, frame.height); } //---------------------------新增代码结束-------------------------- -- Gitee From 667802cf4bec229c5d1e4ddbf2e37b4a8626544a Mon Sep 17 00:00:00 2001 From: wangziyi Date: Fri, 24 Nov 2023 16:45:07 +0800 Subject: [PATCH 2/2] add judgment criteria Signed-off-by: wangziyi --- ide/src/trace/component/trace/base/RangeSelect.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/ide/src/trace/component/trace/base/RangeSelect.ts b/ide/src/trace/component/trace/base/RangeSelect.ts index 4246a5d55..c6b438868 100644 --- a/ide/src/trace/component/trace/base/RangeSelect.ts +++ b/ide/src/trace/component/trace/base/RangeSelect.ts @@ -87,7 +87,11 @@ export class RangeSelect { row.docompositionList = []; }); docompositionData = [] - if (this.rangeTraceRow.length === 1 && this.rangeTraceRow[0]?.getAttribute('row-type') === 'func') { + if ( + this.rangeTraceRow.length === 1 && + this.rangeTraceRow[0]?.getAttribute('row-type') === 'func' && + this.rangeTraceRow[0]?.getAttribute('name')?.startsWith('render_service') + ) { querySearchRowFuncData( 'H:RSMainThread::DoComposition', Number(this.rangeTraceRow[0]?.getAttribute('row-id')), -- Gitee