Skip to content

Commit

Permalink
Use fuzzy-matching to improve cache hit rates with PostScriptEvaluator
Browse files Browse the repository at this point in the history
This improves performance, without any noticeable regressions when running `gulp browsertest --noChrome` locally on Windows.
Testing the new `pr5134` test-case locally in the viewer:
 - With the `master` branch and `isEvalSupported = true`, page 2 renders in approx. 350 milliseconds.
 - With the `master` branch and `isEvalSupported = false`, page 2 renders in approx. 1550 milliseconds.
 - With this patch and `isEvalSupported = false`, page 2 renders in approx. 700 milliseconds.

Hence this obviously isn't enough to close the performance gap, but it *may* still be helpful.
  • Loading branch information
Snuffleupagus committed Oct 31, 2024
1 parent 3ed438a commit d39e14d
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 4 deletions.
10 changes: 7 additions & 3 deletions src/core/function.js
Original file line number Diff line number Diff line change
Expand Up @@ -447,16 +447,20 @@ class PDFFunction {
// seen in our tests.
const MAX_CACHE_SIZE = 2048 * 4;
let cache_available = MAX_CACHE_SIZE;
const tmpBuf = new Float32Array(numInputs);
const input = new Float32Array(numInputs);

return function constructPostScriptFn(src, srcOffset, dest, destOffset) {
let i, value;
let key = "";
const input = tmpBuf;
for (i = 0; i < numInputs; i++) {
value = src[srcOffset + i];
input[i] = value;
key += value + "_";
// Fuzzy-match to increase the cache hit rate which helps improve
// performance, at the expense of absolute rendering quality.
// In practice this seems fine, and in the test-suite there are no
// perceivable differences, which is likely because the computed value
// will *eventually* be clamped to the [0, 255] range during rendering.
key += Math.round(value * 1e8) + "_";
}

const cachedValue = cache[key];
Expand Down
2 changes: 1 addition & 1 deletion src/display/api.js
Original file line number Diff line number Diff line change
Expand Up @@ -280,7 +280,7 @@ function getDocument(src = {}) {
Number.isInteger(src.maxImageSize) && src.maxImageSize > -1
? src.maxImageSize
: -1;
const isEvalSupported = src.isEvalSupported !== false;
const isEvalSupported = false; // src.isEvalSupported !== false;
const isOffscreenCanvasSupported =
typeof src.isOffscreenCanvasSupported === "boolean"
? src.isOffscreenCanvasSupported
Expand Down
1 change: 1 addition & 0 deletions test/pdfs/pr5134.pdf.link
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
https://web.archive.org/web/20140211020222/http://www.coachusa.com/CoachUsaAssets/files/97/route45.pdf
9 changes: 9 additions & 0 deletions test/test_manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -2246,6 +2246,15 @@
"lastPage": 1,
"type": "eq"
},
{
"id": "pr5134",
"file": "pdfs/pr5134.pdf",
"md5": "6a701a163472e071a2519348b55cbac1",
"rounds": 1,
"link": true,
"firstPage": 2,
"type": "eq"
},
{
"id": "issue5599",
"file": "pdfs/issue5599.pdf",
Expand Down

0 comments on commit d39e14d

Please sign in to comment.