| OLD | NEW |
| 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 #include "GrLayerCache.h" | 8 #include "GrLayerCache.h" |
| 9 #include "GrLayerHoister.h" | 9 #include "GrLayerHoister.h" |
| 10 #include "SkCanvas.h" | 10 #include "SkCanvas.h" |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 47 if (needsRendering) { | 47 if (needsRendering) { |
| 48 if (layer->isAtlased()) { | 48 if (layer->isAtlased()) { |
| 49 hl = atlased->append(); | 49 hl = atlased->append(); |
| 50 } else { | 50 } else { |
| 51 hl = nonAtlased->append(); | 51 hl = nonAtlased->append(); |
| 52 } | 52 } |
| 53 } else { | 53 } else { |
| 54 hl = recycled->append(); | 54 hl = recycled->append(); |
| 55 } | 55 } |
| 56 | 56 |
| 57 layerCache->addUse(layer); |
| 57 hl->fLayer = layer; | 58 hl->fLayer = layer; |
| 58 hl->fPicture = pict; | 59 hl->fPicture = pict; |
| 59 hl->fOffset = info.fOffset; | 60 hl->fOffset = info.fOffset; |
| 60 hl->fCTM = info.fOriginXform; | 61 hl->fCTM = info.fOriginXform; |
| 61 } | 62 } |
| 62 | 63 |
| 63 // Return true if any layers are suitable for hoisting | 64 // Return true if any layers are suitable for hoisting |
| 64 bool GrLayerHoister::FindLayersToHoist(GrContext* context, | 65 bool GrLayerHoister::FindLayersToHoist(GrContext* context, |
| 65 const SkPicture* topLevelPicture, | 66 const SkPicture* topLevelPicture, |
| 66 const SkRect& query, | 67 const SkRect& query, |
| (...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 256 layer->start()+1, layer->stop(), initialCTM); | 257 layer->start()+1, layer->stop(), initialCTM); |
| 257 | 258 |
| 258 layerCanvas->flush(); | 259 layerCanvas->flush(); |
| 259 } | 260 } |
| 260 | 261 |
| 261 convert_layers_to_replacements(atlased, replacements); | 262 convert_layers_to_replacements(atlased, replacements); |
| 262 convert_layers_to_replacements(nonAtlased, replacements); | 263 convert_layers_to_replacements(nonAtlased, replacements); |
| 263 convert_layers_to_replacements(recycled, replacements); | 264 convert_layers_to_replacements(recycled, replacements); |
| 264 } | 265 } |
| 265 | 266 |
| 266 static void unlock_layer_in_cache(GrLayerCache* layerCache, | |
| 267 const SkPicture* picture, | |
| 268 GrCachedLayer* layer) { | |
| 269 layerCache->unlock(layer); | |
| 270 | |
| 271 #if DISABLE_CACHING | |
| 272 // This code completely clears out the atlas. It is required when | |
| 273 // caching is disabled so the atlas doesn't fill up and force more | |
| 274 // free floating layers | |
| 275 layerCache->purge(picture->uniqueID()); | |
| 276 #endif | |
| 277 } | |
| 278 | |
| 279 void GrLayerHoister::UnlockLayers(GrContext* context, | 267 void GrLayerHoister::UnlockLayers(GrContext* context, |
| 280 const SkTDArray<GrHoistedLayer>& atlased, | 268 const SkTDArray<GrHoistedLayer>& atlased, |
| 281 const SkTDArray<GrHoistedLayer>& nonAtlased, | 269 const SkTDArray<GrHoistedLayer>& nonAtlased, |
| 282 const SkTDArray<GrHoistedLayer>& recycled) { | 270 const SkTDArray<GrHoistedLayer>& recycled) { |
| 283 GrLayerCache* layerCache = context->getLayerCache(); | 271 GrLayerCache* layerCache = context->getLayerCache(); |
| 284 | 272 |
| 285 for (int i = 0; i < atlased.count(); ++i) { | 273 for (int i = 0; i < atlased.count(); ++i) { |
| 286 unlock_layer_in_cache(layerCache, atlased[i].fPicture, atlased[i].fLayer
); | 274 layerCache->removeUse(atlased[i].fLayer); |
| 287 } | 275 } |
| 288 | 276 |
| 289 for (int i = 0; i < nonAtlased.count(); ++i) { | 277 for (int i = 0; i < nonAtlased.count(); ++i) { |
| 290 unlock_layer_in_cache(layerCache, nonAtlased[i].fPicture, nonAtlased[i].
fLayer); | 278 layerCache->removeUse(nonAtlased[i].fLayer); |
| 291 } | 279 } |
| 292 | 280 |
| 293 for (int i = 0; i < recycled.count(); ++i) { | 281 for (int i = 0; i < recycled.count(); ++i) { |
| 294 unlock_layer_in_cache(layerCache, recycled[i].fPicture, recycled[i].fLay
er); | 282 layerCache->removeUse(recycled[i].fLayer); |
| 295 } | 283 } |
| 296 | 284 |
| 297 #if DISABLE_CACHING | 285 #if DISABLE_CACHING |
| 298 // This code completely clears out the atlas. It is required when | 286 // This code completely clears out the atlas. It is required when |
| 299 // caching is disabled so the atlas doesn't fill up and force more | 287 // caching is disabled so the atlas doesn't fill up and force more |
| 300 // free floating layers | 288 // free floating layers |
| 301 layerCache->purgeAll(); | 289 layerCache->purgeAll(); |
| 302 #endif | 290 #endif |
| 291 |
| 292 SkDEBUGCODE(layerCache->validate();) |
| 303 } | 293 } |
| 304 | 294 |
| OLD | NEW |