aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/pdf/SkPDFShader.cpp
diff options
context:
space:
mode:
authorGravatar halcanary <halcanary@google.com>2016-04-01 11:51:00 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2016-04-01 11:51:00 -0700
commit895f3f0544ce38d35999771754cbb1d876c14b5a (patch)
tree8336645c502bfe4c4f7faee145d25a1e05d35047 /src/pdf/SkPDFShader.cpp
parent389666bf1fed53a92b8c320157ee5fc0d5173552 (diff)
SkPDF: properly dedup bitmaps in shaders
Diffstat (limited to 'src/pdf/SkPDFShader.cpp')
-rw-r--r--src/pdf/SkPDFShader.cpp11
1 files changed, 5 insertions, 6 deletions
diff --git a/src/pdf/SkPDFShader.cpp b/src/pdf/SkPDFShader.cpp
index abcae7be12..c30d8a4281 100644
--- a/src/pdf/SkPDFShader.cpp
+++ b/src/pdf/SkPDFShader.cpp
@@ -430,7 +430,7 @@ public:
SkIRect fBBox;
SkBitmap fImage;
- uint32_t fPixelGeneration;
+ SkBitmapKey fBitmapKey;
SkShader::TileMode fImageTileModes[2];
State(SkShader* shader, const SkMatrix& canvasTransform,
@@ -1052,8 +1052,8 @@ bool SkPDFShader::State::operator==(const SkPDFShader::State& b) const {
}
if (fType == SkShader::kNone_GradientType) {
- if (fPixelGeneration != b.fPixelGeneration ||
- fPixelGeneration == 0 ||
+ if (fBitmapKey != b.fBitmapKey ||
+ fBitmapKey.id() == 0 ||
fImageTileModes[0] != b.fImageTileModes[0] ||
fImageTileModes[1] != b.fImageTileModes[1]) {
return false;
@@ -1099,8 +1099,7 @@ bool SkPDFShader::State::operator==(const SkPDFShader::State& b) const {
SkPDFShader::State::State(SkShader* shader, const SkMatrix& canvasTransform,
const SkIRect& bbox, SkScalar rasterScale)
: fCanvasTransform(canvasTransform),
- fBBox(bbox),
- fPixelGeneration(0) {
+ fBBox(bbox) {
fInfo.fColorCount = 0;
fInfo.fColors = nullptr;
fInfo.fColorOffsets = nullptr;
@@ -1154,7 +1153,7 @@ SkPDFShader::State::State(SkShader* shader, const SkMatrix& canvasTransform,
fShaderTransform.setTranslate(shaderRect.x(), shaderRect.y());
fShaderTransform.preScale(1 / scale.width(), 1 / scale.height());
}
- fPixelGeneration = fImage.getGenerationID();
+ fBitmapKey = SkBitmapKey(fImage);
} else {
AllocateGradientInfoStorage();
shader->asAGradient(&fInfo);