Index: src/core/SkImageCacherator.h |
diff --git a/src/core/SkImageCacherator.h b/src/core/SkImageCacherator.h |
index f05147e5710be6f45da800d3c12248e6854d1fc2..d57c0f0fadd2e147cae1c628bc638f0a61c191a8 100644 |
--- a/src/core/SkImageCacherator.h |
+++ b/src/core/SkImageCacherator.h |
@@ -9,6 +9,7 @@ |
#define SkImageCacherator_DEFINED |
#include "SkImageGenerator.h" |
+#include "SkMutex.h" |
class GrContext; |
class SkBitmap; |
@@ -40,13 +41,34 @@ public: |
*/ |
GrTexture* lockAsTexture(GrContext*, SkImageUsageType); |
+ /** |
+ * If the underlying src naturally is represented by an encoded blob (in SkData), this returns |
+ * a ref to that data. If not, it returns null. |
+ */ |
+ SkData* refEncoded(); |
+ |
private: |
SkImageCacherator(SkImageGenerator*, const SkImageInfo&, const SkIPoint&, uint32_t uniqueID); |
+ bool generateBitmap(SkBitmap*); |
bool tryLockAsBitmap(SkBitmap*); |
GrTexture* tryLockAsTexture(GrContext*, SkImageUsageType); |
- SkImageGenerator* fGenerator; |
+ class ScopedGenerator { |
+ SkImageCacherator* fCacher; |
+ public: |
+ ScopedGenerator(SkImageCacherator* cacher) : fCacher(cacher) { |
+ fCacher->fMutexForGenerator.acquire(); |
+ } |
+ ~ScopedGenerator() { |
+ fCacher->fMutexForGenerator.release(); |
+ } |
+ SkImageGenerator* operator->() const { return fCacher->fNotThreadSafeGenerator; } |
+ operator SkImageGenerator*() const { return fCacher->fNotThreadSafeGenerator; } |
+ }; |
+ |
+ SkMutex fMutexForGenerator; |
+ SkImageGenerator* fNotThreadSafeGenerator; |
const SkImageInfo fInfo; |
const SkIPoint fOrigin; |
const uint32_t fUniqueID; |