diff --git a/ide/src/base-ui/table/lit-table.ts b/ide/src/base-ui/table/lit-table.ts index 285db091f3e2337023c846d1709607b4e0df3c4c..167485fff2ce473bb0d4af9db1c3865d6c3586fc 100644 --- a/ide/src/base-ui/table/lit-table.ts +++ b/ide/src/base-ui/table/lit-table.ts @@ -639,7 +639,7 @@ export class LitTable extends HTMLElement { .map((a) => (a as unknown).data) .map((a) => { if ('children' in a) { - Reflect.deleteProperty(a, "chlidren") + Reflect.deleteProperty(a, 'chlidren'); } return a; }); @@ -1536,8 +1536,9 @@ export class LitTable extends HTMLElement { td.onclick = (event: unknown): void => { this.dispatchEvent( new CustomEvent('td-click', { - detail: {//@ts-ignore - ...rowData.data,//@ts-ignore + detail: { + //@ts-ignore + ...rowData.data, }, composed: true, }) @@ -1930,7 +1931,8 @@ export class LitTable extends HTMLElement { new CustomEvent('icon-click', { detail: { // @ts-ignore - ...rowData.data, // @ts-ignore + ...rowData.data, + // @ts-ignore data: rowData.data, callBack: (isSelected: boolean): void => { //是否爲单选 diff --git a/ide/src/base-ui/utils/CSVFormater.ts b/ide/src/base-ui/utils/CSVFormater.ts index 5942db5418a0a4d27ab757a385241230ffb3dc79..ccdff36ef0f027327bc2bc97051d5e9390270d31 100644 --- a/ide/src/base-ui/utils/CSVFormater.ts +++ b/ide/src/base-ui/utils/CSVFormater.ts @@ -111,68 +111,35 @@ export class JSONToCSV { } static saveCsvFile(fileName: unknown, csvData: unknown): void { - let browserType: unknown = this.browserType(); + let alink: unknown = document.createElement('a'); // @ts-ignore - if (!browserType.edge || !browserType.ie) { - let alink: unknown = document.createElement('a'); - // @ts-ignore - alink.id = 'csvDownloadLink'; - // @ts-ignore - alink.href = this.getDownloadUrl(csvData); - // @ts-ignore - document.body.appendChild(alink); - let linkDom: unknown = document.getElementById('csvDownloadLink'); - // @ts-ignore - linkDom.setAttribute('download', fileName); - // @ts-ignore - linkDom.click(); - // @ts-ignore - document.body.removeChild(linkDom); - // @ts-ignore - } else if (browserType.ie >= 10 || browserType.edge === 'edge') { - // @ts-ignore - (navigator as unknown).msSaveBlob( - new Blob(['\uFEFF' + csvData], { - type: 'text/csv', - }), - fileName - ); - } else { - let oWin: unknown = window.top?.open('about:blank', '_blank'); - // @ts-ignore - oWin.document.write('sep=,\r\n' + csvData); - // @ts-ignore - oWin.document.close(); - // @ts-ignore - oWin.document.execCommand('SaveAs', true, fileName); - // @ts-ignore - oWin.close(); - } + alink.id = 'csvDownloadLink'; + // @ts-ignore + alink.href = this.getDownloadUrl(csvData); + // @ts-ignore + document.body.appendChild(alink); + let linkDom: unknown = document.getElementById('csvDownloadLink'); + // @ts-ignore + linkDom.setAttribute('download', fileName); + // @ts-ignore + linkDom.click(); + // @ts-ignore + document.body.removeChild(linkDom); + // @ts-ignore + } static getDownloadUrl(csvData: unknown): string | undefined { + let result; // @ts-ignore if (window.Blob && window.URL && (window.URL as unknown).createObjectURL) { - return URL.createObjectURL( + result = URL.createObjectURL( new Blob(['\uFEFF' + csvData], { type: 'text/csv', }) ); } - } - - static browserType(): { edge: string; ie: string; firefox: string; opera: string; - safari: string} { - const type = { edge: '', ie: '', firefox: '', opera: '', safari: '' }; - const agent = navigator.userAgent.toLowerCase(); - let has; - (has = agent.indexOf('edge') !== -1 ? (type.edge = 'edge') : - agent.match(/rv:([\d.]+)\) like gecko/)) ? (type.ie = has[1]) : - (has = agent.match(/msie ([\d.]+)/)) ? (type.ie = has[1]) : - (has = agent.match(/firefox\/([\d.]+)/)) ? (type.firefox = has[1]) : - (has = agent.match(/opera.([\d.]+)/)) ? (type.opera = has[1]) : - (has = agent.match(/version\/([\d.]+).*safari/)) ? (type.safari = has[1]) : 0; - return type; + return result; } static treeDepth(depth: number): string { diff --git a/ide/src/trace/SpApplication.ts b/ide/src/trace/SpApplication.ts index 6bf8f51fec2b298d82cd7dfccea42cea9f351d5a..188fedaee955b2fdbf3663d1c1226f121b8b6ba7 100644 --- a/ide/src/trace/SpApplication.ts +++ b/ide/src/trace/SpApplication.ts @@ -412,7 +412,6 @@ export class SpApplication extends BaseElement { allFileSize: number ): Promise => { info('reading long trace file ', file.name); - const self = this; return new Promise((resolve, reject) => { let fr = new FileReader(); let message = { fileType: '', startIndex: 0, endIndex: 0, size: 0 }; @@ -422,12 +421,12 @@ export class SpApplication extends BaseElement { let offset = 0; let sliceLen = 0; let index = 1; - fr.onload = function (): void { + fr.onload = (): void => { let data = fr.result as ArrayBuffer; LongTraceDBUtils.getInstance() .addLongTableData(data, fileType, timStamp, pageNumber, index, offset, sliceLen) .then(() => { - self.longTraceFileReadMessagePush(index, isNormalType, pageNumber, offset, sliceLen, fileType, data); + this.longTraceFileReadMessagePush(index, isNormalType, pageNumber, offset, sliceLen, fileType, data); offset += sliceLen; if (offset < file.size) { index++; @@ -435,11 +434,11 @@ export class SpApplication extends BaseElement { continueReading(); }); }; - function continueReading(): void { + const continueReading = (): void => { if (offset >= file.size) { message.endIndex = index; message.size = file.size; - self.longTraceFileReadMessageHandler(pageNumber, message); + this.longTraceFileReadMessageHandler(pageNumber, message); resolve(true); return; } @@ -451,7 +450,7 @@ export class SpApplication extends BaseElement { let slice = file.slice(offset, offset + sliceLen); readSize += slice.size; let percentValue = ((readSize * 100) / allFileSize).toFixed(2); - self.litSearch!.setPercent('Read in file: ', Number(percentValue)); + this.litSearch!.setPercent('Read in file: ', Number(percentValue)); fr.readAsArrayBuffer(slice); } continueReading(); @@ -964,7 +963,6 @@ export class SpApplication extends BaseElement { } private handleSqliteMode(ev: unknown, showFileName: string, fileSize: number, fileName: string): void { - const self = this; let fileSizeStr = (fileSize / 1048576).toFixed(1); postLog(fileName, fileSizeStr); document.title = `${showFileName} (${fileSizeStr}M)`; @@ -972,40 +970,40 @@ export class SpApplication extends BaseElement { threadPool.init('sqlite').then((res) => { let reader = new FileReader(); reader.readAsArrayBuffer(ev as Blob); - reader.onloadend = function (ev): void { + reader.onloadend = (ev): void => { SpApplication.loadingProgress = 0; SpApplication.progressStep = 3; - self.spSystemTrace!.loadDatabaseArrayBuffer( - this.result as ArrayBuffer, + this.spSystemTrace!.loadDatabaseArrayBuffer( + reader.result as ArrayBuffer, '', (command: string, _: number) => { - self.setProgress(command); + this.setProgress(command); }, false, () => { - self.mainMenu!.menus!.splice(2, self.mainMenu!.menus!.length > 2 ? 1 : 0, { + this.mainMenu!.menus!.splice(2, this.mainMenu!.menus!.length > 2 ? 1 : 0, { collapsed: false, title: 'Current Trace', second: false, icon: 'caret-down', describe: 'Actions on the current trace', - children: self.getTraceOptionMenus(showFileName, fileSizeStr, fileName, true, false), + children: this.getTraceOptionMenus(showFileName, fileSizeStr, fileName, true, false), }); - self.mainMenu!.menus!.splice(3, 1, { + this.mainMenu!.menus!.splice(3, 1, { collapsed: false, title: 'Support', second: false, icon: 'caret-down', describe: 'Support', - children: self.getTraceSupportMenus(), + children: this.getTraceSupportMenus(), }); - self.litSearch!.setPercent('', 101); - self.chartFilter!.setAttribute('mode', ''); - self.progressEL!.loading = false; - self.freshMenuDisable(false); - self.spInfoAndStats!.initInfoAndStatsData(); - self.cutTraceFile!.style.display = 'none'; - self.headerDiv!.style.pointerEvents = 'auto'; + this.litSearch!.setPercent('', 101); + this.chartFilter!.setAttribute('mode', ''); + this.progressEL!.loading = false; + this.freshMenuDisable(false); + this.spInfoAndStats!.initInfoAndStatsData(); + this.cutTraceFile!.style.display = 'none'; + this.headerDiv!.style.pointerEvents = 'auto'; } ); }; @@ -2382,7 +2380,7 @@ export class SpApplication extends BaseElement { a.download = fileName; a.click(); this.itemIconLoading(mainMenu, 'Current Trace', 'Download Database', true); - let timer = setInterval(()=> { + let timer = setInterval(() => { this.itemIconLoading(mainMenu, 'Current Trace', 'Download Database', false); clearInterval(timer); }, 4000); @@ -2410,7 +2408,7 @@ export class SpApplication extends BaseElement { a.click(); window.URL.revokeObjectURL(a.href); this.itemIconLoading(mainMenu, 'Current Trace', 'Download File', true); - let timer = setInterval(()=> { + let timer = setInterval(() => { this.itemIconLoading(mainMenu, 'Current Trace', 'Download File', false); clearInterval(timer); }, 4000); diff --git a/ide/src/trace/bean/BoxSelection.ts b/ide/src/trace/bean/BoxSelection.ts index 8ba1149eb60e25a26f8f8ecf387176bd58891129..d8b22b6d4454d88c3f3314e029a2ababa9019e77 100644 --- a/ide/src/trace/bean/BoxSelection.ts +++ b/ide/src/trace/bean/BoxSelection.ts @@ -743,8 +743,8 @@ export class SelectionParam { setSelectState(item, frameSelectDataIdArr); // @ts-ignore item.isSelect = true; - return item; } + return item.depth === 0; }); this.jsCpuProfilerData = jsCpuProfilerData; } diff --git a/ide/src/trace/component/SpFlags.ts b/ide/src/trace/component/SpFlags.ts index 1e527a0756e50e7daaed7b3d8f774f691a99c084..980162198ebd68e6d27271b26bbbb683d90edb23 100644 --- a/ide/src/trace/component/SpFlags.ts +++ b/ide/src/trace/component/SpFlags.ts @@ -19,17 +19,17 @@ const VSYNC_VAL = { 'VsyncGeneratior': 'H:VsyncGenerator', 'Vsync-rs': 'H:rs_SendVsync', 'Vsync-app': 'H:app_SendVsync' -} +}; const CAT_SORT = { 'Business first': 'business', 'Thread first': 'thread' -} +}; const CONFIG_STATE = { 'VSync': ['vsyncValue', 'VsyncGeneratior'], 'Start&Finish Trace Category': ['catValue', 'Business first'] -} +}; @element('sp-flags') export class SpFlags extends BaseElement { @@ -82,11 +82,14 @@ export class SpFlags extends BaseElement { configDiv.appendChild(description); } //监听flag-select的状态选择 - private flagSelectListener(configSelect: any): void { + private flagSelectListener(configSelect: unknown): void { + // @ts-ignore let title = configSelect.getAttribute('title'); let listSelect = this.shadowRoot?.querySelector(`#${CONFIG_STATE[title as keyof typeof CONFIG_STATE][0]}`); + // @ts-ignore FlagsConfig.updateFlagsConfig(title!, configSelect.selectedOptions[0].value); if (CONFIG_STATE[title as keyof typeof CONFIG_STATE]) { + // @ts-ignore if (configSelect.selectedOptions[0].value === 'Enabled') { listSelect?.removeAttribute('disabled'); } else { @@ -156,7 +159,7 @@ export class SpFlags extends BaseElement { if (config.title === 'Start&Finish Trace Category') { let configKey = CONFIG_STATE['Start&Finish Trace Category' as keyof typeof CONFIG_STATE][0]; - let configFooterDiv = this.createPersonOption(CAT_SORT, configKey, config.addInfo!.catValue, config.title) + let configFooterDiv = this.createPersonOption(CAT_SORT, configKey, config.addInfo!.catValue, config.title); configDiv.appendChild(configFooterDiv); } @@ -164,7 +167,7 @@ export class SpFlags extends BaseElement { }); } - private createPersonOption(list: any, key: string, defaultKey: string, parentOption: string): HTMLDivElement { + private createPersonOption(list: unknown, key: string, defaultKey: string, parentOption: string): HTMLDivElement { let configFooterDiv = document.createElement('div'); configFooterDiv.className = 'config_footer'; let vsyncLableEl = document.createElement('lable'); @@ -173,12 +176,15 @@ export class SpFlags extends BaseElement { vsyncTypeEl.setAttribute('id', key); vsyncTypeEl.className = 'flag-select'; //根据给出的list遍历添加option下来选框 - for(let k of Object.keys(list)) { + // @ts-ignore + for (let k of Object.keys(list)) { let option = document.createElement('option'); // VsyncGeneratior = H:VsyncGenerator + // @ts-ignore option.value = list[k]; option.textContent = k; + // @ts-ignore if (list[k] === defaultKey) { - option.selected = true; + option.selected = true; FlagsConfig.updateFlagsConfig(key, option.value); } vsyncTypeEl.appendChild(option); @@ -250,7 +256,7 @@ export class FlagsConfig { title: 'VSync', switchOptions: [{ option: 'Enabled' }, { option: 'Disabled', selected: true }], describeContent: 'VSync Signal drawing', - addInfo: {vsyncValue: VSYNC_VAL['VsyncGeneratior'] }, + addInfo: { vsyncValue: VSYNC_VAL.VsyncGeneratior }, }, { title: 'LTPO', @@ -261,7 +267,7 @@ export class FlagsConfig { title: 'Start&Finish Trace Category', switchOptions: [{ option: 'Enabled' }, { option: 'Disabled', selected: true }], describeContent: 'Asynchronous trace aggregation', - addInfo: {catValue: CAT_SORT['Business first'] }, + addInfo: { catValue: CAT_SORT['Business first'] }, }, { title: 'UserPluginsRow', @@ -377,7 +383,7 @@ export class FlagsConfig { let list = window.localStorage.getItem(FlagsConfig.FLAGS_CONFIG_KEY); let listJson = JSON.parse(list!); let catSelectValue = listJson[value]; - return catSelectValue + return catSelectValue; } static updateFlagsConfig(key: string, value: unknown): void { diff --git a/ide/src/trace/component/SpQuerySQL.ts b/ide/src/trace/component/SpQuerySQL.ts index b888b11769e49594b5a02b3cce7ae8c3f705717b..af20e56fa957e9efd86c96e7b867c29b0f89f98b 100644 --- a/ide/src/trace/component/SpQuerySQL.ts +++ b/ide/src/trace/component/SpQuerySQL.ts @@ -191,25 +191,25 @@ export class SpQuerySQL extends BaseElement { } private setPageNationTableEl(): void { - let that = this; let timeOutTs: number = 200; let indexNumber = 1; setTimeout(() => { let total = this.statDataArray.length; if (total > maxPageSize) { - that.pagination!.style.display = 'block'; - that.pagination!.style.opacity = '1'; - new PageNation(this.pagination, { + this.pagination!.style.display = 'block'; + this.pagination!.style.opacity = '1'; + const option = { current: 1, total: total, pageSize: pageSize, - change(num: number): void { - that.sliceData = that.statDataArray!.slice((num - indexNumber) * pageSize, num * pageSize); - that.queryTableEl!.recycleDataSource = that.sliceData; + change: (num: number): void => { + this.sliceData = this.statDataArray!.slice((num - indexNumber) * pageSize, num * pageSize); + this.queryTableEl!.recycleDataSource = this.sliceData; }, - }); + }; + new PageNation(this.pagination, option); } else { - that.pagination!.style.opacity = '0'; + this.pagination!.style.opacity = '0'; this.queryTableEl!.recycleDataSource = this.statDataArray; } this.freshTableHeadResizeStyle(); diff --git a/ide/src/trace/component/SpSystemTrace.init.ts b/ide/src/trace/component/SpSystemTrace.init.ts index bdb56eaddeb0921c3be8fbe8961c945a1177e8d1..6a73dbc21acfed425426551e3cb6331d91e56a71 100644 --- a/ide/src/trace/component/SpSystemTrace.init.ts +++ b/ide/src/trace/component/SpSystemTrace.init.ts @@ -966,7 +966,8 @@ function findEntryTypeFunc(sp: SpSystemTrace, findEntry: unknown): void { // @ts-ignore cookie: findEntry.cookie, // @ts-ignore - row_id: findEntry.rowId ? findEntry.rowId : null,//因异步trace分类出的rowId类型有三种,故新增row_id字段,该字段为异步方法的对应的rowId,支持搜索查询定位到该方法属于那个row,只有缓存的异步trace数据中含该字段 + //因异步trace分类出的rowId类型有三种,故新增row_id字段,该字段为异步方法的对应的rowId,支持搜索查询定位到该方法属于那个row,只有缓存的异步trace数据中含该字段 + row_id: findEntry.rowId ? findEntry.rowId : null, }, true ); diff --git a/ide/src/trace/component/chart/SpBpftraceChart.ts b/ide/src/trace/component/chart/SpBpftraceChart.ts index d22c7bdf925e9689af729d8c5b1ecb1d863b653a..755d251f8cf3a52d7fd5b2b1084e3a239d87f9d9 100644 --- a/ide/src/trace/component/chart/SpBpftraceChart.ts +++ b/ide/src/trace/component/chart/SpBpftraceChart.ts @@ -39,7 +39,7 @@ export class SpBpftraceChart { } } - async initSample(start_ts: number, file: any): Promise> { + async initSample(start_ts: number, file: unknown): Promise> { let traceRow = TraceRow.skeleton(); traceRow.rowId = 'bpftrace'; traceRow.index = 0; @@ -57,16 +57,22 @@ export class SpBpftraceChart { this.addTraceRowEventListener(traceRow, start_ts); //单独上传 if (file) { - this.getJsonData(file).then((res: any) => { + this.getJsonData(file).then((res: unknown) => { + // @ts-ignore const propertyData = res.data; + // @ts-ignore const treeNodes = res.relation.children || [res.relation.RS.children[0]]; const uniqueProperty = this.removeDuplicates(propertyData); const flattenTreeArray = this.getFlattenTreeData(treeNodes); - const height = (Math.max(...flattenTreeArray.map((obj: any) => obj.depth)) + 1) * 20; + // @ts-ignore + const height = (Math.max(...flattenTreeArray.map((obj: unknown) => obj.depth)) + 1) * 20; + // @ts-ignore const sampleProperty = this.setRelationDataProperty(flattenTreeArray, uniqueProperty); + // @ts-ignore const startTS = flattenTreeArray[0].property[0].begin; traceRow.supplier = () => new Promise((resolve): void => { + // @ts-ignore resolve(sampleProperty); }); traceRow.onThreadHandler = (useCache) => { @@ -84,6 +90,7 @@ export class SpBpftraceChart { type: 'bpftrace', start_ts: startTS, uniqueProperty: uniqueProperty, + // @ts-ignore flattenTreeArray: flattenTreeArray, }, traceRow @@ -127,16 +134,21 @@ export class SpBpftraceChart { * @param row * @param start_ts */ - addTraceRowEventListener(row: TraceRow, start_ts: number) { - row.uploadEl?.addEventListener('sample-file-change', (e: any) => { - this.getJsonData(e).then((res: any) => { + // @ts-ignore + addTraceRowEventListener(row: TraceRow, start_ts: number) { + row.uploadEl?.addEventListener('sample-file-change', (e: unknown) => { + this.getJsonData(e).then((res: unknown) => { this.resetChartData(row); + // @ts-ignore const propertyData = res.data; + // @ts-ignore const treeNodes = res.relation.children || [res.relation.RS.children[0]]; const uniqueProperty = this.removeDuplicates(propertyData); const flattenTreeArray = this.getFlattenTreeData(treeNodes); - const height = (Math.max(...flattenTreeArray.map((obj: any) => obj.depth)) + 1) * 20; + // @ts-ignore + const height = (Math.max(...flattenTreeArray.map((obj: unknown) => obj.depth)) + 1) * 20; const sampleProperty = this.setRelationDataProperty(flattenTreeArray, uniqueProperty); + // @ts-ignore const startTS = start_ts > 0 ? start_ts : flattenTreeArray[0].property[0].begin; row.supplier = () => new Promise((resolve): void => { @@ -157,6 +169,7 @@ export class SpBpftraceChart { type: 'bpftrace', start_ts: startTS, uniqueProperty: uniqueProperty, + // @ts-ignore flattenTreeArray: flattenTreeArray, }, row @@ -172,7 +185,8 @@ export class SpBpftraceChart { * 清空缓存 * @param row */ - resetChartData(row: TraceRow) { + // @ts-ignore + resetChartData(row: TraceRow) { row.dataList = []; row.dataList2 = []; row.dataListCache = []; @@ -184,11 +198,13 @@ export class SpBpftraceChart { * @param file * @returns */ - getJsonData(file: any): Promise { + getJsonData(file: unknown): Promise { return new Promise((resolve, reject) => { let reader = new FileReader(); + // @ts-ignore reader.readAsText(file.detail || file); - reader.onloadend = (e: any) => { + reader.onloadend = (e: unknown) => { + // @ts-ignore const fileContent = e.target?.result; try { resolve(JSON.parse(fileContent)); @@ -211,21 +227,31 @@ export class SpBpftraceChart { * @param parentName * @returns */ - getFlattenTreeData(treeData: Array, depth: number = 0, parentName: string = ''): Array { + getFlattenTreeData(treeData: Array, depth: number = 0, parentName: string = ''): Array { let result: Array = []; treeData.forEach((node) => { + // @ts-ignore const name: string = node.function_name; - const newNode: any = {}; + const newNode: unknown = {}; if (name.indexOf('unknown') > -1) { + // @ts-ignore newNode.children = this.getUnknownAllChildrenNames(node); } + // @ts-ignore newNode.detail = node.detail; + // @ts-ignore newNode.depth = depth; + // @ts-ignore newNode.name = name; + // @ts-ignore newNode.parentName = parentName; + // @ts-ignore newNode.property = []; + // @ts-ignore result.push(newNode); + // @ts-ignore if (node.children) { + // @ts-ignore result = result.concat(this.getFlattenTreeData(node.children, depth + 1, node.function_name)); } }); @@ -237,14 +263,18 @@ export class SpBpftraceChart { * @param propertyData * @returns */ - removeDuplicates(propertyData: Array): Array { - const result: Array = []; + removeDuplicates(propertyData: Array): Array { + const result: Array = []; propertyData.forEach((propertyGroup) => { - const groups: Array = []; - propertyGroup.forEach((property: any) => { + const groups: Array = []; + // @ts-ignore + propertyGroup.forEach((property: unknown) => { + // @ts-ignore const duplicateObj = groups.find((group) => group.func_name === property.func_name); if (duplicateObj) { + // @ts-ignore duplicateObj.begin = Math.min(duplicateObj.begin, property.begin); + // @ts-ignore duplicateObj.end = Math.max(duplicateObj.end, property.end); } else { groups.push(property); @@ -260,60 +290,82 @@ export class SpBpftraceChart { * @param relationData * @param propertyData */ - setRelationDataProperty(relationData: Array, propertyData: Array): Array { + setRelationDataProperty(relationData: Array, propertyData: Array): Array { const sampleProperty = relationData; //数组每一项进行比对 propertyData.forEach((propertyGroup) => { - propertyGroup.forEach((property: any) => { + // @ts-ignore + propertyGroup.forEach((property: unknown) => { + // @ts-ignore const relation = sampleProperty.find((relation) => relation.name === property.func_name); //property属性存储每帧数据 + // @ts-ignore relation?.property.push({ + // @ts-ignore name: property.func_name, + // @ts-ignore detail: relation.detail, + // @ts-ignore end: property.end, + // @ts-ignore begin: property.begin, + // @ts-ignore depth: relation.depth, + // @ts-ignore instructions: property.instructions, + // @ts-ignore cycles: property.cycles, }); }); }); //获取所有名字为unknown的数据 + // @ts-ignore const unknownRelation = sampleProperty.filter((relation) => relation.name.indexOf('unknown') > -1); //二维数组 用于存放unknown下所有子节点的数据 - let twoDimensionalArray: Array = []; - let result: Array = []; + let twoDimensionalArray: Array = []; + let result: Array = []; unknownRelation.forEach((unknownItem) => { result = []; twoDimensionalArray = []; + // @ts-ignore const children = unknownItem.children; //先获取到unknwon节点下每个子节点的property Object.keys(children).forEach((key) => { + // @ts-ignore unknownItem.children[key] = sampleProperty.find((relation) => relation.name === key).property; }); //将每个子节点的property加到二维数组中 - Object.values(children).forEach((value: any) => { + Object.values(children).forEach((value: unknown) => { + // @ts-ignore if (value.length > 0) { twoDimensionalArray.push(value); } }); if (twoDimensionalArray.length > 0) { //取每列的最大值和最小值 + // @ts-ignore for (let i = 0; i < twoDimensionalArray[0].length; i++) { const data = { + // @ts-ignore name: unknownItem.name, + // @ts-ignore detail: unknownItem.detail, + // @ts-ignore begin: twoDimensionalArray[0][i].begin, end: 0, + // @ts-ignore depth: unknownItem.depth, }; for (let j = 0; j < twoDimensionalArray.length; j++) { + // @ts-ignore data.end = Math.max(twoDimensionalArray[j][i].end, data.end); + // @ts-ignore data.begin = Math.min(twoDimensionalArray[j][i].begin, data.begin); } result.push(data); } + // @ts-ignore unknownItem.property = result; } }); @@ -325,16 +377,21 @@ export class SpBpftraceChart { * @param node * @param names */ - getUnknownAllChildrenNames(node: any, names: any = {}): object { + getUnknownAllChildrenNames(node: unknown, names: unknown = {}): object { + // @ts-ignore if (node.children) { - node.children.forEach((child: any) => { + // @ts-ignore + node.children.forEach((child: unknown) => { + // @ts-ignore if (child.function_name.indexOf('unknown') < 0) { + // @ts-ignore names[child.function.name] = []; } else { this.getUnknownAllChildrenNames(child, names); } }); } + // @ts-ignore return names; } } diff --git a/ide/src/trace/component/chart/SpClockChart.ts b/ide/src/trace/component/chart/SpClockChart.ts index 2b4344b9417a7c9e91da103b33db55ae74bf685d..a521cb0a3ce910214737e7c469a2c51f4e706f7a 100644 --- a/ide/src/trace/component/chart/SpClockChart.ts +++ b/ide/src/trace/component/chart/SpClockChart.ts @@ -193,7 +193,7 @@ export class SpClockChart { } // @ts-ignore - async initDmaFence(folder: TraceRow): void { + async initDmaFence(folder: TraceRow): Promise { let dmaFenceNameList = await queryDmaFenceName(); if (dmaFenceNameList.length) { let dmaFenceList = []; diff --git a/ide/src/trace/component/chart/SpPerfOutputDataChart.ts b/ide/src/trace/component/chart/SpPerfOutputDataChart.ts index 78bc407febba391236446f4a4d57ee270ee170ab..5a3f79c2077f95478b05e6ed6998ac49d7b54d03 100644 --- a/ide/src/trace/component/chart/SpPerfOutputDataChart.ts +++ b/ide/src/trace/component/chart/SpPerfOutputDataChart.ts @@ -38,11 +38,14 @@ export class SpPerfOutputDataChart { } let perfToolsDur = await queryPerfToolsDur(); if (perfToolsDur.length > 0) { + // @ts-ignore this.dur = perfToolsDur[0].dur; } else { this.dur = 3000000000; } + // @ts-ignore this.perfOutputArr = perfOutputData[0].name.split(':')[2].split(','); + // @ts-ignore let endTime: number = perfOutputData[0].ts; this.startTime = endTime - window.recordStartNS - this.dur!; if (this.startTime < 0) { @@ -80,7 +83,7 @@ export class SpPerfOutputDataChart { traceRow.canvasRestore(context, this.trace); }; } -//@ts-ignore + //@ts-ignore async initData(folder: TraceRow): Promise { let perfToolStartTime = new Date().getTime(); let perfToolList = [ @@ -127,7 +130,7 @@ export class SpPerfOutputDataChart { let durTime = new Date().getTime() - perfToolStartTime; info('The time to load the ClockData is: ', durTime); } -//@ts-ignore + //@ts-ignore async initFolder(): Promise> { let perfFolder = TraceRow.skeleton(); perfFolder.rowId = 'perfTool'; diff --git a/ide/src/trace/component/chart/SpProcessChart.ts b/ide/src/trace/component/chart/SpProcessChart.ts index b902feb8a86d6256d43690546e33106027110bce..e558a6243d4166a004d70bbec457b427a6c0e21c 100644 --- a/ide/src/trace/component/chart/SpProcessChart.ts +++ b/ide/src/trace/component/chart/SpProcessChart.ts @@ -176,7 +176,8 @@ export class SpProcessChart { key: number, asyncFuncGroups: Array ): TraceRow { - let funcRow = TraceRow.skeleton(); //@ts-ignore + let funcRow = TraceRow.skeleton(); + //@ts-ignore funcRow.rowId = `${asyncFuncGroups[0].funName}-${key}`; //@ts-ignore funcRow.asyncFuncName = asyncFuncGroups[0].funName; funcRow.asyncFuncNamePID = key; @@ -184,7 +185,8 @@ export class SpProcessChart { funcRow.enableCollapseChart(FOLD_HEIGHT, this.trace); //允许折叠泳道图 funcRow.rowParentId = `${parentRow.rowId}`; funcRow.rowHidden = !parentRow.expansion; - funcRow.style.width = '100%'; //@ts-ignore + funcRow.style.width = '100%'; + //@ts-ignore funcRow.name = `${asyncFuncGroups[0].funName} ${key}`; funcRow.setAttribute('children', ''); funcRow.supplierFrame = async (): Promise => { @@ -219,14 +221,16 @@ export class SpProcessChart { left: unknown, right: unknown ): boolean => //@ts-ignore - Math.max(left.startTs + left.dur, right.startTs + right.dur) - Math.min(left.startTs, right.startTs) < //@ts-ignore + Math.max(left.startTs + left.dur, right.startTs + right.dur) - Math.min(left.startTs, right.startTs) < + //@ts-ignore left.dur + right.dur; let depths: unknown = []; let createDepth = (currentDepth: number, index: number): void => { //@ts-ignore if (depths[currentDepth] === undefined || !isIntersect(depths[currentDepth], res[index])) { //@ts-ignore - res[index].depth = currentDepth; //@ts-ignore + res[index].depth = currentDepth; + //@ts-ignore depths[currentDepth] = res[index]; } else { createDepth(++currentDepth, index); @@ -235,10 +239,12 @@ export class SpProcessChart { res.forEach((it, i): void => { //@ts-ignore res[i].funName = this.traceId ? Utils.getInstance().getCallStatckMap().get(`${this.traceId}_${res[i].id!}`) : Utils.getInstance().getCallStatckMap().get(res[i].id!); //@ts-ignore - res[i].threadName = Utils.getInstance().getThreadMap().get(res[i].tid!); //@ts-ignore + res[i].threadName = Utils.getInstance().getThreadMap().get(res[i].tid!); + //@ts-ignore if (it.dur === -1 || it.dur === null || it.dur === undefined) { //@ts-ignore - it.dur = (TraceRow.range?.endNS || 0) - it.startTs; //@ts-ignore + it.dur = (TraceRow.range?.endNS || 0) - it.startTs; + //@ts-ignore it.flag = 'Did not end'; } createDepth(0, i); @@ -414,7 +420,8 @@ export class SpProcessChart { renderServiceProcess = await queryRsProcess(); } // @ts-ignore - info('ProcessList Data size is: ', processList!.length); // @ts-ignore + info('ProcessList Data size is: ', processList!.length); + // @ts-ignore await this.initProcessRow(processList, allTaskPoolPid, allJankProcess, renderServiceProcess, traceId); let durTime = new Date().getTime() - time; info('The time to load the Process data is: ', durTime); @@ -456,9 +463,12 @@ export class SpProcessChart { info('fetch per process pid,switch_count,thread_count,slice_count,mem_count'); pidCountArray.forEach((it) => { //@ts-ignore - this.processThreadDataCountMap.set(it.pid, it.switch_count); //@ts-ignore - this.processThreadCountMap.set(it.pid, it.thread_count); //@ts-ignore - this.processFuncDataCountMap.set(it.pid, it.slice_count); //@ts-ignore + this.processThreadDataCountMap.set(it.pid, it.switch_count); + //@ts-ignore + this.processThreadCountMap.set(it.pid, it.thread_count); + //@ts-ignore + this.processFuncDataCountMap.set(it.pid, it.slice_count); + //@ts-ignore this.processMemDataCountMap.set(it.pid, it.mem_count); }); let eventCountList: Array = await queryEventCountMap(traceId); @@ -468,12 +478,13 @@ export class SpProcessChart { return pre; }, {}); // threadStateList转数组 - let threadArray = Array.from(SpProcessChart.threadStateList); // [['1235-1235',12312321312],['12-12',4546465]] + let threadArray = Array.from(SpProcessChart.threadStateList); // @ts-ignore 排序 threadArray.sort((a: Array, b: Array) => // @ts-ignore b[1] - a[1]); - let queryProcessThreadsByTableResult = await queryProcessThreadsByTable(traceId); // @ts-ignore + let queryProcessThreadsByTableResult = await queryProcessThreadsByTable(traceId); + // @ts-ignore // 全量threads排序 // @ts-ignore this.processThreads = Utils.sortThreadRow(threadArray, queryProcessThreadsByTableResult, 'thread'); @@ -1061,9 +1072,12 @@ export class SpProcessChart { thread: ThreadStruct, processRow: TraceRow, threadRow: TraceRow, - threads: ThreadStruct[], //@ts-ignore - threadRowArr: TraceRow[], //@ts-ignore - actualRow: TraceRow | null, //@ts-ignore + threads: ThreadStruct[], + //@ts-ignore + threadRowArr: TraceRow[], + //@ts-ignore + actualRow: TraceRow | null, + //@ts-ignore expectedRow: TraceRow | null, startupRow: TraceRow | null | undefined, soRow: TraceRow | null | undefined @@ -1074,7 +1088,8 @@ export class SpProcessChart { if (threadRow.name === `${it.processName} ${it.pid}`) { this.renderRow = threadRow; } - let flag = threads.length === index + 1 && !this.threadFuncMaxDepthMap.has(`${thread.upid}-${thread.tid}`); //@ts-ignore + let flag = threads.length === index + 1 && !this.threadFuncMaxDepthMap.has(`${thread.upid}-${thread.tid}`); + //@ts-ignore processRow.sortRenderServiceData(threadRow, threadRow, threadRowArr, flag); } else { if (threadRow.rowId === threadRow.rowParentId) { @@ -1109,7 +1124,8 @@ export class SpProcessChart { //@ts-ignore let max = this.threadFuncMaxDepthMap.get(`${thread.upid}-${thread.tid}`) || 1; let maxHeight = max * 18 + 6; - let funcRow = TraceRow.skeleton(this.traceId); //@ts-ignore + let funcRow = TraceRow.skeleton(this.traceId); + //@ts-ignore funcRow.rowId = `${thread.tid}`; funcRow.rowType = TraceRow.ROW_TYPE_FUNC; funcRow.enableCollapseChart(FOLD_HEIGHT, this.trace); //允许折叠泳道图 @@ -1118,13 +1134,16 @@ export class SpProcessChart { funcRow.rowHidden = !processRow.expansion; funcRow.checkType = threadRow.checkType; funcRow.style.width = '100%'; - funcRow.style.height = `${maxHeight}px`; //@ts-ignore - funcRow.name = `${thread.threadName || 'Thread'} ${thread.tid}`; //@ts-ignore + funcRow.style.height = `${maxHeight}px`; + //@ts-ignore + funcRow.name = `${thread.threadName || 'Thread'} ${thread.tid}`; + //@ts-ignore funcRow.namePrefix = `${thread.threadName || 'Thread'}`; funcRow.setAttribute('children', ''); funcRow.supplierFrame = async (): Promise> => { //@ts-ignore - const rs = await funcDataSender(thread.tid || 0, thread.upid || 0, funcRow, this.traceId); //@ts-ignore + const rs = await funcDataSender(thread.tid || 0, thread.upid || 0, funcRow, this.traceId); + //@ts-ignore return this.funDataSenderCallback(rs, funcRow, thread); }; funcRow.favoriteChangeHandler = this.trace.favoriteChangeHandler; @@ -1143,7 +1162,8 @@ export class SpProcessChart { this.trace ); //@ts-ignore if (process.processName === 'render_service') { - let flag = threads.length === index + 1; //@ts-ignore + let flag = threads.length === index + 1; + //@ts-ignore processRow.sortRenderServiceData(funcRow, threadRow, threadRowArr, flag); } else { processRow.addChildTraceRowAfter(funcRow, threadRow); @@ -1195,13 +1215,15 @@ export class SpProcessChart { //@ts-ignore let processMem = this.processMem.filter((mem) => mem.pid === it.pid); processMem.forEach((mem) => { - let row = TraceRow.skeleton(); //@ts-ignore + let row = TraceRow.skeleton(); + //@ts-ignore row.rowId = `${mem.trackId}`; row.rowType = TraceRow.ROW_TYPE_MEM; row.rowParentId = `${it.pid}`; row.rowHidden = !processRow.expansion; row.style.height = '40px'; - row.style.width = '100%'; //@ts-ignore + row.style.width = '100%'; + //@ts-ignore row.name = `${mem.trackName}`; row.setAttribute('children', ''); row.favoriteChangeHandler = this.trace.favoriteChangeHandler; @@ -1219,7 +1241,8 @@ export class SpProcessChart { row.findHoverStruct = (): void => { ProcessMemStruct.hoverProcessMemStruct = row.getHoverStruct(false); }; - row.supplierFrame = (): Promise> => //@ts-ignore + row.supplierFrame = (): Promise> => + //@ts-ignore processMemDataSender(mem.trackId, row).then((resultProcess) => { //@ts-ignore let maxValue = this.filterIdMaxValue.get(mem.trackId) || 0; @@ -1272,7 +1295,7 @@ export class SpProcessChart { // @ts-ignore let modifiedObject = { ...object }; modifiedObject.startTime = modifiedObject.startTs; - Reflect.deleteProperty(modifiedObject, "startTs"); + Reflect.deleteProperty(modifiedObject, 'startTs'); modifiedObject.rowId = name; modifiedObject.type = 'func'; SpProcessChart.asyncFuncCache.push({ ...modifiedObject }); @@ -1280,7 +1303,10 @@ export class SpProcessChart { //Async Function addAsyncFunction(it: { pid: number; processName: string | null }, processRow: TraceRow): void { let isCategoryAsyncfunc: boolean = FlagsConfig.getFlagsConfigEnableStatus('Start&Finish Trace Category'); - let asyncRemoveCatArr: unknown[], asyncCat: unknown, setArrayLenThanOne: unknown, setArrayLenOnlyOne: unknown; + let asyncRemoveCatArr: unknown[]; + let asyncCat: unknown; + let setArrayLenThanOne: unknown; + let setArrayLenOnlyOne: unknown; //@ts-ignore let asyncFuncList = this.processAsyncFuncMap[it.pid] || []; if (!asyncFuncList.length) { @@ -1297,7 +1323,7 @@ export class SpProcessChart { let param: Array = aggregateData[key]; //@ts-ignore this.makeAddAsyncFunction(param, it, processRow, key); - }) + }); } else { //不聚合异步trace let asyncFuncGroup = Utils.groupBy(asyncFuncList, 'funName'); @@ -1333,7 +1359,8 @@ export class SpProcessChart { // @ts-ignore depthArray[currentDepth] = asyncFunctions[index]; // @ts-ignore - this.toAsyncFuncCache(asyncFunctions[index], `${asyncFunctions[i].funName}-${it.pid}`);//处理缓存的异步trace数据缺失的字段 + //处理缓存的异步trace数据缺失的字段 + this.toAsyncFuncCache(asyncFunctions[index], `${asyncFunctions[i].funName}-${it.pid}`); }); } //@ts-ignore @@ -1373,7 +1400,7 @@ export class SpProcessChart { asyncRemoveCatArr.push(el); } } - asyncCat = flag ? Utils.groupBy(asyncCatArr, 'cat') : Object.fromEntries(asyncCatMap) + asyncCat = flag ? Utils.groupBy(asyncCatArr, 'cat') : Object.fromEntries(asyncCatMap); return { asyncRemoveCatArr, asyncCat }; } //处理cat字段为null的数据,按funname分类,分别按len>1和=1去处理 @@ -1412,7 +1439,7 @@ export class SpProcessChart { it: { pid: number; processName: string | null }, processRow: TraceRow, key: string - ) { + ): void { let maxDepth: number = -1; let i = 0; let mapDepth = new Map(); @@ -1430,13 +1457,15 @@ export class SpProcessChart { // @ts-ignore if (val.et < param.startTs) { flag = true; - val.et = itemEndTime;//更新endts + //更新endts + val.et = itemEndTime; // @ts-ignore param.depth = Number(key); break; } } - if (!flag) {//depth增加 + if (!flag) { + //depth增加 maxDepth++; mapDepth.set(`${maxDepth}`, { et: itemEndTime }); // @ts-ignore @@ -1477,7 +1506,7 @@ export class SpProcessChart { it: { pid: number; processName: string | null }, processRow: TraceRow, key: string - ) { + ): void { const maxHeight = this.calMaxHeight(asyncFunctions); // @ts-ignore const namesSet = new Set(asyncFunctions.map((item) => item.funName)); @@ -1514,51 +1543,68 @@ export class SpProcessChart { processRow.addChildTraceRow(funcRow); } - addAsyncCatFunction(it: { pid: number; processName: string | null }, processRow: TraceRow): void {//@ts-ignore + addAsyncCatFunction(it: { pid: number; processName: string | null }, processRow: TraceRow): void { + //@ts-ignore let asyncFuncCatList = this.processAsyncFuncCatMap[it.pid] || []; - let asyncFuncGroup: unknown = Utils.groupBy(asyncFuncCatList, 'threadName'); //@ts-ignore - Reflect.ownKeys(asyncFuncGroup).map((key: unknown) => { //@ts-ignore + let asyncFuncGroup: unknown = Utils.groupBy(asyncFuncCatList, 'threadName'); + //@ts-ignore + Reflect.ownKeys(asyncFuncGroup).map((key: unknown) => { + //@ts-ignore let asyncFunctions: Array = asyncFuncGroup[key]; if (asyncFunctions.length > 0) { - let isIntersect = (a: unknown, b: unknown): boolean => //@ts-ignore + let isIntersect = (a: unknown, b: unknown): boolean => + //@ts-ignore Math.max(a.startTs + a.dur, b.startTs + b.dur) - Math.min(a.startTs, b.startTs) < a.dur + b.dur; let depthArray: unknown = []; - asyncFunctions.forEach((it, i) => {//@ts-ignore - if (it.dur === -1 || it.dur === null || it.dur === undefined) {//@ts-ignore - it.dur = (TraceRow.range?.endNS || 0) - it.startTs;//@ts-ignore - it.flag = 'Did not end';//@ts-ignore + asyncFunctions.forEach((it, i) => { + //@ts-ignore + if (it.dur === -1 || it.dur === null || it.dur === undefined) { + //@ts-ignore + it.dur = (TraceRow.range?.endNS || 0) - it.startTs; + //@ts-ignore + it.flag = 'Did not end'; + //@ts-ignore it.nofinish = true; } let currentDepth = 0; - let index = i;//@ts-ignore + let index = i; + //@ts-ignore while (depthArray[currentDepth] !== undefined && isIntersect(depthArray[currentDepth], asyncFunctions[index])) { currentDepth++; }//@ts-ignore - asyncFunctions[index].depth = currentDepth;//@ts-ignore - depthArray[currentDepth] = asyncFunctions[index];//@ts-ignore + asyncFunctions[index].depth = currentDepth; + //@ts-ignore + depthArray[currentDepth] = asyncFunctions[index]; + //@ts-ignore this.toAsyncFuncCache(asyncFunctions[index], `${asyncFunctions[0].threadName}`); }); const maxHeight = this.calMaxHeight(asyncFunctions); - let funcRow = TraceRow.skeleton();//@ts-ignore - funcRow.rowId = `${asyncFunctions[0].threadName}`;//@ts-ignore + let funcRow = TraceRow.skeleton(); + //@ts-ignore + funcRow.rowId = `${asyncFunctions[0].threadName}`; + //@ts-ignore funcRow.asyncFuncThreadName = asyncFunctions[0].threadName; funcRow.asyncFuncNamePID = it.pid; funcRow.rowType = TraceRow.ROW_TYPE_FUNC; - funcRow.enableCollapseChart(FOLD_HEIGHT, this.trace); //允许折叠泳道图 + funcRow.enableCollapseChart(FOLD_HEIGHT, this.trace); + //允许折叠泳道图 funcRow.rowParentId = `${it.pid}`; funcRow.rowHidden = !processRow.expansion; funcRow.style.width = '100%'; funcRow.style.height = `${maxHeight}px`; - funcRow.setAttribute('height', `${maxHeight}`);//@ts-ignore + funcRow.setAttribute('height', `${maxHeight}`); + //@ts-ignore funcRow.name = `${asyncFunctions[0].threadName}`; funcRow.setAttribute('children', ''); funcRow.findHoverStruct = (): void => { FuncStruct.hoverFuncStruct = funcRow.getHoverStruct(); - }; //@ts-ignore + }; + //@ts-ignore funcRow.supplier = (): Promise => new Promise((resolve) => resolve(asyncFunctions)); funcRow.favoriteChangeHandler = this.trace.favoriteChangeHandler; funcRow.selectChangeHandler = this.trace.selectChangeHandler; - funcRow.onThreadHandler = rowThreadHandler('func', 'context', { //@ts-ignore + funcRow.onThreadHandler = rowThreadHandler('func', 'context', { + //@ts-ignore type: `func-${asyncFunctions[0].threadName}-${it.pid}`, }, funcRow, this.trace); processRow.addChildTraceRow(funcRow); diff --git a/ide/src/trace/component/trace/TimerShaftElement.ts b/ide/src/trace/component/trace/TimerShaftElement.ts index 9317c60c269444173144c5494d20d8ca1f160597..ec10bb060ec97ef8c7ba86798a38a305ca9b5887 100644 --- a/ide/src/trace/component/trace/TimerShaftElement.ts +++ b/ide/src/trace/component/trace/TimerShaftElement.ts @@ -33,15 +33,16 @@ export function randomRgbColor(): string { let r = Math.floor(Math.random() * 255); let g = Math.floor(Math.random() * 255); let b = Math.floor(Math.random() * 255); + let color = ''; if (r * 0.299 + g * 0.587 + b * 0.114 < 192) { let r16 = r.toString(16).length === 1 && r.toString(16) <= 'f' ? 0 + r.toString(16) : r.toString(16); let g16 = g.toString(16).length === 1 && g.toString(16) <= 'f' ? 0 + g.toString(16) : g.toString(16); let b16 = b.toString(16).length === 1 && b.toString(16) <= 'f' ? 0 + b.toString(16) : b.toString(16); - let color = '#' + r16 + g16 + b16; - return color; + color = '#' + r16 + g16 + b16; } else { randomRgbColor(); } + return color; } export function ns2s(ns: number): string { @@ -508,7 +509,7 @@ export class TimerShaftElement extends BaseElement { this._rangeRuler?.keyUp(ev); }; - disconnectedCallback(): void {} + disconnectedCallback(): void { } firstRender = true; diff --git a/ide/src/trace/component/trace/base/RangeSelect.ts b/ide/src/trace/component/trace/base/RangeSelect.ts index 8beeff57198b2f092b37ac3cd1f2a4ed771905b4..934c3633eea27ba64b4019bb36e159a4adcc37d7 100644 --- a/ide/src/trace/component/trace/base/RangeSelect.ts +++ b/ide/src/trace/component/trace/base/RangeSelect.ts @@ -367,6 +367,7 @@ export class RangeSelect { // @ts-ignore private handleRangeSelectAndDraw(rows: Array>, ev: MouseEvent): void { let rangeSelect: RangeSelectStruct | undefined; + let result: boolean; this.rangeTraceRow = rows.filter((it) => { if (it.rangeSelect) { if (!rangeSelect) { @@ -395,8 +396,11 @@ export class RangeSelect { } } TraceRow.rangeSelectObject = rangeSelect; - return true; + result = true; + } else { + result = false; } + return result; }); this.timerShaftEL!.sportRuler!.isRangeSelect = (this.rangeTraceRow?.length || 0) > 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 096350dca765475fe3da9103b5c571a9ee6cc200..db2c3a27b4a57a42c0aa1b538d6d0058e9a2c285 100644 --- a/ide/src/trace/component/trace/base/TraceRow.ts +++ b/ide/src/trace/component/trace/base/TraceRow.ts @@ -587,8 +587,8 @@ export class TraceRow extends HTMLElement { offset: boolean = false, maxKey: string | undefined = undefined ): T | undefined { + let item: T | undefined; if (this.isHover) { - let item: T | undefined; if (maxKey) { let arr = this.dataListCache .filter((re) => re.frame && isFrameContainPoint(re.frame, this.hoverX, this.hoverY, strict, offset)) // @ts-ignore @@ -599,8 +599,8 @@ export class TraceRow extends HTMLElement { (re) => re.frame && isFrameContainPoint(re.frame, this.hoverX, this.hoverY, strict, offset) ); } - return item; } + return item; } // @ts-ignore diff --git a/ide/src/trace/component/trace/sheet/TabPaneCurrentSelection.ts b/ide/src/trace/component/trace/sheet/TabPaneCurrentSelection.ts index 73a9ff543df28d69965e41338ef1491d4fe84cbe..347f96f40e6dfecf6928c3038641e61e0eee8295 100644 --- a/ide/src/trace/component/trace/sheet/TabPaneCurrentSelection.ts +++ b/ide/src/trace/component/trace/sheet/TabPaneCurrentSelection.ts @@ -365,9 +365,11 @@ export class TabPaneCurrentSelection extends BaseElement { let FunDetailList: Array = new Array(); if (this.funcDetailMap.size === 0) { await caches.match('/funDetail').then((res) => { + let result: Promise | undefined; if (res) { - return res!.text(); + result = res!.text(); } + return result; }).then((res) => { if (res) { let funcDetail = JSON.parse(res); @@ -1898,10 +1900,12 @@ export class TabPaneCurrentSelection extends BaseElement { */ async queryThreadWakeUpFromData(itid: number, startTime: number, dur: number): Promise { let wakeUps = await queryThreadWakeUpFrom(itid, startTime + Utils.getInstance().getRecordStartNS()); + let item; // @ts-ignore if (wakeUps !== undefined && wakeUps.length > 0) { - return wakeUps[0]; + item = wakeUps[0]; } + return item; } /** diff --git a/ide/src/trace/component/trace/sheet/bpftrace/TabPaneSampleInstruction.ts b/ide/src/trace/component/trace/sheet/bpftrace/TabPaneSampleInstruction.ts index 9900179a387d3319f7a965b0d83b9e43c540c38e..55a69ca96e5f9ffe30451281e40d615e076ab06a 100644 --- a/ide/src/trace/component/trace/sheet/bpftrace/TabPaneSampleInstruction.ts +++ b/ide/src/trace/component/trace/sheet/bpftrace/TabPaneSampleInstruction.ts @@ -355,7 +355,7 @@ export class TabPaneSampleInstruction extends BaseElement { * @param canvasY * @returns */ - searchDataByCoord(nodes: unknown, canvasX: number, canvasY: number) { + searchDataByCoord(nodes: unknown, canvasX: number, canvasY: number): void | null { // @ts-ignore for (const key in nodes) { // @ts-ignore diff --git a/ide/src/trace/component/trace/sheet/bpftrace/TabPaneSampleInstructionDistributions.ts b/ide/src/trace/component/trace/sheet/bpftrace/TabPaneSampleInstructionDistributions.ts index a7c7dd0fc774def6ee0f38c29d86fa5a34637c17..ef58348a3bd6b0a674a8410688370001152b9626 100644 --- a/ide/src/trace/component/trace/sheet/bpftrace/TabPaneSampleInstructionDistributions.ts +++ b/ide/src/trace/component/trace/sheet/bpftrace/TabPaneSampleInstructionDistributions.ts @@ -136,7 +136,7 @@ export class TabPaneSampleInstructionDistributions extends BaseElement { * @param canvasY * @returns */ - searchDataByCoord(nodes: unknown, canvasX: number, canvasY: number) { + searchDataByCoord(nodes: unknown, canvasX: number, canvasY: number): void | null { // @ts-ignore for (let i = 0; i < nodes.length; i++) { // @ts-ignore diff --git a/ide/src/trace/component/trace/sheet/bpftrace/TabPaneSampleInstructionSelection.ts b/ide/src/trace/component/trace/sheet/bpftrace/TabPaneSampleInstructionSelection.ts index 17350170842c4d7d56d7c398adc2f7f76e8314e8..96b91294e8c01e8455ee8e0135f240d43c45fed6 100644 --- a/ide/src/trace/component/trace/sheet/bpftrace/TabPaneSampleInstructionSelection.ts +++ b/ide/src/trace/component/trace/sheet/bpftrace/TabPaneSampleInstructionSelection.ts @@ -355,7 +355,7 @@ export class TabPaneSampleInstructionSelection extends BaseElement { * @param canvasY * @returns */ - searchDataByCoord(nodes: unknown, canvasX: number, canvasY: number) { + searchDataByCoord(nodes: unknown, canvasX: number, canvasY: number): void | null { // @ts-ignore for (const key in nodes) { // @ts-ignore @@ -410,7 +410,7 @@ export class TabPaneSampleInstructionSelection extends BaseElement { * @param instructionData * @returns */ - getAvgInstructionData(instructionData: Array) { + getAvgInstructionData(instructionData: Array): unknown { // @ts-ignore const length = instructionData[0].property.length; // @ts-ignore diff --git a/ide/src/trace/component/trace/sheet/cpu/TabPaneBoxChild.ts b/ide/src/trace/component/trace/sheet/cpu/TabPaneBoxChild.ts index 017518e92cdaec198ff3cc550f4507dba969a7c8..c5f3477c799fe7ece2fc7812fca030c8c32b68d0 100644 --- a/ide/src/trace/component/trace/sheet/cpu/TabPaneBoxChild.ts +++ b/ide/src/trace/component/trace/sheet/cpu/TabPaneBoxChild.ts @@ -70,21 +70,29 @@ export class TabPaneBoxChild extends BaseElement { getDataByDB(val: BoxJumpParam): void { this.boxChildTbl!.loading = true; - sliceChildBoxSender( 'state-box', val.leftNs, val.rightNs, val.threadId!, val.processId!, + sliceChildBoxSender('state-box', val.leftNs, val.rightNs, val.threadId!, val.processId!, val.cpus, val.state, val.traceId!).then((result: unknown): void => { - this.boxChildTbl!.loading = false; // @ts-ignore - if (result.length !== null && result.length > 0) { // @ts-ignore + this.boxChildTbl!.loading = false; + // @ts-ignore + if (result.length !== null && result.length > 0) { + // @ts-ignore result.map((e: unknown) => { //获取优先级数据 // @ts-ignore let prioObj = Utils.getInstance().getSchedSliceMap().get(`${e.id}-${e.startTime}`); //thread statesTab页 dur截取的问题 与thread states保持一致 - if (val.currentId === 'box-thread-states') { // @ts-ignore - if (e.startTime < val.leftNs && (e.startTime + e.dur) < val.rightNs) { // @ts-ignore - e.dur = (e.startTime + e.dur) - val.leftNs; // @ts-ignore - } else if ((e.startTime + e.dur) > val.rightNs && e.startTime > val.leftNs) { // @ts-ignore - e.dur = val.rightNs - e.startTime; // @ts-ignore - } else if (e.startTime < val.leftNs && (e.startTime + e.dur) > val.rightNs) { // @ts-ignore + if (val.currentId === 'box-thread-states') { + // @ts-ignore + if (e.startTime < val.leftNs && (e.startTime + e.dur) < val.rightNs) { + // @ts-ignore + e.dur = (e.startTime + e.dur) - val.leftNs; + // @ts-ignore + } else if ((e.startTime + e.dur) > val.rightNs && e.startTime > val.leftNs) { + // @ts-ignore + e.dur = val.rightNs - e.startTime; + // @ts-ignore + } else if (e.startTime < val.leftNs && (e.startTime + e.dur) > val.rightNs) { + // @ts-ignore e.dur = val.rightNs - val.leftNs; } } @@ -92,17 +100,27 @@ export class TabPaneBoxChild extends BaseElement { // @ts-ignore e.sTime = Utils.getTimeString(e.startTime); // @ts-ignore - e.absoluteTime = ((window as unknown).recordStartNS + e.startTime) / 1000000000; // @ts-ignore - e.state = Utils.getEndState(e.state)!; // @ts-ignore - e.duration = e.dur / 1000000; // @ts-ignore - e.prior = prioObj ? prioObj.priority : '-'; // @ts-ignore - e.core = e.cpu === undefined || e.cpu === null ? '-' : `CPU${e.cpu}`; // @ts-ignore - let processInfo: string | undefined = Utils.getInstance().getProcessMap().get(e.pid); // @ts-ignore - e.processName = `${processInfo === undefined || processInfo === null ? 'process' : processInfo}(${e.pid})`; // @ts-ignore - let threadInfo: string | undefined = Utils.getInstance().getThreadMap().get(e.tid); // @ts-ignore - e.threadName = `${threadInfo === undefined || threadInfo === null ? 'thread' : threadInfo}(${e.tid})`; // @ts-ignore + e.absoluteTime = ((window as unknown).recordStartNS + e.startTime) / 1000000000; + // @ts-ignore + e.state = Utils.getEndState(e.state)!; + // @ts-ignore + e.duration = e.dur / 1000000; + // @ts-ignore + e.prior = prioObj ? prioObj.priority : '-'; + // @ts-ignore + e.core = e.cpu === undefined || e.cpu === null ? '-' : `CPU${e.cpu}`; + // @ts-ignore + let processInfo: string | undefined = Utils.getInstance().getProcessMap().get(e.pid); + // @ts-ignore + e.processName = `${processInfo === undefined || processInfo === null ? 'process' : processInfo}(${e.pid})`; + // @ts-ignore + let threadInfo: string | undefined = Utils.getInstance().getThreadMap().get(e.tid); + // @ts-ignore + e.threadName = `${threadInfo === undefined || threadInfo === null ? 'thread' : threadInfo}(${e.tid})`; + // @ts-ignore e.note = '-'; - }); // @ts-ignore + }); + // @ts-ignore this.boxChildSource = result; if (this.boxChildTbl) { // @ts-ignore @@ -116,7 +134,7 @@ export class TabPaneBoxChild extends BaseElement { } } } - ); + ); } initHtml(): string { @@ -162,8 +180,10 @@ export class TabPaneBoxChild extends BaseElement { function compare(property, sort, type) { return function (boxChildLeftData: SelectionData, boxChildRightData: SelectionData): number { if (type === 'number') { - return sort === 2 // @ts-ignore - ? parseFloat(boxChildRightData[property]) - parseFloat(boxChildLeftData[property]) // @ts-ignore + return sort === 2 + // @ts-ignore + ? parseFloat(boxChildRightData[property]) - parseFloat(boxChildLeftData[property]) + // @ts-ignore : parseFloat(boxChildLeftData[property]) - parseFloat(boxChildRightData[property]); } else { // @ts-ignore diff --git a/ide/src/trace/component/trace/sheet/file-system/TabPaneFilesystemStatistics.ts b/ide/src/trace/component/trace/sheet/file-system/TabPaneFilesystemStatistics.ts index 62c1b312e6cf78cca9f17e25e4541d79a402752b..afbf6b842f042b0c9d7178f21b265cb86a0e6f9a 100644 --- a/ide/src/trace/component/trace/sheet/file-system/TabPaneFilesystemStatistics.ts +++ b/ide/src/trace/component/trace/sheet/file-system/TabPaneFilesystemStatistics.ts @@ -228,7 +228,7 @@ export class TabPaneFileStatistics extends BaseElement { fileStatisticsA.node[key] - fileStatisticsB.node[key] : this.fileStatisticsSortType === 2 ? // @ts-ignore - fileStatisticsB.node[key] - fileStatisticsA.node[key] : 0 + fileStatisticsB.node[key] - fileStatisticsA.node[key] : 0; }); // @ts-ignore fileStatisticsAllNode.children.forEach((item: unknown): void => { // @ts-ignore diff --git a/ide/src/trace/component/trace/sheet/file-system/TabPaneIOTierStatistics.ts b/ide/src/trace/component/trace/sheet/file-system/TabPaneIOTierStatistics.ts index c53ae91fff993da14d2cb5e9863018b4452fabcd..9d107599ab97313ffc9615636273ad363d15c214 100644 --- a/ide/src/trace/component/trace/sheet/file-system/TabPaneIOTierStatistics.ts +++ b/ide/src/trace/component/trace/sheet/file-system/TabPaneIOTierStatistics.ts @@ -333,13 +333,12 @@ export class TabPaneIOTierStatistics extends BaseElement { allNode.children.forEach((item: unknown): void => { // @ts-ignore item.children.sort((ioTierStatItemA: unknown, ioTierStatItemB: unknown) => { - if (this.ioTierStatisticsSortType === 1) { + return this.ioTierStatisticsSortType === 1 ? // @ts-ignore - return ioTierStatItemA.node[key] - ioTierStatItemB.node[key]; - } else if (this.ioTierStatisticsSortType === 2) { - // @ts-ignore - return ioTierStatItemB.node[key] - ioTierStatItemA.node[key]; - } + ioTierStatItemA.node[key] - ioTierStatItemB.node[key] : + this.ioTierStatisticsSortType === 2 ? + // @ts-ignore + ioTierStatItemB.node[key] - ioTierStatItemA.node[key] : 0; }); // @ts-ignore item.children.forEach((ioTierStatItem: unknown): void => { // @ts-ignore diff --git a/ide/src/trace/component/trace/sheet/frequsage/TabPaneFreqUsage.ts b/ide/src/trace/component/trace/sheet/frequsage/TabPaneFreqUsage.ts index f0a38ae29a1af6618ccab226958a91589ce92609..70dadfc3e707f3a32632b131bbe9de6eab099e6d 100644 --- a/ide/src/trace/component/trace/sheet/frequsage/TabPaneFreqUsage.ts +++ b/ide/src/trace/component/trace/sheet/frequsage/TabPaneFreqUsage.ts @@ -73,7 +73,7 @@ export class TabPaneFreqUsage extends BaseElement { } const LEFT_TIME: number = threadStatesParam.leftNs + threadStatesParam.recordStartNs; const RIGHT_TIME: number = threadStatesParam.rightNs + threadStatesParam.recordStartNs; - const args = {leftNs: LEFT_TIME, rightNs: RIGHT_TIME, cpuArray: cpuArray}; + const args = { leftNs: LEFT_TIME, rightNs: RIGHT_TIME, cpuArray: cpuArray }; let resultArr: Array = orgnazitionMap(runningResult, cpuFreqData, args); // 递归拿出来最底层的数据,并以进程层级的数据作为分割 this.recursion(resultArr); @@ -368,9 +368,10 @@ function returnObj( ? SpSegmentationChart.freqInfoMapData.get(item.cpu)?.get(cpuFreqData.value) : cpuFreqData.value )!; + let result: RunningFreqData | undefined; switch (flag) { case 1: - return { + result = { thread: item.pid + '_' + item.tid, consumption: consumption * item.dur, cpu: item.cpu, @@ -379,7 +380,7 @@ function returnObj( percent: (item.dur / sum) * PERCENT, }; case 2: - return { + result = { thread: item.pid + '_' + item.tid, consumption: consumption * (cpuFreqData.ts + cpuFreqData.dur - item.ts), cpu: item.cpu, @@ -388,7 +389,7 @@ function returnObj( percent: ((cpuFreqData.ts + cpuFreqData.dur - item.ts) / sum) * PERCENT, }; case 3: - return { + result = { thread: item.pid + '_' + item.tid, consumption: consumption * (item.dur + item.ts - cpuFreqData.ts), cpu: item.cpu, @@ -397,7 +398,7 @@ function returnObj( percent: ((item.dur + item.ts - cpuFreqData.ts) / sum) * PERCENT, }; case 4: - return { + result = { thread: item.pid + '_' + item.tid, consumption: consumption * cpuFreqData.dur, cpu: item.cpu, @@ -406,7 +407,7 @@ function returnObj( percent: (cpuFreqData.dur / sum) * PERCENT, }; case 5: - return { + result = { thread: item.pid + '_' + item.tid, consumption: 0, cpu: item.cpu, @@ -415,6 +416,7 @@ function returnObj( percent: (item.dur / sum) * PERCENT, }; } + return result; } /** diff --git a/ide/src/trace/component/trace/sheet/hiperf/TabPerfProfile.ts b/ide/src/trace/component/trace/sheet/hiperf/TabPerfProfile.ts index 065e470132af0ab2de16754409948bf4a00aa67b..06617249dafa86571973822b48d0f5a0e9b230aa 100644 --- a/ide/src/trace/component/trace/sheet/hiperf/TabPerfProfile.ts +++ b/ide/src/trace/component/trace/sheet/hiperf/TabPerfProfile.ts @@ -679,7 +679,7 @@ export class TabpanePerfProfile extends BaseElement { perfProfileArgs.push({ funcName: 'onlyKernel', funcArgs: [isOnlyKernel], - }) + }); perfProfileArgs.push({ funcName: 'getCallChainsBySampleIds', funcArgs: [isTopDown], diff --git a/ide/src/trace/component/trace/sheet/native-memory/TabPaneNMStatisticAnalysis.ts b/ide/src/trace/component/trace/sheet/native-memory/TabPaneNMStatisticAnalysis.ts index f53b3b650bab1cb8c21c488bb83db5c3d92dff7c..4cdc85e5acf526ef056a653bcd1178a695d87caa 100644 --- a/ide/src/trace/component/trace/sheet/native-memory/TabPaneNMStatisticAnalysis.ts +++ b/ide/src/trace/component/trace/sheet/native-memory/TabPaneNMStatisticAnalysis.ts @@ -1157,7 +1157,7 @@ export class TabPaneNMStatisticAnalysis extends BaseElement { this.currentLevelReleaseCount += item.count; } } - } + }; for (let itemData of dbArray) { // @ts-ignore diff --git a/ide/src/trace/component/trace/sheet/process/TabPaneSlices.ts b/ide/src/trace/component/trace/sheet/process/TabPaneSlices.ts index 8ec4a66707d46867571f36f590ee083d3b7a7bd1..11ac0d06f9c38ec2a20a895ef61b85c5a31f4306 100644 --- a/ide/src/trace/component/trace/sheet/process/TabPaneSlices.ts +++ b/ide/src/trace/component/trace/sheet/process/TabPaneSlices.ts @@ -96,8 +96,8 @@ export class TabPaneSlices extends BaseElement { count.process = ' '; count.wallDuration = parseFloat((sumWall / 1000000.0).toFixed(5)); count.occurrences = sumOcc; - count.tabTitle = 'Summary'; - count.allName = processSlicesResult.map((item: any) => item.name); + count.tabTitle = 'Summary';//@ts-ignore + count.allName = processSlicesResult.map((item: unknown) => item.name); count.asyncNames = asyncNames; count.asyncCatNames = asyncCatNames; processSlicesResult.splice(0, 0, count); //@ts-ignore diff --git a/ide/src/trace/component/trace/sheet/smaps/TabPaneSmapsStatistics.ts b/ide/src/trace/component/trace/sheet/smaps/TabPaneSmapsStatistics.ts index c6995bccbbf14b6fc299f798c00dc0d83419f52d..da50b6b55cf23ad8089b743851dd602685899ee3 100644 --- a/ide/src/trace/component/trace/sheet/smaps/TabPaneSmapsStatistics.ts +++ b/ide/src/trace/component/trace/sheet/smaps/TabPaneSmapsStatistics.ts @@ -78,6 +78,7 @@ export class TabPaneSmapsStatistics extends BaseElement { async queryDataByDB(smapsVal: SelectionParam): Promise { getTabSmapsMaxSize(smapsVal.leftNs, smapsVal.rightNs, (MemoryConfig.getInstance().interval * 1000_000) / 5).then( (maxRes) => { + // @ts-ignore this.sumSize = maxRes[0].max_value; } ); @@ -219,6 +220,7 @@ export class TabPaneSmapsStatistics extends BaseElement { async setSmaps(data: SelectionParam): Promise { getTabSmapsStatisticMaxSize(data.leftNs).then((maxRes) => { + // @ts-ignore this.sumSize = maxRes[0].max_value; }); await getTabSmapsStatisticData(data.leftNs).then((result) => { diff --git a/ide/src/trace/component/trace/timer-shaft/SportRuler.ts b/ide/src/trace/component/trace/timer-shaft/SportRuler.ts index 038213e0bebae004f57e0b0e47413989dee75719..188b3abd39770bef62bd250c9cc2b21f9387816e 100644 --- a/ide/src/trace/component/trace/timer-shaft/SportRuler.ts +++ b/ide/src/trace/component/trace/timer-shaft/SportRuler.ts @@ -90,10 +90,10 @@ export class SportRuler extends Graph { endTime: number | null | undefined; color: string | null; } | null = { - startTime: null, - endTime: null, - color: null, - }; + startTime: null, + endTime: null, + color: null, + }; private timerShaftEL: TimerShaftElement | undefined | null; private timeArray: Array = []; private countArray: Array = []; @@ -332,8 +332,8 @@ export class SportRuler extends Graph { TraceRow.rangeSelectObject!.startX! + (rangeSelectWidth / section) * (i - 1) + (rangeSelectWidth / section - countTextWidth) / 2; - this.context2D.fillStyle = `#f00`; - this.context2D.font = `12px sans-serif`; + this.context2D.fillStyle = `#f00`; + this.context2D.font = `12px sans-serif`; this.context2D.fillText(String(countArr[i - 1]), textY, this.frame.y + 22 + 12); } @@ -377,6 +377,7 @@ export class SportRuler extends Graph { } drawTriangle(time: number, type: string): unknown { + let num; if (time !== null && typeof time !== undefined) { let i = this.flagList.findIndex((it) => it.time === time); if (type === 'triangle') { @@ -404,7 +405,7 @@ export class SportRuler extends Graph { this.flagList[triangle].type = ''; this.draw(); this.flagChangeHandler('1'); - return this.flagList[triangle].time; + num = this.flagList[triangle].time; } } } else if (type === 'inverted') { @@ -413,14 +414,15 @@ export class SportRuler extends Graph { this.draw(); this.flagChangeHandler('2'); } + return num; } flagChangeHandler(from?: string): void { this.notifyHandler && - this.notifyHandler( - !this.hoverFlag.hidden ? this.hoverFlag : null, - this.flagList.find((it) => it.selected) || null - ); + this.notifyHandler( + !this.hoverFlag.hidden ? this.hoverFlag : null, + this.flagList.find((it) => it.selected) || null + ); } removeTriangle(type: string): void { diff --git a/ide/src/trace/database/data-trafic/EnergySysEventReceiver.ts b/ide/src/trace/database/data-trafic/EnergySysEventReceiver.ts index bb844e9a268779c3c64c1e31c05ddc25c01d6914..52ce06a20f310f25ec2d8dca9b651afcd12d6642 100644 --- a/ide/src/trace/database/data-trafic/EnergySysEventReceiver.ts +++ b/ide/src/trace/database/data-trafic/EnergySysEventReceiver.ts @@ -321,7 +321,7 @@ function eventNameWithPowerRunninglock(beanData: unknown, it: unknown, systemDat // @ts-ignore beanData.type = 1; systemDataList.push(beanData); - Reflect.deleteProperty(tokedIds,'number'); + Reflect.deleteProperty(tokedIds, 'number'); } } } diff --git a/ide/src/trace/database/data-trafic/SliceReceiver.ts b/ide/src/trace/database/data-trafic/SliceReceiver.ts index d1108d46c2cdac8d4be19cac2b0f17f2ad84d764..bd942e4f44b56ab1e9042b8b31646c6ef1d48898 100644 --- a/ide/src/trace/database/data-trafic/SliceReceiver.ts +++ b/ide/src/trace/database/data-trafic/SliceReceiver.ts @@ -423,12 +423,12 @@ function getChildBoxDb(data: unknown): void { } //@ts-ignore return condition && Math.max(data.params.leftNs, it.startTime!) < Math.min(data.params.rightNs, it.startTime! + it.dur!); - }) + }); postMsg(data, childBoxDb); } //处理processId和threadId -function handleIdParams(id: number | number[] | undefined) { - let setId; +function handleIdParams(id: number | number[] | undefined): Set { + let setId: Set; if (Array.isArray(id) || typeof id === 'number') { setId = new Set(Array.isArray(id) ? id : [id]); } else { diff --git a/ide/src/trace/database/data-trafic/utils/DataFilter.ts b/ide/src/trace/database/data-trafic/utils/DataFilter.ts index 0aebfedd9d8357c7f4647781a41611818c9dec8b..10de03b57b26ee6071cc9f386785399323323bd4 100644 --- a/ide/src/trace/database/data-trafic/utils/DataFilter.ts +++ b/ide/src/trace/database/data-trafic/utils/DataFilter.ts @@ -60,7 +60,8 @@ export function filterDataByLayer( let c = it[i][startKey] - it[i - 1][startKey] - it[i - 1][durKey]; if (c < pns && sum < pns) { //@ts-ignore - sum += c + it[i - 1][durKey]; //@ts-ignore + sum += c + it[i - 1][durKey]; + //@ts-ignore it[i].v = false; } else { //@ts-ignore @@ -69,7 +70,8 @@ export function filterDataByLayer( } } } - } //@ts-ignore + } + //@ts-ignore res.push(...it.filter((it) => it.v)); } }); @@ -96,7 +98,8 @@ export function filterDataByGroup( return it; }); let group = groupBy(arr, 'px'); - let res: Set = new Set(); //@ts-ignore + let res: Set = new Set(); + //@ts-ignore Reflect.ownKeys(group).map((key: unknown): void => { //@ts-ignore let arr = group[key] as unknown[]; @@ -141,14 +144,16 @@ function filterDataByGroupWithoutValue( // 获取当前数据的像素值 let px: number; //@ts-ignore - if (isDmaFence && list[i][durKey] === 0) { //如果是dmafence泳道,则不进行处理 + if (isDmaFence && list[i][durKey] === 0) { + //如果是dmafence泳道,则不进行处理 //@ts-ignore px = list[i][startKey] / ((endNS - startNS) / width); } else { //@ts-ignore px = Math.floor(list[i][startKey] / ((endNS - startNS) / width)); } //@ts-ignore - list[i].px = px; //@ts-ignore + list[i].px = px; + //@ts-ignore if (flag === px && arr[arr.length - 1] && list[i][durKey] > arr[arr.length - 1][durKey]) { arr[arr.length - 1] = list[i]; } @@ -176,12 +181,14 @@ export function filterDataByGroupLayer( it.px = Math.floor(it[startKey] / ((endNS - startNS) / width) + it[layerKey] * width); //设置临时变量durTmp 用于参与计算,分组后有dur为-1的数据按最长宽度显示 //@ts-ignore - it.durTmp = //@ts-ignore + it.durTmp = + //@ts-ignore it[durKey] === -1 || it[durKey] === null || it[durKey] === undefined ? endNS - it[startKey] : it[durKey]; return it; }); let group = groupBy(arr, 'px'); - let res: unknown[] = []; //@ts-ignore + let res: unknown[] = []; + //@ts-ignore Reflect.ownKeys(group).map((key: unknown) => { //@ts-ignore let childArray = (group[key] as unknown[]).reduce((p, c) => (p.durTmp > c.durTmp ? p : c)); @@ -209,7 +216,8 @@ function findRange( ): Array { return fullData.filter( ( - it //@ts-ignore + it + //@ts-ignore ) => it[condition.startKey] + it[condition.durKey] >= condition.startNS && it[condition.startKey] <= condition.endNS ); } diff --git a/ide/src/trace/database/logic-worker/ProcedureLogicWorkerFileSystem.ts b/ide/src/trace/database/logic-worker/ProcedureLogicWorkerFileSystem.ts index 49e718cdd03f567d43700b6a401451d1610c69c3..4cb5b881b50cb46c0cc02303bc5613b4e4fbd575 100644 --- a/ide/src/trace/database/logic-worker/ProcedureLogicWorkerFileSystem.ts +++ b/ide/src/trace/database/logic-worker/ProcedureLogicWorkerFileSystem.ts @@ -1103,7 +1103,7 @@ and s.start_ts <= ${selectionParam.rightNs} + t.start_ts ${sqlFilter} and callch clearSplitMapData(symbolName: string): void { if (symbolName in this.splitMapData) { - Reflect.deleteProperty(this.splitMapData,symbolName); + Reflect.deleteProperty(this.splitMapData, symbolName); } } } diff --git a/ide/src/trace/database/logic-worker/ProcedureLogicWorkerJsCpuProfiler.ts b/ide/src/trace/database/logic-worker/ProcedureLogicWorkerJsCpuProfiler.ts index 38a56983e8ebc80f06fcf2c38dad2cb2667a6dd6..36e10382117b8c9fee082439f79aeb04fc7b146b 100644 --- a/ide/src/trace/database/logic-worker/ProcedureLogicWorkerJsCpuProfiler.ts +++ b/ide/src/trace/database/logic-worker/ProcedureLogicWorkerJsCpuProfiler.ts @@ -322,7 +322,7 @@ export class ProcedureLogicWorkerJsCpuProfiler extends LogicHandler { chartTreeArray: Array, reverseTreeArray: Array ): void { - let recursionTree = (chartFrame: JsCpuProfilerChartFrame): void=> { + let recursionTree = (chartFrame: JsCpuProfilerChartFrame): void => { // isSelect为框选/点选范围内的函数,其他都不需要处理 if (!chartFrame.isSelect) { return; @@ -344,7 +344,7 @@ export class ProcedureLogicWorkerJsCpuProfiler extends LogicHandler { recursionTree(children); } } - } + }; //递归树结构 for (const chartFrame of chartTreeArray) { diff --git a/ide/src/trace/database/logic-worker/ProcedureLogicWorkerNativeNemory.ts b/ide/src/trace/database/logic-worker/ProcedureLogicWorkerNativeNemory.ts index 43e9893639b4f6697ea3cb1b31c60fa8b3241fc0..7904c120efb5d1feb1b06b65d2f91abbc72a1f6c 100644 --- a/ide/src/trace/database/logic-worker/ProcedureLogicWorkerNativeNemory.ts +++ b/ide/src/trace/database/logic-worker/ProcedureLogicWorkerNativeNemory.ts @@ -506,9 +506,9 @@ export class ProcedureLogicWorkerNativeMemory extends LogicHandler { if (nmMemoryColumn === 'index' || nmMemoryColumn === 'startTs' || nmMemoryColumn === 'heapSize') { return nmMemorySort === 1 ? //@ts-ignore - memoryLeftData[nmMemoryColumn] - memoryRightData[nmMemoryColumn] + memoryLeftData[nmMemoryColumn] - memoryRightData[nmMemoryColumn] : //@ts-ignore - memoryRightData[nmMemoryColumn] - memoryLeftData[nmMemoryColumn]; + memoryRightData[nmMemoryColumn] - memoryLeftData[nmMemoryColumn]; } else { if (nmMemorySort === 1) { //@ts-ignore @@ -1180,7 +1180,7 @@ export class ProcedureLogicWorkerNativeMemory extends LogicHandler { } clearSplitMapData(symbolName: string): void { if (symbolName in this.splitMapData) { - Reflect.deleteProperty(this.splitMapData,symbolName); + Reflect.deleteProperty(this.splitMapData, symbolName); } } resolvingNMCallAction(params: unknown[]): NativeHookCallInfo[] { diff --git a/ide/src/trace/database/logic-worker/ProcedureLogicWorkerPerf.ts b/ide/src/trace/database/logic-worker/ProcedureLogicWorkerPerf.ts index f782cfd16fe4cbd9318f191da0446f4c981a15bd..e3279c73141330496e6022c277b7b1af538a3143 100644 --- a/ide/src/trace/database/logic-worker/ProcedureLogicWorkerPerf.ts +++ b/ide/src/trace/database/logic-worker/ProcedureLogicWorkerPerf.ts @@ -239,7 +239,7 @@ export class ProcedureLogicWorkerPerf extends LogicHandler { //@ts-ignore if (data.params.list) { // 若前端存储过调用栈信息与被调用栈信息,可考虑从此处一起返回给主线程 - //@ts-ignore + //@ts-ignore let arr = convertJSON(data.params.list) || []; //@ts-ignore let result = dealAsyncData(arr, this.callChainData, this.dataCache.nmHeapFrameMap, this.dataCache.dataDict, this.searchValue); @@ -256,7 +256,7 @@ export class ProcedureLogicWorkerPerf extends LogicHandler { } else { //@ts-ignore this.searchValue = data.params.searchValue; - //@ts-ignore + //@ts-ignore this.queryPerfAsync(data.params); } } @@ -427,8 +427,8 @@ export class ProcedureLogicWorkerPerf extends LogicHandler { (` + str + `)` + eventStr + ` AND time between ${ - //@ts-ignore - args.leftNs} and ${args.rightNs} + //@ts-ignore + args.leftNs} and ${args.rightNs} `, {}); } @@ -814,7 +814,7 @@ export class ProcedureLogicWorkerPerf extends LogicHandler { clearSplitMapData(symbolName: string): void { if (symbolName in this.splitMapData) { - Reflect.deleteProperty(this.splitMapData,symbolName); + Reflect.deleteProperty(this.splitMapData, symbolName); } } @@ -879,11 +879,11 @@ export class ProcedureLogicWorkerPerf extends LogicHandler { prev.count += pfcall.count; prev.totalEvent += pfcall.totalEvent; prev.eventCount += pfcall.eventCount; - return total + return total; } } total.push(pfcall); - return total + return total; }, [] as PerfCallChainMerageData[]); for (const child of item.children) { mergeChildren(child); @@ -976,6 +976,7 @@ export class ProcedureLogicWorkerPerf extends LogicHandler { } } private handleDataByFuncName(funcName: string, funcArgs: unknown[]): unknown { + let result; switch (funcName) { case 'getCallChainsBySampleIds': this.freshPerfCallchains(this.samplesData, funcArgs[0] as boolean); @@ -1024,13 +1025,16 @@ export class ProcedureLogicWorkerPerf extends LogicHandler { this.isPerfBottomUp = true; break; case 'combineAnalysisCallChain': - return this.combineCallChainForAnalysis(); + result = this.combineCallChainForAnalysis(); + break; case 'getBottomUp': - return this.getBottomUp(); + result = this.getBottomUp(); + break; case 'kernelCombination': this.kernelCombination(); break; } + return result; } combineCallChainForAnalysis(obj?: unknown): PerfAnalysisSample[] { diff --git a/ide/src/trace/database/sql/Func.sql.ts b/ide/src/trace/database/sql/Func.sql.ts index 0e34bb3ee13b6cfebf5360ecfc7c8bbd1e8e8146..bb2d52bbf42f15f9ccf002d067bc3da01b4d546a 100644 --- a/ide/src/trace/database/sql/Func.sql.ts +++ b/ide/src/trace/database/sql/Func.sql.ts @@ -159,7 +159,7 @@ export const queryProcessAsyncFuncCat = ( startTs: number; endTs: number; } -): Promise> => +): Promise> => query( 'queryProcessAsyncFuncCat', ` @@ -182,7 +182,7 @@ export const queryProcessAsyncFuncCat = ( startTs not null order by cat; `, - {} + {} ); export const getMaxDepthByTid = (traceId?: string): //@ts-ignore @@ -348,28 +348,28 @@ export const getTabDetails = ( funTids?: Array ): //@ts-ignore Promise> => { - let asyncCondition = ''; - let catCondition = ''; - let syncCondition = ''; - if (key === 'async') { - asyncCondition = ` + let asyncCondition = ''; + let catCondition = ''; + let syncCondition = ''; + if (key === 'async') { + asyncCondition = ` and c.cookie not null and c.parent_id not null - ` - } else if (key === 'sync') { - syncCondition = ` + `; + } else if (key === 'sync') { + syncCondition = ` and A.tid in (${funTids!.join(',')}) and c.cookie is null - ` - } - let condition = ` + `; + } + let condition = ` ${asyncCondition} ${catCondition} ${syncCondition} ${`and P.pid in (${asyncPid.join(',')})`} - ${`and c.name in (${asyncNames.map((it) => "\"" + it + "\"").join(',')})`} - ` - let sql = ` + ${`and c.name in (${asyncNames.map((it) => '\"' + it + '\"').join(',')})`} + `; + let sql = ` SELECT c.name AS name, c.dur AS duration, @@ -388,18 +388,18 @@ export const getTabDetails = ( c.dur >= -1 and not ((C.ts - D.start_ts + C.dur < ${leftNS}) or (C.ts - D.start_ts > ${rightNS})) ${condition} - ` - return query('getTabDetails', sql, {}); - } - export const getCatDetails = ( - asyncNames: Array, - catName: Array, - asyncPid: Array, - leftNS: number, - rightNS: number - ): //@ts-ignore - Promise> => { - let sql = ` + `; + return query('getTabDetails', sql, {}); +}; +export const getCatDetails = ( + asyncNames: Array, + catName: Array, + asyncPid: Array, + leftNS: number, + rightNS: number +): //@ts-ignore + Promise> => { + let sql = ` SELECT c.name AS name, c.dur AS duration, @@ -425,14 +425,14 @@ export const getTabDetails = ( and P.pid in (${asyncPid.join(',')}) and - c.cat in (${catName.map((it) => "\"" + it + "\"").join(',')}) + c.cat in (${catName.map((it) => '\"' + it + '\"').join(',')}) and - c.name in (${asyncNames.map((it) => "\"" + it + "\"").join(',')}) + c.name in (${asyncNames.map((it) => '\"' + it + '\"').join(',')}) and not ((C.ts - D.start_ts + C.dur < ${leftNS}) or (C.ts - D.start_ts > ${rightNS})) - ` - return query('getCatDetails', sql, {}); - } + `; + return query('getCatDetails', sql, {}); +}; export const getTabSlicesAsyncCatFunc = ( asyncCatNames: Array, asyncCatPid: Array, diff --git a/ide/src/trace/database/sql/Smaps.sql.ts b/ide/src/trace/database/sql/Smaps.sql.ts index effdd7fa6d66186e8a2d5a5eeac5c4896084f40a..bf61702566c27fb8dbd25e7f91e587689efae8cb 100644 --- a/ide/src/trace/database/sql/Smaps.sql.ts +++ b/ide/src/trace/database/sql/Smaps.sql.ts @@ -36,7 +36,7 @@ export const querySmapsData = (columnName: string): Promise> => { $columnName: columnName } ); -export const querySmapsDataMax = (columnName: string): Promise> => +export const querySmapsDataMax = (columnName: string): Promise> => query( 'querySmapsDataMax', ` @@ -47,7 +47,7 @@ export const querySmapsDataMax = (columnName: string): Promise> => ); export const getTabSmapsMaxSize = (leftNs: number, rightNs: number, dur: number): - Promise> => + Promise> => query( 'getTabSmapsMaxRss', ` @@ -123,7 +123,7 @@ export const querySmapsRecordTabData = ( where type = ${typeId} and (timeStamp - start_ts) = ${startNs}` ); -export const getTabSmapsStatisticMaxSize = (rightNs: number): Promise> => +export const getTabSmapsStatisticMaxSize = (rightNs: number): Promise> => query( 'getTabSmapsStatisticMaxRss', ` diff --git a/ide/src/trace/database/sql/SqlLite.sql.ts b/ide/src/trace/database/sql/SqlLite.sql.ts index 3c87853611ea3f5b54b2e5910811517e2c889e8d..638520aad9573ce2c538a4afe0aeda6400aae144 100644 --- a/ide/src/trace/database/sql/SqlLite.sql.ts +++ b/ide/src/trace/database/sql/SqlLite.sql.ts @@ -1539,7 +1539,7 @@ Promise> => { $cpu: cpu, }); }; -export const queryPerfOutputData = (): Promise> => +export const queryPerfOutputData = (): Promise> => query( 'queryPerfOutputData', `SELECT @@ -1548,7 +1548,7 @@ export const queryPerfOutputData = (): Promise> => FROM callstack where name like '%PERFORMANCE_DATA%'` ); -export const queryPerfToolsDur = (): Promise> => +export const queryPerfToolsDur = (): Promise> => query( 'queryPerfToolsDur', `SELECT