debt - remove last usages of globals and any-casts when it comes to perf marks

This commit is contained in:
Johannes Rieken 2018-08-13 12:58:22 +02:00
parent 1b5c9925d7
commit 4944cc2847
6 changed files with 16 additions and 36 deletions

View file

@ -7,9 +7,6 @@
const perf = require('./vs/base/common/performance'); const perf = require('./vs/base/common/performance');
perf.mark('main:started'); 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) Error.stackTraceLimit = 100; // increase number of stack frames (from 10, https://github.com/v8/v8/wiki/Stack-Trace-API)
const fs = require('fs'); const fs = require('fs');

View file

@ -24,7 +24,7 @@ import { ICodeWindow, IWindowState, WindowMode } from 'vs/platform/windows/elect
import { IWorkspaceIdentifier, IWorkspacesMainService } from 'vs/platform/workspaces/common/workspaces'; import { IWorkspaceIdentifier, IWorkspacesMainService } from 'vs/platform/workspaces/common/workspaces';
import { IBackupMainService } from 'vs/platform/backup/common/backup'; import { IBackupMainService } from 'vs/platform/backup/common/backup';
import { ISerializableCommandAction } from 'vs/platform/actions/common/actions'; 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'; import { resolveMarketplaceHeaders } from 'vs/platform/extensionManagement/node/extensionGalleryService';
export interface IWindowCreationOptions { export interface IWindowCreationOptions {
@ -547,7 +547,7 @@ export class CodeWindow implements ICodeWindow {
} }
// Load URL // Load URL
mark('main:loadWindow'); perf.mark('main:loadWindow');
this._win.loadURL(this.getUrl(configuration)); this._win.loadURL(this.getUrl(configuration));
// Make window visible if it did not open in N seconds because this indicates an error // 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.maximized = this._win.isMaximized();
windowConfiguration.frameless = this.hasHiddenTitleBarStyle() && !isMacintosh; windowConfiguration.frameless = this.hasHiddenTitleBarStyle() && !isMacintosh;
// Perf Counters // Dump Perf Counters
windowConfiguration.perfEntries = exportEntries(); windowConfiguration.perfEntries = perf.exportEntries();
windowConfiguration.perfStartTime = (<any>global).perfStartTime;
windowConfiguration.perfWindowLoadTime = Date.now();
// Config (combination of process.argv and window configuration) // Config (combination of process.argv and window configuration)
const environment = parseArgs(process.argv); const environment = parseArgs(process.argv);

View file

@ -346,9 +346,6 @@ export interface IWindowConfiguration extends ParsedArgs, IOpenFileRequest {
accessibilitySupport?: boolean; accessibilitySupport?: boolean;
perfEntries: PerformanceEntry[]; perfEntries: PerformanceEntry[];
perfStartTime?: number;
perfAppReady?: number;
perfWindowLoadTime?: number;
} }
export interface IRunActionInWindowRequest { export interface IRunActionInWindowRequest {
@ -389,4 +386,4 @@ export class ActiveWindowManager implements IDisposable {
dispose() { dispose() {
this.disposables = dispose(this.disposables); this.disposables = dispose(this.disposables);
} }
} }

View file

@ -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'); perf.mark('willLoadWorkbenchMain');
require([ require([
'vs/workbench/workbench.main', 'vs/workbench/workbench.main',

View file

@ -24,7 +24,7 @@ import { ServiceCollection } from 'vs/platform/instantiation/common/serviceColle
import { realpath } from 'vs/base/node/pfs'; import { realpath } from 'vs/base/node/pfs';
import { EnvironmentService } from 'vs/platform/environment/node/environmentService'; import { EnvironmentService } from 'vs/platform/environment/node/environmentService';
import * as gracefulFs from 'graceful-fs'; 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 { KeyboardMapperFactory } from 'vs/workbench/services/keybinding/electron-browser/keybindingService';
import { IWindowConfiguration, IWindowsService } from 'vs/platform/windows/common/windows'; import { IWindowConfiguration, IWindowsService } from 'vs/platform/windows/common/windows';
import { WindowsChannelClient } from 'vs/platform/windows/common/windowsIpc'; import { WindowsChannelClient } from 'vs/platform/windows/common/windowsIpc';
@ -85,7 +85,7 @@ function openWorkbench(configuration: IWindowConfiguration): TPromise<void> {
// Since the configuration service is one of the core services that is used in so many places, we initialize it // 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 // right before startup of the workbench shell to have its data ready for consumers
return createAndInitializeWorkspaceService(configuration, environmentService).then(workspaceService => { return createAndInitializeWorkspaceService(configuration, environmentService).then(workspaceService => {
const timerService = new TimerService((<any>window).MonacoEnvironment.timers as IInitData, workspaceService.getWorkbenchState() === WorkbenchState.EMPTY); const timerService = new TimerService(configuration, workspaceService.getWorkbenchState() === WorkbenchState.EMPTY);
const storageService = createStorageService(workspaceService, environmentService); const storageService = createStorageService(workspaceService, environmentService);
return domContentLoaded().then(() => { return domContentLoaded().then(() => {

View file

@ -8,13 +8,9 @@ import { ITimerService, IStartupMetrics, IMemoryInfo } from 'vs/workbench/servic
import { virtualMachineHint } from 'vs/base/node/id'; import { virtualMachineHint } from 'vs/base/node/id';
import * as perf from 'vs/base/common/performance'; import * as perf from 'vs/base/common/performance';
import * as os from 'os'; import * as os from 'os';
import { getAccessibilitySupport } from 'vs/base/browser/browser';
export interface IInitData { import { AccessibilitySupport } from 'vs/base/common/platform';
start: number; import { IWindowConfiguration } from 'vs/platform/windows/common/windows';
windowLoad: number;
isInitialStartup: boolean;
hasAccessibilitySupport: boolean;
}
export class TimerService implements ITimerService { export class TimerService implements ITimerService {
@ -23,7 +19,7 @@ export class TimerService implements ITimerService {
private _startupMetrics: IStartupMetrics; private _startupMetrics: IStartupMetrics;
constructor( constructor(
private readonly _initData: IInitData, private readonly _configuration: IWindowConfiguration,
private readonly _isEmptyWorkbench: boolean private readonly _isEmptyWorkbench: boolean
) { ) {
// //
@ -38,8 +34,8 @@ export class TimerService implements ITimerService {
public _computeStartupMetrics(): void { public _computeStartupMetrics(): void {
const now = Date.now(); const now = Date.now();
const initialStartup = !!this._initData.isInitialStartup; const initialStartup = !!this._configuration.isInitialStartup;
const start = initialStartup ? this._initData.start : this._initData.windowLoad; const startMark = initialStartup ? 'main:started' : 'main:loadWindow';
let totalmem: number; let totalmem: number;
let freemem: number; let freemem: number;
@ -72,7 +68,7 @@ export class TimerService implements ITimerService {
this._startupMetrics = { this._startupMetrics = {
version: 1, version: 1,
ellapsed: perf.getEntry('mark', 'didStartWorkbench').startTime - start, ellapsed: perf.getDuration(startMark, 'didStartWorkbench'),
timers: { timers: {
ellapsedAppReady: initialStartup ? perf.getDuration('main:started', 'main:appReady') : undefined, ellapsedAppReady: initialStartup ? perf.getDuration('main:started', 'main:appReady') : undefined,
ellapsedNlsGeneration: perf.getDuration('nlsGeneration:start', 'nlsGeneration:end'), ellapsedNlsGeneration: perf.getDuration('nlsGeneration:start', 'nlsGeneration:end'),
@ -83,7 +79,7 @@ export class TimerService implements ITimerService {
ellapsedEditorRestore: perf.getDuration('willRestoreEditors', 'didRestoreEditors'), ellapsedEditorRestore: perf.getDuration('willRestoreEditors', 'didRestoreEditors'),
ellapsedViewletRestore: perf.getDuration('willRestoreViewlet', 'didRestoreViewlet'), ellapsedViewletRestore: perf.getDuration('willRestoreViewlet', 'didRestoreViewlet'),
ellapsedWorkbench: perf.getDuration('willStartWorkbench', 'didStartWorkbench'), ellapsedWorkbench: perf.getDuration('willStartWorkbench', 'didStartWorkbench'),
ellapsedExtensionsReady: perf.getEntry('mark', 'didLoadExtensions').startTime - start, ellapsedExtensionsReady: perf.getDuration(startMark, 'didLoadExtensions'),
ellapsedTimersToTimersComputed: Date.now() - now, ellapsedTimersToTimersComputed: Date.now() - now,
}, },
platform, platform,
@ -96,7 +92,7 @@ export class TimerService implements ITimerService {
loadavg, loadavg,
initialStartup, initialStartup,
isVMLikelyhood, isVMLikelyhood,
hasAccessibilitySupport: !!this._initData.hasAccessibilitySupport, hasAccessibilitySupport: getAccessibilitySupport() === AccessibilitySupport.Enabled,
emptyWorkbench: this._isEmptyWorkbench emptyWorkbench: this._isEmptyWorkbench
}; };
} }