From 238069b3f58d3b20f710f77a64632470a3bf256a Mon Sep 17 00:00:00 2001 From: Brian Salomon Date: Wed, 11 Jul 2018 15:58:57 -0400 Subject: Reland "Make GPU cache invalidation SkMessageBus messages go to one GrContext." This is a reland of f4c5bb9aba485aa47c27b15905d81992b7cf4707 Original change's description: > Make GPU cache invalidation SkMessageBus messages go to one GrContext. > > Makes it so the template param to SkMessageBus must implement: > bool shouldSend(uint32_t inboxID) const > > Updates all GPU backend message types to only go to the GrContext that > is adding a cache entry. > > Bug: skia: > Change-Id: I3e8a4eb90654b7b8ac57cac9fb508c0ef1d51058 > Reviewed-on: https://skia-review.googlesource.com/140220 > Reviewed-by: Robert Phillips > Reviewed-by: Jim Van Verth Bug: skia: Change-Id: I8402bfe3ed0170c99936d47050458817030b473b Reviewed-on: https://skia-review.googlesource.com/140801 Reviewed-by: Brian Salomon Commit-Queue: Brian Salomon --- tests/MessageBusTest.cpp | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) (limited to 'tests/MessageBusTest.cpp') diff --git a/tests/MessageBusTest.cpp b/tests/MessageBusTest.cpp index 163addf8f0..145176ba1b 100644 --- a/tests/MessageBusTest.cpp +++ b/tests/MessageBusTest.cpp @@ -8,10 +8,15 @@ #include "SkMessageBus.h" #include "Test.h" +namespace { struct TestMessage { + bool shouldSend(uint32_t inboxID) const { return true; } + TestMessage(int i, float f) : x(i), y(f) {} + int x; float y; }; +} DECLARE_SKMESSAGEBUS_MESSAGE(TestMessage) DEF_TEST(MessageBus, r) { @@ -50,4 +55,42 @@ DEF_TEST(MessageBus, r) { REPORTER_ASSERT(r, 1 == messages[2].x); } +namespace { +struct AddressedMessage { + uint32_t fInboxID; + + bool shouldSend(uint32_t inboxID) const { + SkASSERT(inboxID); + if (!fInboxID) { + return true; + } + return inboxID == fInboxID; + } +}; +} +DECLARE_SKMESSAGEBUS_MESSAGE(AddressedMessage) + +DEF_TEST(MessageBus_shouldSend, r) { + SkMessageBus::Inbox inbox1(1), inbox2(2); + + SkMessageBus::Post({0}); // Should go to both + SkMessageBus::Post({1}); // Should go to inbox1 + SkMessageBus::Post({2}); // Should go to inbox2 + SkMessageBus::Post({3}); // Should go nowhere + + SkTArray messages; + inbox1.poll(&messages); + REPORTER_ASSERT(r, messages.count() == 2); + if (messages.count() == 2) { + REPORTER_ASSERT(r, messages[0].fInboxID == 0); + REPORTER_ASSERT(r, messages[1].fInboxID == 1); + } + inbox2.poll(&messages); + REPORTER_ASSERT(r, messages.count() == 2); + if (messages.count() == 2) { + REPORTER_ASSERT(r, messages[0].fInboxID == 0); + REPORTER_ASSERT(r, messages[1].fInboxID == 2); + } +} + // Multithreaded tests tbd. -- cgit v1.2.3