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) { 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.running = false;
this.textLines = []; this.textLines = [];
this.lines = []; this.lines = [];
@ -24,6 +24,7 @@ var BackgroundTokenizer = function(tokenizer) {
var textLines = self.textLines; var textLines = self.textLines;
var processedLines = 0; var processedLines = 0;
var lastVisibleRow = editor.getLastVisibleRow();
while (self.currentLine < textLines.length) { while (self.currentLine < textLines.length) {
self.lines[self.currentLine] = self.$tokenizeRows(self.currentLine, self.currentLine)[0]; self.lines[self.currentLine] = self.$tokenizeRows(self.currentLine, self.currentLine)[0];
@ -33,7 +34,9 @@ var BackgroundTokenizer = function(tokenizer) {
processedLines += 1; processedLines += 1;
if ((processedLines % 5 == 0) && (new Date() - workerStart) > 20) { if ((processedLines % 5 == 0) && (new Date() - workerStart) > 20) {
self.fireUpdateEvent(startLine, self.currentLine-1); 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; return;
} }
} }

View file

@ -254,7 +254,7 @@ var Editor = function(renderer, doc) {
if (!this.bgTokenizer) { if (!this.bgTokenizer) {
var onUpdate = ace.bind(this.onTokenizerUpdate, this); var onUpdate = ace.bind(this.onTokenizerUpdate, this);
this.bgTokenizer = new BackgroundTokenizer(tokenizer); this.bgTokenizer = new BackgroundTokenizer(tokenizer, this);
this.bgTokenizer.addEventListener("update", onUpdate); this.bgTokenizer.addEventListener("update", onUpdate);
} else { } else {
this.bgTokenizer.setTokenizer(tokenizer); this.bgTokenizer.setTokenizer(tokenizer);