Chromium Code Reviews| 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; |
| }; |
| /////////////////////////////////////////////////////////////////////////////// |