diff --git a/ide/src/trace/component/chart/SpFrameTimeChart.ts b/ide/src/trace/component/chart/SpFrameTimeChart.ts index 797f374a3411bef12f487a1701d2a3fb9b24062a..bd00198c171550e5348541d87bda2aba7121b85a 100644 --- a/ide/src/trace/component/chart/SpFrameTimeChart.ts +++ b/ide/src/trace/component/chart/SpFrameTimeChart.ts @@ -25,7 +25,7 @@ import { queryFrameDynamicData, queryFrameSpacing, queryFrameTimeData, - queryPhysicalData, queryTraceType + queryPhysicalData } from '../../database/SqlLite.js'; import { JanksStruct } from '../../bean/JanksStruct.js'; import { ns2xByTimeShaft, PairPoint } from '../../database/ui-worker/ProcedureWorkerCommon.js'; @@ -50,7 +50,6 @@ import { EmptyRender } from '../../database/ui-worker/ProcedureWorkerCPU.js'; export class SpFrameTimeChart { private trace: SpSystemTrace; private flagConfig: Params | undefined; - private isTxtTraceType: boolean = false; constructor(trace: SpSystemTrace) { this.trace = trace; @@ -60,13 +59,7 @@ export class SpFrameTimeChart { let frameTimeData = await queryFrameTimeData(); if (frameTimeData.length > 0) { let frameTimeLineRow: TraceRow = await this.initFrameTimeLine(); - let traceType = await queryTraceType(); - if (traceType.length > 0 && traceType[0].value.startsWith('txt')) { - this.isTxtTraceType = true; - } - if (!this.isTxtTraceType) { - await this.initExpectedChart(frameTimeLineRow); - } + await this.initExpectedChart(frameTimeLineRow); await this.initActualChart(frameTimeLineRow); } } @@ -641,9 +634,6 @@ export class SpFrameTimeChart { let depthArray = []; for (let index: number = 0; index < frameActualData.length; index++) { let it = frameActualData[index]; - if (this.isTxtTraceType) { - it.jank_tag = 0; - } if (!it.dur || it.dur < 0) { continue; } diff --git a/ide/src/trace/component/chart/SpProcessChart.ts b/ide/src/trace/component/chart/SpProcessChart.ts index 0bff720447a74f712b5b408cd7c43174f528db05..2f8d3f67163d289d454fbacdfd55cf7dbf2fe690 100644 --- a/ide/src/trace/component/chart/SpProcessChart.ts +++ b/ide/src/trace/component/chart/SpProcessChart.ts @@ -34,7 +34,7 @@ import { queryProcessThreads, queryProcessThreadsByTable, queryStartupPidArray, - queryThreadData, queryTraceType, + queryThreadData } from '../../database/SqlLite.js'; import { Utils } from '../trace/base/Utils.js'; import { info } from '../../../log/Log.js'; @@ -201,18 +201,11 @@ export class SpProcessChart { let allJankProcess: Array = []; let allExpectedProcess: Array = []; let allActualProcess: Array = []; - let isTxtTraceType: boolean = false; if (allJankProcessData.length > 0) { allJankProcessData.forEach((name, index) => { allJankProcess.push(name.pid!); }); - let traceType = await queryTraceType(); - if (traceType.length > 0 && traceType[0].value.startsWith('txt')) { - isTxtTraceType = true; - } - if (!isTxtTraceType) { - allExpectedProcess = await queryAllExpectedData(); - } + allExpectedProcess = await queryAllExpectedData(); allActualProcess = await queryAllActualData(); } let allTaskPoolPid = await queryAllTaskPoolPid(); @@ -284,144 +277,142 @@ export class SpProcessChart { */ let actualRow: TraceRow | null = null; let expectedRow: TraceRow | null = null; - if (allJankProcess.indexOf(it.pid) > -1) { - let isIntersect = (a: JanksStruct, b: JanksStruct): boolean => - Math.max(a.ts! + a.dur!, b.ts! + b.dur!) - Math.min(a.ts!, b.ts!) < a.dur! + b.dur!; - if (!isTxtTraceType) { - let expectedData = allExpectedProcess.filter((ite) => ite.pid == it.pid); - if (expectedData.length > 0) { + if (allJankProcess.indexOf(it.pid) > -1 && allExpectedProcess.length > 0) { + let expectedData = allExpectedProcess.filter((ite) => ite.pid == it.pid); + if (expectedData.length > 0) { + // @ts-ignore + let isIntersect = (a: JanksStruct, b: JanksStruct): boolean => + Math.max(a.ts! + a.dur!, b.ts! + b.dur!) - Math.min(a.ts!, b.ts!) < a.dur! + b.dur!; + let depthArray: any = []; + for (let j = 0 ; j < expectedData.length ; j++) { + let expectedItem = expectedData[j]; + if (expectedItem.cmdline != 'render_service') { + expectedItem.frame_type = 'app'; + } else { + expectedItem.frame_type = expectedItem.cmdline; + } + if (!expectedItem.dur || expectedItem.dur < 0) { + continue; + } + if (depthArray.length === 0) { + expectedItem.depth = 0; + depthArray.push(expectedItem); + } else { + if (isIntersect(depthArray[0], expectedItem)) { + if (isIntersect(depthArray[depthArray.length - 1], expectedItem)) { + expectedItem.depth = depthArray.length; + depthArray.push(expectedItem); + } + } else { + expectedItem.depth = 0; + depthArray = [expectedItem]; + } + } + } + let max = Math.max(...expectedData.map((it) => it.depth || 0)) + 1; + let maxHeight = max * 20; + expectedRow = TraceRow.skeleton(); + let timeLineType = expectedData[0].type; + expectedRow.rowId = `${ timeLineType }-${ it.pid }`; + expectedRow.asyncFuncName = it.processName; + expectedRow.asyncFuncNamePID = it.pid; + expectedRow.rowType = TraceRow.ROW_TYPE_JANK; + expectedRow.rowParentId = `${ it.pid }`; + expectedRow.rowHidden = !processRow.expansion; + expectedRow.style.width = '100%'; + expectedRow.style.height = `${ maxHeight }px`; + expectedRow.setAttribute('height', `${ maxHeight }`); + expectedRow.setAttribute('frame_type', expectedData[0].frame_type); + expectedRow.name = 'Expected Timeline'; + expectedRow.addTemplateTypes('FrameTimeline'); + expectedRow.setAttribute('children', ''); + expectedRow.supplier = (): Promise => + new Promise((resolve) => { + resolve(expectedData); + }); + expectedRow.favoriteChangeHandler = this.trace.favoriteChangeHandler; + expectedRow.selectChangeHandler = this.trace.selectChangeHandler; + expectedRow.onThreadHandler = (useCache): void => { + let context = expectedRow!.collect ? this.trace.canvasFavoritePanelCtx! : this.trace.canvasPanelCtx!; + expectedRow!.canvasSave(context); + (renders['jank'] as JankRender).renderMainThread( + { + context: context, + useCache: useCache, + type: 'expected_frame_timeline_slice', + }, + expectedRow! + ); + expectedRow!.canvasRestore(context); + }; + processRow.addChildTraceRow(expectedRow); + let actualData = allActualProcess.filter((ite) => ite.pid == it.pid); + if (actualData.length > 0) { + let isIntersect = (a: any, b: any): boolean => + Math.max(a.ts + a.dur, b.ts + b.dur) - Math.min(a.ts, b.ts) < a.dur + b.dur; let depthArray: any = []; - for (let j = 0 ; j < expectedData.length ; j++) { - let expectedItem = expectedData[j]; - if (expectedItem.cmdline != 'render_service') { - expectedItem.frame_type = 'app'; + for (let j = 0 ; j < actualData.length ; j++) { + let actualItem = actualData[j]; + if (actualItem.cmdline != 'render_service') { + actualItem.frame_type = 'app'; } else { - expectedItem.frame_type = expectedItem.cmdline; + actualItem.frame_type = actualItem.cmdline; } - if (!expectedItem.dur || expectedItem.dur < 0) { + if (!actualItem.dur || actualItem.dur < 0) { continue; } if (depthArray.length === 0) { - expectedItem.depth = 0; - depthArray.push(expectedItem); + actualItem.depth = 0; + depthArray.push(actualItem); } else { - if (isIntersect(depthArray[0], expectedItem)) { - if (isIntersect(depthArray[depthArray.length - 1], expectedItem)) { - expectedItem.depth = depthArray.length; - depthArray.push(expectedItem); + if (isIntersect(depthArray[0], actualItem)) { + if (isIntersect(depthArray[depthArray.length - 1], actualItem)) { + actualItem.depth = depthArray.length; + depthArray.push(actualItem); + } else { + actualItem.depth = depthArray.length - 1; + depthArray[length - 1] = actualItem; } } else { - expectedItem.depth = 0; - depthArray = [expectedItem]; + actualItem.depth = 0; + depthArray = [actualItem]; } } } - let max = Math.max(...expectedData.map((it) => it.depth || 0)) + 1; + let max = Math.max(...actualData.map((it) => it.depth || 0)) + 1; let maxHeight = max * 20; - expectedRow = TraceRow.skeleton(); - let timeLineType = expectedData[0].type; - expectedRow.rowId = `${ timeLineType }-${ it.pid }`; - expectedRow.asyncFuncName = it.processName; - expectedRow.asyncFuncNamePID = it.pid; - expectedRow.rowType = TraceRow.ROW_TYPE_JANK; - expectedRow.rowParentId = `${ it.pid }`; - expectedRow.rowHidden = !processRow.expansion; - expectedRow.style.width = '100%'; - expectedRow.style.height = `${ maxHeight }px`; - expectedRow.setAttribute('height', `${ maxHeight }`); - expectedRow.setAttribute('frame_type', expectedData[0].frame_type); - expectedRow.name = 'Expected Timeline'; - expectedRow.addTemplateTypes('FrameTimeline'); - expectedRow.setAttribute('children', ''); - expectedRow.supplier = (): Promise => - new Promise((resolve) => { - resolve(expectedData); - }); - expectedRow.favoriteChangeHandler = this.trace.favoriteChangeHandler; - expectedRow.selectChangeHandler = this.trace.selectChangeHandler; - expectedRow.onThreadHandler = (useCache): void => { - let context = expectedRow!.collect ? this.trace.canvasFavoritePanelCtx! : this.trace.canvasPanelCtx!; - expectedRow!.canvasSave(context); + actualRow = TraceRow.skeleton(); + let timeLineType = actualData[0].type; + actualRow.rowId = `${ timeLineType }-${ it.pid }`; + actualRow.rowType = TraceRow.ROW_TYPE_JANK; + actualRow.rowParentId = `${ it.pid }`; + actualRow.rowHidden = !processRow.expansion; + actualRow.style.width = '100%'; + actualRow.style.height = `${ maxHeight }px`; + actualRow.setAttribute('height', `${ maxHeight }`); + actualRow.name = 'Actual Timeline'; + actualRow.addTemplateTypes('FrameTimeline'); + actualRow.setAttribute('frame_type', actualData[0].frame_type); + actualRow.setAttribute('children', ''); + actualRow.dataList = actualData; + actualRow.supplier = (): Promise => new Promise((resolve) => resolve(actualData)); + actualRow.favoriteChangeHandler = this.trace.favoriteChangeHandler; + actualRow.selectChangeHandler = this.trace.selectChangeHandler; + actualRow.onThreadHandler = (useCache): void => { + let context = actualRow!.collect ? this.trace.canvasFavoritePanelCtx! : this.trace.canvasPanelCtx!; + actualRow!.canvasSave(context); (renders['jank'] as JankRender).renderMainThread( { context: context, useCache: useCache, - type: 'expected_frame_timeline_slice', + type: 'actual_frame_timeline_slice', }, - expectedRow! + actualRow! ); - expectedRow!.canvasRestore(context); + actualRow!.canvasRestore(context); }; - processRow.addChildTraceRow(expectedRow); - } - } - let actualData = allActualProcess.filter((ite) => ite.pid == it.pid); - if (actualData.length > 0) { - let depthArray: any = []; - for (let j = 0 ; j < actualData.length ; j++) { - let actualItem = actualData[j]; - if (isTxtTraceType) { - actualItem.jank_tag = 0; - } - if (actualItem.cmdline != 'render_service') { - actualItem.frame_type = 'app'; - } else { - actualItem.frame_type = actualItem.cmdline; - } - if (!actualItem.dur || actualItem.dur < 0) { - continue; - } - if (depthArray.length === 0) { - actualItem.depth = 0; - depthArray.push(actualItem); - } else { - if (isIntersect(depthArray[0], actualItem)) { - if (isIntersect(depthArray[depthArray.length - 1], actualItem)) { - actualItem.depth = depthArray.length; - depthArray.push(actualItem); - } else { - actualItem.depth = depthArray.length - 1; - depthArray[length - 1] = actualItem; - } - } else { - actualItem.depth = 0; - depthArray = [actualItem]; - } - } + processRow.addChildTraceRow(actualRow); } - let max = Math.max(...actualData.map((it) => it.depth || 0)) + 1; - let maxHeight = max * 20; - actualRow = TraceRow.skeleton(); - let timeLineType = actualData[0].type; - actualRow.rowId = `${ timeLineType }-${ it.pid }`; - actualRow.rowType = TraceRow.ROW_TYPE_JANK; - actualRow.rowParentId = `${ it.pid }`; - actualRow.rowHidden = !processRow.expansion; - actualRow.style.width = '100%'; - actualRow.style.height = `${ maxHeight }px`; - actualRow.setAttribute('height', `${ maxHeight }`); - actualRow.name = 'Actual Timeline'; - actualRow.addTemplateTypes('FrameTimeline'); - actualRow.setAttribute('frame_type', actualData[0].frame_type); - actualRow.setAttribute('children', ''); - actualRow.dataList = actualData; - actualRow.supplier = (): Promise => new Promise((resolve) => resolve(actualData)); - actualRow.favoriteChangeHandler = this.trace.favoriteChangeHandler; - actualRow.selectChangeHandler = this.trace.selectChangeHandler; - actualRow.onThreadHandler = (useCache): void => { - let context = actualRow!.collect ? this.trace.canvasFavoritePanelCtx! : this.trace.canvasPanelCtx!; - actualRow!.canvasSave(context); - (renders['jank'] as JankRender).renderMainThread( - { - context: context, - useCache: useCache, - type: 'actual_frame_timeline_slice', - }, - actualRow! - ); - actualRow!.canvasRestore(context); - }; - processRow.addChildTraceRow(actualRow); } } let offsetYTimeOut: any = undefined; diff --git a/ide/src/trace/database/SqlLite.ts b/ide/src/trace/database/SqlLite.ts index f6d3646c8eb0ed90f2a310115f29adb68e4b3e10..63eeae721c031ad7446275bf4008086aeef106f7 100644 --- a/ide/src/trace/database/SqlLite.ts +++ b/ide/src/trace/database/SqlLite.ts @@ -5354,15 +5354,3 @@ export const queryLogData = (oneDayTime: number): Promise> => export const queryMetric = (metricName: string): Promise> => query('queryMetric', metricName, '', 'exec-metric'); - -export const queryTraceType = (): Promise> => - query( - 'queryTraceType', - `SELECT m.value - FROM - meta AS m - WHERE - m.name = 'source_type';` - );