ccpr: Recycle the stashed atlas's texture explicitly

This solution is more future-proof.

Bug: skia:
Change-Id: Ifa437a511336282d73befddea2656f3fcdb3f2ef
Reviewed-on: https://skia-review.googlesource.com/136964
Commit-Queue: Chris Dalton <csmartdalton@google.com>
Reviewed-by: Greg Daniel <egdaniel@google.com>
diff --git a/src/gpu/ccpr/GrCCAtlas.cpp b/src/gpu/ccpr/GrCCAtlas.cpp
index 4eeddea..b336e8c 100644
--- a/src/gpu/ccpr/GrCCAtlas.cpp
+++ b/src/gpu/ccpr/GrCCAtlas.cpp
@@ -77,12 +77,15 @@
                     if (!resourceProvider) {
                         return sk_sp<GrTexture>();
                     }
-                    GrSurfaceDesc desc;
-                    desc.fFlags = kRenderTarget_GrSurfaceFlag;
-                    desc.fWidth = fWidth;
-                    desc.fHeight = fHeight;
-                    desc.fConfig = pixelConfig;
-                    return resourceProvider->createTexture(desc, SkBudgeted::kYes);
+                    if (!fBackingTexture) {
+                        GrSurfaceDesc desc;
+                        desc.fFlags = kRenderTarget_GrSurfaceFlag;
+                        desc.fWidth = fWidth;
+                        desc.fHeight = fHeight;
+                        desc.fConfig = pixelConfig;
+                        fBackingTexture = resourceProvider->createTexture(desc, SkBudgeted::kYes);
+                    }
+                    return fBackingTexture;
             },
             GrProxyProvider::Renderable::kYes, kTextureOrigin, pixelConfig, caps);
 }
@@ -165,13 +168,20 @@
 }
 
 sk_sp<GrRenderTargetContext> GrCCAtlas::makeRenderTargetContext(
-        GrOnFlushResourceProvider* onFlushRP) {
+        GrOnFlushResourceProvider* onFlushRP, sk_sp<GrTexture> backingTexture) {
     SkASSERT(!fTextureProxy->priv().isInstantiated());  // This method should only be called once.
     // Caller should have cropped any paths to the destination render target instead of asking for
     // an atlas larger than maxRenderTargetSize.
     SkASSERT(SkTMax(fHeight, fWidth) <= fMaxTextureSize);
     SkASSERT(fMaxTextureSize <= onFlushRP->caps()->maxRenderTargetSize());
 
+    if (backingTexture) {
+        SkASSERT(backingTexture->config() == kAlpha_half_GrPixelConfig);
+        SkASSERT(backingTexture->width() == fWidth);
+        SkASSERT(backingTexture->height() == fHeight);
+        fBackingTexture = std::move(backingTexture);
+    }
+
     sk_sp<GrRenderTargetContext> rtc =
             onFlushRP->makeRenderTargetContext(fTextureProxy, nullptr, nullptr);
     if (!rtc) {