ccpr: Visit atlas proxies during visitProxies()
Also makes sure to flag _cached_ atlas textures as ignored by the
resource allocator.
Bug: skia:
Change-Id: I30d4af1832798bc325fd082143755cf84d40515a
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/215140
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Chris Dalton <csmartdalton@google.com>
diff --git a/src/gpu/ccpr/GrCCDrawPathsOp.h b/src/gpu/ccpr/GrCCDrawPathsOp.h
index 85c339f..894568f 100644
--- a/src/gpu/ccpr/GrCCDrawPathsOp.h
+++ b/src/gpu/ccpr/GrCCDrawPathsOp.h
@@ -39,6 +39,9 @@
GrClampType) override;
CombineResult onCombineIfPossible(GrOp*, const GrCaps&) override;
void visitProxies(const VisitProxyFunc& fn, VisitorType) const override {
+ for (const auto& range : fInstanceRanges) {
+ fn(range.fAtlasProxy);
+ }
fProcessors.visitProxies(fn);
}
void onPrepare(GrOpFlushState*) override {}
diff --git a/src/gpu/ccpr/GrCCPathCache.cpp b/src/gpu/ccpr/GrCCPathCache.cpp
index 3bc26c9..08eda25 100644
--- a/src/gpu/ccpr/GrCCPathCache.cpp
+++ b/src/gpu/ccpr/GrCCPathCache.cpp
@@ -226,12 +226,14 @@
++entry->fHitCount;
if (entry->fCachedAtlas) {
- SkASSERT(SkToBool(entry->fCachedAtlas->peekOnFlushRefCnt())
- == SkToBool(entry->fCachedAtlas->getOnFlushProxy()));
+ SkASSERT(SkToBool(entry->fCachedAtlas->peekOnFlushRefCnt()) ==
+ SkToBool(entry->fCachedAtlas->getOnFlushProxy()));
if (!entry->fCachedAtlas->getOnFlushProxy()) {
- entry->fCachedAtlas->setOnFlushProxy(
- onFlushRP->findOrCreateProxyByUniqueKey(entry->fCachedAtlas->textureKey(),
- GrCCAtlas::kTextureOrigin));
+ if (sk_sp<GrTextureProxy> onFlushProxy = onFlushRP->findOrCreateProxyByUniqueKey(
+ entry->fCachedAtlas->textureKey(), GrCCAtlas::kTextureOrigin)) {
+ onFlushProxy->priv().setIgnoredByResourceAllocator();
+ entry->fCachedAtlas->setOnFlushProxy(std::move(onFlushProxy));
+ }
}
if (!entry->fCachedAtlas->getOnFlushProxy()) {
// Our atlas's backing texture got purged from the GrResourceCache. Release the