aboutsummaryrefslogtreecommitdiffhomepage
path: root/include/private/SkMessageBus.h
diff options
context:
space:
mode:
authorGravatar Jim Van Verth <jvanverth@google.com>2017-12-14 13:00:05 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-12-14 18:52:49 +0000
commit474d68791965f20f8e0dfa2bfb4d87300f1f29e0 (patch)
tree538b3b1687625848ced2a730dfa5fb8355a76e3e /include/private/SkMessageBus.h
parentde2b95ea976afa55e6dd41e3ad24b092faa33ae2 (diff)
Send TextBlobCache purge messages only to owning cache.
Bug: 703297 Change-Id: I95cdaa5bdebadd5ce88ae3ee468c59baa08353c6 Reviewed-on: https://skia-review.googlesource.com/85046 Reviewed-by: Brian Salomon <bsalomon@google.com> Commit-Queue: Jim Van Verth <jvanverth@google.com>
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);
+ }
}
}