diff options
author | halcanary <halcanary@google.com> | 2016-03-03 14:23:47 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-03-03 14:23:47 -0800 |
commit | e38bcaf24b00066e167e03a5ac63cf828914d747 (patch) | |
tree | 88b3764be24dbf59e7a6e3d88beeb66f12c64dda | |
parent | ce56026db55d8585c2f920a6107a25b40fd5160a (diff) |
Revert of enforce 16byte alignment in shader contexts (patchset #1 id:1 of https://codereview.chromium.org/1759653004/ )
Reason for revert:
Test-Win8-MSVC-ShuttleB-CPU-AVX2-x86-Debug failed dm:
....
FYI: loaded 23439 distinct uninteresting hashes from 23439 lines
Skipping config gpu: Don't understand 'gpu'.
Skipping config msaa16: Don't understand 'msaa16'.
168400 srcs * 7 sinks + 481 tests == 1179281 tasks
0ns elapsed, 5 active, 1179276 queued, 55MB RAM, 55MB peak
565 gm xfermodes2
565 gm xfermodes
565 gm xfermodeimagefilter
565 gm xfermodes3
565 gm verylarge_picture_image
c:\0\build\slave\workdir\build\skia\src\core\skshader.cpp:108:
fatal error: ""(0 == ((size) & 15))""
step returned non-zero exit code: 3
@@@STEP_FAILURE@@@
Original issue's description:
> enforce 16byte alignment in shader contexts
>
> BUG=skia:
> GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1759653004
>
> Committed: https://skia.googlesource.com/skia/+/d812fb458807245daa812adb7af0733cf5b54d96
TBR=mtklein@google.com,fmalita@chromium.org,herb@google.com,reed@google.com
# Skipping CQ checks because original CL landed less than 1 days ago.
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=skia:
Review URL: https://codereview.chromium.org/1759323002
30 files changed, 79 insertions, 81 deletions
diff --git a/experimental/SkPerlinNoiseShader2/SkPerlinNoiseShader2.cpp b/experimental/SkPerlinNoiseShader2/SkPerlinNoiseShader2.cpp index a1784a4204..a5a2a21523 100644 --- a/experimental/SkPerlinNoiseShader2/SkPerlinNoiseShader2.cpp +++ b/experimental/SkPerlinNoiseShader2/SkPerlinNoiseShader2.cpp @@ -571,8 +571,8 @@ SkShader::Context* SkPerlinNoiseShader2::onCreateContext(const ContextRec& rec, return new (storage) PerlinNoiseShaderContext(*this, rec); } -size_t SkPerlinNoiseShader2::onContextSize(const ContextRec&) const { - return SkAlign16(sizeof(PerlinNoiseShaderContext)); +size_t SkPerlinNoiseShader2::contextSize(const ContextRec&) const { + return sizeof(PerlinNoiseShaderContext); } SkPerlinNoiseShader2::PerlinNoiseShaderContext::PerlinNoiseShaderContext( diff --git a/experimental/SkPerlinNoiseShader2/SkPerlinNoiseShader2.h b/experimental/SkPerlinNoiseShader2/SkPerlinNoiseShader2.h index fac098ab52..a129ef8bcd 100644 --- a/experimental/SkPerlinNoiseShader2/SkPerlinNoiseShader2.h +++ b/experimental/SkPerlinNoiseShader2/SkPerlinNoiseShader2.h @@ -80,9 +80,12 @@ public: static SkShader* CreateTubulence(SkScalar baseFrequencyX, SkScalar baseFrequencyY, int numOctaves, SkScalar seed, const SkISize* tileSize = NULL) { - return CreateTurbulence(baseFrequencyX, baseFrequencyY, numOctaves, seed, tileSize); + return CreateTurbulence(baseFrequencyX, baseFrequencyY, numOctaves, seed, tileSize); } + + size_t contextSize(const ContextRec&) const override; + class PerlinNoiseShaderContext : public SkShader::Context { public: PerlinNoiseShaderContext(const SkPerlinNoiseShader2& shader, const ContextRec&); @@ -115,7 +118,6 @@ public: protected: void flatten(SkWriteBuffer&) const override; - size_t onContextSize(const ContextRec&) const override; Context* onCreateContext(const ContextRec&, void* storage) const override; private: diff --git a/include/core/SkShader.h b/include/core/SkShader.h index 828467fec2..0645809fe6 100644 --- a/include/core/SkShader.h +++ b/include/core/SkShader.h @@ -192,8 +192,11 @@ public: /** * Return the size of a Context returned by createContext. + * + * Override this if your subclass overrides createContext, to return the correct size of + * your subclass' context. */ - size_t contextSize(const ContextRec&) const; + virtual size_t contextSize(const ContextRec&) const; /** * Returns true if this shader is just a bitmap, and if not null, returns the bitmap, @@ -417,12 +420,6 @@ protected: */ virtual Context* onCreateContext(const ContextRec&, void* storage) const; - /** - * Override this if your subclass overrides createContext, to return the correct size of - * your subclass' context. - */ - virtual size_t onContextSize(const ContextRec&) const; - virtual bool onAsLuminanceColor(SkColor*) const { return false; } diff --git a/include/effects/SkPerlinNoiseShader.h b/include/effects/SkPerlinNoiseShader.h index d9b0277f92..e9c22d44fc 100644 --- a/include/effects/SkPerlinNoiseShader.h +++ b/include/effects/SkPerlinNoiseShader.h @@ -68,9 +68,12 @@ public: static SkShader* CreateTubulence(SkScalar baseFrequencyX, SkScalar baseFrequencyY, int numOctaves, SkScalar seed, const SkISize* tileSize = NULL) { - return CreateTurbulence(baseFrequencyX, baseFrequencyY, numOctaves, seed, tileSize); + return CreateTurbulence(baseFrequencyX, baseFrequencyY, numOctaves, seed, tileSize); } + + size_t contextSize(const ContextRec&) const override; + class PerlinNoiseShaderContext : public SkShader::Context { public: PerlinNoiseShaderContext(const SkPerlinNoiseShader& shader, const ContextRec&); @@ -103,7 +106,6 @@ public: protected: void flatten(SkWriteBuffer&) const override; Context* onCreateContext(const ContextRec&, void* storage) const override; - size_t onContextSize(const ContextRec&) const override; private: SkPerlinNoiseShader(SkPerlinNoiseShader::Type type, SkScalar baseFrequencyX, diff --git a/src/core/SkBitmapProcShader.cpp b/src/core/SkBitmapProcShader.cpp index 6c87ebeda4..895922c6b8 100644 --- a/src/core/SkBitmapProcShader.cpp +++ b/src/core/SkBitmapProcShader.cpp @@ -120,7 +120,7 @@ private: size_t SkBitmapProcShader::ContextSize(const ContextRec& rec) { // The SkBitmapProcState is stored outside of the context object, with the context holding // a pointer to it. - return SkAlign16(sizeof(BitmapProcShaderContext) + sizeof(SkBitmapProcState)); + return sizeof(BitmapProcShaderContext) + sizeof(SkBitmapProcState); } SkShader::Context* SkBitmapProcShader::MakeContext(const SkShader& shader, diff --git a/src/core/SkBitmapProcShader.h b/src/core/SkBitmapProcShader.h index ebd9f3f8fb..9f4c16202c 100644 --- a/src/core/SkBitmapProcShader.h +++ b/src/core/SkBitmapProcShader.h @@ -21,7 +21,7 @@ public: bool isOpaque() const override; - size_t onContextSize(const ContextRec& rec) const override { return ContextSize(rec); } + size_t contextSize(const ContextRec& rec) const override { return ContextSize(rec); } SK_TO_STRING_OVERRIDE() SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkBitmapProcShader) diff --git a/src/core/SkBlitter.cpp b/src/core/SkBlitter.cpp index bb5cfb72e3..c7c903dc6b 100644 --- a/src/core/SkBlitter.cpp +++ b/src/core/SkBlitter.cpp @@ -592,7 +592,7 @@ public: SkSafeUnref(fProxy); } - size_t onContextSize(const ContextRec& rec) const override { + size_t contextSize(const ContextRec& rec) const override { size_t size = sizeof(Sk3DShaderContext); if (fProxy) { size += fProxy->contextSize(rec); diff --git a/src/core/SkColorFilterShader.cpp b/src/core/SkColorFilterShader.cpp index c856f19150..7b421e9b6d 100644 --- a/src/core/SkColorFilterShader.cpp +++ b/src/core/SkColorFilterShader.cpp @@ -62,8 +62,8 @@ SkShader::Context* SkColorFilterShader::onCreateContext(const ContextRec& rec, return new (storage) FilterShaderContext(*this, shaderContext, rec); } -size_t SkColorFilterShader::onContextSize(const ContextRec& rec) const { - return SkAlign16(sizeof(FilterShaderContext)) + fShader->contextSize(rec); +size_t SkColorFilterShader::contextSize(const ContextRec& rec) const { + return sizeof(FilterShaderContext) + fShader->contextSize(rec); } SkColorFilterShader::FilterShaderContext::FilterShaderContext( diff --git a/src/core/SkColorFilterShader.h b/src/core/SkColorFilterShader.h index 0f41a43c49..60c45954dc 100644 --- a/src/core/SkColorFilterShader.h +++ b/src/core/SkColorFilterShader.h @@ -14,7 +14,9 @@ class SkColorFilterShader : public SkShader { public: SkColorFilterShader(SkShader* shader, SkColorFilter* filter); - + + size_t contextSize(const ContextRec&) const override; + #if SK_SUPPORT_GPU const GrFragmentProcessor* asFragmentProcessor(GrContext*, const SkMatrix& viewM, @@ -49,9 +51,9 @@ public: protected: void flatten(SkWriteBuffer&) const override; - size_t onContextSize(const ContextRec&) const override; Context* onCreateContext(const ContextRec&, void* storage) const override; + private: SkAutoTUnref<SkShader> fShader; SkAutoTUnref<SkColorFilter> fFilter; diff --git a/src/core/SkColorShader.h b/src/core/SkColorShader.h index 00a2bb61f0..6e4e42ad95 100644 --- a/src/core/SkColorShader.h +++ b/src/core/SkColorShader.h @@ -26,6 +26,10 @@ public: bool isOpaque() const override; + size_t contextSize(const ContextRec&) const override { + return sizeof(ColorShaderContext); + } + class ColorShaderContext : public SkShader::Context { public: ColorShaderContext(const SkColorShader& shader, const ContextRec&); @@ -57,9 +61,6 @@ protected: SkColorShader(SkReadBuffer&); void flatten(SkWriteBuffer&) const override; Context* onCreateContext(const ContextRec&, void* storage) const override; - size_t onContextSize(const ContextRec&) const override { - return sizeof(ColorShaderContext); - } bool onAsLuminanceColor(SkColor* lum) const override { *lum = fColor; return true; diff --git a/src/core/SkComposeShader.cpp b/src/core/SkComposeShader.cpp index e4ad6e9eda..46ff4019fc 100644 --- a/src/core/SkComposeShader.cpp +++ b/src/core/SkComposeShader.cpp @@ -30,8 +30,8 @@ SkComposeShader::~SkComposeShader() { fShaderA->unref(); } -size_t SkComposeShader::onContextSize(const ContextRec& rec) const { - return SkAlign16(sizeof(ComposeShaderContext)) +size_t SkComposeShader::contextSize(const ContextRec& rec) const { + return sizeof(ComposeShaderContext) + fShaderA->contextSize(rec) + fShaderB->contextSize(rec); } @@ -76,7 +76,7 @@ template <typename T> void safe_call_destructor(T* obj) { } SkShader::Context* SkComposeShader::onCreateContext(const ContextRec& rec, void* storage) const { - char* aStorage = (char*) storage + SkAlign16(sizeof(ComposeShaderContext)); + char* aStorage = (char*) storage + sizeof(ComposeShaderContext); char* bStorage = aStorage + fShaderA->contextSize(rec); // we preconcat our localMatrix (if any) with the device matrix diff --git a/src/core/SkComposeShader.h b/src/core/SkComposeShader.h index 9220a0de97..6f6aa59525 100644 --- a/src/core/SkComposeShader.h +++ b/src/core/SkComposeShader.h @@ -34,6 +34,8 @@ public: SkComposeShader(SkShader* sA, SkShader* sB, SkXfermode* mode = NULL); virtual ~SkComposeShader(); + size_t contextSize(const ContextRec&) const override; + #if SK_SUPPORT_GPU const GrFragmentProcessor* asFragmentProcessor(GrContext*, const SkMatrix& viewM, @@ -75,7 +77,6 @@ public: protected: SkComposeShader(SkReadBuffer& ); void flatten(SkWriteBuffer&) const override; - size_t onContextSize(const ContextRec&) const override; Context* onCreateContext(const ContextRec&, void*) const override; private: diff --git a/src/core/SkDraw.cpp b/src/core/SkDraw.cpp index e9b0677c33..cff4252579 100644 --- a/src/core/SkDraw.cpp +++ b/src/core/SkDraw.cpp @@ -1698,6 +1698,8 @@ class SkTriColorShader : public SkShader { public: SkTriColorShader() {} + size_t contextSize(const ContextRec&) const override; + class TriColorShaderContext : public SkShader::Context { public: TriColorShaderContext(const SkTriColorShader& shader, const ContextRec&); @@ -1720,7 +1722,6 @@ public: Factory getFactory() const override { sk_throw(); return nullptr; } protected: - size_t onContextSize(const ContextRec&) const override; Context* onCreateContext(const ContextRec& rec, void* storage) const override { return new (storage) TriColorShaderContext(*this, rec); } @@ -1771,10 +1772,9 @@ SkTriColorShader::TriColorShaderContext::TriColorShaderContext(const SkTriColorS SkTriColorShader::TriColorShaderContext::~TriColorShaderContext() {} -size_t SkTriColorShader::onContextSize(const ContextRec&) const { - return SkAlign16(sizeof(TriColorShaderContext)); +size_t SkTriColorShader::contextSize(const ContextRec&) const { + return sizeof(TriColorShaderContext); } - void SkTriColorShader::TriColorShaderContext::shadeSpan(int x, int y, SkPMColor dstC[], int count) { const int alphaScale = Sk255To256(this->getPaintAlpha()); diff --git a/src/core/SkEmptyShader.h b/src/core/SkEmptyShader.h index 42b61c52fe..c1713d1a2e 100644 --- a/src/core/SkEmptyShader.h +++ b/src/core/SkEmptyShader.h @@ -20,16 +20,16 @@ class SK_API SkEmptyShader : public SkShader { public: SkEmptyShader() {} - SK_TO_STRING_OVERRIDE() - SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkEmptyShader) - -protected: - size_t onContextSize(const ContextRec&) const override { + size_t contextSize(const ContextRec&) const override { // Even though createContext returns nullptr we have to return a value of at least // sizeof(SkShader::Context) to satisfy SkSmallAllocator. - return SkAlign16(sizeof(SkShader::Context)); + return sizeof(SkShader::Context); } + SK_TO_STRING_OVERRIDE() + SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkEmptyShader) + +protected: SkShader::Context* onCreateContext(const ContextRec&, void*) const override { return nullptr; } diff --git a/src/core/SkLightingShader.cpp b/src/core/SkLightingShader.cpp index 02f75f3516..c8a5a2b737 100644 --- a/src/core/SkLightingShader.cpp +++ b/src/core/SkLightingShader.cpp @@ -79,6 +79,8 @@ public: SkFilterQuality) const override; #endif + size_t contextSize(const ContextRec&) const override; + class LightingShaderContext : public SkShader::Context { public: // The context takes ownership of the states. It will call their destructors @@ -104,7 +106,6 @@ public: protected: void flatten(SkWriteBuffer&) const override; - size_t onContextSize(const ContextRec&) const override; Context* onCreateContext(const ContextRec&, void*) const override; bool computeNormTotalInverse(const ContextRec& rec, SkMatrix* normTotalInverse) const; @@ -415,6 +416,10 @@ bool SkLightingShaderImpl::isOpaque() const { return fDiffuseMap.isOpaque(); } +size_t SkLightingShaderImpl::contextSize(const ContextRec&) const { + return 2 * sizeof(SkBitmapProcState) + sizeof(LightingShaderContext); +} + SkLightingShaderImpl::LightingShaderContext::LightingShaderContext(const SkLightingShaderImpl& shader, const ContextRec& rec, SkBitmapProcState* diffuseState, @@ -650,10 +655,6 @@ bool SkLightingShaderImpl::computeNormTotalInverse(const ContextRec& rec, return m->invert(normTotalInverse); } -size_t SkLightingShaderImpl::onContextSize(const ContextRec&) const { - return 2 * sizeof(SkBitmapProcState) + sizeof(LightingShaderContext); -} - SkShader::Context* SkLightingShaderImpl::onCreateContext(const ContextRec& rec, void* storage) const { diff --git a/src/core/SkLocalMatrixShader.h b/src/core/SkLocalMatrixShader.h index 8edea40d05..d897d49ded 100644 --- a/src/core/SkLocalMatrixShader.h +++ b/src/core/SkLocalMatrixShader.h @@ -19,6 +19,10 @@ public: , fProxyShader(SkRef(proxy)) {} + size_t contextSize(const ContextRec& rec) const override { + return fProxyShader->contextSize(rec); + } + GradientType asAGradient(GradientInfo* info) const override { return fProxyShader->asAGradient(info); } @@ -49,10 +53,6 @@ protected: void flatten(SkWriteBuffer&) const override; Context* onCreateContext(const ContextRec&, void*) const override; - size_t onContextSize(const ContextRec& rec) const override { - return fProxyShader->contextSize(rec); - } - bool onIsABitmap(SkBitmap* bitmap, SkMatrix* matrix, TileMode* mode) const override { return fProxyShader->isABitmap(bitmap, matrix, mode); } diff --git a/src/core/SkPictureShader.cpp b/src/core/SkPictureShader.cpp index 630b1bf8e1..f1addadd20 100644 --- a/src/core/SkPictureShader.cpp +++ b/src/core/SkPictureShader.cpp @@ -241,8 +241,8 @@ SkShader* SkPictureShader::refBitmapShader(const SkMatrix& viewMatrix, const SkM return tileShader.detach(); } -size_t SkPictureShader::onContextSize(const ContextRec&) const { - return SkAlign16(sizeof(PictureShaderContext)); +size_t SkPictureShader::contextSize(const ContextRec&) const { + return sizeof(PictureShaderContext); } SkShader::Context* SkPictureShader::onCreateContext(const ContextRec& rec, void* storage) const { diff --git a/src/core/SkPictureShader.h b/src/core/SkPictureShader.h index 8cccd251d5..c7a6a44fe0 100644 --- a/src/core/SkPictureShader.h +++ b/src/core/SkPictureShader.h @@ -25,6 +25,8 @@ public: static SkShader* Create(const SkPicture*, TileMode, TileMode, const SkMatrix*, const SkRect*); + size_t contextSize(const ContextRec&) const override; + SK_TO_STRING_OVERRIDE() SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkPictureShader) @@ -38,7 +40,6 @@ public: protected: SkPictureShader(SkReadBuffer&); void flatten(SkWriteBuffer&) const override; - size_t onContextSize(const ContextRec&) const override; Context* onCreateContext(const ContextRec&, void* storage) const override; private: diff --git a/src/core/SkShader.cpp b/src/core/SkShader.cpp index fd5fb00b88..e36df5b5af 100644 --- a/src/core/SkShader.cpp +++ b/src/core/SkShader.cpp @@ -86,10 +86,6 @@ bool SkShader::asLuminanceColor(SkColor* colorPtr) const { } SkShader::Context* SkShader::createContext(const ContextRec& rec, void* storage) const { - // Currently we require each context to be allocated on 16byte boundary as some of our - // subclasses need that. Hence we check the ptr here. - SkASSERT(SkIsAlign16((intptr_t)storage)); - if (!this->computeTotalInverse(rec, nullptr)) { return nullptr; } @@ -100,17 +96,7 @@ SkShader::Context* SkShader::onCreateContext(const ContextRec& rec, void*) const return nullptr; } -size_t SkShader::contextSize(const ContextRec& rec) const { - size_t size = this->onContextSize(rec); - - // Currently we require each context to be allocated on 16byte boundary as some of our - // subclasses need that. Hence we check the size here. - SkASSERT(SkIsAlign16(size)); - - return size; -} - -size_t SkShader::onContextSize(const ContextRec&) const { +size_t SkShader::contextSize(const ContextRec&) const { return 0; } diff --git a/src/effects/SkPerlinNoiseShader.cpp b/src/effects/SkPerlinNoiseShader.cpp index a32d8ac2bb..ed7340ca3a 100644 --- a/src/effects/SkPerlinNoiseShader.cpp +++ b/src/effects/SkPerlinNoiseShader.cpp @@ -434,8 +434,8 @@ SkShader::Context* SkPerlinNoiseShader::onCreateContext(const ContextRec& rec, return new (storage) PerlinNoiseShaderContext(*this, rec); } -size_t SkPerlinNoiseShader::onContextSize(const ContextRec&) const { - return SkAlign16(sizeof(PerlinNoiseShaderContext)); +size_t SkPerlinNoiseShader::contextSize(const ContextRec&) const { + return sizeof(PerlinNoiseShaderContext); } SkPerlinNoiseShader::PerlinNoiseShaderContext::PerlinNoiseShaderContext( diff --git a/src/effects/gradients/SkLinearGradient.cpp b/src/effects/gradients/SkLinearGradient.cpp index 40503c96f1..cc8875cf8e 100644 --- a/src/effects/gradients/SkLinearGradient.cpp +++ b/src/effects/gradients/SkLinearGradient.cpp @@ -88,10 +88,10 @@ void SkLinearGradient::flatten(SkWriteBuffer& buffer) const { buffer.writePoint(fEnd); } -size_t SkLinearGradient::onContextSize(const ContextRec& rec) const { +size_t SkLinearGradient::contextSize(const ContextRec& rec) const { return use_4f_context(rec, fGradFlags) - ? SkAlign16(sizeof(LinearGradient4fContext)) - : SkAlign16(sizeof(LinearGradientContext)); + ? sizeof(LinearGradient4fContext) + : sizeof(LinearGradientContext); } SkShader::Context* SkLinearGradient::onCreateContext(const ContextRec& rec, void* storage) const { diff --git a/src/effects/gradients/SkLinearGradient.h b/src/effects/gradients/SkLinearGradient.h index f0ce49b8b3..33ddfc2f9e 100644 --- a/src/effects/gradients/SkLinearGradient.h +++ b/src/effects/gradients/SkLinearGradient.h @@ -33,6 +33,8 @@ public: SkLinearGradient(const SkPoint pts[2], const Descriptor&); + size_t contextSize(const ContextRec&) const override; + class LinearGradientContext : public SkGradientShaderBase::GradientShaderBaseContext { public: LinearGradientContext(const SkLinearGradient&, const ContextRec&); @@ -69,7 +71,6 @@ public: protected: SkLinearGradient(SkReadBuffer& buffer); void flatten(SkWriteBuffer& buffer) const override; - size_t onContextSize(const ContextRec&) const override; Context* onCreateContext(const ContextRec&, void* storage) const override; private: diff --git a/src/effects/gradients/SkRadialGradient.cpp b/src/effects/gradients/SkRadialGradient.cpp index da4c6f2412..466ae045a5 100644 --- a/src/effects/gradients/SkRadialGradient.cpp +++ b/src/effects/gradients/SkRadialGradient.cpp @@ -40,8 +40,8 @@ SkRadialGradient::SkRadialGradient(const SkPoint& center, SkScalar radius, const , fRadius(radius) { } -size_t SkRadialGradient::onContextSize(const ContextRec&) const { - return SkAlign16(sizeof(RadialGradientContext)); +size_t SkRadialGradient::contextSize(const ContextRec&) const { + return sizeof(RadialGradientContext); } SkShader::Context* SkRadialGradient::onCreateContext(const ContextRec& rec, void* storage) const { diff --git a/src/effects/gradients/SkRadialGradient.h b/src/effects/gradients/SkRadialGradient.h index 428d7fae79..9d98f18304 100644 --- a/src/effects/gradients/SkRadialGradient.h +++ b/src/effects/gradients/SkRadialGradient.h @@ -15,6 +15,8 @@ class SkRadialGradient : public SkGradientShaderBase { public: SkRadialGradient(const SkPoint& center, SkScalar radius, const Descriptor&); + size_t contextSize(const ContextRec&) const override; + class RadialGradientContext : public SkGradientShaderBase::GradientShaderBaseContext { public: RadialGradientContext(const SkRadialGradient&, const ContextRec&); @@ -39,7 +41,6 @@ public: protected: SkRadialGradient(SkReadBuffer& buffer); void flatten(SkWriteBuffer& buffer) const override; - size_t onContextSize(const ContextRec&) const override; Context* onCreateContext(const ContextRec&, void* storage) const override; private: diff --git a/src/effects/gradients/SkSweepGradient.cpp b/src/effects/gradients/SkSweepGradient.cpp index 12d55e8b49..de80c79ae0 100644 --- a/src/effects/gradients/SkSweepGradient.cpp +++ b/src/effects/gradients/SkSweepGradient.cpp @@ -45,8 +45,8 @@ void SkSweepGradient::flatten(SkWriteBuffer& buffer) const { buffer.writePoint(fCenter); } -size_t SkSweepGradient::onContextSize(const ContextRec&) const { - return SkAlign16(sizeof(SweepGradientContext)); +size_t SkSweepGradient::contextSize(const ContextRec&) const { + return sizeof(SweepGradientContext); } SkShader::Context* SkSweepGradient::onCreateContext(const ContextRec& rec, void* storage) const { diff --git a/src/effects/gradients/SkSweepGradient.h b/src/effects/gradients/SkSweepGradient.h index f458cea8ce..ec6df45c64 100644 --- a/src/effects/gradients/SkSweepGradient.h +++ b/src/effects/gradients/SkSweepGradient.h @@ -15,6 +15,8 @@ class SkSweepGradient : public SkGradientShaderBase { public: SkSweepGradient(SkScalar cx, SkScalar cy, const Descriptor&); + size_t contextSize(const ContextRec&) const override; + class SweepGradientContext : public SkGradientShaderBase::GradientShaderBaseContext { public: SweepGradientContext(const SkSweepGradient& shader, const ContextRec&); @@ -39,7 +41,6 @@ public: protected: void flatten(SkWriteBuffer& buffer) const override; - size_t onContextSize(const ContextRec&) const override; Context* onCreateContext(const ContextRec&, void* storage) const override; private: diff --git a/src/effects/gradients/SkTwoPointConicalGradient.cpp b/src/effects/gradients/SkTwoPointConicalGradient.cpp index f4b6b0c8b0..2209306fe3 100644 --- a/src/effects/gradients/SkTwoPointConicalGradient.cpp +++ b/src/effects/gradients/SkTwoPointConicalGradient.cpp @@ -211,8 +211,8 @@ bool SkTwoPointConicalGradient::isOpaque() const { return false; } -size_t SkTwoPointConicalGradient::onContextSize(const ContextRec&) const { - return SkAlign16(sizeof(TwoPointConicalGradientContext)); +size_t SkTwoPointConicalGradient::contextSize(const ContextRec&) const { + return sizeof(TwoPointConicalGradientContext); } SkShader::Context* SkTwoPointConicalGradient::onCreateContext(const ContextRec& rec, diff --git a/src/effects/gradients/SkTwoPointConicalGradient.h b/src/effects/gradients/SkTwoPointConicalGradient.h index 5783c39bd4..954b09698e 100644 --- a/src/effects/gradients/SkTwoPointConicalGradient.h +++ b/src/effects/gradients/SkTwoPointConicalGradient.h @@ -45,6 +45,9 @@ public: const SkPoint& end, SkScalar endRadius, bool flippedGrad, const Descriptor&); + + size_t contextSize(const ContextRec&) const override; + class TwoPointConicalGradientContext : public SkGradientShaderBase::GradientShaderBaseContext { public: TwoPointConicalGradientContext(const SkTwoPointConicalGradient&, const ContextRec&); @@ -79,7 +82,6 @@ public: protected: SkTwoPointConicalGradient(SkReadBuffer& buffer); void flatten(SkWriteBuffer& buffer) const override; - size_t onContextSize(const ContextRec&) const override; Context* onCreateContext(const ContextRec&, void* storage) const override; private: diff --git a/src/image/SkImageShader.cpp b/src/image/SkImageShader.cpp index 4c7ded906c..a07603c671 100644 --- a/src/image/SkImageShader.cpp +++ b/src/image/SkImageShader.cpp @@ -42,7 +42,7 @@ bool SkImageShader::isOpaque() const { return fImage->isOpaque(); } -size_t SkImageShader::onContextSize(const ContextRec& rec) const { +size_t SkImageShader::contextSize(const ContextRec& rec) const { return SkBitmapProcShader::ContextSize(rec); } diff --git a/src/image/SkImageShader.h b/src/image/SkImageShader.h index 07b938d202..d51dc5d4e4 100644 --- a/src/image/SkImageShader.h +++ b/src/image/SkImageShader.h @@ -16,6 +16,7 @@ public: static SkShader* Create(const SkImage*, TileMode tx, TileMode ty, const SkMatrix* localMatrix); bool isOpaque() const override; + size_t contextSize(const ContextRec&) const override; SK_TO_STRING_OVERRIDE() SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkImageShader) @@ -27,7 +28,6 @@ public: protected: void flatten(SkWriteBuffer&) const override; - size_t onContextSize(const ContextRec&) const override; Context* onCreateContext(const ContextRec&, void* storage) const override; SkAutoTUnref<const SkImage> fImage; |