Index: tests/GpuLayerCacheTest.cpp |
diff --git a/tests/GpuLayerCacheTest.cpp b/tests/GpuLayerCacheTest.cpp |
index 8da2b9ea8d28b1a2182fd6d77e006dbe7a5d1f3d..eb7d92c8e20fbcf3eb01de8cf1103d37e6a30b2a 100644 |
--- a/tests/GpuLayerCacheTest.cpp |
+++ b/tests/GpuLayerCacheTest.cpp |
@@ -15,11 +15,14 @@ |
static const int kNumLayers = 5; |
-class GetNumLayers { |
+class TestingAccess { |
public: |
static int NumLayers(GrLayerCache* cache) { |
return cache->numLayers(); |
} |
+ static void Purge(GrLayerCache* cache, uint32_t pictureID) { |
+ cache->purge(pictureID); |
+ } |
}; |
// Add several layers to the cache |
@@ -34,7 +37,7 @@ static void create_layers(skiatest::Reporter* reporter, |
GrCachedLayer* layer = cache->findLayer(&picture, i); |
REPORTER_ASSERT(reporter, layer == layers[i]); |
- REPORTER_ASSERT(reporter, GetNumLayers::NumLayers(cache) == i+1); |
+ REPORTER_ASSERT(reporter, TestingAccess::NumLayers(cache) == i + 1); |
REPORTER_ASSERT(reporter, picture.uniqueID() == layers[i]->pictureID()); |
REPORTER_ASSERT(reporter, layers[i]->layerID() == i); |
@@ -42,6 +45,7 @@ static void create_layers(skiatest::Reporter* reporter, |
REPORTER_ASSERT(reporter, !layers[i]->isAtlased()); |
} |
+ cache->trackPicture(&picture); |
} |
// This test case exercises the public API of the GrLayerCache class. |
@@ -126,22 +130,36 @@ DEF_GPUTEST(GpuLayerCache, reporter, factory) { |
#endif |
} |
+ //-------------------------------------------------------------------- |
// Free them all SkGpuDevice-style. This will not free up the |
// atlas' texture but will eliminate all the layers. |
- cache.purge(picture); |
+ TestingAccess::Purge(&cache, picture->uniqueID()); |
- REPORTER_ASSERT(reporter, GetNumLayers::NumLayers(&cache) == 0); |
+ REPORTER_ASSERT(reporter, TestingAccess::NumLayers(&cache) == 0); |
// TODO: add VRAM/resource cache check here |
-#if 0 |
+ |
+ //-------------------------------------------------------------------- |
+ // Test out the GrContext-style purge. This should remove all the layers |
+ // and the atlas. |
// Re-create the layers |
- create_layers(reporter, &cache, picture); |
+ create_layers(reporter, &cache, *picture); |
// Free them again GrContext-style. This should free up everything. |
cache.freeAll(); |
- REPORTER_ASSERT(reporter, GetNumLayers::NumLayers(&cache) == 0); |
+ REPORTER_ASSERT(reporter, TestingAccess::NumLayers(&cache) == 0); |
+ // TODO: add VRAM/resource cache check here |
+ |
+ //-------------------------------------------------------------------- |
+ // Test out the MessageBus-style purge. This will not free the atlas |
+ // but should eliminate the free-floating layers. |
+ create_layers(reporter, &cache, *picture); |
+ |
+ picture.reset(NULL); |
+ cache.processDeletedPictures(); |
+ |
+ REPORTER_ASSERT(reporter, TestingAccess::NumLayers(&cache) == 0); |
// TODO: add VRAM/resource cache check here |
-#endif |
} |
} |