Index: include/core/SkRefCnt.h |
diff --git a/include/core/SkRefCnt.h b/include/core/SkRefCnt.h |
index d6120d654a30062e51a5be17b324b47d0d8c6f07..eb48276f038d05f686ccfee80820871f4b925aff 100644 |
--- a/include/core/SkRefCnt.h |
+++ b/include/core/SkRefCnt.h |
@@ -14,6 +14,22 @@ |
#include "SkInstCnt.h" |
#include "SkTemplates.h" |
+#ifdef SK_REF_CNT_BASE_INCLUDE |
+#include SK_REF_CNT_BASE_INCLUDE |
+#else |
+/** \class SkRefCntBase |
+ |
+ Default implementation of SkRefCntBase. The base class' contract is to |
+ provide an implementation of aboutToRef. Embedders of skia can specify |
+ an alternate implementation by setting SK_REF_CNT_BASE_INCLUDE. This is |
+ useful for adding debug run-time checks to enforce certain usage patterns. |
+*/ |
+class SK_API SkRefCntBase { |
+public: |
+ void aboutToRef() const {} |
+}; |
+#endif |
+ |
/** \class SkRefCnt |
SkRefCnt is the base class for objects that may be shared by multiple |
@@ -24,7 +40,7 @@ |
destructor to be called explicitly (or via the object going out of scope on |
the stack or calling delete) if getRefCnt() > 1. |
*/ |
-class SK_API SkRefCnt : SkNoncopyable { |
+class SK_API SkRefCnt : public SkRefCntBase { |
public: |
SK_DECLARE_INST_COUNT_ROOT(SkRefCnt) |
@@ -61,6 +77,7 @@ public: |
*/ |
void ref() const { |
SkASSERT(fRefCnt > 0); |
+ this->INHERITED::aboutToRef(); |
sk_atomic_inc(&fRefCnt); // No barrier required. |
} |
@@ -106,6 +123,12 @@ protected: |
private: |
/** |
+ * Make SkRefCnt non-copyable. |
+ */ |
+ SkRefCnt(const SkRefCnt&); |
+ SkRefCnt& operator=(const SkRefCnt&); |
+ |
+ /** |
* Called when the ref count goes to 0. |
*/ |
virtual void internal_dispose() const { |
@@ -120,7 +143,7 @@ private: |
mutable int32_t fRefCnt; |
- typedef SkNoncopyable INHERITED; |
+ typedef SkRefCntBase INHERITED; |
}; |
/////////////////////////////////////////////////////////////////////////////// |