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

Commit 4cdc5386 authored by Dave Burke's avatar Dave Burke Committed by The Android Automerger
Browse files

Revert "Deleting objects on the wrong thread is a silly idea Bug #7195815"

This reverts commit 8a137494

Change-Id: I53564a6c531d334afcc1fce0bea1e57ae266aa78
parent 5c41522d
Loading
Loading
Loading
Loading
+10 −6
Original line number Diff line number Diff line
@@ -19,7 +19,6 @@
#include <utils/Log.h>

#include "Layer.h"
#include "LayerRenderer.h"
#include "OpenGLRenderer.h"
#include "Caches.h"

@@ -47,14 +46,17 @@ Layer::~Layer() {
    if (mesh) delete mesh;
    if (meshIndices) delete meshIndices;
    if (colorFilter) Caches::getInstance().resourceCache.decrementRefcount(colorFilter);
    if (fbo) {
        LayerRenderer::flushLayer(this);
        Caches::getInstance().fboCache.put(fbo);
        fbo = 0;
    }
    if (fbo) Caches::getInstance().fboCache.put(fbo);
    deleteTexture();
}

void Layer::freeResourcesLocked() {
    if (colorFilter) {
        Caches::getInstance().resourceCache.decrementRefcountLocked(colorFilter);
        colorFilter = NULL;
    }
}

void Layer::setPaint(SkPaint* paint) {
    OpenGLRenderer::getAlphaAndModeDirect(paint, &alpha, &mode);
}
@@ -69,5 +71,7 @@ void Layer::setColorFilter(SkiaColorFilter* filter) {
    }
}



}; // namespace uirenderer
}; // namespace android
+2 −0
Original line number Diff line number Diff line
@@ -48,6 +48,8 @@ struct Layer {
    Layer(const uint32_t layerWidth, const uint32_t layerHeight);
    ~Layer();

    void freeResourcesLocked();

    /**
     * Sets this layer's region to a rectangle. Computes the appropriate
     * texture coordinates.
+8 −0
Original line number Diff line number Diff line
@@ -299,6 +299,13 @@ void LayerRenderer::destroyLayer(Layer* layer) {
        LAYER_RENDERER_LOGD("Recycling layer, %dx%d fbo = %d",
                layer->getWidth(), layer->getHeight(), layer->getFbo());

        GLuint fbo = layer->getFbo();
        if (fbo) {
            flushLayer(layer);
            Caches::getInstance().fboCache.put(fbo);
            layer->setFbo(0);
        }

        if (!Caches::getInstance().layerCache.put(layer)) {
            LAYER_RENDERER_LOGD("  Destroyed!");
            Caches::getInstance().resourceCache.decrementRefcount(layer);
@@ -315,6 +322,7 @@ void LayerRenderer::destroyLayer(Layer* layer) {
void LayerRenderer::destroyLayerDeferred(Layer* layer) {
    if (layer) {
        LAYER_RENDERER_LOGD("Deferring layer destruction, fbo = %d", layer->getFbo());

        Caches::getInstance().deleteLayerDeferred(layer);
    }
}
+2 −2
Original line number Diff line number Diff line
@@ -60,8 +60,6 @@ public:
    ANDROID_API static void destroyLayerDeferred(Layer* layer);
    ANDROID_API static bool copyLayer(Layer* layer, SkBitmap* bitmap);

    static void flushLayer(Layer* layer);

protected:
    virtual bool hasLayer();
    virtual Region* getRegion();
@@ -71,6 +69,8 @@ protected:
private:
    void generateMesh();

    static void flushLayer(Layer* layer);

    Layer* mLayer;
}; // class LayerRenderer

+3 −3
Original line number Diff line number Diff line
@@ -325,9 +325,9 @@ void ResourceCache::deleteResourceReferenceLocked(void* resource, ResourceRefere
            }
            break;
            case kLayer: {
                // No need to check for hasInstance, layers only exist
                // when we have a Caches instance
                Caches::getInstance().deleteLayerDeferred((Layer*) resource);
                Layer* layer = (Layer*) resource;
                layer->freeResourcesLocked();
                delete layer;
            }
            break;
        }