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

Commit 3cb5ed8b authored by Romain Guy's avatar Romain Guy Committed by Android (Google) Code Review
Browse files

Merge "Path precaching creates duplicate cache entries Bug #8478275" into jb-mr2-dev

parents 3bcc2fba 4500a8d5
Loading
Loading
Loading
Loading
+9 −4
Original line number Diff line number Diff line
@@ -262,12 +262,13 @@ PathTexture* PathCache::addTexture(const PathDescription& entry, const SkPath *p

    PathTexture* texture = createTexture(left, top, offset, width, height,
            path->getGenerationID());
    addTexture(entry, &bitmap, texture);
    generateTexture(entry, &bitmap, texture);

    return texture;
}

void PathCache::addTexture(const PathDescription& entry, SkBitmap* bitmap, PathTexture* texture) {
void PathCache::generateTexture(const PathDescription& entry, SkBitmap* bitmap,
        PathTexture* texture, bool addToCache) {
    generateTexture(*bitmap, texture);

    uint32_t size = texture->width * texture->height;
@@ -278,7 +279,9 @@ void PathCache::addTexture(const PathDescription& entry, SkBitmap* bitmap, PathT
        if (mDebugEnabled) {
            ALOGD("Shape created, size = %d", size);
        }
        if (addToCache) {
            mCache.put(entry, texture);
        }
    } else {
        texture->cleanup = true;
    }
@@ -414,7 +417,7 @@ PathTexture* PathCache::get(SkPath* path, SkPaint* paint) {
            // producing the bitmap, so let's wait
            SkBitmap* bitmap = task->getResult();
            if (bitmap) {
                addTexture(entry, bitmap, texture);
                generateTexture(entry, bitmap, texture, false);
                texture->clearTask();
            } else {
                ALOGW("Path too large to be rendered into a texture");
@@ -423,6 +426,8 @@ PathTexture* PathCache::get(SkPath* path, SkPaint* paint) {
                mCache.remove(entry);
            }
        } else if (path->getGenerationID() != texture->generation) {
            // The size of the path might have changed so we first
            // remove the entry from the cache
            mCache.remove(entry);
            texture = addTexture(entry, path, paint);
        }
+7 −6
Original line number Diff line number Diff line
@@ -253,7 +253,13 @@ private:
    PathTexture* addTexture(const PathDescription& entry,
            const SkPath *path, const SkPaint* paint);
    PathTexture* addTexture(const PathDescription& entry, SkBitmap* bitmap);
    void addTexture(const PathDescription& entry, SkBitmap* bitmap, PathTexture* texture);

    /**
     * Generates the texture from a bitmap into the specified texture structure.
     */
    void generateTexture(SkBitmap& bitmap, Texture* texture);
    void generateTexture(const PathDescription& entry, SkBitmap* bitmap, PathTexture* texture,
            bool addToCache = true);

    PathTexture* get(const PathDescription& entry) {
        return mCache.get(entry);
@@ -282,11 +288,6 @@ private:
        return true;
    }

    /**
     * Generates the texture from a bitmap into the specified texture structure.
     */
    void generateTexture(SkBitmap& bitmap, Texture* texture);

    void init();

    class PathTask: public Task<SkBitmap*> {