diff options
Diffstat (limited to 'include/core')
-rw-r--r-- | include/core/SkPixelRef.h | 23 | ||||
-rw-r--r-- | include/core/SkThread_platform.h | 7 |
2 files changed, 25 insertions, 5 deletions
diff --git a/include/core/SkPixelRef.h b/include/core/SkPixelRef.h index d5f6ab2..f01ba15 100644 --- a/include/core/SkPixelRef.h +++ b/include/core/SkPixelRef.h @@ -63,9 +63,10 @@ public: */ SkColorTable* colorTable() const { return fColorTable; } - /** Return the current lockcount (defaults to 0) - */ - int getLockCount() const { return fLockCount; } + /** + * Returns true if the lockcount > 0 + */ + bool isLocked() const { return fLockCount > 0; } /** Call to access the pixel memory, which is returned. Balance with a call to unlockPixels(). @@ -205,6 +206,18 @@ protected: SkPixelRef(SkFlattenableReadBuffer&, SkBaseMutex*); + // only call from constructor. Flags this to always be locked, removing + // the need to grab the mutex and call onLockPixels/onUnlockPixels. + // Performance tweak to avoid those calls (esp. in multi-thread use case). + void setPreLocked(void* pixels, SkColorTable* ctable); + + // only call from constructor. Specify a (possibly) different mutex, or + // null to use the default. Use with caution. + // The default logic is to provide a mutex, but possibly one that is + // shared with other instances, though this sharing is implementation + // specific, and it is legal for each instance to have its own mutex. + void useDefaultMutex() { this->setMutex(NULL); } + private: #if !SK_ALLOW_STATIC_GLOBAL_INITIALIZERS static void InitializeFlattenables(); @@ -221,6 +234,10 @@ private: // can go from false to true, but never from true to false bool fIsImmutable; + // only ever set in constructor, const after that + bool fPreLocked; + + void setMutex(SkBaseMutex* mutex); friend class SkGraphics; }; diff --git a/include/core/SkThread_platform.h b/include/core/SkThread_platform.h index 863f6e3..58311e1 100644 --- a/include/core/SkThread_platform.h +++ b/include/core/SkThread_platform.h @@ -75,6 +75,8 @@ struct SkBaseMutex { // Special case used when the static mutex must be available globally. #define SK_DECLARE_GLOBAL_MUTEX(name) SkBaseMutex name = { PTHREAD_MUTEX_INITIALIZER } +#define SK_DECLARE_MUTEX_ARRAY(name, count) SkBaseMutex name[count] = { PTHREAD_MUTEX_INITIALIZER } + // A normal mutex that requires to be initialized through normal C++ construction, // i.e. when it's a member of another class, or allocated on the heap. class SkMutex : public SkBaseMutex, SkNoncopyable { @@ -106,8 +108,9 @@ private: typedef SkMutex SkBaseMutex; -#define SK_DECLARE_STATIC_MUTEX(name) static SkBaseMutex name -#define SK_DECLARE_GLOBAL_MUTEX(name) SkBaseMutex name +#define SK_DECLARE_STATIC_MUTEX(name) static SkBaseMutex name +#define SK_DECLARE_GLOBAL_MUTEX(name) SkBaseMutex name +#define SK_DECLARE_MUTEX_ARRAY(name, count) SkBaseMutex name[count] #endif // !SK_USE_POSIX_THREADS |