aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar fmalita <fmalita@chromium.org>2014-12-10 12:17:58 -0800
committerGravatar Commit bot <commit-bot@chromium.org>2014-12-10 12:17:58 -0800
commit387a01a6357b4ba6ff87ac57626de1cb6a3b31bf (patch)
tree205794013304795d2b6e3e38687f9ac70b56917b /src
parentf3e218c215cd309adcad45ad4c2e617bb761a1e4 (diff)
Detect discarded SkPictureShader pixel refs.
This doesn't address the more general problem, but reduces the race window significantly. BUG=440282 R=reed@google.com Review URL: https://codereview.chromium.org/787043006
Diffstat (limited to 'src')
-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 198a2a9e49..fb05597db8 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;
}
};