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

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

Merge "Fix paths rendering issues."

parents 27c75302 b29cfbf7
Loading
Loading
Loading
Loading
+0 −17
Original line number Diff line number Diff line
@@ -95,10 +95,6 @@ void DisplayList::clearResources() {
        delete mPaths.itemAt(i);
    }
    mPaths.clear();
    for (size_t i = 0; i < mOriginalPaths.size(); i++) {
        caches.resourceCache.decrementRefcount(mOriginalPaths.itemAt(i));
    }
    mOriginalPaths.clear();

    for (size_t i = 0; i < mMatrices.size(); i++) {
        delete mMatrices.itemAt(i);
@@ -150,13 +146,6 @@ void DisplayList::initFromDisplayListRenderer(const DisplayListRenderer& recorde
        mPaths.add(paths.itemAt(i));
    }

    const Vector<SkPath*> &originalPaths = recorder.getOriginalPaths();
    for (size_t i = 0; i < originalPaths.size(); i++) {
        SkPath* path = originalPaths.itemAt(i);
        mOriginalPaths.add(path);
        caches.resourceCache.incrementRefcount(path);
    }

    const Vector<SkMatrix*> &matrices = recorder.getMatrices();
    for (size_t i = 0; i < matrices.size(); i++) {
        mMatrices.add(matrices.itemAt(i));
@@ -533,12 +522,6 @@ void DisplayListRenderer::reset() {
    }
    mBitmapResources.clear();

    for (size_t i = 0; i < mOriginalPaths.size(); i++) {
        SkPath* resource = mOriginalPaths.itemAt(i);
        caches.resourceCache.decrementRefcount(resource);
    }
    mOriginalPaths.clear();

    for (size_t i = 0; i < mShaders.size(); i++) {
       caches.resourceCache.decrementRefcount(mShaders.itemAt(i));
    }
+2 −15
Original line number Diff line number Diff line
@@ -193,7 +193,6 @@ private:

    Vector<SkPaint*> mPaints;
    Vector<SkPath*> mPaths;
    Vector<SkPath*> mOriginalPaths;
    Vector<SkMatrix*> mMatrices;
    Vector<SkiaShader*> mShaders;

@@ -298,10 +297,6 @@ public:
        return mPaths;
    }

    const Vector<SkPath*>& getOriginalPaths() const {
        return mOriginalPaths;
    }

    const Vector<SkMatrix*>& getMatrices() const {
        return mMatrices;
    }
@@ -383,16 +378,9 @@ private:

        SkPath* pathCopy = mPathMap.valueFor(path);
        if (pathCopy == NULL || pathCopy->getGenerationID() != path->getGenerationID()) {
            if (pathCopy == NULL) {
                pathCopy = path;
                mOriginalPaths.add(path);
                Caches& caches = Caches::getInstance();
                caches.resourceCache.incrementRefcount(path);
            } else {
            pathCopy = new SkPath(*path);
                mPaths.add(pathCopy);
            }
            mPathMap.add(path, pathCopy);
            mPaths.add(pathCopy);
        }

        addInt((int) pathCopy);
@@ -469,7 +457,6 @@ private:
    Vector<SkPaint*> mPaints;
    DefaultKeyedVector<SkPaint*, SkPaint*> mPaintMap;

    Vector<SkPath*> mOriginalPaths;
    Vector<SkPath*> mPaths;
    DefaultKeyedVector<SkPath*, SkPath*> mPathMap;

+2 −2
Original line number Diff line number Diff line
@@ -41,8 +41,7 @@ struct PathCacheEntry: public ShapeCacheEntry {
        path = NULL;
    }

    PathCacheEntry(const PathCacheEntry& entry):
            ShapeCacheEntry(entry) {
    PathCacheEntry(const PathCacheEntry& entry): ShapeCacheEntry(entry) {
        path = entry.path;
    }

@@ -55,6 +54,7 @@ struct PathCacheEntry: public ShapeCacheEntry {
    }

    SkPath* path;

}; // PathCacheEntry

/**
+6 −3
Original line number Diff line number Diff line
@@ -96,7 +96,7 @@ struct ShapeCacheEntry {
    ShapeCacheEntry(const ShapeCacheEntry& entry):
        shapeType(entry.shapeType), join(entry.join), cap(entry.cap),
        style(entry.style), miter(entry.miter),
        strokeWidth(entry.strokeWidth) {
        strokeWidth(entry.strokeWidth), pathEffect(entry.pathEffect) {
    }

    ShapeCacheEntry(ShapeType type, SkPaint* paint) {
@@ -108,18 +108,19 @@ struct ShapeCacheEntry {
        v = paint->getStrokeWidth();
        strokeWidth = *(uint32_t*) &v;
        style = paint->getStyle();
        pathEffect = paint->getPathEffect();
    }

    virtual ~ShapeCacheEntry() {
    }

    // shapeType must be checked in subclasses operator<
    ShapeType shapeType;
    SkPaint::Join join;
    SkPaint::Cap cap;
    SkPaint::Style style;
    uint32_t miter;
    uint32_t strokeWidth;
    SkPathEffect* pathEffect;

    bool operator<(const ShapeCacheEntry& rhs) const {
        LTE_INT(shapeType) {
@@ -128,6 +129,7 @@ struct ShapeCacheEntry {
                    LTE_INT(style) {
                        LTE_INT(miter) {
                            LTE_INT(strokeWidth) {
                                LTE_INT(pathEffect) {
                                    return lessThan(rhs);
                                }
                            }
@@ -135,6 +137,7 @@ struct ShapeCacheEntry {
                    }
                }
            }
        }
        return false;
    }