Loading libs/hwui/DisplayListRenderer.cpp +10 −4 Original line number Diff line number Diff line Loading @@ -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(); Loading Loading @@ -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(); Loading Loading @@ -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(); } Loading libs/hwui/DisplayListRenderer.h +1 −0 Original line number Diff line number Diff line Loading @@ -417,6 +417,7 @@ private: shaderCopy = shader->copy(); mShaderMap.add(shader, shaderCopy); mShaders.add(shaderCopy); Caches::getInstance().resourceCache.incrementRefcount(shaderCopy); } addInt((int) shaderCopy); Loading libs/hwui/SkiaShader.cpp +26 −10 Original line number Diff line number Diff line Loading @@ -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; } Loading Loading @@ -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; } Loading Loading @@ -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; } Loading Loading @@ -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; } Loading libs/hwui/SkiaShader.h +8 −1 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -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 Loading libs/hwui/ResourceCache.cpp +5 −5 File changed.Contains only whitespace changes. Show changes Loading
libs/hwui/DisplayListRenderer.cpp +10 −4 Original line number Diff line number Diff line Loading @@ -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(); Loading Loading @@ -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(); Loading Loading @@ -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(); } Loading
libs/hwui/DisplayListRenderer.h +1 −0 Original line number Diff line number Diff line Loading @@ -417,6 +417,7 @@ private: shaderCopy = shader->copy(); mShaderMap.add(shader, shaderCopy); mShaders.add(shaderCopy); Caches::getInstance().resourceCache.incrementRefcount(shaderCopy); } addInt((int) shaderCopy); Loading
libs/hwui/SkiaShader.cpp +26 −10 Original line number Diff line number Diff line Loading @@ -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; } Loading Loading @@ -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; } Loading Loading @@ -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; } Loading Loading @@ -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; } Loading
libs/hwui/SkiaShader.h +8 −1 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -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 Loading