From 4944cc28475f482b60db8095699e53314c967ea9 Mon Sep 17 00:00:00 2001 From: Johannes Rieken Date: Mon, 13 Aug 2018 12:58:22 +0200 Subject: [PATCH] debt - remove last usages of globals and any-casts when it comes to perf marks --- src/main.js | 3 --- src/vs/code/electron-main/window.ts | 10 ++++----- src/vs/platform/windows/common/windows.ts | 5 +---- .../electron-browser/bootstrap/index.js | 8 ------- src/vs/workbench/electron-browser/main.ts | 4 ++-- .../timerService.ts | 22 ++++++++----------- 6 files changed, 16 insertions(+), 36 deletions(-) rename src/vs/workbench/services/timer/{node => electron-browser}/timerService.ts (82%) diff --git a/src/main.js b/src/main.js index ca00474ba1e..fe52e5c1621 100644 --- a/src/main.js +++ b/src/main.js @@ -7,9 +7,6 @@ const perf = require('./vs/base/common/performance'); perf.mark('main:started'); -// Perf measurements -global.perfStartTime = Date.now(); - Error.stackTraceLimit = 100; // increase number of stack frames (from 10, https://github.com/v8/v8/wiki/Stack-Trace-API) const fs = require('fs'); diff --git a/src/vs/code/electron-main/window.ts b/src/vs/code/electron-main/window.ts index 3bc811d9c7b..9f7403ac236 100644 --- a/src/vs/code/electron-main/window.ts +++ b/src/vs/code/electron-main/window.ts @@ -24,7 +24,7 @@ import { ICodeWindow, IWindowState, WindowMode } from 'vs/platform/windows/elect import { IWorkspaceIdentifier, IWorkspacesMainService } from 'vs/platform/workspaces/common/workspaces'; import { IBackupMainService } from 'vs/platform/backup/common/backup'; import { ISerializableCommandAction } from 'vs/platform/actions/common/actions'; -import { mark, exportEntries } from 'vs/base/common/performance'; +import * as perf from 'vs/base/common/performance'; import { resolveMarketplaceHeaders } from 'vs/platform/extensionManagement/node/extensionGalleryService'; export interface IWindowCreationOptions { @@ -547,7 +547,7 @@ export class CodeWindow implements ICodeWindow { } // Load URL - mark('main:loadWindow'); + perf.mark('main:loadWindow'); this._win.loadURL(this.getUrl(configuration)); // Make window visible if it did not open in N seconds because this indicates an error @@ -621,10 +621,8 @@ export class CodeWindow implements ICodeWindow { windowConfiguration.maximized = this._win.isMaximized(); windowConfiguration.frameless = this.hasHiddenTitleBarStyle() && !isMacintosh; - // Perf Counters - windowConfiguration.perfEntries = exportEntries(); - windowConfiguration.perfStartTime = (global).perfStartTime; - windowConfiguration.perfWindowLoadTime = Date.now(); + // Dump Perf Counters + windowConfiguration.perfEntries = perf.exportEntries(); // Config (combination of process.argv and window configuration) const environment = parseArgs(process.argv); diff --git a/src/vs/platform/windows/common/windows.ts b/src/vs/platform/windows/common/windows.ts index 1903391cb6e..b5c178db9ca 100644 --- a/src/vs/platform/windows/common/windows.ts +++ b/src/vs/platform/windows/common/windows.ts @@ -346,9 +346,6 @@ export interface IWindowConfiguration extends ParsedArgs, IOpenFileRequest { accessibilitySupport?: boolean; perfEntries: PerformanceEntry[]; - perfStartTime?: number; - perfAppReady?: number; - perfWindowLoadTime?: number; } export interface IRunActionInWindowRequest { @@ -389,4 +386,4 @@ export class ActiveWindowManager implements IDisposable { dispose() { this.disposables = dispose(this.disposables); } -} \ No newline at end of file +} diff --git a/src/vs/workbench/electron-browser/bootstrap/index.js b/src/vs/workbench/electron-browser/bootstrap/index.js index 5d0965c6de9..c0e0e59d31e 100644 --- a/src/vs/workbench/electron-browser/bootstrap/index.js +++ b/src/vs/workbench/electron-browser/bootstrap/index.js @@ -306,14 +306,6 @@ function main() { }); } - // Perf Counters - window.MonacoEnvironment.timers = { - isInitialStartup: !!configuration.isInitialStartup, - hasAccessibilitySupport: !!configuration.accessibilitySupport, - start: configuration.perfStartTime, - windowLoad: configuration.perfWindowLoadTime - }; - perf.mark('willLoadWorkbenchMain'); require([ 'vs/workbench/workbench.main', diff --git a/src/vs/workbench/electron-browser/main.ts b/src/vs/workbench/electron-browser/main.ts index e03f30a664f..4a9ef9247b7 100644 --- a/src/vs/workbench/electron-browser/main.ts +++ b/src/vs/workbench/electron-browser/main.ts @@ -24,7 +24,7 @@ import { ServiceCollection } from 'vs/platform/instantiation/common/serviceColle import { realpath } from 'vs/base/node/pfs'; import { EnvironmentService } from 'vs/platform/environment/node/environmentService'; import * as gracefulFs from 'graceful-fs'; -import { TimerService, IInitData } from 'vs/workbench/services/timer/node/timerService'; +import { TimerService } from 'vs/workbench/services/timer/electron-browser/timerService'; import { KeyboardMapperFactory } from 'vs/workbench/services/keybinding/electron-browser/keybindingService'; import { IWindowConfiguration, IWindowsService } from 'vs/platform/windows/common/windows'; import { WindowsChannelClient } from 'vs/platform/windows/common/windowsIpc'; @@ -85,7 +85,7 @@ function openWorkbench(configuration: IWindowConfiguration): TPromise { // Since the configuration service is one of the core services that is used in so many places, we initialize it // right before startup of the workbench shell to have its data ready for consumers return createAndInitializeWorkspaceService(configuration, environmentService).then(workspaceService => { - const timerService = new TimerService((window).MonacoEnvironment.timers as IInitData, workspaceService.getWorkbenchState() === WorkbenchState.EMPTY); + const timerService = new TimerService(configuration, workspaceService.getWorkbenchState() === WorkbenchState.EMPTY); const storageService = createStorageService(workspaceService, environmentService); return domContentLoaded().then(() => { diff --git a/src/vs/workbench/services/timer/node/timerService.ts b/src/vs/workbench/services/timer/electron-browser/timerService.ts similarity index 82% rename from src/vs/workbench/services/timer/node/timerService.ts rename to src/vs/workbench/services/timer/electron-browser/timerService.ts index fd34449c961..a1f75b791ce 100644 --- a/src/vs/workbench/services/timer/node/timerService.ts +++ b/src/vs/workbench/services/timer/electron-browser/timerService.ts @@ -8,13 +8,9 @@ import { ITimerService, IStartupMetrics, IMemoryInfo } from 'vs/workbench/servic import { virtualMachineHint } from 'vs/base/node/id'; import * as perf from 'vs/base/common/performance'; import * as os from 'os'; - -export interface IInitData { - start: number; - windowLoad: number; - isInitialStartup: boolean; - hasAccessibilitySupport: boolean; -} +import { getAccessibilitySupport } from 'vs/base/browser/browser'; +import { AccessibilitySupport } from 'vs/base/common/platform'; +import { IWindowConfiguration } from 'vs/platform/windows/common/windows'; export class TimerService implements ITimerService { @@ -23,7 +19,7 @@ export class TimerService implements ITimerService { private _startupMetrics: IStartupMetrics; constructor( - private readonly _initData: IInitData, + private readonly _configuration: IWindowConfiguration, private readonly _isEmptyWorkbench: boolean ) { // @@ -38,8 +34,8 @@ export class TimerService implements ITimerService { public _computeStartupMetrics(): void { const now = Date.now(); - const initialStartup = !!this._initData.isInitialStartup; - const start = initialStartup ? this._initData.start : this._initData.windowLoad; + const initialStartup = !!this._configuration.isInitialStartup; + const startMark = initialStartup ? 'main:started' : 'main:loadWindow'; let totalmem: number; let freemem: number; @@ -72,7 +68,7 @@ export class TimerService implements ITimerService { this._startupMetrics = { version: 1, - ellapsed: perf.getEntry('mark', 'didStartWorkbench').startTime - start, + ellapsed: perf.getDuration(startMark, 'didStartWorkbench'), timers: { ellapsedAppReady: initialStartup ? perf.getDuration('main:started', 'main:appReady') : undefined, ellapsedNlsGeneration: perf.getDuration('nlsGeneration:start', 'nlsGeneration:end'), @@ -83,7 +79,7 @@ export class TimerService implements ITimerService { ellapsedEditorRestore: perf.getDuration('willRestoreEditors', 'didRestoreEditors'), ellapsedViewletRestore: perf.getDuration('willRestoreViewlet', 'didRestoreViewlet'), ellapsedWorkbench: perf.getDuration('willStartWorkbench', 'didStartWorkbench'), - ellapsedExtensionsReady: perf.getEntry('mark', 'didLoadExtensions').startTime - start, + ellapsedExtensionsReady: perf.getDuration(startMark, 'didLoadExtensions'), ellapsedTimersToTimersComputed: Date.now() - now, }, platform, @@ -96,7 +92,7 @@ export class TimerService implements ITimerService { loadavg, initialStartup, isVMLikelyhood, - hasAccessibilitySupport: !!this._initData.hasAccessibilitySupport, + hasAccessibilitySupport: getAccessibilitySupport() === AccessibilitySupport.Enabled, emptyWorkbench: this._isEmptyWorkbench }; }