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

Commit 43ccf466 authored by Romain Guy's avatar Romain Guy
Browse files

Don't crash Launcher on config change.

Change-Id: Ibbbd7146c5ff69e9639b433f39041053654d808c
parent 8dd5b1e5
Loading
Loading
Loading
Loading
+10 −4
Original line number Diff line number Diff line
@@ -129,7 +129,7 @@ DisplayList::~DisplayList() {
    mBitmapResources.clear();

    for (size_t i = 0; i < mShaders.size(); i++) {
        delete mShaders.itemAt(i);
        caches.resourceCache.decrementRefcount(mShaders.itemAt(i));
    }
    mShaders.clear();

@@ -181,7 +181,9 @@ void DisplayList::initFromDisplayListRenderer(const DisplayListRenderer& recorde

    const Vector<SkiaShader*> &shaders = recorder.getShaders();
    for (size_t i = 0; i < shaders.size(); i++) {
        mShaders.add(shaders.itemAt(i));
        SkiaShader* shader = shaders.itemAt(i);
        mShaders.add(shader);
        caches.resourceCache.incrementRefcount(shader);
    }

    const Vector<SkPaint*> &paints = recorder.getPaints();
@@ -405,10 +407,14 @@ void DisplayListRenderer::reset() {
    }
    mBitmapResources.clear();

    mPaints.clear();
    mPaintMap.clear();
    for (size_t i = 0; i < mShaders.size(); i++) {
       caches.resourceCache.decrementRefcount(mShaders.itemAt(i));
    }
    mShaders.clear();
    mShaderMap.clear();

    mPaints.clear();
    mPaintMap.clear();
    mMatrices.clear();
}

+1 −0
Original line number Diff line number Diff line
@@ -417,6 +417,7 @@ private:
            shaderCopy = shader->copy();
            mShaderMap.add(shader, shaderCopy);
            mShaders.add(shaderCopy);
            Caches::getInstance().resourceCache.incrementRefcount(shaderCopy);
        }

        addInt((int) shaderCopy);
+26 −10
Original line number Diff line number Diff line
@@ -205,9 +205,12 @@ SkiaLinearGradientShader::~SkiaLinearGradientShader() {
SkiaShader* SkiaLinearGradientShader::copy() {
    SkiaLinearGradientShader* copy = new SkiaLinearGradientShader();
    copy->copyFrom(*this);
    copy->mBounds = mBounds;
    copy->mColors = mColors;
    copy->mPositions = mPositions;
    copy->mBounds = new float[4];
    memcpy(copy->mBounds, mBounds, sizeof(float) * 4);
    copy->mColors = new uint32_t[mCount];
    memcpy(copy->mColors, mColors, sizeof(uint32_t) * mCount);
    copy->mPositions = new float[mCount];
    memcpy(copy->mPositions, mPositions, sizeof(float) * mCount);
    copy->mCount = mCount;
    return copy;
}
@@ -270,8 +273,10 @@ SkiaCircularGradientShader::SkiaCircularGradientShader(float x, float y, float r
SkiaShader* SkiaCircularGradientShader::copy() {
    SkiaCircularGradientShader* copy = new SkiaCircularGradientShader();
    copy->copyFrom(*this);
    copy->mColors = mColors;
    copy->mPositions = mPositions;
    copy->mColors = new uint32_t[mCount];
    memcpy(copy->mColors, mColors, sizeof(uint32_t) * mCount);
    copy->mPositions = new float[mCount];
    memcpy(copy->mPositions, mPositions, sizeof(float) * mCount);
    copy->mCount = mCount;
    return copy;
}
@@ -317,8 +322,10 @@ SkiaSweepGradientShader::~SkiaSweepGradientShader() {
SkiaShader* SkiaSweepGradientShader::copy() {
    SkiaSweepGradientShader* copy = new SkiaSweepGradientShader();
    copy->copyFrom(*this);
    copy->mColors = mColors;
    copy->mPositions = mPositions;
    copy->mColors = new uint32_t[mCount];
    memcpy(copy->mColors, mColors, sizeof(uint32_t) * mCount);
    copy->mPositions = new float[mCount];
    memcpy(copy->mPositions, mPositions, sizeof(float) * mCount);
    copy->mCount = mCount;
    return copy;
}
@@ -362,15 +369,24 @@ void SkiaSweepGradientShader::updateTransforms(Program* program, const mat4& mod
SkiaComposeShader::SkiaComposeShader(SkiaShader* first, SkiaShader* second,
        SkXfermode::Mode mode, SkShader* key):
        SkiaShader(kCompose, key, SkShader::kClamp_TileMode, SkShader::kClamp_TileMode,
        NULL, first->blend() || second->blend()), mFirst(first), mSecond(second), mMode(mode) {
        NULL, first->blend() || second->blend()),
        mFirst(first), mSecond(second), mMode(mode), mCleanup(false) {
}

SkiaComposeShader::~SkiaComposeShader() {
    if (mCleanup) {
        delete mFirst;
        delete mSecond;
    }
}

SkiaShader* SkiaComposeShader::copy() {
    SkiaComposeShader* copy = new SkiaComposeShader();
    copy->copyFrom(*this);
    copy->mFirst = mFirst;
    copy->mSecond = mSecond;
    copy->mFirst = mFirst->copy();
    copy->mSecond = mSecond->copy();
    copy->mMode = mMode;
    copy->cleanup();
    return copy;
}

+8 −1
Original line number Diff line number Diff line
@@ -234,6 +234,7 @@ private:
 */
struct SkiaComposeShader: public SkiaShader {
    SkiaComposeShader(SkiaShader* first, SkiaShader* second, SkXfermode::Mode mode, SkShader* key);
    ~SkiaComposeShader();
    SkiaShader* copy();

    void set(TextureCache* textureCache, GradientCache* gradientCache);
@@ -243,12 +244,18 @@ struct SkiaComposeShader: public SkiaShader {
            GLuint* textureUnit);

private:
    SkiaComposeShader() {
    SkiaComposeShader(): mCleanup(false) {
    }

    void cleanup() {
        mCleanup = true;
    }

    SkiaShader* mFirst;
    SkiaShader* mSecond;
    SkXfermode::Mode mMode;

    bool mCleanup;
}; // struct SkiaComposeShader

}; // namespace uirenderer
+5 −5

File changed.

Contains only whitespace changes.