diff --git a/src/vs/workbench/common/editor/resourceEditorInput.ts b/src/vs/workbench/common/editor/resourceEditorInput.ts index d61b126f22f860afd8a996a712e6ba425ef8cc89..bc873064c445f8bdb88aa67befce69fc752f236b 100644 --- a/src/vs/workbench/common/editor/resourceEditorInput.ts +++ b/src/vs/workbench/common/editor/resourceEditorInput.ts @@ -19,14 +19,14 @@ export class ResourceEditorInput extends EditorInput { static readonly ID: string = 'workbench.editors.resourceEditorInput'; - private modelReference: Promise>; + private modelReference: Promise> | null; private resource: URI; private name: string; - private description: string; + private description: string | null; constructor( name: string, - description: string, + description: string | null, resource: URI, @ITextModelService private readonly textModelResolverService: ITextModelService, @IHashService private readonly hashService: IHashService @@ -57,7 +57,7 @@ export class ResourceEditorInput extends EditorInput { } } - getDescription(): string { + getDescription(): string | null { return this.description; } diff --git a/src/vs/workbench/contrib/performance/electron-browser/perfviewEditor.ts b/src/vs/workbench/contrib/performance/electron-browser/perfviewEditor.ts index 9bb55a53b2516a8b8478b08c44414f5146bc8717..2ec6c1bcf18b5f726f807d90c523a3780ab5db08 100644 --- a/src/vs/workbench/contrib/performance/electron-browser/perfviewEditor.ts +++ b/src/vs/workbench/contrib/performance/electron-browser/perfviewEditor.ts @@ -52,7 +52,7 @@ export class PerfviewInput extends ResourceEditorInput { ) { super( localize('name', "Startup Performance"), - undefined, + null, PerfviewInput.Uri, textModelResolverService, hashService ); @@ -85,7 +85,11 @@ class PerfModelContentProvider implements ITextModelContentProvider { const langId = this._modeService.create('markdown'); this._model = this._modelService.getModel(resource) || this._modelService.createModel('Loading...', langId, resource); - this._modelDisposables.push(langId.onDidChange(e => this._model.setMode(e))); + this._modelDisposables.push(langId.onDidChange(e => { + if (this._model) { + this._model.setMode(e); + } + })); this._modelDisposables.push(langId); this._modelDisposables.push(this._extensionService.onDidChangeExtensionsStatus(this._updateModel, this)); @@ -102,7 +106,7 @@ class PerfModelContentProvider implements ITextModelContentProvider { this._lifecycleService.when(LifecyclePhase.Eventually), this._extensionService.whenInstalledExtensionsRegistered() ]).then(([metrics]) => { - if (!this._model.isDisposed()) { + if (this._model && !this._model.isDisposed()) { let stats = this._envService.args['prof-modules'] ? LoaderStats.get() : undefined; let md = new MarkdownBuilder(); @@ -126,9 +130,15 @@ class PerfModelContentProvider implements ITextModelContentProvider { md.heading(2, 'System Info'); md.li(`${product.nameShort}: ${pkg.version} (${product.commit || '0000000'})`); md.li(`OS: ${metrics.platform}(${metrics.release})`); - md.li(`CPUs: ${metrics.cpus.model}(${metrics.cpus.count} x ${metrics.cpus.speed})`); - md.li(`Memory(System): ${(metrics.totalmem / (1024 * 1024 * 1024)).toFixed(2)} GB(${(metrics.freemem / (1024 * 1024 * 1024)).toFixed(2)}GB free)`); - md.li(`Memory(Process): ${(metrics.meminfo.workingSetSize / 1024).toFixed(2)} MB working set(${(metrics.meminfo.peakWorkingSetSize / 1024).toFixed(2)}MB peak, ${(metrics.meminfo.privateBytes / 1024).toFixed(2)}MB private, ${(metrics.meminfo.sharedBytes / 1024).toFixed(2)}MB shared)`); + if (metrics.cpus) { + md.li(`CPUs: ${metrics.cpus.model}(${metrics.cpus.count} x ${metrics.cpus.speed})`); + } + if (typeof metrics.totalmem === 'number' && typeof metrics.freemem === 'number') { + md.li(`Memory(System): ${(metrics.totalmem / (1024 * 1024 * 1024)).toFixed(2)} GB(${(metrics.freemem / (1024 * 1024 * 1024)).toFixed(2)}GB free)`); + } + if (metrics.meminfo) { + md.li(`Memory(Process): ${(metrics.meminfo.workingSetSize / 1024).toFixed(2)} MB working set(${(metrics.meminfo.peakWorkingSetSize / 1024).toFixed(2)}MB peak, ${(metrics.meminfo.privateBytes / 1024).toFixed(2)}MB private, ${(metrics.meminfo.sharedBytes / 1024).toFixed(2)}MB shared)`); + } md.li(`VM(likelyhood): ${metrics.isVMLikelyhood}%`); md.li(`Initial Startup: ${metrics.initialStartup}`); md.li(`Has ${metrics.windowCount - 1} other windows`); @@ -138,7 +148,7 @@ class PerfModelContentProvider implements ITextModelContentProvider { private _addSummaryTable(md: MarkdownBuilder, metrics: IStartupMetrics, stats?: LoaderStats): void { - const table: (string | number)[][] = []; + const table: Array> = []; table.push(['start => app.isReady', metrics.timers.ellapsedAppReady, '[main]', `initial startup: ${metrics.initialStartup}`]); table.push(['nls:start => nls:end', metrics.timers.ellapsedNlsGeneration, '[main]', `initial startup: ${metrics.initialStartup}`]); table.push(['require(main.bundle.js)', metrics.initialStartup ? perf.getDuration('willLoadMainBundle', 'didLoadMainBundle') : undefined, '[main]', `initial startup: ${metrics.initialStartup}`]); @@ -333,7 +343,7 @@ class MarkdownBuilder { return this; } - table(header: string[], rows: { toString() }[][]) { + table(header: string[], rows: Array>) { let lengths: number[] = []; header.forEach((cell, ci) => { lengths[ci] = cell.length; @@ -357,7 +367,9 @@ class MarkdownBuilder { // cells rows.forEach(row => { row.forEach((cell, ci) => { - this.value += `| ${cell + repeat(' ', lengths[ci] - cell.toString().length)} `; + if (typeof cell !== 'undefined') { + this.value += `| ${cell + repeat(' ', lengths[ci] - cell.toString().length)} `; + } }); this.value += '|\n'; });