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

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

Merge "Crash instead of leaking layers/textures between GL contexts" into lmp-dev

parents 5d0ec89d 1d477423
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -54,9 +54,11 @@ Layer::Layer(RenderState& renderState, const uint32_t layerWidth, const uint32_t
    convexMask = NULL;
    caches.resourceCache.incrementRefcount(this);
    rendererLightPosDirty = true;
    renderState.registerLayer(this);
}

Layer::~Layer() {
    renderState.unregisterLayer(this);
    SkSafeUnref(colorFilter);
    removeFbo();
    deleteTexture();
+4 −0
Original line number Diff line number Diff line
@@ -34,6 +34,10 @@ void RenderState::onGLContextCreated() {
    mCaches->init();
}

void RenderState::onGLContextDestroyed() {
    LOG_ALWAYS_FATAL_IF(!mActiveLayers.empty(), "layers have survived gl context destruction");
}

void RenderState::setViewport(GLsizei width, GLsizei height) {
    mViewportWidth = width;
    mViewportHeight = height;
+10 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@
#ifndef RENDERSTATE_H
#define RENDERSTATE_H

#include <set>
#include <GLES2/gl2.h>
#include <GLES2/gl2ext.h>

@@ -37,6 +38,7 @@ class RenderState {
    PREVENT_COPY_AND_ASSIGN(RenderState);
public:
    void onGLContextCreated();
    void onGLContextDestroyed();

    void setViewport(GLsizei width, GLsizei height);
    void getViewport(GLsizei* outWidth, GLsizei* outHeight);
@@ -48,6 +50,13 @@ public:

    void debugOverdraw(bool enable, bool clear);

    void registerLayer(const Layer* layer) {
        mActiveLayers.insert(layer);
    }
    void unregisterLayer(const Layer* layer) {
        mActiveLayers.erase(layer);
    }

private:
    friend class renderthread::RenderThread;

@@ -58,6 +67,7 @@ private:
    ~RenderState();

    Caches* mCaches;
    std::set<const Layer*> mActiveLayers;

    GLsizei mViewportWidth;
    GLsizei mViewportHeight;
+1 −0
Original line number Diff line number Diff line
@@ -214,6 +214,7 @@ void EglManager::destroy() {
        Caches::getInstance().terminate();
    }

    mRenderThread.renderState().onGLContextDestroyed();
    eglDestroyContext(mEglDisplay, mEglContext);
    eglDestroySurface(mEglDisplay, mPBufferSurface);
    eglMakeCurrent(mEglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);