mirror of
https://github.com/mozilla/pdf.js.git
synced 2025-04-25 09:38:06 +02:00
Add ChunkedStream.ensureByte().
This new function is much faster than ensureRange(pos, pos+1), which is a very common case. This speeds up the rendering of some test cases (including the Tracemonkey paper) by 4--5%.
This commit is contained in:
parent
bab40caf7b
commit
4428cebdbc
1 changed files with 14 additions and 1 deletions
|
@ -31,6 +31,7 @@ var ChunkedStream = (function ChunkedStreamClosure() {
|
|||
this.numChunks = Math.ceil(length / chunkSize);
|
||||
this.manager = manager;
|
||||
this.initialDataLength = 0;
|
||||
this.lastSuccessfulEnsureByteChunk = -1; // a single-entry cache
|
||||
}
|
||||
|
||||
// required methods for a stream. if a particular stream does not
|
||||
|
@ -90,6 +91,18 @@ var ChunkedStream = (function ChunkedStreamClosure() {
|
|||
}
|
||||
},
|
||||
|
||||
ensureByte: function ChunkedStream_ensureRange(pos) {
|
||||
var chunk = Math.floor(pos / this.chunkSize);
|
||||
if (chunk === this.lastSuccessfulEnsureByteChunk) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(chunk in this.loadedChunks)) {
|
||||
throw new MissingDataException(pos, pos + 1);
|
||||
}
|
||||
this.lastSuccessfulEnsureByteChunk = chunk;
|
||||
},
|
||||
|
||||
ensureRange: function ChunkedStream_ensureRange(begin, end) {
|
||||
if (begin >= end) {
|
||||
return;
|
||||
|
@ -142,7 +155,7 @@ var ChunkedStream = (function ChunkedStreamClosure() {
|
|||
if (pos >= this.end) {
|
||||
return -1;
|
||||
}
|
||||
this.ensureRange(pos, pos + 1);
|
||||
this.ensureByte(pos);
|
||||
return this.bytes[this.pos++];
|
||||
},
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue