Index: src/core/SkMessageBus.h |
diff --git a/src/core/SkMessageBus.h b/src/core/SkMessageBus.h |
index a2802f06d40141f34951c0b16b253d04cb54b094..6f032a1fe2181232b2ee2cbfef3443ce7d86d45d 100644 |
--- a/src/core/SkMessageBus.h |
+++ b/src/core/SkMessageBus.h |
@@ -8,8 +8,8 @@ |
#ifndef SkMessageBus_DEFINED |
#define SkMessageBus_DEFINED |
+#include "SkLazyPtr.h" |
#include "SkMutex.h" |
-#include "SkOncePtr.h" |
#include "SkTArray.h" |
#include "SkTDArray.h" |
#include "SkTypes.h" |
@@ -40,17 +40,20 @@ |
SkMessageBus(); |
static SkMessageBus* Get(); |
+ // Allow SkLazyPtr to call SkMessageBus::SkMessageBus(). |
+ template <typename T> friend T* Private::sk_new(); |
+ |
SkTDArray<Inbox*> fInboxes; |
SkMutex fInboxesMutex; |
}; |
// This must go in a single .cpp file, not some .h, or we risk creating more than one global |
// SkMessageBus per type when using shared libraries. NOTE: at most one per file will compile. |
-#define DECLARE_SKMESSAGEBUS_MESSAGE(Message) \ |
- SK_DECLARE_STATIC_ONCE_PTR(SkMessageBus<Message>, bus); \ |
- template <> \ |
- SkMessageBus<Message>* SkMessageBus<Message>::Get() { \ |
- return bus.get([]{ return new SkMessageBus<Message>(); }); \ |
+#define DECLARE_SKMESSAGEBUS_MESSAGE(Message) \ |
+ SK_DECLARE_STATIC_LAZY_PTR(SkMessageBus<Message>, bus); \ |
+ template <> \ |
+ SkMessageBus<Message>* SkMessageBus<Message>::Get() { \ |
+ return bus.get(); \ |
} |
// ----------------------- Implementation of SkMessageBus::Inbox ----------------------- |