Index: include/core/SkRefCnt.h |
diff --git a/include/core/SkRefCnt.h b/include/core/SkRefCnt.h |
index d6120d654a30062e51a5be17b324b47d0d8c6f07..cb97dfc8fe06a3cc5345aa9bde54bd1fbc25671b 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() {} |
+}; |
+#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, SkNoncopyable { |
reed1
2013/10/16 12:27:23
To avoid multiple inheritance, perhaps we just nee
Justin Novosad
2013/10/16 13:19:57
Done.
|
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. |
} |
@@ -120,7 +137,7 @@ private: |
mutable int32_t fRefCnt; |
- typedef SkNoncopyable INHERITED; |
+ typedef SkRefCntBase INHERITED; |
}; |
/////////////////////////////////////////////////////////////////////////////// |