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

Commit cefbd143 authored by Dave Burke's avatar Dave Burke Committed by Android (Google) Code Review
Browse files

Merge "Revert "Deleting objects on the wrong thread is a silly idea Bug #7195815"" into jb-mr1-dev

parents e8e2b672 56257aff
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;
        }