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

Commit 6efc3ac6 authored by John Reck's avatar John Reck Committed by Android (Google) Code Review
Browse files

Merge "Allow ~Layer() to happen after onGLContextDestroyed" into lmp-mr1-dev

parents 0312d2ff 57998017
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -273,7 +273,7 @@ void Caches::dumpMemoryUsage(String8 &log) {
            layerCache.getSize(), layerCache.getMaxSize(), layerCache.getCount());
    if (mRenderState) {
        int memused = 0;
        for (std::set<const Layer*>::iterator it = mRenderState->mActiveLayers.begin();
        for (std::set<Layer*>::iterator it = mRenderState->mActiveLayers.begin();
                it != mRenderState->mActiveLayers.end(); it++) {
            const Layer* layer = *it;
            log.appendFormat("    Layer size %dx%d; isTextureLayer()=%d; texid=%u fbo=%u; refs=%d\n",
+11 −3
Original line number Diff line number Diff line
@@ -69,17 +69,25 @@ Layer::Layer(Type layerType, RenderState& renderState, const uint32_t layerWidth
}

Layer::~Layer() {
    renderState.requireGLContext();
    renderState.unregisterLayer(this);
    SkSafeUnref(colorFilter);

    if (stencil || fbo || texture.id) {
        renderState.requireGLContext();
        removeFbo();
        deleteTexture();
    }

    delete[] mesh;
    delete deferredList;
    delete renderer;
}

void Layer::onGlContextLost() {
    removeFbo();
    deleteTexture();
}

uint32_t Layer::computeIdealWidth(uint32_t layerWidth) {
    return uint32_t(ceilf(layerWidth / float(LAYER_SIZE)) * LAYER_SIZE);
}
+6 −0
Original line number Diff line number Diff line
@@ -285,6 +285,12 @@ public:
     */
    void postDecStrong();

    /**
     * Lost the GL context but the layer is still around, mark it invalid internally
     * so the dtor knows not to do any GL work
     */
    void onGlContextLost();

    /**
     * Bounds of the layer.
     */
+5 −0
Original line number Diff line number Diff line
@@ -41,6 +41,10 @@ void RenderState::onGLContextCreated() {
    mCaches->textureCache.setAssetAtlas(&mAssetAtlas);
}

static void layerLostGlContext(Layer* layer) {
    layer->onGlContextLost();
}

void RenderState::onGLContextDestroyed() {
/*
    size_t size = mActiveLayers.size();
@@ -73,6 +77,7 @@ void RenderState::onGLContextDestroyed() {
        LOG_ALWAYS_FATAL("%d layers have survived gl context destruction", size);
    }
*/
    std::for_each(mActiveLayers.begin(), mActiveLayers.end(), layerLostGlContext);
    mAssetAtlas.terminate();
}

+3 −3
Original line number Diff line number Diff line
@@ -53,10 +53,10 @@ public:

    void debugOverdraw(bool enable, bool clear);

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

@@ -90,7 +90,7 @@ private:
    renderthread::RenderThread& mRenderThread;
    Caches* mCaches;
    AssetAtlas mAssetAtlas;
    std::set<const Layer*> mActiveLayers;
    std::set<Layer*> mActiveLayers;
    std::set<renderthread::CanvasContext*> mRegisteredContexts;

    GLsizei mViewportWidth;