diff options
Diffstat (limited to 'libs')
-rw-r--r-- | libs/hwui/DisplayListRenderer.h | 1 | ||||
-rw-r--r-- | libs/hwui/PathCache.cpp | 5 |
2 files changed, 6 insertions, 0 deletions
diff --git a/libs/hwui/DisplayListRenderer.h b/libs/hwui/DisplayListRenderer.h index 90a7145..4a299c6 100644 --- a/libs/hwui/DisplayListRenderer.h +++ b/libs/hwui/DisplayListRenderer.h @@ -462,6 +462,7 @@ private: SkPath* pathCopy = mPathMap.valueFor(path); if (pathCopy == NULL || pathCopy->getGenerationID() != path->getGenerationID()) { pathCopy = new SkPath(*path); + pathCopy->setSourcePath(path); // replaceValueFor() performs an add if the entry doesn't exist mPathMap.replaceValueFor(path, pathCopy); mPaths.add(pathCopy); diff --git a/libs/hwui/PathCache.cpp b/libs/hwui/PathCache.cpp index e09c243..e363b73 100644 --- a/libs/hwui/PathCache.cpp +++ b/libs/hwui/PathCache.cpp @@ -83,6 +83,11 @@ void PathCache::clearGarbage() { } PathTexture* PathCache::get(SkPath* path, SkPaint* paint) { + const SkPath* sourcePath = path->getSourcePath(); + if (sourcePath && sourcePath->getGenerationID() == path->getGenerationID()) { + path = const_cast<SkPath*>(sourcePath); + } + PathCacheEntry entry(path, paint); PathTexture* texture = mCache.get(entry); |