Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 37bf3ec9 authored by John Reck's avatar John Reck Committed by Gerrit Code Review
Browse files

Merge "Fix HWUI Path Cache dangling pointer"

parents 8d8515e7 2e4f67c3
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -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;
}

+7 −0
Original line number Diff line number Diff line
@@ -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;
+1 −0
Original line number Diff line number Diff line
@@ -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