diff options
author | 2016-04-18 08:09:11 -0700 | |
---|---|---|
committer | 2016-04-18 08:09:11 -0700 | |
commit | d9dd4282118fc14eac735e6fa0b3ec53047b457f (patch) | |
tree | b88bce11cbcec3100e428b713df49e1fcd83f8d2 /src/effects/gradients | |
parent | f7142e71d7c0a7d8406679e207ff766085499d2e (diff) |
Modernize and trim down SkOnce.
The API and implementation are very much simplified.
You may not want to bother reading the diff.
As is our trend, SkOnce now uses <atomic> directly.
Member initialization means we don't need SK_DECLARE_STATIC_ONCE.
SkSpinlock already works this same way.
All uses of the old API taking an external bool* and Lock* were pessimal,
so I have not carried this sort of API forward. It's simpler, faster,
and more space-efficient to always use this single SkOnce class interface.
SkOnce weighs 2 bytes: a done bool and an SkSpinlock, also a bool internally.
This API refactoring opens up the opportunity to fuse those into a single
three-state byte if we'd like.
No public API changes.
TBR=reed@google.com
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1894893002
Review URL: https://codereview.chromium.org/1894893002
Diffstat (limited to 'src/effects/gradients')
-rw-r--r-- | src/effects/gradients/SkGradientShader.cpp | 8 | ||||
-rw-r--r-- | src/effects/gradients/SkGradientShaderPriv.h | 4 |
2 files changed, 4 insertions, 8 deletions
diff --git a/src/effects/gradients/SkGradientShader.cpp b/src/effects/gradients/SkGradientShader.cpp index 6c141dcf80..779756f3ba 100644 --- a/src/effects/gradients/SkGradientShader.cpp +++ b/src/effects/gradients/SkGradientShader.cpp @@ -322,8 +322,6 @@ SkGradientShaderBase::GradientShaderCache::GradientShaderCache( : fCacheAlpha(alpha) , fCacheDither(dither) , fShader(shader) - , fCache16Inited(false) - , fCache32Inited(false) { // Only initialize the cache in getCache16/32. fCache16 = nullptr; @@ -545,8 +543,7 @@ static inline int SkFixedToFFFF(SkFixed x) { } const uint16_t* SkGradientShaderBase::GradientShaderCache::getCache16() { - SkOnce(&fCache16Inited, &fCache16Mutex, SkGradientShaderBase::GradientShaderCache::initCache16, - this); + fCache16InitOnce(SkGradientShaderBase::GradientShaderCache::initCache16, this); SkASSERT(fCache16); return fCache16; } @@ -579,8 +576,7 @@ void SkGradientShaderBase::GradientShaderCache::initCache16(GradientShaderCache* } const SkPMColor* SkGradientShaderBase::GradientShaderCache::getCache32() { - SkOnce(&fCache32Inited, &fCache32Mutex, SkGradientShaderBase::GradientShaderCache::initCache32, - this); + fCache32InitOnce(SkGradientShaderBase::GradientShaderCache::initCache32, this); SkASSERT(fCache32); return fCache32; } diff --git a/src/effects/gradients/SkGradientShaderPriv.h b/src/effects/gradients/SkGradientShaderPriv.h index 881f1eb836..0677cf0fd3 100644 --- a/src/effects/gradients/SkGradientShaderPriv.h +++ b/src/effects/gradients/SkGradientShaderPriv.h @@ -142,8 +142,8 @@ public: const SkGradientShaderBase& fShader; // Make sure we only initialize the caches once. - bool fCache16Inited, fCache32Inited; - SkMutex fCache16Mutex, fCache32Mutex; + SkOnce fCache16InitOnce, + fCache32InitOnce; static void initCache16(GradientShaderCache* cache); static void initCache32(GradientShaderCache* cache); |