From d9dd4282118fc14eac735e6fa0b3ec53047b457f Mon Sep 17 00:00:00 2001 From: mtklein Date: Mon, 18 Apr 2016 08:09:11 -0700 Subject: 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 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 --- src/effects/gradients/SkGradientShader.cpp | 8 ++------ src/effects/gradients/SkGradientShaderPriv.h | 4 ++-- 2 files changed, 4 insertions(+), 8 deletions(-) (limited to 'src/effects/gradients') 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); -- cgit v1.2.3