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

Unified Diff: src/gpu/GrLayerCache.cpp

Issue 1413483004: Revert of Update Layer Hoisting to store its atlas texture in the resource cache (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 5 years, 1 month 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 105ee04e53cd1a26f6ab78238211229bc3916225..9af89a34665664e42499623bab05e46cc60cd156 100644
--- a/src/gpu/GrLayerCache.cpp
+++ b/src/gpu/GrLayerCache.cpp
@@ -27,11 +27,9 @@
SkASSERT(fRect.isEmpty());
SkASSERT(nullptr == fPlot);
SkASSERT(!fLocked); // layers without a texture cannot be locked
- SkASSERT(!fAtlased); // can't be atlased if it doesn't have a texture
}
if (fPlot) {
- SkASSERT(fAtlased);
// If a layer has a plot (i.e., is atlased) then it must point to
// the backing texture. Additionally, its rect should be non-empty.
SkASSERT(fTexture && backingTexture == fTexture);
@@ -121,10 +119,8 @@
}
fLayerHash.rewind();
- if (fAtlas) {
- fAtlas->resetPlots();
- fAtlas->detachBackingTexture();
- }
+ // The atlas only lets go of its texture when the atlas is deleted.
+ fAtlas.free();
}
GrCachedLayer* GrLayerCache::createLayer(uint32_t pictureID,
@@ -171,7 +167,7 @@
bool GrLayerCache::tryToAtlas(GrCachedLayer* layer,
const GrSurfaceDesc& desc,
bool* needsRendering) {
- SkDEBUGCODE(GrAutoValidateLayer avl(fAtlas ? fAtlas->getTextureOrNull() : nullptr, layer);)
+ SkDEBUGCODE(GrAutoValidateLayer avl(fAtlas ? fAtlas->getTexture() : nullptr, layer);)
SkASSERT(PlausiblyAtlasable(desc.fWidth, desc.fHeight));
SkASSERT(0 == desc.fSampleCnt);
@@ -221,7 +217,7 @@
// The layer was successfully added to the atlas
const SkIRect bounds = SkIRect::MakeXYWH(loc.fX, loc.fY,
desc.fWidth, desc.fHeight);
- layer->setTexture(fAtlas->getTexture(), bounds, true);
+ layer->setTexture(fAtlas->getTexture(), bounds);
layer->setPlot(plot);
layer->setLocked(true);
this->incPlotLock(layer->plot()->id());
@@ -231,7 +227,7 @@
// The layer was rejected by the atlas (even though we know it is
// plausibly atlas-able). See if a plot can be purged and try again.
- if (!this->purgePlots(true)) {
+ if (!this->purgePlot()) {
break; // We weren't able to purge any plots
}
}
@@ -264,14 +260,14 @@
return false;
}
- layer->setTexture(tex, SkIRect::MakeWH(desc.fWidth, desc.fHeight), false);
+ layer->setTexture(tex, SkIRect::MakeWH(desc.fWidth, desc.fHeight));
layer->setLocked(true);
*needsRendering = true;
return true;
}
void GrLayerCache::unlock(GrCachedLayer* layer) {
- SkDEBUGCODE(GrAutoValidateLayer avl(fAtlas ? fAtlas->getTextureOrNull() : nullptr, layer);)
+ SkDEBUGCODE(GrAutoValidateLayer avl(fAtlas ? fAtlas->getTexture() : nullptr, layer);)
if (nullptr == layer || !layer->locked()) {
// invalid or not locked
@@ -303,11 +299,11 @@
}
layer->setPlot(nullptr);
- layer->setTexture(nullptr, SkIRect::MakeEmpty(), false);
+ layer->setTexture(nullptr, SkIRect::MakeEmpty());
#endif
} else {
- layer->setTexture(nullptr, SkIRect::MakeEmpty(), false);
+ layer->setTexture(nullptr, SkIRect::MakeEmpty());
}
layer->setLocked(false);
@@ -322,7 +318,7 @@
for (; !iter.done(); ++iter) {
const GrCachedLayer* layer = &(*iter);
- layer->validate(fAtlas.get() ? fAtlas->getTextureOrNull() : nullptr);
+ layer->validate(fAtlas.get() ? fAtlas->getTexture() : nullptr);
const GrPictureInfo* pictInfo = fPictureHash.find(layer->pictureID());
if (!pictInfo) {
@@ -393,11 +389,10 @@
}
}
-bool GrLayerCache::purgePlots(bool justOne) {
+bool GrLayerCache::purgePlot() {
SkDEBUGCODE(GrAutoValidateCache avc(this);)
SkASSERT(fAtlas);
- bool anyPurged = false;
GrLayerAtlas::PlotIter iter;
GrLayerAtlas::Plot* plot;
for (plot = fAtlas->iterInit(&iter, GrLayerAtlas::kLRUFirst_IterOrder);
@@ -407,14 +402,11 @@
continue;
}
- anyPurged = true;
this->purgePlot(plot);
- if (justOne) {
- break;
- }
- }
-
- return anyPurged;
+ return true;
+ }
+
+ return false;
}
void GrLayerCache::purgePlot(GrLayerAtlas::Plot* plot) {
@@ -463,56 +455,26 @@
return;
}
- this->purgePlots(false); // clear them all out
+ GrLayerAtlas::PlotIter iter;
+ GrLayerAtlas::Plot* plot;
+ for (plot = fAtlas->iterInit(&iter, GrLayerAtlas::kLRUFirst_IterOrder);
+ plot;
+ plot = iter.prev()) {
+ SkASSERT(0 == fPlotLocks[plot->id()]);
+
+ this->purgePlot(plot);
+ }
SkASSERT(0 == fPictureHash.count());
- if (fAtlas->getTextureOrNull()) {
- SkAutoTUnref<GrDrawContext> drawContext(
- fContext->drawContext(fAtlas->getTexture()->asRenderTarget()));
-
- if (drawContext) {
- drawContext->discard();
- }
- }
-}
-#endif
-
-void GrLayerCache::begin() {
- if (!fAtlas) {
- return;
- }
-
- if (!fAtlas->reattachBackingTexture()) {
- // We weren't able to re-attach. Clear out all the atlased layers.
- this->purgePlots(false);
- SkASSERT(0 == fPictureHash.count());
- }
-#ifdef SK_DEBUG
- else {
- // we've reattached - everything had better make sense
- SkTDynamicHash<GrCachedLayer, GrCachedLayer::Key>::Iter iter(&fLayerHash);
- for (; !iter.done(); ++iter) {
- GrCachedLayer* layer = &(*iter);
-
- if (layer->isAtlased()) {
- SkASSERT(fAtlas->getTexture() == layer->texture());
- }
- }
- }
-#endif
-}
-
-void GrLayerCache::end() {
- if (!fAtlas) {
- return;
- }
-
- // Adding this call will clear out all the layers in the atlas
- //this->purgePlots(false);
-
- fAtlas->detachBackingTexture();
-}
+ SkAutoTUnref<GrDrawContext> drawContext(
+ fContext->drawContext(fAtlas->getTexture()->asRenderTarget()));
+
+ if (drawContext) {
+ drawContext->discard();
+ }
+}
+#endif
void GrLayerCache::processDeletedPictures() {
SkTArray<SkPicture::DeletionMessage> deletedPictures;
@@ -527,7 +489,7 @@
void GrLayerCache::writeLayersToDisk(const SkString& dirName) {
if (fAtlas) {
- GrTexture* atlasTexture = fAtlas->getTextureOrNull();
+ GrTexture* atlasTexture = fAtlas->getTexture();
if (nullptr != atlasTexture) {
SkString fileName(dirName);
fileName.append("\\atlas.png");
« 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