From aa8c14de62965cab091557ebc26ea51800c1b3dd Mon Sep 17 00:00:00 2001 From: Fabian Jakobs Date: Fri, 1 Oct 2010 10:43:36 +0200 Subject: [PATCH] slow down background tokenizer if line is below the editor's last visible line --- src/ace/BackgroundTokenizer.js | 7 +++++-- src/ace/Editor.js | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/ace/BackgroundTokenizer.js b/src/ace/BackgroundTokenizer.js index 72d20db3..6a05b8b8 100644 --- a/src/ace/BackgroundTokenizer.js +++ b/src/ace/BackgroundTokenizer.js @@ -7,7 +7,7 @@ */ require.def("ace/BackgroundTokenizer", ["ace/lib/oop", "ace/MEventEmitter"], function(oop, MEventEmitter) { -var BackgroundTokenizer = function(tokenizer) { +var BackgroundTokenizer = function(tokenizer, editor) { this.running = false; this.textLines = []; this.lines = []; @@ -24,6 +24,7 @@ var BackgroundTokenizer = function(tokenizer) { var textLines = self.textLines; var processedLines = 0; + var lastVisibleRow = editor.getLastVisibleRow(); while (self.currentLine < textLines.length) { self.lines[self.currentLine] = self.$tokenizeRows(self.currentLine, self.currentLine)[0]; @@ -33,7 +34,9 @@ var BackgroundTokenizer = function(tokenizer) { processedLines += 1; if ((processedLines % 5 == 0) && (new Date() - workerStart) > 20) { self.fireUpdateEvent(startLine, self.currentLine-1); - self.running = setTimeout(self.$worker, 30); + + var timeout = self.currentLine < lastVisibleRow ? 20 : 100; + self.running = setTimeout(self.$worker, timeout); return; } } diff --git a/src/ace/Editor.js b/src/ace/Editor.js index 47bf334e..2d5eabc7 100644 --- a/src/ace/Editor.js +++ b/src/ace/Editor.js @@ -254,7 +254,7 @@ var Editor = function(renderer, doc) { if (!this.bgTokenizer) { var onUpdate = ace.bind(this.onTokenizerUpdate, this); - this.bgTokenizer = new BackgroundTokenizer(tokenizer); + this.bgTokenizer = new BackgroundTokenizer(tokenizer, this); this.bgTokenizer.addEventListener("update", onUpdate); } else { this.bgTokenizer.setTokenizer(tokenizer);