bgTokenizer worker should not redraw unnecessarily

This commit is contained in:
nightwing 2013-06-13 21:56:52 +04:00
commit 069bbda6a6

View file

@ -68,29 +68,37 @@ var BackgroundTokenizer = function(tokenizer, editor) {
if (!self.running) { return; } if (!self.running) { return; }
var workerStart = new Date(); var workerStart = new Date();
var startLine = self.currentLine; var currentLine = self.currentLine;
var endLine = -1;
var doc = self.doc; var doc = self.doc;
var processedLines = 0; while (self.lines[currentLine])
currentLine++;
var startLine = currentLine;
var len = doc.getLength(); var len = doc.getLength();
while (self.currentLine < len) { var processedLines = 0;
self.$tokenizeRow(self.currentLine); self.running = false;
while (self.lines[self.currentLine]) while (currentLine < len) {
self.currentLine++; self.$tokenizeRow(currentLine);
endLine = currentLine;
do {
currentLine++;
} while (self.lines[currentLine]);
// only check every 5 lines // only check every 5 lines
processedLines ++; processedLines ++;
if ((processedLines % 5 == 0) && (new Date() - workerStart) > 20) { if ((processedLines % 5 == 0) && (new Date() - workerStart) > 20) {
self.fireUpdateEvent(startLine, self.currentLine-1);
self.running = setTimeout(self.$worker, 20); self.running = setTimeout(self.$worker, 20);
self.currentLine = currentLine;
return; return;
} }
} }
self.currentLine = currentLine;
self.running = false;
if (startLine <= endLine)
self.fireUpdateEvent(startLine, len - 1); self.fireUpdateEvent(startLine, endLine);
}; };
}; };