Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(157)

Unified Diff: src/effects/gradients/SkGradientShaderPriv.h

Issue 241283003: Revert of Extract most of the mutable state of SkShader into a separate Context object. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/effects/gradients/SkGradientShader.cpp ('k') | src/effects/gradients/SkLinearGradient.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/effects/gradients/SkGradientShaderPriv.h
diff --git a/src/effects/gradients/SkGradientShaderPriv.h b/src/effects/gradients/SkGradientShaderPriv.h
index e01609462b6ea22038f24562a8d982383a03c362..83e0789853181950a65b8c70b30dcc5c64b4ad96 100644
--- a/src/effects/gradients/SkGradientShaderPriv.h
+++ b/src/effects/gradients/SkGradientShaderPriv.h
@@ -19,7 +19,6 @@
#include "SkTemplates.h"
#include "SkBitmapCache.h"
#include "SkShader.h"
-#include "SkOnce.h"
static inline void sk_memset32_dither(uint32_t dst[], uint32_t v0, uint32_t v1,
int count) {
@@ -102,64 +101,8 @@
SkGradientShaderBase(const Descriptor& desc);
virtual ~SkGradientShaderBase();
- // The cache is initialized on-demand when getCache16/32 is called.
- class GradientShaderCache : public SkRefCnt {
- public:
- GradientShaderCache(U8CPU alpha, const SkGradientShaderBase& shader);
- ~GradientShaderCache();
-
- const uint16_t* getCache16();
- const SkPMColor* getCache32();
-
- SkMallocPixelRef* getCache32PixelRef() const { return fCache32PixelRef; }
-
- unsigned getAlpha() const { return fCacheAlpha; }
-
- private:
- // Working pointers. If either is NULL, we need to recompute the corresponding cache values.
- uint16_t* fCache16;
- SkPMColor* fCache32;
-
- uint16_t* fCache16Storage; // Storage for fCache16, allocated on demand.
- SkMallocPixelRef* fCache32PixelRef;
- const unsigned fCacheAlpha; // The alpha value we used when we computed the cache.
- // Larger than 8bits so we can store uninitialized
- // value.
-
- const SkGradientShaderBase& fShader;
-
- // Make sure we only initialize the caches once.
- bool fCache16Inited, fCache32Inited;
- SkMutex fCache16Mutex, fCache32Mutex;
-
- static void initCache16(GradientShaderCache* cache);
- static void initCache32(GradientShaderCache* cache);
-
- static void Build16bitCache(uint16_t[], SkColor c0, SkColor c1, int count);
- static void Build32bitCache(SkPMColor[], SkColor c0, SkColor c1, int count,
- U8CPU alpha, uint32_t gradFlags);
- };
-
- class GradientShaderBaseContext : public SkShader::Context {
- public:
- GradientShaderBaseContext(const SkGradientShaderBase& shader, const SkBitmap& device,
- const SkPaint& paint, const SkMatrix& matrix);
- ~GradientShaderBaseContext() {}
-
- virtual uint32_t getFlags() const SK_OVERRIDE { return fFlags; }
-
- protected:
- SkMatrix fDstToIndex;
- SkMatrix::MapXYProc fDstToIndexProc;
- uint8_t fDstToIndexClass;
- uint8_t fFlags;
-
- SkAutoTUnref<GradientShaderCache> fCache;
-
- private:
- typedef SkShader::Context INHERITED;
- };
-
+ virtual bool setContext(const SkBitmap&, const SkPaint&, const SkMatrix&) SK_OVERRIDE;
+ virtual uint32_t getFlags() SK_OVERRIDE { return fFlags; }
virtual bool isOpaque() const SK_OVERRIDE;
void getGradientTableBitmap(SkBitmap*) const;
@@ -185,6 +128,7 @@
kDitherStride16 = kCache16Count,
};
+
protected:
SkGradientShaderBase(SkReadBuffer& );
virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE;
@@ -192,9 +136,13 @@
SkUnitMapper* fMapper;
SkMatrix fPtsToUnit; // set by subclass
+ SkMatrix fDstToIndex;
+ SkMatrix::MapXYProc fDstToIndexProc;
TileMode fTileMode;
TileProc fTileProc;
int fColorCount;
+ uint8_t fDstToIndexClass;
+ uint8_t fFlags;
uint8_t fGradFlags;
struct Rec {
@@ -203,6 +151,9 @@
};
Rec* fRecs;
+ const uint16_t* getCache16() const;
+ const SkPMColor* getCache32() const;
+
void commonAsAGradient(GradientInfo*) const;
private:
@@ -212,13 +163,20 @@
kStorageSize = kColorStorageCount * (sizeof(SkColor) + sizeof(Rec))
};
SkColor fStorage[(kStorageSize + 3) >> 2];
- SkColor* fOrigColors; // original colors, before modulation by paint in context.
+ SkColor* fOrigColors; // original colors, before modulation by paint in setContext
bool fColorsAreOpaque;
- GradientShaderCache* getCache(U8CPU alpha) const;
- mutable SkMutex fCacheMutex;
- mutable SkAutoTUnref<GradientShaderCache> fCache;
-
+ mutable uint16_t* fCache16; // working ptr. If this is NULL, we need to recompute the cache values
+ mutable SkPMColor* fCache32; // working ptr. If this is NULL, we need to recompute the cache values
+
+ mutable uint16_t* fCache16Storage; // storage for fCache16, allocated on demand
+ mutable SkMallocPixelRef* fCache32PixelRef;
+ mutable unsigned fCacheAlpha; // the alpha value we used when we computed the cache. larger than 8bits so we can store uninitialized value
+
+ static void Build16bitCache(uint16_t[], SkColor c0, SkColor c1, int count);
+ static void Build32bitCache(SkPMColor[], SkColor c0, SkColor c1, int count,
+ U8CPU alpha, uint32_t gradFlags);
+ void setCacheAlpha(U8CPU alpha) const;
void initCommon();
typedef SkShader INHERITED;
« no previous file with comments | « src/effects/gradients/SkGradientShader.cpp ('k') | src/effects/gradients/SkLinearGradient.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698