slow down background tokenizer if line is below

the editor's last visible line
This commit is contained in:
Fabian Jakobs 2010-10-01 10:43:36 +02:00
commit aa8c14de62
2 changed files with 6 additions and 3 deletions

View file

@ -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;
}
}

View file

@ -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);