aboutsummaryrefslogtreecommitdiffhomepage
path: root/include/private/SkMessageBus.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/private/SkMessageBus.h')
-rw-r--r--include/private/SkMessageBus.h17
1 files changed, 11 insertions, 6 deletions
diff --git a/include/private/SkMessageBus.h b/include/private/SkMessageBus.h
index 79f5c026dc..6ddf82c446 100644
--- a/include/private/SkMessageBus.h
+++ b/include/private/SkMessageBus.h
@@ -17,12 +17,14 @@
template <typename Message>
class SkMessageBus : SkNoncopyable {
public:
- // Post a message to be received by all Inboxes for this Message type. Threadsafe.
- static void Post(const Message& m);
+ // Post a message to be received by Inboxes for this Message type. Threadsafe.
+ // If id is SK_InvalidUniqueID then it will be sent to all inboxes.
+ // Otherwise it will be sent to the inbox with that id.
+ static void Post(const Message& m, uint32_t destID = SK_InvalidUniqueID);
class Inbox {
public:
- Inbox();
+ Inbox(uint32_t uniqueID = SK_InvalidUniqueID);
~Inbox();
// Overwrite out with all the messages we've received since the last call. Threadsafe.
@@ -31,6 +33,7 @@ public:
private:
SkTArray<Message> fMessages;
SkMutex fMessagesMutex;
+ uint32_t fUniqueID;
friend class SkMessageBus;
void receive(const Message& m); // SkMessageBus is a friend only to call this.
@@ -58,7 +61,7 @@ private:
// ----------------------- Implementation of SkMessageBus::Inbox -----------------------
template<typename Message>
-SkMessageBus<Message>::Inbox::Inbox() {
+SkMessageBus<Message>::Inbox::Inbox(uint32_t uniqueID) : fUniqueID(uniqueID) {
// Register ourselves with the corresponding message bus.
SkMessageBus<Message>* bus = SkMessageBus<Message>::Get();
SkAutoMutexAcquire lock(bus->fInboxesMutex);
@@ -99,11 +102,13 @@ template <typename Message>
SkMessageBus<Message>::SkMessageBus() {}
template <typename Message>
-/*static*/ void SkMessageBus<Message>::Post(const Message& m) {
+/*static*/ void SkMessageBus<Message>::Post(const Message& m, uint32_t destID) {
SkMessageBus<Message>* bus = SkMessageBus<Message>::Get();
SkAutoMutexAcquire lock(bus->fInboxesMutex);
for (int i = 0; i < bus->fInboxes.count(); i++) {
- bus->fInboxes[i]->receive(m);
+ if (SK_InvalidUniqueID == destID || bus->fInboxes[i]->fUniqueID == destID) {
+ bus->fInboxes[i]->receive(m);
+ }
}
}