Delazify wrapped backend textures/render target proxies

These methods will fail on DDL contexts.

This is in preparation for removing the ability to specify origin for lazy proxies.

Change-Id: Iadcedfd4fce8ea2590729c974128e5c58cec38a8
Reviewed-on: https://skia-review.googlesource.com/112802
Commit-Queue: Brian Salomon <bsalomon@google.com>
Reviewed-by: Greg Daniel <egdaniel@google.com>
diff --git a/tests/DeferredDisplayListTest.cpp b/tests/DeferredDisplayListTest.cpp
index 4b425ae..b0c80c3 100644
--- a/tests/DeferredDisplayListTest.cpp
+++ b/tests/DeferredDisplayListTest.cpp
@@ -358,143 +358,50 @@
 DEF_GPUTEST_FOR_RENDERING_CONTEXTS(DDLWrapBackendTest, reporter, ctxInfo) {
     GrContext* context = ctxInfo.grContext();
     GrGpu* gpu = context->contextPriv().getGpu();
-    for (auto lastStage : { DDLStage::kMakeImage, DDLStage::kDrawImage,
-                            DDLStage::kDetach, DDLStage::kDrawDDL } ) {
-        for (auto earlyImageReset : { false , true } ) {
-            GrBackendTexture backendTex = gpu->createTestingOnlyBackendTexture(
-                    nullptr, kSize, kSize, kRGBA_8888_GrPixelConfig, false, GrMipMapped::kNo);
-            if (!backendTex.isValid()) {
-                continue;
-            }
-
-            SurfaceParameters params;
-
-            sk_sp<SkSurface> s = params.make(context);
-            if (!s) {
-                gpu->deleteTestingOnlyBackendTexture(&backendTex);
-                continue;
-            }
-
-            SkSurfaceCharacterization c;
-            SkAssertResult(s->characterize(&c));
-
-            std::unique_ptr<SkDeferredDisplayListRecorder> recorder(
-                    new SkDeferredDisplayListRecorder(c));
-
-            SkCanvas* canvas = recorder->getCanvas();
-            if (!canvas) {
-                gpu->deleteTestingOnlyBackendTexture(&backendTex);
-                continue;
-            }
-
-            GrContext* deferredContext = canvas->getGrContext();
-            if (!deferredContext) {
-                gpu->deleteTestingOnlyBackendTexture(&backendTex);
-                continue;
-            }
-
-            sk_sp<SkImage> image = SkImage::MakeFromAdoptedTexture(deferredContext, backendTex,
-                                                                   kTopLeft_GrSurfaceOrigin,
-                                                                   kRGBA_8888_SkColorType,
-                                                                   kPremul_SkAlphaType, nullptr);
-            // Adopted Textures are not supported in DDL
-            REPORTER_ASSERT(reporter, !image);
-
-            TextureReleaseChecker releaseChecker;
-            image = SkImage::MakeFromTexture(deferredContext, backendTex,
-                                             kTopLeft_GrSurfaceOrigin,
-                                             kRGBA_8888_SkColorType,
-                                             kPremul_SkAlphaType, nullptr,
-                                             TextureReleaseChecker::Release, &releaseChecker);
-
-            REPORTER_ASSERT(reporter, image);
-            if (!image) {
-                gpu->deleteTestingOnlyBackendTexture(&backendTex);
-                continue;
-            }
-
-            if (DDLStage::kMakeImage == lastStage) {
-                REPORTER_ASSERT(reporter, 0 == releaseChecker.fReleaseCount);
-                image.reset();
-                REPORTER_ASSERT(reporter, 1 == releaseChecker.fReleaseCount);
-                recorder.reset();
-                REPORTER_ASSERT(reporter, 1 == releaseChecker.fReleaseCount);
-                gpu->deleteTestingOnlyBackendTexture(&backendTex);
-                continue;
-            }
-
-            canvas->drawImage(image.get(), 0, 0);
-
-            if (earlyImageReset) {
-                REPORTER_ASSERT(reporter, 0 == releaseChecker.fReleaseCount);
-                image.reset();
-                // Ref should still be held by DDL recorder since we did the draw
-                REPORTER_ASSERT(reporter, 0 == releaseChecker.fReleaseCount);
-            }
-
-            if (DDLStage::kDrawImage == lastStage) {
-                REPORTER_ASSERT(reporter, 0 == releaseChecker.fReleaseCount);
-                recorder.reset();
-                if (earlyImageReset) {
-                    REPORTER_ASSERT(reporter, 1 == releaseChecker.fReleaseCount);
-                } else {
-                    REPORTER_ASSERT(reporter, 0 == releaseChecker.fReleaseCount);
-                    image.reset();
-                    REPORTER_ASSERT(reporter, 1 == releaseChecker.fReleaseCount);
-                }
-                gpu->deleteTestingOnlyBackendTexture(&backendTex);
-                continue;
-            }
-
-            std::unique_ptr<SkDeferredDisplayList> ddl = recorder->detach();
-            if (DDLStage::kDetach == lastStage) {
-                REPORTER_ASSERT(reporter, 0 == releaseChecker.fReleaseCount);
-                recorder.reset();
-#ifndef SK_RASTER_RECORDER_IMPLEMENTATION
-                REPORTER_ASSERT(reporter, 0 == releaseChecker.fReleaseCount);
-#endif
-                ddl.reset();
-                if (earlyImageReset) {
-                    REPORTER_ASSERT(reporter, 1 == releaseChecker.fReleaseCount);
-                } else {
-                    REPORTER_ASSERT(reporter, 0 == releaseChecker.fReleaseCount);
-                    image.reset();
-                    REPORTER_ASSERT(reporter, 1 == releaseChecker.fReleaseCount);
-                }
-                gpu->deleteTestingOnlyBackendTexture(&backendTex);
-                continue;
-            }
-
-            REPORTER_ASSERT(reporter, s->draw(ddl.get()));
-
-            REPORTER_ASSERT(reporter, 0 == releaseChecker.fReleaseCount);
-            recorder.reset();
-#ifndef SK_RASTER_RECORDER_IMPLEMENTATION
-            REPORTER_ASSERT(reporter, 0 == releaseChecker.fReleaseCount);
-#endif
-            ddl.reset();
-#ifndef SK_RASTER_RECORDER_IMPLEMENTATION
-            REPORTER_ASSERT(reporter, 0 == releaseChecker.fReleaseCount);
-#endif
-
-            // Force all draws to flush and sync by calling a read pixels
-            SkImageInfo imageInfo = SkImageInfo::Make(kSize, kSize, kRGBA_8888_SkColorType,
-                                                      kPremul_SkAlphaType);
-            SkBitmap bitmap;
-            bitmap.allocPixels(imageInfo);
-            s->readPixels(imageInfo, bitmap.getPixels(), bitmap.rowBytes(), 0, 0);
-
-            if (earlyImageReset) {
-                REPORTER_ASSERT(reporter, 1 == releaseChecker.fReleaseCount);
-            } else {
-                REPORTER_ASSERT(reporter, 0 == releaseChecker.fReleaseCount);
-                image.reset();
-                REPORTER_ASSERT(reporter, 1 == releaseChecker.fReleaseCount);
-            }
-
-            gpu->deleteTestingOnlyBackendTexture(&backendTex);
-        }
+    GrBackendTexture backendTex = gpu->createTestingOnlyBackendTexture(
+            nullptr, kSize, kSize, kRGBA_8888_GrPixelConfig, false, GrMipMapped::kNo);
+    if (!backendTex.isValid()) {
+        return;
     }
+
+    SurfaceParameters params;
+
+    sk_sp<SkSurface> s = params.make(context);
+    if (!s) {
+        gpu->deleteTestingOnlyBackendTexture(&backendTex);
+        return;
+    }
+
+    SkSurfaceCharacterization c;
+    SkAssertResult(s->characterize(&c));
+
+    std::unique_ptr<SkDeferredDisplayListRecorder> recorder(new SkDeferredDisplayListRecorder(c));
+
+    SkCanvas* canvas = recorder->getCanvas();
+    if (!canvas) {
+        gpu->deleteTestingOnlyBackendTexture(&backendTex);
+        return;
+    }
+
+    GrContext* deferredContext = canvas->getGrContext();
+    if (!deferredContext) {
+        gpu->deleteTestingOnlyBackendTexture(&backendTex);
+        return;
+    }
+
+    // Wrapped Backend Textures are not supported in DDL
+    sk_sp<SkImage> image =
+            SkImage::MakeFromAdoptedTexture(deferredContext, backendTex, kTopLeft_GrSurfaceOrigin,
+                                            kRGBA_8888_SkColorType, kPremul_SkAlphaType, nullptr);
+    REPORTER_ASSERT(reporter, !image);
+
+    TextureReleaseChecker releaseChecker;
+    image = SkImage::MakeFromTexture(deferredContext, backendTex, kTopLeft_GrSurfaceOrigin,
+                                     kRGBA_8888_SkColorType, kPremul_SkAlphaType, nullptr,
+                                     TextureReleaseChecker::Release, &releaseChecker);
+    REPORTER_ASSERT(reporter, !image);
+
+    gpu->deleteTestingOnlyBackendTexture(&backendTex);
 }
 
 
diff --git a/tests/ProxyTest.cpp b/tests/ProxyTest.cpp
index 9d52281..8f5eb13 100644
--- a/tests/ProxyTest.cpp
+++ b/tests/ProxyTest.cpp
@@ -48,12 +48,17 @@
     REPORTER_ASSERT(reporter, rtProxy->numStencilSamples() == numSamples);
 
     GrSurfaceProxy::UniqueID idBefore = rtProxy->uniqueID();
+    bool preinstantiated = rtProxy->priv().isInstantiated();
     REPORTER_ASSERT(reporter, rtProxy->instantiate(provider));
     GrRenderTarget* rt = rtProxy->priv().peekRenderTarget();
 
     REPORTER_ASSERT(reporter, rtProxy->uniqueID() == idBefore);
     // Deferred resources should always have a different ID from their instantiated rendertarget
-    REPORTER_ASSERT(reporter, rtProxy->uniqueID().asUInt() != rt->uniqueID().asUInt());
+    if (preinstantiated) {
+        REPORTER_ASSERT(reporter, rtProxy->uniqueID().asUInt() == rt->uniqueID().asUInt());
+    } else {
+        REPORTER_ASSERT(reporter, rtProxy->uniqueID().asUInt() != rt->uniqueID().asUInt());
+    }
 
     if (SkBackingFit::kExact == fit) {
         REPORTER_ASSERT(reporter, rt->width() == rtProxy->width());
@@ -76,12 +81,17 @@
                           SkBackingFit fit) {
     GrSurfaceProxy::UniqueID idBefore = texProxy->uniqueID();
 
+    bool preinstantiated = texProxy->priv().isInstantiated();
     REPORTER_ASSERT(reporter, texProxy->instantiate(provider));
     GrTexture* tex = texProxy->priv().peekTexture();
 
     REPORTER_ASSERT(reporter, texProxy->uniqueID() == idBefore);
     // Deferred resources should always have a different ID from their instantiated texture
-    REPORTER_ASSERT(reporter, texProxy->uniqueID().asUInt() != tex->uniqueID().asUInt());
+    if (preinstantiated) {
+        REPORTER_ASSERT(reporter, texProxy->uniqueID().asUInt() == tex->uniqueID().asUInt());
+    } else {
+        REPORTER_ASSERT(reporter, texProxy->uniqueID().asUInt() != tex->uniqueID().asUInt());
+    }
 
     if (SkBackingFit::kExact == fit) {
         REPORTER_ASSERT(reporter, tex->width() == texProxy->width());