From 9164e0148777c7df82b6c66bab12d5019c30f479 Mon Sep 17 00:00:00 2001 From: "zhangbeijia3@huawei.com" Date: Sat, 7 Oct 2023 15:34:15 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=80=E9=94=AE=E4=BC=B8=E7=BC=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhangbeijia3@huawei.com --- ide/src/trace/component/chart/SpFreqChart.ts | 66 +++++++++++++++++-- .../trace/component/trace/base/TraceRow.ts | 9 +++ 2 files changed, 69 insertions(+), 6 deletions(-) diff --git a/ide/src/trace/component/chart/SpFreqChart.ts b/ide/src/trace/component/chart/SpFreqChart.ts index 7836fb63b..2a56dec5b 100644 --- a/ide/src/trace/component/chart/SpFreqChart.ts +++ b/ide/src/trace/component/chart/SpFreqChart.ts @@ -18,11 +18,13 @@ import { getCpuLimitFreq, getCpuLimitFreqId, getCpuLimitFreqMax, + queryCpuCount, queryCpuFreq, queryCpuFreqData, queryCpuMaxFreq, queryCpuState, queryCpuStateFilter, + queryJsMemoryData, } from '../../database/SqlLite.js'; import { info } from '../../../log/Log.js'; import { TraceRow } from '../trace/base/TraceRow.js'; @@ -31,16 +33,22 @@ import { CpuFreqLimitRender, CpuFreqLimitsStruct } from '../../database/ui-worke import { renders } from '../../database/ui-worker/ProcedureWorker.js'; import { CpuFreqStruct, FreqRender } from '../../database/ui-worker/ProcedureWorkerFreq.js'; import { CpuStateRender, CpuStateStruct } from '../../database/ui-worker/ProcedureWorkerCpuState.js'; +import { FolderSupplier, FolderThreadHandler } from './SpChartManager.js'; import { Utils } from '../trace/base/Utils.js'; - +const TYPE_SNAPSHOT=0; +const TYPE_TIMELINE=1; export class SpFreqChart { private trace: SpSystemTrace; - + private folderRow: TraceRow | undefined; + private folderRowState: TraceRow | undefined; + private folderRowLimit: TraceRow | undefined; constructor(trace: SpSystemTrace) { this.trace = trace; } - async init() { + let CpuCount=await queryCpuCount(); + let CpuState=await queryCpuState(CpuCount.length); + let freCpu=await queryCpuFreqData(CpuCount.length); let cpuFreqStartTime = new Date().getTime(); let freqList = await queryCpuFreq(); let cpuStateFilterIds = await queryCpuStateFilter(); @@ -52,6 +60,23 @@ export class SpFreqChart { }) .join(',') ); + let jsMemory = await queryJsMemoryData(); + if(jsMemory.length > 0 || freCpu.length > 0){ + this.folderRow = TraceRow.skeleton(); + this.folderRow.rowId = 'Cpu Frequency'; + this.folderRow.rowParentId = ''; + this.folderRow.rowType = TraceRow.ROW_TYPE_CPU_FREQ_ALL; + this.folderRow.style.height = '40px'; + this.folderRow.style.width = '100%'; + this.folderRow.name = 'Cpu Frequency'; + this.folderRow.folder = true; + this.folderRow.rowHidden=this.folderRow!.expansion; + this.folderRow.setAttribute('children',''); + this.folderRow.supplier = FolderSupplier(); + this.folderRow.onThreadHandler=FolderThreadHandler(this.folderRow,this.trace); + this.trace.rowsEL?.appendChild(this.folderRow); + } + info('Cpu Freq data size is: ', freqList!.length); let freqMaxList = await queryCpuMaxFreq(); CpuFreqStruct.maxFreq = freqMaxList[0].maxFreq; @@ -97,7 +122,22 @@ export class SpFreqChart { ); traceRow.canvasRestore(context); }; - this.trace.rowsEL?.appendChild(traceRow); + this.folderRow!.addChildTraceRow(traceRow); + } + if(jsMemory.length > 0 || CpuState.length>0){ + this.folderRowState=TraceRow.skeleton(); + this.folderRowState.rowId = 'Cpu State'; + this.folderRowState.rowType = TraceRow.ROW_TYPE_CPU_STATE_ALL; + this.folderRowState.style.height = '40px'; + this.folderRowState.folder = true; + this.folderRowState.style.width = '100%'; + this.folderRowState.rowParentId = ''; + this.folderRowState.name = 'Cpu State'; + this.folderRowState.rowHidden=this.folderRow!.expansion; + this.folderRowState.setAttribute('children',''); + this.folderRowState.supplier = FolderSupplier(); + this.folderRowState.onThreadHandler=FolderThreadHandler(this.folderRowState,this.trace); + this.trace.rowsEL?.appendChild(this.folderRowState); } let heights = [4, 12, 21, 30]; for (let it of cpuStateFilterIds) { @@ -147,10 +187,24 @@ export class SpFreqChart { ); cpuStateRow.canvasRestore(context); }; - this.trace.rowsEL?.appendChild(cpuStateRow); + this.folderRowState!.addChildTraceRow(cpuStateRow); } let durTime = new Date().getTime() - cpuFreqStartTime; info('The time to load the CpuFreq data is: ', durTime); + if(jsMemory.length > 0 || cpuFreqLimits.length>0){ + this.folderRowLimit = TraceRow.skeleton(); + this.folderRowLimit.rowId = 'Cpu Freq Limit'; + this.folderRowLimit.rowType = TraceRow.ROW_TYPE_CPU_FREQ_LIMITALL; + this.folderRowLimit.style.height = '40px'; + this.folderRowLimit.rowParentId = ''; + this.folderRowLimit.folder = true; + this.folderRowLimit.name = 'Cpu Freq Limit'; + this.folderRowLimit.rowHidden=this.folderRow!.expansion; + this.folderRowLimit.setAttribute('children',''); + this.folderRowLimit.supplier = FolderSupplier(); + this.folderRowLimit.onThreadHandler=FolderThreadHandler(this.folderRowLimit,this.trace); + this.trace.rowsEL?.appendChild(this.folderRowLimit); + } for (let limit of cpuFreqLimits) { let findMax = Utils.getFrequencyWithUnit( cpuFreqLimitsMax.find((maxLimit) => { @@ -202,7 +256,7 @@ export class SpFreqChart { ); cpuFreqLimitRow.canvasRestore(context); }; - this.trace.rowsEL?.appendChild(cpuFreqLimitRow); + this.folderRowLimit!.addChildTraceRow(cpuFreqLimitRow); } } } diff --git a/ide/src/trace/component/trace/base/TraceRow.ts b/ide/src/trace/component/trace/base/TraceRow.ts index 35d2e6977..9498a72bd 100644 --- a/ide/src/trace/component/trace/base/TraceRow.ts +++ b/ide/src/trace/component/trace/base/TraceRow.ts @@ -48,6 +48,9 @@ export class TraceRow extends HTMLElement { static ROW_TYPE_CPU_STATE = 'cpu-state'; static ROW_TYPE_CPU_FREQ = 'cpu-freq'; static ROW_TYPE_CPU_FREQ_LIMIT = 'cpu-limit-freq'; + static ROW_TYPE_CPU_FREQ_ALL='cpu-frequency'; + static ROW_TYPE_CPU_STATE_ALL = 'cpu-State'; + static ROW_TYPE_CPU_FREQ_LIMITALL = 'cpu-frequency-limit'; static ROW_TYPE_FPS = 'fps'; static ROW_TYPE_NATIVE_MEMORY = 'native-memory'; static ROW_TYPE_HIPERF = 'hiperf'; @@ -667,6 +670,12 @@ export class TraceRow extends HTMLElement { this.checkBoxEL!.onclick = (ev: any) => { ev.stopPropagation(); }; + setTimeout(()=>{ + let cpuFnanme=this.shadowRoot?.querySelector('.name')?.textContent; + if(this.folder && (cpuFnanme=='Cpu Frequency' || cpuFnanme=='Cpu State' || cpuFnanme=='Cpu Freq Limit')){ + this.expansion=!this.expansion + } + },500) this.describeEl?.addEventListener('click', () => { if (this.folder) { this.expansion = !this.expansion; -- Gitee