From 7196b05af7676241acc136d183ea63dde93a5c59 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Wed, 1 Mar 2017 13:29:19 -0700 Subject: [PATCH] Cache line number gutter properties during a single frame These properties are somewhat expensive to compute. Since we need to perform 2 updates per frame to perform horizontal measurement, it's good to avoid computing the gutter properties twice since they aren't affected by horizontal measurements in any way. --- src/text-editor-component.js | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/text-editor-component.js b/src/text-editor-component.js index 3a9e1cf42..8e00e5a1a 100644 --- a/src/text-editor-component.js +++ b/src/text-editor-component.js @@ -107,6 +107,7 @@ class TextEditorComponent { etch.updateSync(this) this.pendingAutoscroll = null + this.currentFramelineNumberGutterProps = null } render () { @@ -158,6 +159,10 @@ class TextEditorComponent { } renderLineNumberGutter () { + if (this.currentFramelineNumberGutterProps) { + return $(LineNumberGutterComponent, this.currentFramelineNumberGutterProps) + } + const model = this.getModel() const maxLineNumberDigits = Math.max(2, model.getLineCount().toString().length) @@ -181,13 +186,15 @@ class TextEditorComponent { const rowsPerTile = this.getRowsPerTile() - return $(LineNumberGutterComponent, { + this.currentFramelineNumberGutterProps = { height: this.getScrollHeight(), width: this.measurements.lineNumberGutterWidth, lineHeight: this.measurements.lineHeight, startRow, endRow, rowsPerTile, maxLineNumberDigits, bufferRows, softWrappedFlags, foldableFlags - }) + } + + return $(LineNumberGutterComponent, this.currentFramelineNumberGutterProps) } else { return $.div( {