diff options
Diffstat (limited to 'src/core/SkBitmapProcShader.cpp')
-rw-r--r-- | src/core/SkBitmapProcShader.cpp | 26 |
1 files changed, 10 insertions, 16 deletions
diff --git a/src/core/SkBitmapProcShader.cpp b/src/core/SkBitmapProcShader.cpp index 11deac4aed..8c648b6051 100644 --- a/src/core/SkBitmapProcShader.cpp +++ b/src/core/SkBitmapProcShader.cpp @@ -6,6 +6,8 @@ */ #include "SkBitmapProcShader.h" + +#include "SkArenaAlloc.h" #include "SkBitmapProcState.h" #include "SkBitmapProvider.h" #include "SkXfermodePriv.h" @@ -33,10 +35,6 @@ public: } } - ~BitmapProcInfoContext() override { - fInfo->~SkBitmapProcInfo(); - } - uint32_t getFlags() const override { return fFlags; } private: @@ -201,10 +199,10 @@ size_t SkBitmapProcLegacyShader::ContextSize(const ContextRec& rec, const SkImag return s; } -SkShader::Context* SkBitmapProcLegacyShader::MakeContext(const SkShader& shader, - TileMode tmx, TileMode tmy, - const SkBitmapProvider& provider, - const ContextRec& rec, void* storage) { +SkShader::Context* SkBitmapProcLegacyShader::MakeContext( + const SkShader& shader, TileMode tmx, TileMode tmy, + const SkBitmapProvider& provider, const ContextRec& rec, SkArenaAlloc* alloc) +{ SkMatrix totalInverse; // Do this first, so we know the matrix can be inverted. if (!shader.computeTotalInverse(rec, &totalInverse)) { @@ -215,21 +213,17 @@ SkShader::Context* SkBitmapProcLegacyShader::MakeContext(const SkShader& shader, bool useLinearPipeline = choose_linear_pipeline(rec, provider.info()); if (useLinearPipeline) { - void* infoStorage = (char*)storage + sizeof(LinearPipelineContext); - SkBitmapProcInfo* info = new (infoStorage) SkBitmapProcInfo(provider, tmx, tmy); + SkBitmapProcInfo* info = alloc->make<SkBitmapProcInfo>(provider, tmx, tmy); if (!info->init(totalInverse, *rec.fPaint)) { - info->~SkBitmapProcInfo(); return nullptr; } - return new (storage) LinearPipelineContext(shader, rec, info); + return alloc->make<LinearPipelineContext>(shader, rec, info); } else { - void* stateStorage = (char*)storage + sizeof(BitmapProcShaderContext); - SkBitmapProcState* state = new (stateStorage) SkBitmapProcState(provider, tmx, tmy); + SkBitmapProcState* state = alloc->make<SkBitmapProcState>(provider, tmx, tmy); if (!state->setup(totalInverse, *rec.fPaint)) { - state->~SkBitmapProcState(); return nullptr; } - return new (storage) BitmapProcShaderContext(shader, rec, state); + return alloc->make<BitmapProcShaderContext>(shader, rec, state); } } |