Clean up test drawContext usage

The general idea is to provide access to SkGpuDevice's drawContext rather than its GrRenderTarget. That is usually what the testing framework actually wants.

GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1930623003

Review-Url: https://codereview.chromium.org/1930623003
diff --git a/gm/texdata.cpp b/gm/texdata.cpp
index 20cad0c..977947b 100644
--- a/gm/texdata.cpp
+++ b/gm/texdata.cpp
@@ -19,100 +19,105 @@
 static const int S = 200;
 
 DEF_SIMPLE_GM_BG(texdata, canvas, 2 * S, 2 * S, SK_ColorBLACK) {
-        GrRenderTarget* target = canvas->internal_private_accessTopLayerRenderTarget();
-        GrContext* ctx = canvas->getGrContext();
-        sk_sp<GrDrawContext> drawContext(ctx ? ctx->drawContext(sk_ref_sp(target)) : nullptr);
-        if (drawContext && target) {
-            SkAutoTArray<SkPMColor> gTextureData((2 * S) * (2 * S));
-            static const int stride = 2 * S;
-            static const SkPMColor gray  = SkPackARGB32(0x40, 0x40, 0x40, 0x40);
-            static const SkPMColor white = SkPackARGB32(0xff, 0xff, 0xff, 0xff);
-            static const SkPMColor red   = SkPackARGB32(0x80, 0x80, 0x00, 0x00);
-            static const SkPMColor blue  = SkPackARGB32(0x80, 0x00, 0x00, 0x80);
-            static const SkPMColor green = SkPackARGB32(0x80, 0x00, 0x80, 0x00);
-            static const SkPMColor black = SkPackARGB32(0x00, 0x00, 0x00, 0x00);
-            for (int i = 0; i < 2; ++i) {
-                int offset = 0;
-                // fill upper-left
-                for (int y = 0; y < S; ++y) {
-                    for (int x = 0; x < S; ++x) {
-                        gTextureData[offset + y * stride + x] = gray;
-                    }
-                }
-                // fill upper-right
-                offset = S;
-                for (int y = 0; y < S; ++y) {
-                    for (int x = 0; x < S; ++x) {
-                        gTextureData[offset + y * stride + x] = white;
-                    }
-                }
-                // fill lower left
-                offset = S * stride;
-                for (int y = 0; y < S; ++y) {
-                    for (int x = 0; x < S; ++x) {
-                        gTextureData[offset + y * stride + x] = black;
-                    }
-                }
-                // fill lower right
-                offset = S * stride + S;
-                for (int y = 0; y < S; ++y) {
-                    for (int x = 0; x < S; ++x) {
-                        gTextureData[offset + y * stride + x] = gray;
-                    }
-                }
+    GrDrawContext* drawContext = canvas->internal_private_accessTopLayerDrawContext();
+    if (!drawContext) {
+        skiagm::GM::DrawGpuOnlyMessage(canvas);
+        return;
+    }
 
-                GrSurfaceDesc desc;
-                // use RT flag bit because in GL it makes the texture be bottom-up
-                desc.fFlags     = i ? kRenderTarget_GrSurfaceFlag :
-                                      kNone_GrSurfaceFlags;
-                desc.fConfig    = kSkia8888_GrPixelConfig;
-                desc.fWidth     = 2 * S;
-                desc.fHeight    = 2 * S;
-                GrTexture* texture = ctx->textureProvider()->createTexture(
-                    desc, SkBudgeted::kNo, gTextureData.get(), 0);
+    GrContext* context = canvas->getGrContext();
+    if (!context) {
+        return;
+    }
 
-                if (!texture) {
-                    return;
-                }
-                SkAutoTUnref<GrTexture> au(texture);
-
-                // setup new clip
-                GrClip clip(SkRect::MakeWH(2*S, 2*S));
-
-                GrPaint paint;
-                paint.setPorterDuffXPFactory(SkXfermode::kSrcOver_Mode);
-
-                SkMatrix vm;
-                if (i) {
-                    vm.setRotate(90 * SK_Scalar1,
-                                 S * SK_Scalar1,
-                                 S * SK_Scalar1);
-                } else {
-                    vm.reset();
-                }
-                SkMatrix tm;
-                tm = vm;
-                tm.postIDiv(2*S, 2*S);
-                paint.addColorTextureProcessor(texture, tm);
-
-                drawContext->drawRect(clip, paint, vm, SkRect::MakeWH(2*S, 2*S));
-
-                // now update the lower right of the texture in first pass
-                // or upper right in second pass
-                offset = 0;
-                for (int y = 0; y < S; ++y) {
-                    for (int x = 0; x < S; ++x) {
-                        gTextureData[offset + y * stride + x] =
-                            ((x + y) % 2) ? (i ? green : red) : blue;
-                    }
-                }
-                texture->writePixels(S, (i ? 0 : S), S, S,
-                                     texture->config(), gTextureData.get(),
-                                     4 * stride);
-                drawContext->drawRect(clip, paint, vm, SkRect::MakeWH(2*S, 2*S));
+    SkAutoTArray<SkPMColor> gTextureData((2 * S) * (2 * S));
+    static const int stride = 2 * S;
+    static const SkPMColor gray  = SkPackARGB32(0x40, 0x40, 0x40, 0x40);
+    static const SkPMColor white = SkPackARGB32(0xff, 0xff, 0xff, 0xff);
+    static const SkPMColor red   = SkPackARGB32(0x80, 0x80, 0x00, 0x00);
+    static const SkPMColor blue  = SkPackARGB32(0x80, 0x00, 0x00, 0x80);
+    static const SkPMColor green = SkPackARGB32(0x80, 0x00, 0x80, 0x00);
+    static const SkPMColor black = SkPackARGB32(0x00, 0x00, 0x00, 0x00);
+    for (int i = 0; i < 2; ++i) {
+        int offset = 0;
+        // fill upper-left
+        for (int y = 0; y < S; ++y) {
+            for (int x = 0; x < S; ++x) {
+                gTextureData[offset + y * stride + x] = gray;
             }
-        } else {
-            skiagm::GM::DrawGpuOnlyMessage(canvas);
         }
+        // fill upper-right
+        offset = S;
+        for (int y = 0; y < S; ++y) {
+            for (int x = 0; x < S; ++x) {
+                gTextureData[offset + y * stride + x] = white;
+            }
+        }
+        // fill lower left
+        offset = S * stride;
+        for (int y = 0; y < S; ++y) {
+            for (int x = 0; x < S; ++x) {
+                gTextureData[offset + y * stride + x] = black;
+            }
+        }
+        // fill lower right
+        offset = S * stride + S;
+        for (int y = 0; y < S; ++y) {
+            for (int x = 0; x < S; ++x) {
+                gTextureData[offset + y * stride + x] = gray;
+            }
+        }
+
+        GrSurfaceDesc desc;
+        // use RT flag bit because in GL it makes the texture be bottom-up
+        desc.fFlags     = i ? kRenderTarget_GrSurfaceFlag :
+                                kNone_GrSurfaceFlags;
+        desc.fConfig    = kSkia8888_GrPixelConfig;
+        desc.fWidth     = 2 * S;
+        desc.fHeight    = 2 * S;
+        GrTexture* texture = context->textureProvider()->createTexture(
+            desc, SkBudgeted::kNo, gTextureData.get(), 0);
+
+        if (!texture) {
+            return;
+        }
+        SkAutoTUnref<GrTexture> au(texture);
+
+        // setup new clip
+        GrClip clip(SkRect::MakeWH(2*S, 2*S));
+
+        GrPaint paint;
+        paint.setPorterDuffXPFactory(SkXfermode::kSrcOver_Mode);
+
+        SkMatrix vm;
+        if (i) {
+            vm.setRotate(90 * SK_Scalar1,
+                            S * SK_Scalar1,
+                            S * SK_Scalar1);
+        } else {
+            vm.reset();
+        }
+        SkMatrix tm;
+        tm = vm;
+        tm.postIDiv(2*S, 2*S);
+        paint.addColorTextureProcessor(texture, tm);
+
+        drawContext->drawRect(clip, paint, vm, SkRect::MakeWH(2*S, 2*S));
+
+        // now update the lower right of the texture in first pass
+        // or upper right in second pass
+        offset = 0;
+        for (int y = 0; y < S; ++y) {
+            for (int x = 0; x < S; ++x) {
+                gTextureData[offset + y * stride + x] =
+                    ((x + y) % 2) ? (i ? green : red) : blue;
+            }
+        }
+        texture->writePixels(S, (i ? 0 : S), S, S,
+                                texture->config(), gTextureData.get(),
+                                4 * stride);
+        drawContext->drawRect(clip, paint, vm, SkRect::MakeWH(2*S, 2*S));
+    }
 }
 #endif
+