Remove support for SkDeferredDisplayListRecorder::DelayReleaseCallback::kNo.

Bug: skia:8800
Change-Id: I39d1ac62ab9a0d4f987c23de96c644aa9b2fa70e
Reviewed-on: https://skia-review.googlesource.com/c/196161
Commit-Queue: Brian Salomon <bsalomon@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
diff --git a/src/image/SkImage_GpuBase.cpp b/src/image/SkImage_GpuBase.cpp
index a0a8fa6..c94fe5f 100644
--- a/src/image/SkImage_GpuBase.cpp
+++ b/src/image/SkImage_GpuBase.cpp
@@ -371,8 +371,7 @@
         PromiseImageTextureFulfillProc fulfillProc,
         PromiseImageTextureReleaseProc releaseProc,
         PromiseImageTextureDoneProc doneProc,
-        PromiseImageTextureContext textureContext,
-        DelayReleaseCallback delayReleaseCallback) {
+        PromiseImageTextureContext textureContext) {
     SkASSERT(context);
     SkASSERT(width > 0 && height > 0);
     SkASSERT(doneProc);
@@ -414,11 +413,8 @@
                                        PromiseImageTextureReleaseProc releaseProc,
                                        PromiseImageTextureDoneProc doneProc,
                                        PromiseImageTextureContext context,
-                                       DelayReleaseCallback delayReleaseCallback,
                                        GrPixelConfig config)
-                : fFulfillProc(fulfillProc)
-                , fConfig(config)
-                , fDelayReleaseCallback(delayReleaseCallback) {
+                : fFulfillProc(fulfillProc), fConfig(config) {
             auto doneHelper = sk_make_sp<GrReleaseProcHelper>(doneProc, context);
             fReleaseContext = sk_make_sp<IdleContext::PromiseImageReleaseContext>(
                     releaseProc, context, std::move(doneHelper));
@@ -427,24 +423,11 @@
         ~PromiseLazyInstantiateCallback() = default;
 
         sk_sp<GrSurface> operator()(GrResourceProvider* resourceProvider) {
-            if (fDelayedReleaseTexture) {
-                return fDelayedReleaseTexture;
+            if (fTexture) {
+                return fTexture;
             }
 
             sk_sp<GrTexture> cachedTexture;
-            SkASSERT(fLastFulfilledKey.isValid() == (fLastFulfillID > 0));
-            if (fLastFulfilledKey.isValid()) {
-                auto surf = resourceProvider->findByUniqueKey<GrSurface>(fLastFulfilledKey);
-                if (surf) {
-                    cachedTexture = sk_ref_sp(surf->asTexture());
-                    SkASSERT(cachedTexture);
-                }
-            }
-            // If the release callback hasn't been called already by releasing the GrTexture
-            // then we can be sure that won't happen so long as we have a ref to the texture.
-            if (cachedTexture && !fReleaseContext->isReleased()) {
-                return std::move(cachedTexture);
-            }
             GrBackendTexture backendTexture;
             sk_sp<SkPromiseImageTexture> promiseTexture =
                     fFulfillProc(fReleaseContext->textureContext());
@@ -453,16 +436,6 @@
                 fReleaseContext->release();
                 return sk_sp<GrTexture>();
             }
-            bool same = promiseTexture->uniqueID() == fLastFulfillID;
-            SkASSERT(!same || fLastFulfilledKey.isValid());
-            if (same && cachedTexture) {
-                SkASSERT(fReleaseContext->unique());
-                this->addToIdleContext(cachedTexture.get());
-                return std::move(cachedTexture);
-            } else if (cachedTexture) {
-                cachedTexture->resourcePriv().removeUniqueKey();
-            }
-            fLastFulfillID = promiseTexture->uniqueID();
 
             backendTexture = promiseTexture->backendTexture();
             backendTexture.fConfig = fConfig;
@@ -475,21 +448,22 @@
 
             sk_sp<GrTexture> tex;
             static const GrUniqueKey::Domain kDomain = GrUniqueKey::GenerateDomain();
-            GrUniqueKey::Builder builder(&fLastFulfilledKey, kDomain, 2, "promise");
+            GrUniqueKey key;
+            GrUniqueKey::Builder builder(&key, kDomain, 2, "promise");
             builder[0] = promiseTexture->uniqueID();
             builder[1] = fConfig;
             builder.finish();
             // A texture with this key may already exist from a different instance of this lazy
             // callback. This could happen if the client fulfills a promise image with a texture
             // that was previously used to fulfill a different promise image.
-            if (auto surf = resourceProvider->findByUniqueKey<GrSurface>(fLastFulfilledKey)) {
+            if (auto surf = resourceProvider->findByUniqueKey<GrSurface>(key)) {
                 tex = sk_ref_sp(surf->asTexture());
                 SkASSERT(tex);
             } else {
                 if ((tex = resourceProvider->wrapBackendTexture(
                              backendTexture, kBorrow_GrWrapOwnership, GrWrapCacheable::kYes,
                              kRead_GrIOType))) {
-                    tex->resourcePriv().setUniqueKey(fLastFulfilledKey);
+                    tex->resourcePriv().setUniqueKey(key);
                 } else {
                     // Even though we failed to wrap the backend texture, we must call the release
                     // proc to keep our contract of always calling Fulfill and Release in pairs.
@@ -498,14 +472,11 @@
                 }
             }
             this->addToIdleContext(tex.get());
-            if (fDelayReleaseCallback == DelayReleaseCallback::kYes) {
-                fDelayedReleaseTexture = tex;
-            }
-            tex->resourcePriv().setUniqueKey(fLastFulfilledKey);
+            fTexture = tex;
             SkASSERT(fContextID == SK_InvalidUniqueID ||
                      fContextID == tex->getContext()->priv().contextID());
             fContextID = tex->getContext()->priv().contextID();
-            promiseTexture->addKeyToInvalidate(fContextID, fLastFulfilledKey);
+            promiseTexture->addKeyToInvalidate(fContextID, key);
             return std::move(tex);
         }
 
@@ -584,17 +555,13 @@
         }
 
         sk_sp<IdleContext::PromiseImageReleaseContext> fReleaseContext;
-        sk_sp<GrTexture> fDelayedReleaseTexture;
+        sk_sp<GrTexture> fTexture;
         PromiseImageTextureFulfillProc fFulfillProc;
         GrPixelConfig fConfig;
-        DelayReleaseCallback fDelayReleaseCallback;
 
-        // ID of the last SkPromiseImageTexture given to us by the client.
-        uint32_t fLastFulfillID = 0;
         // ID of the GrContext that we are interacting with.
         uint32_t fContextID = SK_InvalidUniqueID;
-        GrUniqueKey fLastFulfilledKey;
-    } callback(fulfillProc, releaseProc, doneProc, textureContext, delayReleaseCallback, config);
+    } callback(fulfillProc, releaseProc, doneProc, textureContext, config);
 
     GrProxyProvider* proxyProvider = context->priv().proxyProvider();