Loading libs/hwui/OpenGLRenderer.cpp +4 −1 Original line number Diff line number Diff line Loading @@ -2325,12 +2325,15 @@ void OpenGLRenderer::drawPath(const SkPath* path, const SkPaint* paint) { PathTexture* texture = mCaches.pathCache.get(path, paint); if (!texture) return; const AutoTexture autoCleanup(texture); const float x = texture->left - texture->offset; const float y = texture->top - texture->offset; drawPathTexture(texture, x, y, paint); if (texture->cleanup) { mCaches.pathCache.remove(path, paint); } mDirty = true; } Loading libs/hwui/PathCache.cpp +7 −0 Original line number Diff line number Diff line Loading @@ -400,6 +400,13 @@ PathTexture* PathCache::get(const SkPath* path, const SkPaint* paint) { return texture; } void PathCache::remove(const SkPath* path, const SkPaint* paint) { PathDescription entry(kShapePath, paint); entry.shape.path.mGenerationID = path->getGenerationID(); mCache.remove(entry); } void PathCache::precache(const SkPath* path, const SkPaint* paint) { if (!Caches::getInstance().tasks.canRunTasks()) { return; Loading libs/hwui/PathCache.h +1 −0 Original line number Diff line number Diff line Loading @@ -201,6 +201,7 @@ public: PathTexture* getArc(float width, float height, float startAngle, float sweepAngle, bool useCenter, const SkPaint* paint); PathTexture* get(const SkPath* path, const SkPaint* paint); void remove(const SkPath* path, const SkPaint* paint); /** * Removes the specified path. This is meant to be called from threads Loading Loading
libs/hwui/OpenGLRenderer.cpp +4 −1 Original line number Diff line number Diff line Loading @@ -2325,12 +2325,15 @@ void OpenGLRenderer::drawPath(const SkPath* path, const SkPaint* paint) { PathTexture* texture = mCaches.pathCache.get(path, paint); if (!texture) return; const AutoTexture autoCleanup(texture); const float x = texture->left - texture->offset; const float y = texture->top - texture->offset; drawPathTexture(texture, x, y, paint); if (texture->cleanup) { mCaches.pathCache.remove(path, paint); } mDirty = true; } Loading
libs/hwui/PathCache.cpp +7 −0 Original line number Diff line number Diff line Loading @@ -400,6 +400,13 @@ PathTexture* PathCache::get(const SkPath* path, const SkPaint* paint) { return texture; } void PathCache::remove(const SkPath* path, const SkPaint* paint) { PathDescription entry(kShapePath, paint); entry.shape.path.mGenerationID = path->getGenerationID(); mCache.remove(entry); } void PathCache::precache(const SkPath* path, const SkPaint* paint) { if (!Caches::getInstance().tasks.canRunTasks()) { return; Loading
libs/hwui/PathCache.h +1 −0 Original line number Diff line number Diff line Loading @@ -201,6 +201,7 @@ public: PathTexture* getArc(float width, float height, float startAngle, float sweepAngle, bool useCenter, const SkPaint* paint); PathTexture* get(const SkPath* path, const SkPaint* paint); void remove(const SkPath* path, const SkPaint* paint); /** * Removes the specified path. This is meant to be called from threads Loading