SkPDF: properly dedup bitmaps in shaders
BUG=skia:5161
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1848383002
Review URL: https://codereview.chromium.org/1848383002
diff --git a/src/pdf/SkPDFShader.cpp b/src/pdf/SkPDFShader.cpp
index abcae7b..c30d8a4 100644
--- a/src/pdf/SkPDFShader.cpp
+++ b/src/pdf/SkPDFShader.cpp
@@ -430,7 +430,7 @@
SkIRect fBBox;
SkBitmap fImage;
- uint32_t fPixelGeneration;
+ SkBitmapKey fBitmapKey;
SkShader::TileMode fImageTileModes[2];
State(SkShader* shader, const SkMatrix& canvasTransform,
@@ -1052,8 +1052,8 @@
}
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 @@
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 @@
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);