Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(208)

Side by Side Diff: src/gpu/GrLayerCache.h

Issue 751663002: Remove Picture deletion listeners. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: f Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/core/SkPicture.cpp ('k') | src/gpu/GrLayerCache.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2014 Google Inc. 2 * Copyright 2014 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #ifndef GrLayerCache_DEFINED 8 #ifndef GrLayerCache_DEFINED
9 #define GrLayerCache_DEFINED 9 #define GrLayerCache_DEFINED
10 10
11 #include "GrAtlas.h" 11 #include "GrAtlas.h"
12 #include "GrRect.h" 12 #include "GrRect.h"
13 13
14 #include "SkChecksum.h" 14 #include "SkChecksum.h"
15 #include "SkMessageBus.h" 15 #include "SkMessageBus.h"
16 #include "SkPicture.h" 16 #include "SkPicture.h"
17 #include "SkTDynamicHash.h" 17 #include "SkTDynamicHash.h"
18 18
19 // Set to 0 to disable caching of hoisted layers 19 // Set to 0 to disable caching of hoisted layers
20 #define GR_CACHE_HOISTED_LAYERS 0 20 #define GR_CACHE_HOISTED_LAYERS 0
21 21
22 // The layer cache listens for these messages to purge picture-related resources . 22 // GrPictureInfo stores the atlas plots used by a single picture. A single
23 struct GrPictureDeletedMessage {
24 uint32_t pictureID;
25 };
26
27 // GrPictureInfo stores the atlas plots used by a single picture. A single
28 // plot may be used to store layers from multiple pictures. 23 // plot may be used to store layers from multiple pictures.
29 struct GrPictureInfo { 24 struct GrPictureInfo {
30 public: 25 public:
31 static const int kNumPlots = 4; 26 static const int kNumPlots = 4;
32 27
33 // for SkTDynamicHash - just use the pictureID as the hash key 28 // for SkTDynamicHash - just use the pictureID as the hash key
34 static const uint32_t& GetKey(const GrPictureInfo& pictInfo) { return pictIn fo.fPictureID; } 29 static const uint32_t& GetKey(const GrPictureInfo& pictInfo) { return pictIn fo.fPictureID; }
35 static uint32_t Hash(const uint32_t& key) { return SkChecksum::Mix(key); } 30 static uint32_t Hash(const uint32_t& key) { return SkChecksum::Mix(key); }
36 31
37 // GrPictureInfo proper 32 // GrPictureInfo proper
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after
255 // addUse is just here to keep the API symmetric 250 // addUse is just here to keep the API symmetric
256 void addUse(GrCachedLayer* layer) { layer->addUse(); } 251 void addUse(GrCachedLayer* layer) { layer->addUse(); }
257 void removeUse(GrCachedLayer* layer) { 252 void removeUse(GrCachedLayer* layer) {
258 layer->removeUse(); 253 layer->removeUse();
259 if (layer->uses() == 0) { 254 if (layer->uses() == 0) {
260 // If no one cares about the layer allow it to be recycled. 255 // If no one cares about the layer allow it to be recycled.
261 this->unlock(layer); 256 this->unlock(layer);
262 } 257 }
263 } 258 }
264 259
265 // Setup to be notified when 'picture' is deleted
266 void trackPicture(const SkPicture* picture);
267
268 // Cleanup after any SkPicture deletions 260 // Cleanup after any SkPicture deletions
269 void processDeletedPictures(); 261 void processDeletedPictures();
270 262
271 SkDEBUGCODE(void validate() const;) 263 SkDEBUGCODE(void validate() const;)
272 264
273 #ifdef SK_DEVELOPER 265 #ifdef SK_DEVELOPER
274 void writeLayersToDisk(const SkString& dirName); 266 void writeLayersToDisk(const SkString& dirName);
275 #endif 267 #endif
276 268
277 static bool PlausiblyAtlasable(int width, int height) { 269 static bool PlausiblyAtlasable(int width, int height) {
(...skipping 19 matching lines...) Expand all
297 289
298 // We cache this information here (rather then, say, on the owning picture) 290 // We cache this information here (rather then, say, on the owning picture)
299 // because we want to be able to clean it up as needed (e.g., if a picture 291 // because we want to be able to clean it up as needed (e.g., if a picture
300 // is leaked and never cleans itself up we still want to be able to 292 // is leaked and never cleans itself up we still want to be able to
301 // remove the GrPictureInfo once its layers are purged from all the atlas 293 // remove the GrPictureInfo once its layers are purged from all the atlas
302 // plots). 294 // plots).
303 SkTDynamicHash<GrPictureInfo, uint32_t> fPictureHash; 295 SkTDynamicHash<GrPictureInfo, uint32_t> fPictureHash;
304 296
305 SkTDynamicHash<GrCachedLayer, GrCachedLayer::Key> fLayerHash; 297 SkTDynamicHash<GrCachedLayer, GrCachedLayer::Key> fLayerHash;
306 298
307 SkMessageBus<GrPictureDeletedMessage>::Inbox fPictDeletionInbox; 299 SkMessageBus<SkPicture::DeletionMessage>::Inbox fPictDeletionInbox;
308
309 SkAutoTUnref<SkPicture::DeletionListener> fDeletionListener;
310 300
311 // This implements a plot-centric locking mechanism (since the atlas 301 // This implements a plot-centric locking mechanism (since the atlas
312 // backing texture is always locked). Each layer that is locked (i.e., 302 // backing texture is always locked). Each layer that is locked (i.e.,
313 // needed for the current rendering) in a plot increments the plot lock 303 // needed for the current rendering) in a plot increments the plot lock
314 // count for that plot. Similarly, once a rendering is complete all the 304 // count for that plot. Similarly, once a rendering is complete all the
315 // layers used in it decrement the lock count for the used plots. 305 // layers used in it decrement the lock count for the used plots.
316 // Plots with a 0 lock count are open for recycling/purging. 306 // Plots with a 0 lock count are open for recycling/purging.
317 int fPlotLocks[kNumPlotsX * kNumPlotsY]; 307 int fPlotLocks[kNumPlotsX * kNumPlotsY];
318 308
319 // Inform the cache that layer's cached image is not currently required 309 // Inform the cache that layer's cached image is not currently required
(...skipping 18 matching lines...) Expand all
338 SkASSERT(fPlotLocks[plotIdx] > 0); 328 SkASSERT(fPlotLocks[plotIdx] > 0);
339 --fPlotLocks[plotIdx]; 329 --fPlotLocks[plotIdx];
340 } 330 }
341 331
342 // for testing 332 // for testing
343 friend class TestingAccess; 333 friend class TestingAccess;
344 int numLayers() const { return fLayerHash.count(); } 334 int numLayers() const { return fLayerHash.count(); }
345 }; 335 };
346 336
347 #endif 337 #endif
OLDNEW
« no previous file with comments | « src/core/SkPicture.cpp ('k') | src/gpu/GrLayerCache.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698