diff --git a/src/vs/workbench/contrib/performance/browser/perfviewEditor.ts b/src/vs/workbench/contrib/performance/browser/perfviewEditor.ts index 5bf819734e5..3f84050a818 100644 --- a/src/vs/workbench/contrib/performance/browser/perfviewEditor.ts +++ b/src/vs/workbench/contrib/performance/browser/perfviewEditor.ts @@ -14,7 +14,6 @@ import { IInstantiationService } from 'vs/platform/instantiation/common/instanti import { IModelService } from 'vs/editor/common/services/modelService'; import { ITimerService, IStartupMetrics } from 'vs/workbench/services/timer/browser/timerService'; import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions'; -import * as perf from 'vs/base/common/performance'; import { IDisposable, dispose } from 'vs/base/common/lifecycle'; import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; import { writeTransientState } from 'vs/workbench/contrib/codeEditor/browser/toggleWordWrap'; @@ -220,18 +219,21 @@ class PerfModelContentProvider implements ITextModelContentProvider { } private _addRawPerfMarks(md: MarkdownBuilder): void { - md.heading(2, 'Raw Perf Marks'); - md.value += '```\n'; - md.value += `Name\tTimestamp\tDelta\tTotal\n`; - let lastStartTime = -1; - let total = 0; - for (const { name, startTime } of perf.getMarks()) { - let delta = lastStartTime !== -1 ? startTime - lastStartTime : 0; - total += delta; - md.value += `${name}\t${startTime}\t${delta}\t${total}\n`; - lastStartTime = startTime; + + for (let [source, marks] of this._timerService.getPerformanceMarks()) { + md.heading(2, `Raw Perf Marks: ${source}`); + md.value += '```\n'; + md.value += `Name\tTimestamp\tDelta\tTotal\n`; + let lastStartTime = -1; + let total = 0; + for (const { name, startTime } of marks) { + let delta = lastStartTime !== -1 ? startTime - lastStartTime : 0; + total += delta; + md.value += `${name}\t${startTime}\t${delta}\t${total}\n`; + lastStartTime = startTime; + } + md.value += '```\n'; } - md.value += '```\n'; } private _addLoaderStats(md: MarkdownBuilder, stats: LoaderStats): void { diff --git a/src/vs/workbench/services/timer/browser/timerService.ts b/src/vs/workbench/services/timer/browser/timerService.ts index 93ec08f681d..584dbf1ab43 100644 --- a/src/vs/workbench/services/timer/browser/timerService.ts +++ b/src/vs/workbench/services/timer/browser/timerService.ts @@ -333,7 +333,9 @@ export interface ITimerService { readonly _serviceBrand: undefined; readonly startupMetrics: Promise; - submitPerformanceMarks(source: string, marks: perf.PerformanceMark[]): void; + setPerformanceMarks(source: string, marks: perf.PerformanceMark[]): void; + + getPerformanceMarks(): [source: string, marks: readonly perf.PerformanceMark[]][]; } export const ITimerService = createDecorator('timerService'); @@ -343,7 +345,7 @@ class PerfMarks { private readonly _entries = new Map(); - submitMarks(source: string, entries: perf.PerformanceMark[]): void { + setMarks(source: string, entries: perf.PerformanceMark[]): void { if (this._entries.has(source)) { throw new Error(`${source} EXISTS already`); } @@ -359,10 +361,9 @@ class PerfMarks { if (!toEntry) { return 0; } - return Math.round(toEntry.startTime - fromEntry.startTime); + return toEntry.startTime - fromEntry.startTime; } - private _findEntry(name: string): perf.PerformanceMark | void { for (let entries of this._entries.values()) { for (let i = entries.length - 1; i >= 0; i--) { @@ -372,8 +373,11 @@ class PerfMarks { } } } -} + getEntries() { + return Array.from(this._entries); + } +} export type Writeable = { -readonly [P in keyof T]: Writeable }; @@ -425,14 +429,18 @@ export abstract class AbstractTimerService implements ITimerService { const marks: perf.PerformanceMark[] = performance.getEntriesByType('mark').map(entry => { return { name: entry.name, - startTime: timeOrigin + entry.startTime + startTime: Math.round(timeOrigin + entry.startTime) }; }); - this.submitPerformanceMarks('renderer', marks); + this.setPerformanceMarks('renderer', marks); } - submitPerformanceMarks(source: string, marks: perf.PerformanceMark[]): void { - this._marks.submitMarks(source, marks); + setPerformanceMarks(source: string, marks: perf.PerformanceMark[]): void { + this._marks.setMarks(source, marks); + } + + getPerformanceMarks(): [source: string, marks: readonly perf.PerformanceMark[]][] { + return this._marks.getEntries(); } get startupMetrics(): Promise { diff --git a/src/vs/workbench/services/timer/electron-sandbox/timerService.ts b/src/vs/workbench/services/timer/electron-sandbox/timerService.ts index 2507df59604..5778a84e1c8 100644 --- a/src/vs/workbench/services/timer/electron-sandbox/timerService.ts +++ b/src/vs/workbench/services/timer/electron-sandbox/timerService.ts @@ -33,7 +33,7 @@ export class TimerService extends AbstractTimerService { @ITelemetryService telemetryService: ITelemetryService, ) { super(lifecycleService, contextService, extensionService, updateService, viewletService, panelService, editorService, accessibilityService, telemetryService); - this.submitPerformanceMarks('main', _environmentService.configuration.perfMarks); + this.setPerformanceMarks('main', _environmentService.configuration.perfMarks); } protected _isInitialStartup(): boolean {