From 00e2ff5a60a693fc9503e7a7d8797fc98ab631a3 Mon Sep 17 00:00:00 2001 From: Andreas Gal Date: Tue, 21 Jun 2011 18:31:07 -0400 Subject: [PATCH] avoid constantly calling ensureBuffer --- pdf.js | 48 ++++++++++++++++++++++++++++-------------------- 1 file changed, 28 insertions(+), 20 deletions(-) diff --git a/pdf.js b/pdf.js index fff135816..1b751b5a4 100644 --- a/pdf.js +++ b/pdf.js @@ -314,7 +314,7 @@ var FlateStream = (function() { }, ensureBuffer: function(requested) { var buffer = this.buffer; - var current = buffer ? buffer.byteLength : 0; + var current = buffer ? buffer.length : 0; if (requested < current) return buffer; var size = 512; @@ -494,32 +494,40 @@ var FlateStream = (function() { } var pos = this.bufferLength; + var buffer = this.buffer; + var limit = buffer ? buffer.length : 0; while (true) { var code1 = this.getCode(litCodeTable); + if (code1 < 256) { + if (pos + 1 >= limit) { + buffer = this.ensureBuffer(pos + 1); + limit = buffer.length; + } + buffer[pos++] = code1; + continue; + } if (code1 == 256) { this.bufferLength = pos; return; } - if (code1 < 256) { - var buffer = this.ensureBuffer(pos + 1); - buffer[pos++] = code1; - } else { - code1 -= 257; - code1 = lengthDecode[code1]; - var code2 = code1 >> 16; - if (code2 > 0) - code2 = this.getBits(code2); - var len = (code1 & 0xffff) + code2; - code1 = this.getCode(distCodeTable); - code1 = distDecode[code1]; - code2 = code1 >> 16; - if (code2 > 0) - code2 = this.getBits(code2); - var dist = (code1 & 0xffff) + code2; - var buffer = this.ensureBuffer(pos + len); - for (var k = 0; k < len; ++k, ++pos) - buffer[pos] = buffer[pos - dist]; + code1 -= 257; + code1 = lengthDecode[code1]; + var code2 = code1 >> 16; + if (code2 > 0) + code2 = this.getBits(code2); + var len = (code1 & 0xffff) + code2; + code1 = this.getCode(distCodeTable); + code1 = distDecode[code1]; + code2 = code1 >> 16; + if (code2 > 0) + code2 = this.getBits(code2); + var dist = (code1 & 0xffff) + code2; + if (pos + len >= limit) { + buffer = this.ensureBuffer(pos + len); + limit = buffer.length; } + for (var k = 0; k < len; ++k, ++pos) + buffer[pos] = buffer[pos - dist]; } } };