Index: include/core/SkPixelRef.h |
diff --git a/include/core/SkPixelRef.h b/include/core/SkPixelRef.h |
index 8a1e3db2b672a049065e9184acae366dc580b181..7c3156ee743339a0c5ec32f3da06eaf278cb95c8 100644 |
--- a/include/core/SkPixelRef.h |
+++ b/include/core/SkPixelRef.h |
@@ -10,15 +10,15 @@ |
#include "SkAtomics.h" |
#include "SkBitmap.h" |
+#include "SkFilterQuality.h" |
#include "SkImageInfo.h" |
#include "SkMutex.h" |
+#include "SkPixmap.h" |
#include "SkRefCnt.h" |
#include "SkSize.h" |
#include "SkString.h" |
#include "SkTDArray.h" |
-//#define xed |
- |
#ifdef SK_DEBUG |
/** |
* Defining SK_IGNORE_PIXELREF_SETPRELOCKED will force all pixelref |
@@ -193,6 +193,30 @@ public: |
return this->onRefEncodedData(); |
} |
+ struct LockRequest { |
+ SkISize fSize; |
+ SkFilterQuality fQuality; |
+ }; |
+ |
+ struct LockResult { |
+ void (*fUnlockProc)(void* ctx); |
+ void* fUnlockContext; |
+ |
+ SkColorTable* fCTable; // should be NULL unless colortype is kIndex8 |
+ const void* fPixels; |
+ size_t fRowBytes; |
+ SkISize fSize; |
+ |
+ void unlock() { |
+ if (fUnlockProc) { |
+ fUnlockProc(fUnlockContext); |
+ fUnlockProc = NULL; // can't unlock twice! |
+ } |
+ } |
+ }; |
+ |
+ bool requestLock(const LockRequest&, LockResult*); |
+ |
/** Are we really wrapping a texture instead of a bitmap? |
*/ |
virtual GrTexture* getTexture() { return NULL; } |
@@ -299,6 +323,8 @@ protected: |
*/ |
virtual size_t getAllocatedSizeInBytes() const; |
+ virtual bool onRequestLock(const LockRequest&, LockResult*); |
+ |
/** Return the mutex associated with this pixelref. This value is assigned |
in the constructor, and cannot change during the lifetime of the object. |
*/ |
@@ -319,6 +345,8 @@ private: |
LockRec fRec; |
int fLockCount; |
+ bool lockPixelsInsideMutex(LockRec* rec); |
+ |
// Bottom bit indicates the Gen ID is unique. |
bool genIDIsUnique() const { return SkToBool(fTaggedGenID.load() & 1); } |
mutable SkAtomic<uint32_t> fTaggedGenID; |