summaryrefslogtreecommitdiffstats
path: root/libs
diff options
context:
space:
mode:
authorChris Craik <ccraik@google.com>2014-06-27 18:30:23 -0700
committerChris Craik <ccraik@google.com>2014-06-30 18:02:23 +0000
commit906d47fd2bcedb9674b5765d01bd9c758069074c (patch)
treebec8f9c65c1bba8496f5dd9c41d78cc894a0fa48 /libs
parent3e1585e05ddb0fd60033a5603e330b8ab1f69303 (diff)
downloadframeworks_base-906d47fd2bcedb9674b5765d01bd9c758069074c.zip
frameworks_base-906d47fd2bcedb9674b5765d01bd9c758069074c.tar.gz
frameworks_base-906d47fd2bcedb9674b5765d01bd9c758069074c.tar.bz2
Deep copy SkPath parameter to PathCache task
bug:15440706 Change-Id: I2b5b25f620df838cb1155cc8502d86ad3644c212
Diffstat (limited to 'libs')
-rw-r--r--libs/hwui/PathCache.cpp4
-rw-r--r--libs/hwui/PathCache.h9
2 files changed, 8 insertions, 5 deletions
diff --git a/libs/hwui/PathCache.cpp b/libs/hwui/PathCache.cpp
index 97eb583..ae48608 100644
--- a/libs/hwui/PathCache.cpp
+++ b/libs/hwui/PathCache.cpp
@@ -338,7 +338,7 @@ void PathCache::PathProcessor::onProcess(const sp<Task<SkBitmap*> >& task) {
float left, top, offset;
uint32_t width, height;
- PathCache::computePathBounds(t->path, &t->paint, left, top, offset, width, height);
+ PathCache::computePathBounds(&t->path, &t->paint, left, top, offset, width, height);
PathTexture* texture = t->texture;
texture->left = left;
@@ -349,7 +349,7 @@ void PathCache::PathProcessor::onProcess(const sp<Task<SkBitmap*> >& task) {
if (width <= mMaxTextureSize && height <= mMaxTextureSize) {
SkBitmap* bitmap = new SkBitmap();
- drawPath(t->path, &t->paint, *bitmap, left, top, offset, width, height);
+ drawPath(&t->path, &t->paint, *bitmap, left, top, offset, width, height);
t->setResult(bitmap);
} else {
texture->width = 0;
diff --git a/libs/hwui/PathCache.h b/libs/hwui/PathCache.h
index eee138b..bc34188 100644
--- a/libs/hwui/PathCache.h
+++ b/libs/hwui/PathCache.h
@@ -272,15 +272,18 @@ private:
class PathTask: public Task<SkBitmap*> {
public:
PathTask(const SkPath* path, const SkPaint* paint, PathTexture* texture):
- path(path), paint(*paint), texture(texture) {
+ path(*path), paint(*paint), texture(texture) {
}
~PathTask() {
delete future()->get();
}
- const SkPath* path;
- //copied, since input paint may not be immutable
+ // copied, since input path not refcounted / guaranteed to survive for duration of task
+ // TODO: avoid deep copy with refcounting
+ const SkPath path;
+
+ // copied, since input paint may not be immutable
const SkPaint paint;
PathTexture* texture;
};