aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfmalita <fmalita@chromium.org>2014-12-16 16:07:13 -0800
committerCommit bot <commit-bot@chromium.org>2014-12-16 16:07:13 -0800
commit413a1eb45e0210748f126edd9e0639b905394bb7 (patch)
tree562763fce36d5c94e27609d7ad204451c41622c8
parentcc7b849301932388919e3c0e87765718645a2adf (diff)
downloadskia-413a1eb45e0210748f126edd9e0639b905394bb7.tar.gz
[M40 merge] Detect discarded SkPictureShader pixel refs.
This doesn't address the more general problem, but reduces the race window significantly. (merge of 387a01a6357b4ba6ff87ac57626de1cb6a3b31bf) BUG=440282 TBR=reed@google.com NOTRY=true Review URL: https://codereview.chromium.org/808853003
-rw-r--r--src/core/SkPictureShader.cpp9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/core/SkPictureShader.cpp b/src/core/SkPictureShader.cpp
index 1f32a7ecd..1596fb3ab 100644
--- a/src/core/SkPictureShader.cpp
+++ b/src/core/SkPictureShader.cpp
@@ -77,7 +77,14 @@ struct BitmapShaderRec : public SkResourceCache::Rec {
SkAutoTUnref<SkShader>* result = reinterpret_cast<SkAutoTUnref<SkShader>*>(contextShader);
result->reset(SkRef(rec.fShader.get()));
- return true;
+
+ SkBitmap tile;
+ rec.fShader.get()->asABitmap(&tile, NULL, NULL);
+ // FIXME: this doesn't protect the pixels from being discarded as soon as we unlock.
+ // Should be handled via a pixel ref generator instead
+ // (https://code.google.com/p/skia/issues/detail?id=3220).
+ SkAutoLockPixels alp(tile, true);
+ return tile.getPixels() != NULL;
}
};