Skip to content
This repository has been archived by the owner on Apr 1, 2020. It is now read-only.

Commit

Permalink
Fix #372: Add metrics for startup performance, and parallelize paths (#…
Browse files Browse the repository at this point in the history
…1118)

* Measure startup performance, and parallelize paths

* Fix lint issues
  • Loading branch information
bryphe authored Dec 13, 2017
1 parent 57e6a68 commit be92546
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 6 deletions.
8 changes: 8 additions & 0 deletions browser/src/Performance.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,11 @@ export function mark(markerName: string): void {

console.log(`[PERFORMANCE] ${markerName}: ${performance.now()}`) // tslint:disable-line no-console
}

export const startMeasure = (measurementName: string): void => {
console.time(measurementName) // tslint:disable-line
}

export const endMeasure = (measurementName: string): void => {
console.timeEnd(measurementName) // tslint:disable-line
}
30 changes: 24 additions & 6 deletions browser/src/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import { ipcRenderer } from "electron"
import * as minimist from "minimist"
import * as Log from "./Log"
import * as Performance from "./Performance"
import { pluginManager } from "./Plugins/PluginManager"

import * as AutoClosingPairs from "./Services/AutoClosingPairs"
Expand All @@ -30,6 +31,7 @@ import * as UI from "./UI/index"
require("./overlay.less") // tslint:disable-line

const start = async (args: string[]): Promise<void> => {
Performance.startMeasure("Oni.Start")

UI.activate()

Expand All @@ -38,6 +40,8 @@ const start = async (args: string[]): Promise<void> => {
// Helper for debugging:
window["UI"] = UI // tslint:disable-line no-string-literal

Performance.startMeasure("Oni.Start.Config")

const initialConfigParsingError = configuration.getParsingError()
if (initialConfigParsingError) {
Log.error(initialConfigParsingError)
Expand All @@ -54,34 +58,48 @@ const start = async (args: string[]): Promise<void> => {

configChange(configuration.getValues()) // initialize values
configuration.onConfigurationChanged.subscribe(configChange)
Performance.endMeasure("Oni.Start.Config")

performance.mark("NeovimInstance.Plugins.Discover.Start")
Performance.startMeasure("Oni.Start.Plugins.Discover")
pluginManager.discoverPlugins()
performance.mark("NeovimInstance.Plugins.Discover.End")
Performance.endMeasure("Oni.Start.Plugins.Discover")

// TODO: Can these be parallelized?
await Themes.activate(configuration)
await IconThemes.activate(configuration, pluginManager)
Performance.startMeasure("Oni.Start.Themes")
await Promise.all([
Themes.activate(configuration),
IconThemes.activate(configuration, pluginManager)
])

Colors.activate(configuration, Themes.getThemeManagerInstance())
UI.Actions.setColors(Themes.getThemeManagerInstance().getColors())
Performance.endMeasure("Oni.Start.Themes")

BrowserWindowConfigurationSynchronizer.activate(configuration, Colors.getInstance())

// TODO: Can these be parallelized?
await SharedNeovimInstance.activate()
await UI.startEditors(parsedArgs._, Colors.getInstance(), configuration)
Performance.startMeasure("Oni.Start.Editors")
await Promise.all([
SharedNeovimInstance.activate(),
UI.startEditors(parsedArgs._, Colors.getInstance(), configuration)
])
Performance.endMeasure("Oni.Start.Editors")

Performance.startMeasure("Oni.Start.Activate")

const api = pluginManager.startApi()
configuration.activate(api)

createLanguageClientsFromConfiguration(configuration.getValues())

AutoClosingPairs.activate(configuration, editorManager, inputManager, languageManager)
Performance.endMeasure("Oni.Start.Activate")

UI.Actions.setLoadingComplete()

checkForUpdates()

Performance.endMeasure("Oni.Start")
}

ipcRenderer.on("init", (_evt: any, message: any) => {
Expand Down

0 comments on commit be92546

Please sign in to comment.