From 895f3f0544ce38d35999771754cbb1d876c14b5a Mon Sep 17 00:00:00 2001 From: halcanary Date: Fri, 1 Apr 2016 11:51:00 -0700 Subject: 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 --- src/pdf/SkBitmapKey.h | 1 + src/pdf/SkPDFShader.cpp | 11 +++++------ 2 files changed, 6 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/pdf/SkBitmapKey.h b/src/pdf/SkBitmapKey.h index 4723debac2..53d4d64f32 100644 --- a/src/pdf/SkBitmapKey.h +++ b/src/pdf/SkBitmapKey.h @@ -25,6 +25,7 @@ public: return fID == rhs.fID && fSubset == rhs.fSubset; } bool operator!=(const SkBitmapKey& rhs) const { return !(*this == rhs); } + uint32_t id() const { return fID; } private: SkIRect fSubset; 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); -- cgit v1.2.3