Add a proper LocalColorSpaceCache
class, rather than piggybacking on the image one (PR 12001 follow-up)
This will allow caching of ColorSpaces by either `Name` *or* `Ref`, which doesn't really make sense for images, thus allowing (better) caching for ColorSpaces used with e.g. Images and Patterns.
This commit is contained in:
parent
e22bc483a5
commit
51e87b9248
@ -73,13 +73,13 @@ import {
|
|||||||
} from "./standard_fonts.js";
|
} from "./standard_fonts.js";
|
||||||
import { getTilingPatternIR, Pattern } from "./pattern.js";
|
import { getTilingPatternIR, Pattern } from "./pattern.js";
|
||||||
import { Lexer, Parser } from "./parser.js";
|
import { Lexer, Parser } from "./parser.js";
|
||||||
|
import { LocalColorSpaceCache, LocalImageCache } from "./image_utils.js";
|
||||||
import { bidi } from "./bidi.js";
|
import { bidi } from "./bidi.js";
|
||||||
import { ColorSpace } from "./colorspace.js";
|
import { ColorSpace } from "./colorspace.js";
|
||||||
import { DecodeStream } from "./stream.js";
|
import { DecodeStream } from "./stream.js";
|
||||||
import { getGlyphsUnicode } from "./glyphlist.js";
|
import { getGlyphsUnicode } from "./glyphlist.js";
|
||||||
import { getMetrics } from "./metrics.js";
|
import { getMetrics } from "./metrics.js";
|
||||||
import { isPDFFunction } from "./function.js";
|
import { isPDFFunction } from "./function.js";
|
||||||
import { LocalImageCache } from "./image_utils.js";
|
|
||||||
import { MurmurHash3_64 } from "./murmurhash3.js";
|
import { MurmurHash3_64 } from "./murmurhash3.js";
|
||||||
import { OperatorList } from "./operator_list.js";
|
import { OperatorList } from "./operator_list.js";
|
||||||
import { PDFImage } from "./image.js";
|
import { PDFImage } from "./image.js";
|
||||||
@ -1224,7 +1224,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
|
|||||||
var xref = this.xref;
|
var xref = this.xref;
|
||||||
let parsingText = false;
|
let parsingText = false;
|
||||||
const localImageCache = new LocalImageCache();
|
const localImageCache = new LocalImageCache();
|
||||||
const localColorSpaceCache = new LocalImageCache();
|
const localColorSpaceCache = new LocalColorSpaceCache();
|
||||||
|
|
||||||
var xobjs = resources.get("XObject") || Dict.empty;
|
var xobjs = resources.get("XObject") || Dict.empty;
|
||||||
var patterns = resources.get("Pattern") || Dict.empty;
|
var patterns = resources.get("Pattern") || Dict.empty;
|
||||||
|
@ -14,11 +14,14 @@
|
|||||||
*/
|
*/
|
||||||
/* eslint no-var: error */
|
/* eslint no-var: error */
|
||||||
|
|
||||||
import { assert, info, shadow } from "../shared/util.js";
|
import { assert, info, shadow, unreachable } from "../shared/util.js";
|
||||||
import { RefSetCache } from "./primitives.js";
|
import { RefSetCache } from "./primitives.js";
|
||||||
|
|
||||||
class LocalImageCache {
|
class BaseLocalCache {
|
||||||
constructor() {
|
constructor() {
|
||||||
|
if (this.constructor === BaseLocalCache) {
|
||||||
|
unreachable("Cannot initialize BaseLocalCache.");
|
||||||
|
}
|
||||||
this._nameRefMap = new Map();
|
this._nameRefMap = new Map();
|
||||||
this._imageMap = new Map();
|
this._imageMap = new Map();
|
||||||
this._imageCache = new RefSetCache();
|
this._imageCache = new RefSetCache();
|
||||||
@ -36,6 +39,12 @@ class LocalImageCache {
|
|||||||
return this._imageCache.get(ref) || null;
|
return this._imageCache.get(ref) || null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
set(name, ref, data) {
|
||||||
|
unreachable("Abstract method `set` called.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class LocalImageCache extends BaseLocalCache {
|
||||||
set(name, ref = null, data) {
|
set(name, ref = null, data) {
|
||||||
if (!name) {
|
if (!name) {
|
||||||
throw new Error('LocalImageCache.set - expected "name" argument.');
|
throw new Error('LocalImageCache.set - expected "name" argument.');
|
||||||
@ -56,6 +65,32 @@ class LocalImageCache {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class LocalColorSpaceCache extends BaseLocalCache {
|
||||||
|
set(name = null, ref = null, data) {
|
||||||
|
if (!name && !ref) {
|
||||||
|
throw new Error(
|
||||||
|
'LocalColorSpaceCache.set - expected "name" and/or "ref" argument.'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (ref) {
|
||||||
|
if (this._imageCache.has(ref)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (name) {
|
||||||
|
// Optional when `ref` is defined.
|
||||||
|
this._nameRefMap.set(name, ref);
|
||||||
|
}
|
||||||
|
this._imageCache.put(ref, data);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// name
|
||||||
|
if (this._imageMap.has(name)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this._imageMap.set(name, data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class GlobalImageCache {
|
class GlobalImageCache {
|
||||||
static get NUM_PAGES_THRESHOLD() {
|
static get NUM_PAGES_THRESHOLD() {
|
||||||
return shadow(this, "NUM_PAGES_THRESHOLD", 2);
|
return shadow(this, "NUM_PAGES_THRESHOLD", 2);
|
||||||
@ -149,4 +184,4 @@ class GlobalImageCache {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export { LocalImageCache, GlobalImageCache };
|
export { LocalImageCache, LocalColorSpaceCache, GlobalImageCache };
|
||||||
|
Loading…
x
Reference in New Issue
Block a user