Migrate uses of deferred proxies to lazy proxies

A follow-up CL removes the deferred proxies system entirely.

Bug: skia:11288
Change-Id: Ic5b3ce820ea946f6ae27bd763c0f389caf8863d1
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/366716
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Adlai Holler <adlai@google.com>
diff --git a/src/gpu/GrSoftwarePathRenderer.cpp b/src/gpu/GrSoftwarePathRenderer.cpp
index e4dc789..0f43d27 100644
--- a/src/gpu/GrSoftwarePathRenderer.cpp
+++ b/src/gpu/GrSoftwarePathRenderer.cpp
@@ -173,27 +173,10 @@
                   dstRect, invert);
 }
 
-static GrSurfaceProxyView make_deferred_mask_texture_view(GrRecordingContext* context,
-                                                          SkBackingFit fit,
-                                                          SkISize dimensions) {
-    GrProxyProvider* proxyProvider = context->priv().proxyProvider();
-    const GrCaps* caps = context->priv().caps();
-
-    const GrBackendFormat format = caps->getDefaultBackendFormat(GrColorType::kAlpha_8,
-                                                                 GrRenderable::kNo);
-
-    GrSwizzle swizzle = caps->getReadSwizzle(format, GrColorType::kAlpha_8);
-
-    auto proxy =
-            proxyProvider->createProxy(format, dimensions, GrRenderable::kNo, 1, GrMipmapped::kNo,
-                                       fit, SkBudgeted::kYes, GrProtected::kNo);
-    return {std::move(proxy), kTopLeft_GrSurfaceOrigin, swizzle};
-}
-
 namespace {
 
 /**
- * Payload class for use with GrTDeferredProxyUploader. The software path renderer only draws
+ * Payload class for use with GrSWMaskHelper. The software path renderer only draws
  * a single path into the mask texture. This stores all of the information needed by the worker
  * thread's call to drawShape (see below, in onDrawPath).
  */
@@ -207,7 +190,7 @@
             , fAA(aa) {}
 
     const SkIRect& getMaskBounds() const { return fMaskBounds; }
-    const SkMatrix* getViewMatrix() const { return &fViewMatrix; }
+    const SkMatrix& getViewMatrix() const { return fViewMatrix; }
     const GrStyledShape& getShape() const { return fShape; }
     GrAA getAA() const { return fAA; }
 
@@ -326,44 +309,15 @@
     if (!view) {
         SkBackingFit fit = useCache ? SkBackingFit::kExact : SkBackingFit::kApprox;
         GrAA aa = GrAA(GrAAType::kCoverage == args.fAAType);
-
-        SkTaskGroup* taskGroup = nullptr;
-        if (auto direct = args.fContext->asDirectContext()) {
-            taskGroup = direct->priv().getTaskGroup();
-        }
-
-        if (taskGroup) {
-            view = make_deferred_mask_texture_view(args.fContext, fit, boundsForMask->size());
-            if (!view) {
-                return false;
-            }
-
-            auto uploader = std::make_unique<GrTDeferredProxyUploader<SoftwarePathData>>(
-                    *boundsForMask, *args.fViewMatrix, *args.fShape, aa);
-            GrTDeferredProxyUploader<SoftwarePathData>* uploaderRaw = uploader.get();
-
-            auto drawAndUploadMask = [uploaderRaw] {
-                TRACE_EVENT0("skia.gpu", "Threaded SW Mask Render");
-                GrSWMaskHelper helper(uploaderRaw->getPixels());
-                if (helper.init(uploaderRaw->data().getMaskBounds())) {
-                    helper.drawShape(uploaderRaw->data().getShape(),
-                                     *uploaderRaw->data().getViewMatrix(),
-                                     SkRegion::kReplace_Op, uploaderRaw->data().getAA(), 0xFF);
-                } else {
-                    SkDEBUGFAIL("Unable to allocate SW mask.");
-                }
-                uploaderRaw->signalAndFreeData();
-            };
-            taskGroup->add(std::move(drawAndUploadMask));
-            view.asTextureProxy()->texPriv().setDeferredUploader(std::move(uploader));
-        } else {
-            GrSWMaskHelper helper;
-            if (!helper.init(*boundsForMask)) {
-                return false;
-            }
-            helper.drawShape(*args.fShape, *args.fViewMatrix, SkRegion::kReplace_Op, aa, 0xFF);
-            view = helper.toTextureView(args.fContext, fit);
-        }
+        SoftwarePathData data(*boundsForMask, *args.fViewMatrix, *args.fShape, aa);
+        view = GrSWMaskHelper::MakeTexture(data.getMaskBounds(),
+                                           args.fContext,
+                                           fit,
+                                           [data{std::move(data)}](GrSWMaskHelper* helper) {
+            TRACE_EVENT0("skia.gpu", "SW Mask Render");
+            helper->drawShape(data.getShape(), data.getViewMatrix(), SkRegion::kReplace_Op,
+                              data.getAA(), 0xFF);
+        });
 
         if (!view) {
             return false;