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

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

Merge "Fix another memory leak in OpenGLRenderer"

parents ae16cd81 d586ad9c
Loading
Loading
Loading
Loading
+25 −6
Original line number Diff line number Diff line
@@ -101,8 +101,14 @@ void DisplayList::clearResources() {
    }
    mBitmapResources.clear();

    for (size_t i = 0; i < mFilterResources.size(); i++) {
        caches.resourceCache.decrementRefcount(mFilterResources.itemAt(i));
    }
    mFilterResources.clear();

    for (size_t i = 0; i < mShaders.size(); i++) {
        caches.resourceCache.decrementRefcount(mShaders.itemAt(i));
        caches.resourceCache.destructor(mShaders.itemAt(i));
    }
    mShaders.clear();

@@ -151,11 +157,18 @@ void DisplayList::initFromDisplayListRenderer(const DisplayListRenderer& recorde
        caches.resourceCache.incrementRefcount(resource);
    }

    const Vector<SkiaColorFilter*> &filterResources = recorder.getFilterResources();
    for (size_t i = 0; i < filterResources.size(); i++) {
        SkiaColorFilter* resource = filterResources.itemAt(i);
        mFilterResources.add(resource);
        caches.resourceCache.incrementRefcount(resource);
    }

    const Vector<SkiaShader*> &shaders = recorder.getShaders();
    for (size_t i = 0; i < shaders.size(); i++) {
        SkiaShader* shader = shaders.itemAt(i);
        mShaders.add(shader);
        caches.resourceCache.incrementRefcount(shader);
        SkiaShader* resource = shaders.itemAt(i);
        mShaders.add(resource);
        caches.resourceCache.incrementRefcount(resource);
    }

    const Vector<SkPaint*> &paints = recorder.getPaints();
@@ -873,11 +886,15 @@ void DisplayListRenderer::reset() {

    Caches& caches = Caches::getInstance();
    for (size_t i = 0; i < mBitmapResources.size(); i++) {
        SkBitmap* resource = mBitmapResources.itemAt(i);
        caches.resourceCache.decrementRefcount(resource);
        caches.resourceCache.decrementRefcount(mBitmapResources.itemAt(i));
    }
    mBitmapResources.clear();

    for (size_t i = 0; i < mFilterResources.size(); i++) {
        caches.resourceCache.decrementRefcount(mFilterResources.itemAt(i));
    }
    mFilterResources.clear();

    for (size_t i = 0; i < mShaders.size(); i++) {
        caches.resourceCache.decrementRefcount(mShaders.itemAt(i));
    }
@@ -886,8 +903,10 @@ void DisplayListRenderer::reset() {

    mPaints.clear();
    mPaintMap.clear();

    mPaths.clear();
    mPathMap.clear();

    mMatrices.clear();
}

+6 −8
Original line number Diff line number Diff line
@@ -292,6 +292,10 @@ public:
        return mBitmapResources;
    }

    const Vector<SkiaColorFilter*>& getFilterResources() const {
        return mFilterResources;
    }

    const Vector<SkiaShader*>& getShaders() const {
        return mShaders;
    }
@@ -308,10 +312,6 @@ public:
        return mMatrices;
    }

    const Vector<SkiaColorFilter*>& getFilterResources() const {
        return mFilterResources;
    }

private:
    void insertRestoreToCount() {
        if (mRestoreSaveCount >= 0) {
@@ -431,8 +431,7 @@ private:
        // which doesn't seem worth the extra cycles for this unlikely case.
        addInt((int) bitmap);
        mBitmapResources.add(bitmap);
        Caches& caches = Caches::getInstance();
        caches.resourceCache.incrementRefcount(bitmap);
        Caches::getInstance().resourceCache.incrementRefcount(bitmap);
    }

    inline void addShader(SkiaShader* shader) {
@@ -456,8 +455,7 @@ private:
    inline void addColorFilter(SkiaColorFilter* colorFilter) {
        addInt((int) colorFilter);
        mFilterResources.add(colorFilter);
        Caches& caches = Caches::getInstance();
        caches.resourceCache.incrementRefcount(colorFilter);
        Caches::getInstance().resourceCache.incrementRefcount(colorFilter);
    }

    Vector<SkBitmap*> mBitmapResources;
+8 −19
Original line number Diff line number Diff line
@@ -48,9 +48,6 @@ ResourceCache::~ResourceCache() {

void ResourceCache::incrementRefcount(void* resource, ResourceType resourceType) {
    Mutex::Autolock _l(mLock);
    for (size_t i = 0; i < mCache->size(); ++i) {
        void* ref = mCache->valueAt(i);
    }
    ResourceReference* ref = mCache->indexOfKey(resource) >= 0 ? mCache->valueFor(resource) : NULL;
    if (ref == NULL || mCache->size() == 0) {
        ref = new ResourceReference(resourceType);
@@ -144,7 +141,6 @@ void ResourceCache::destructor(SkPath* resource) {
    ref->destroyed = true;
    if (ref->refCount == 0) {
        deleteResourceReference(resource, ref);
        return;
    }
}

@@ -162,7 +158,6 @@ void ResourceCache::destructor(SkBitmap* resource) {
    ref->destroyed = true;
    if (ref->refCount == 0) {
        deleteResourceReference(resource, ref);
        return;
    }
}

@@ -180,7 +175,6 @@ void ResourceCache::destructor(SkiaShader* resource) {
    ref->destroyed = true;
    if (ref->refCount == 0) {
        deleteResourceReference(resource, ref);
        return;
    }
}

@@ -195,7 +189,6 @@ void ResourceCache::destructor(SkiaColorFilter* resource) {
    ref->destroyed = true;
    if (ref->refCount == 0) {
        deleteResourceReference(resource, ref);
        return;
    }
}

@@ -209,8 +202,7 @@ void ResourceCache::deleteResourceReference(void* resource, ResourceReference* r
    }
    if (ref->destroyed) {
        switch (ref->resourceType) {
            case kBitmap:
            {
            case kBitmap: {
                SkBitmap* bitmap = (SkBitmap*) resource;
                if (Caches::hasInstance()) {
                    Caches::getInstance().textureCache.removeDeferred(bitmap);
@@ -218,8 +210,7 @@ void ResourceCache::deleteResourceReference(void* resource, ResourceReference* r
                delete bitmap;
            }
            break;
            case kPath:
            {
            case kPath: {
                SkPath* path = (SkPath*) resource;
                if (Caches::hasInstance()) {
                    Caches::getInstance().pathCache.removeDeferred(path);
@@ -227,8 +218,7 @@ void ResourceCache::deleteResourceReference(void* resource, ResourceReference* r
                delete path;
            }
            break;
            case kShader:
            {
            case kShader: {
                SkiaShader* shader = (SkiaShader*) resource;
                if (Caches::hasInstance()) {
                    Caches::getInstance().gradientCache.removeDeferred(shader->getSkShader());
@@ -236,8 +226,7 @@ void ResourceCache::deleteResourceReference(void* resource, ResourceReference* r
                delete shader;
            }
            break;
            case kColorFilter:
            {
            case kColorFilter: {
                SkiaColorFilter* filter = (SkiaColorFilter*) resource;
                delete filter;
            }
+1 −1

File changed.

Contains only whitespace changes.