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

Commit 2286f819 authored by Chris Craik's avatar Chris Craik Committed by Android (Google) Code Review
Browse files

Merge "Don't track TextureLayer lifecycles in RenderState" into lmp-dev

parents e7df34e0 8a226d24
Loading
Loading
Loading
Loading
+11 −5
Original line number Diff line number Diff line
@@ -29,15 +29,15 @@
namespace android {
namespace uirenderer {

Layer::Layer(RenderState& renderState, const uint32_t layerWidth, const uint32_t layerHeight)
Layer::Layer(Type layerType, RenderState& renderState, const uint32_t layerWidth, const uint32_t layerHeight)
        : caches(Caches::getInstance())
        , renderState(renderState)
        , texture(caches) {
        , texture(caches)
        , type(layerType) {
    mesh = NULL;
    meshElementCount = 0;
    cacheable = true;
    dirty = false;
    textureLayer = false;
    renderTarget = GL_TEXTURE_2D;
    texture.width = layerWidth;
    texture.height = layerHeight;
@@ -55,11 +55,17 @@ Layer::Layer(RenderState& renderState, const uint32_t layerWidth, const uint32_t
    caches.resourceCache.incrementRefcount(this);
    rendererLightPosDirty = true;
    wasBuildLayered = false;
    if (!isTextureLayer()) {
        // track only non-texture layer lifecycles in renderstate,
        // because texture layers are destroyed via finalizer
        renderState.registerLayer(this);
    }
}

Layer::~Layer() {
    if (!isTextureLayer()) {
        renderState.unregisterLayer(this);
    }
    SkSafeUnref(colorFilter);
    removeFbo();
    deleteTexture();
+9 −9
Original line number Diff line number Diff line
@@ -54,7 +54,12 @@ class DeferStateStruct;
 */
class Layer {
public:
    Layer(RenderState& renderState, const uint32_t layerWidth, const uint32_t layerHeight);
    enum Type {
        kType_Texture,
        kType_DisplayList,
    };

    Layer(Type type, RenderState& renderState, const uint32_t layerWidth, const uint32_t layerHeight);
    ~Layer();

    static uint32_t computeIdealWidth(uint32_t layerWidth);
@@ -219,11 +224,7 @@ public:
    }

    inline bool isTextureLayer() const {
        return textureLayer;
    }

    inline void setTextureLayer(bool textureLayer) {
        this->textureLayer = textureLayer;
        return type == kType_Texture;
    }

    inline SkColorFilter* getColorFilter() const {
@@ -343,10 +344,9 @@ private:
    bool cacheable;

    /**
     * When set to true, this layer must be treated as a texture
     * layer.
     * Denotes whether the layer is a DisplayList, or Texture layer.
     */
    bool textureLayer;
    const Type type;

    /**
     * When set to true, this layer is dirty and should be cleared
+1 −1
Original line number Diff line number Diff line
@@ -112,7 +112,7 @@ Layer* LayerCache::get(RenderState& renderState, const uint32_t width, const uin
    } else {
        LAYER_LOGD("Creating new layer %dx%d", entry.mWidth, entry.mHeight);

        layer = new Layer(renderState, entry.mWidth, entry.mHeight);
        layer = new Layer(Layer::kType_DisplayList, renderState, entry.mWidth, entry.mHeight);
        layer->setBlend(true);
        layer->setEmpty(true);
        layer->setFbo(0);
+1 −2
Original line number Diff line number Diff line
@@ -272,9 +272,8 @@ bool LayerRenderer::resizeLayer(Layer* layer, uint32_t width, uint32_t height) {
Layer* LayerRenderer::createTextureLayer(RenderState& renderState) {
    LAYER_RENDERER_LOGD("Creating new texture layer");

    Layer* layer = new Layer(renderState, 0, 0);
    Layer* layer = new Layer(Layer::kType_Texture, renderState, 0, 0);
    layer->setCacheable(false);
    layer->setTextureLayer(true);
    layer->setEmpty(true);
    layer->setFbo(0);
    layer->setAlpha(255, SkXfermode::kSrcOver_Mode);