diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/MessageBusTest.cpp | 43 | ||||
-rw-r--r-- | tests/ResourceCacheTest.cpp | 6 | ||||
-rw-r--r-- | tests/TextureProxyTest.cpp | 3 |
3 files changed, 48 insertions, 4 deletions
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<AddressedMessage>::Inbox inbox1(1), inbox2(2); + + SkMessageBus<AddressedMessage>::Post({0}); // Should go to both + SkMessageBus<AddressedMessage>::Post({1}); // Should go to inbox1 + SkMessageBus<AddressedMessage>::Post({2}); // Should go to inbox2 + SkMessageBus<AddressedMessage>::Post({3}); // Should go nowhere + + SkTArray<AddressedMessage> 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. diff --git a/tests/ResourceCacheTest.cpp b/tests/ResourceCacheTest.cpp index 113945b414..c1af97cd3b 100644 --- a/tests/ResourceCacheTest.cpp +++ b/tests/ResourceCacheTest.cpp @@ -1004,8 +1004,8 @@ static void test_purge_invalidated(skiatest::Reporter* reporter) { typedef SkMessageBus<GrUniqueKeyInvalidatedMessage> Bus; // Invalidate two of the three, they should be purged and no longer accessible via their keys. - Bus::Post(Msg(key1)); - Bus::Post(Msg(key2)); + Bus::Post(Msg(key1, context->uniqueID())); + Bus::Post(Msg(key2, context->uniqueID())); cache->purgeAsNeeded(); // a should be deleted now, but we still have a ref on b. REPORTER_ASSERT(reporter, !cache->hasUniqueKey(key1)); @@ -1014,7 +1014,7 @@ static void test_purge_invalidated(skiatest::Reporter* reporter) { REPORTER_ASSERT(reporter, cache->hasUniqueKey(key3)); // Invalidate the third. - Bus::Post(Msg(key3)); + Bus::Post(Msg(key3, context->uniqueID())); cache->purgeAsNeeded(); // we still have a ref on b, c should be recycled as scratch. REPORTER_ASSERT(reporter, 2 == TestResource::NumAlive()); diff --git a/tests/TextureProxyTest.cpp b/tests/TextureProxyTest.cpp index 15e3ef6d9f..da072b5750 100644 --- a/tests/TextureProxyTest.cpp +++ b/tests/TextureProxyTest.cpp @@ -255,7 +255,8 @@ static void invalidation_and_instantiation_test(GrContext* context, skiatest::Re SkAssertResult(proxyProvider->assignUniqueKeyToProxy(key, proxy.get())); // Send an invalidation message, which will be sitting in the cache's inbox - SkMessageBus<GrUniqueKeyInvalidatedMessage>::Post(GrUniqueKeyInvalidatedMessage(key)); + SkMessageBus<GrUniqueKeyInvalidatedMessage>::Post( + GrUniqueKeyInvalidatedMessage(key, context->uniqueID())); REPORTER_ASSERT(reporter, 1 == proxyProvider->numUniqueKeyProxies_TestOnly()); REPORTER_ASSERT(reporter, 0 == cache->getResourceCount()); |