Merge pull request #10986 from Snuffleupagus/inline-ensureByte-ensureRange

Attempt to significantly reduce the number of `ChunkedStream.{ensureByte, ensureRange}` calls by inlining the `this.progressiveDataLength` checks at the call-sites
This commit is contained in:
Tim van der Meij 2019-07-19 22:51:21 +02:00 committed by GitHub
commit 0cc0789af3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -159,7 +159,9 @@ class ChunkedStream {
if (pos >= this.end) { if (pos >= this.end) {
return -1; return -1;
} }
this.ensureByte(pos); if (pos >= this.progressiveDataLength) {
this.ensureByte(pos);
}
return this.bytes[this.pos++]; return this.bytes[this.pos++];
} }
@ -187,7 +189,9 @@ class ChunkedStream {
const strEnd = this.end; const strEnd = this.end;
if (!length) { if (!length) {
this.ensureRange(pos, strEnd); if (strEnd > this.progressiveDataLength) {
this.ensureRange(pos, strEnd);
}
const subarray = bytes.subarray(pos, strEnd); const subarray = bytes.subarray(pos, strEnd);
// `this.bytes` is always a `Uint8Array` here. // `this.bytes` is always a `Uint8Array` here.
return (forceClamped ? new Uint8ClampedArray(subarray) : subarray); return (forceClamped ? new Uint8ClampedArray(subarray) : subarray);
@ -197,7 +201,9 @@ class ChunkedStream {
if (end > strEnd) { if (end > strEnd) {
end = strEnd; end = strEnd;
} }
this.ensureRange(pos, end); if (end > this.progressiveDataLength) {
this.ensureRange(pos, end);
}
this.pos = end; this.pos = end;
const subarray = bytes.subarray(pos, end); const subarray = bytes.subarray(pos, end);
@ -224,7 +230,9 @@ class ChunkedStream {
if (end > this.end) { if (end > this.end) {
end = this.end; end = this.end;
} }
this.ensureRange(begin, end); if (end > this.progressiveDataLength) {
this.ensureRange(begin, end);
}
return this.bytes.subarray(begin, end); return this.bytes.subarray(begin, end);
} }
@ -245,7 +253,9 @@ class ChunkedStream {
makeSubStream(start, length, dict) { makeSubStream(start, length, dict) {
if (length) { if (length) {
this.ensureRange(start, start + length); if (start + length > this.progressiveDataLength) {
this.ensureRange(start, start + length);
}
} else { } else {
// When the `length` is undefined you do *not*, under any circumstances, // When the `length` is undefined you do *not*, under any circumstances,
// want to fallback on calling `this.ensureRange(start, this.end)` since // want to fallback on calling `this.ensureRange(start, this.end)` since
@ -256,7 +266,9 @@ class ChunkedStream {
// time/resources during e.g. parsing, since `MissingDataException`s will // time/resources during e.g. parsing, since `MissingDataException`s will
// require data to be re-parsed, which we attempt to minimize by at least // require data to be re-parsed, which we attempt to minimize by at least
// checking that the *beginning* of the data is available here. // checking that the *beginning* of the data is available here.
this.ensureByte(start); if (start >= this.progressiveDataLength) {
this.ensureByte(start);
}
} }
function ChunkedStreamSubstream() {} function ChunkedStreamSubstream() {}