1
0
Fork 0
mirror of https://github.com/mozilla/pdf.js.git synced 2025-04-25 09:38:06 +02:00

Attempt to also cache images at the "page"-level (issue 16263)

Currently we have two separate image-caches on the worker-thread:
 - A local one, which is unique to each `PartialEvaluator.getOperatorList` invocation. This one caches both names *and* references, since image-resources may be accessed in either way.
 - A global one, which applies to the entire PDF documents and all its pages. This one only caches references, since nothing else would work.

This patch introduces a third image-cache, which essentially sits "between" the two existing ones. The new `RegionalImageCache`[1] will be usable throughout a `PartialEvaluator` instance, and consequently it *only* caches references, which thus allows us to keep track of repeated image-resources found in e.g. different /Form and /SMask objects.

---
[1] For lack of a better word, since naming things is hard...
This commit is contained in:
Jonas Jenwald 2023-04-10 11:00:35 +02:00
parent 195db2cff5
commit 9881dbf927
5 changed files with 63 additions and 9 deletions

View file

@ -156,6 +156,22 @@ class LocalTilingPatternCache extends BaseLocalCache {
}
}
class RegionalImageCache extends BaseLocalCache {
constructor(options) {
super({ onlyRefs: true });
}
set(name = null, ref, data) {
if (!ref) {
throw new Error('RegionalImageCache.set - expected "ref" argument.');
}
if (this._imageCache.has(ref)) {
return;
}
this._imageCache.put(ref, data);
}
}
class GlobalImageCache {
static get NUM_PAGES_THRESHOLD() {
return shadow(this, "NUM_PAGES_THRESHOLD", 2);
@ -288,4 +304,5 @@ export {
LocalGStateCache,
LocalImageCache,
LocalTilingPatternCache,
RegionalImageCache,
};