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

Unified Diff: src/gpu/GrLayerCache.cpp

Issue 687233002: Revert of Discard atlas after every MultiPictureDraw::draw (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 6 years, 2 months 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/gpu/GrLayerCache.h ('k') | src/gpu/GrLayerHoister.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/gpu/GrLayerCache.cpp
diff --git a/src/gpu/GrLayerCache.cpp b/src/gpu/GrLayerCache.cpp
index b6e4e2e54c62148fba51d1bb11f2cbff0b04a7e1..ccb5bb0be48661de61f055d9960e711bfef883e5 100644
--- a/src/gpu/GrLayerCache.cpp
+++ b/src/gpu/GrLayerCache.cpp
@@ -81,6 +81,7 @@
GrLayerCache::GrLayerCache(GrContext* context)
: fContext(context) {
+ this->initAtlas();
memset(fPlotLocks, 0, sizeof(fPlotLocks));
}
@@ -119,6 +120,11 @@
// The atlas only lets go of its texture when the atlas is deleted.
fAtlas.free();
+ // GrLayerCache always assumes an atlas exists so recreate it. The atlas
+ // lazily allocates a replacement texture so reallocating a new
+ // atlas here won't disrupt a GrContext::abandonContext or freeGpuResources.
+ // TODO: Make GrLayerCache lazily allocate the atlas manager?
+ this->initAtlas();
}
GrCachedLayer* GrLayerCache::createLayer(uint32_t pictureID,
@@ -164,7 +170,6 @@
if (layer->locked()) {
// This layer is already locked
- SkASSERT(fAtlas);
SkASSERT(layer->isAtlased());
SkASSERT(layer->rect().width() == desc.fWidth);
SkASSERT(layer->rect().height() == desc.fHeight);
@@ -173,19 +178,12 @@
}
if (layer->isAtlased()) {
- SkASSERT(fAtlas);
// Hooray it is still in the atlas - make sure it stays there
layer->setLocked(true);
this->incPlotLock(layer->plot()->id());
*needsRendering = false;
return true;
} else {
- if (!fAtlas) {
- this->initAtlas();
- if (!fAtlas) {
- return false;
- }
- }
// Not in the atlas - will it fit?
GrPictureInfo* pictInfo = fPictureHash.find(layer->pictureID());
if (NULL == pictInfo) {
@@ -258,7 +256,7 @@
this->decPlotLock(plotID);
// At this point we could aggressively clear out un-locked plots but
// by delaying we may be able to reuse some of the atlased layers later.
-#if !GR_CACHE_HOISTED_LAYERS
+#if DISABLE_CACHING
// This testing code aggressively removes the atlased layers. This
// can be used to separate the performance contribution of less
// render target pingponging from that due to the re-use of cached layers
@@ -357,7 +355,6 @@
bool GrLayerCache::purgePlot() {
SkDEBUGCODE(GrAutoValidateCache avc(this);)
- SkASSERT(fAtlas);
GrAtlas::PlotIter iter;
GrPlot* plot;
@@ -412,12 +409,7 @@
plot->resetRects();
}
-#if !GR_CACHE_HOISTED_LAYERS
void GrLayerCache::purgeAll() {
- if (!fAtlas) {
- return;
- }
-
GrAtlas::PlotIter iter;
GrPlot* plot;
for (plot = fAtlas->iterInit(&iter, GrAtlas::kLRUFirst_IterOrder);
@@ -427,10 +419,7 @@
this->purgePlot(plot);
}
-
- fContext->discardRenderTarget(fAtlas->getTexture()->asRenderTarget());
-}
-#endif
+}
class GrPictureDeletionListener : public SkPicture::DeletionListener {
virtual void onDeletion(uint32_t pictureID) SK_OVERRIDE{
@@ -459,14 +448,12 @@
#ifdef SK_DEVELOPER
void GrLayerCache::writeLayersToDisk(const SkString& dirName) {
- if (fAtlas) {
- GrTexture* atlasTexture = fAtlas->getTexture();
- if (NULL != atlasTexture) {
- SkString fileName(dirName);
- fileName.append("\\atlas.png");
-
- atlasTexture->surfacePriv().savePixels(fileName.c_str());
- }
+ GrTexture* atlasTexture = fAtlas->getTexture();
+ if (NULL != atlasTexture) {
+ SkString fileName(dirName);
+ fileName.append("\\atlas.png");
+
+ atlasTexture->surfacePriv().savePixels(fileName.c_str());
}
SkTDynamicHash<GrCachedLayer, GrCachedLayer::Key>::Iter iter(&fLayerHash);
« no previous file with comments | « src/gpu/GrLayerCache.h ('k') | src/gpu/GrLayerHoister.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698