Index: src/gpu/GrLayerCache.h |
diff --git a/src/gpu/GrLayerCache.h b/src/gpu/GrLayerCache.h |
index 3d4c98a0d7034e84557a767c3e7b482c049fd4f0..0fdd6c97b60bea0e7c0f58f185488353a556ccfc 100644 |
--- a/src/gpu/GrLayerCache.h |
+++ b/src/gpu/GrLayerCache.h |
@@ -16,9 +16,15 @@ |
#include "GrRect.h" |
#include "SkChecksum.h" |
#include "SkTDynamicHash.h" |
+#include "SkMessageBus.h" |
class SkPicture; |
+// The layer cache listens for these messages to purge picture-related resources. |
+struct GrPictureDeletedMessage { |
+ uint32_t pictureID; |
+}; |
+ |
// GrPictureInfo stores the atlas plots used by a single picture. A single |
// plot may be used to store layers from multiple pictures. |
struct GrPictureInfo { |
@@ -146,8 +152,11 @@ public: |
// Inform the cache that layer's cached image is not currently required |
void unlock(GrCachedLayer* layer); |
- // Remove all the layers (and unlock any resources) associated with 'picture' |
- void purge(const SkPicture* picture); |
+ // Setup to be notified when 'picture' is deleted |
+ void trackPicture(const SkPicture* picture); |
+ |
+ // Cleanup after any SkPicture deletions |
+ void processDeletedPictures(); |
SkDEBUGCODE(void validate() const;) |
@@ -167,11 +176,18 @@ private: |
SkTDynamicHash<GrCachedLayer, GrCachedLayer::Key> fLayerHash; |
+ SkMessageBus<GrPictureDeletedMessage>::Inbox fPictDeletionInbox; |
+ |
+ SkAutoTUnref<SkPicture::DeletionListener> fDeletionListener; |
+ |
void initAtlas(); |
GrCachedLayer* createLayer(const SkPicture* picture, int layerID); |
+ // Remove all the layers (and unlock any resources) associated with 'pictureID' |
+ void purge(uint32_t pictureID); |
+ |
// for testing |
- friend class GetNumLayers; |
+ friend class TestingAccess; |
int numLayers() const { return fLayerHash.count(); } |
}; |