Merge pull request #5445 from CodingFabian/fixImageCachingInParser

Fixes caching of inline images during parsing.
This commit is contained in:
Yury Delendik 2014-12-15 10:51:23 -06:00
commit f5df30f967
2 changed files with 34 additions and 37 deletions

View file

@ -171,7 +171,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
buildPaintImageXObject:
function PartialEvaluator_buildPaintImageXObject(resources, image,
inline, operatorList,
cacheKey, cache) {
cacheKey, imageCache) {
var self = this;
var dict = image.dict;
var w = dict.get('Width', 'W');
@ -209,9 +209,10 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
args = [imgData];
operatorList.addOp(OPS.paintImageMaskXObject, args);
if (cacheKey) {
cache.key = cacheKey;
cache.fn = OPS.paintImageMaskXObject;
cache.args = args;
imageCache[cacheKey] = {
fn: OPS.paintImageMaskXObject,
args: args
};
}
return;
}
@ -260,9 +261,10 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
operatorList.addOp(OPS.paintImageXObject, args);
if (cacheKey) {
cache.key = cacheKey;
cache.fn = OPS.paintImageXObject;
cache.args = args;
imageCache[cacheKey] = {
fn: OPS.paintImageXObject,
args: args
};
}
},
@ -656,8 +658,8 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
}
// eagerly compile XForm objects
var name = args[0].name;
if (imageCache.key === name) {
operatorList.addOp(imageCache.fn, imageCache.args);
if (imageCache[name] !== undefined) {
operatorList.addOp(imageCache[name].fn, imageCache[name].args);
args = null;
continue;
}
@ -706,10 +708,13 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
}, reject);
case OPS.endInlineImage:
var cacheKey = args[0].cacheKey;
if (cacheKey && imageCache.key === cacheKey) {
operatorList.addOp(imageCache.fn, imageCache.args);
args = null;
continue;
if (cacheKey) {
var cacheEntry = imageCache[cacheKey];
if (cacheEntry !== undefined) {
operatorList.addOp(cacheEntry.fn, cacheEntry.args);
args = null;
continue;
}
}
self.buildPaintImageXObject(resources, args[0], true,
operatorList, cacheKey, imageCache);