put an arena on GrRenderTargetProxy

This is a reland of 5a2de5e72f24d1bfbdc532252be3dcdefa7b75a2

This is part one of two CLs. In this CL, I put a
sk_sp<GrArenas> on GrRenderTargetProxy where GrArenas wraps
a SkArenaAlloc to add ref counting. Creating
a GrOpsTask shares the GrArenas with the ops task. When an
GrOpsTask is destroyed, it nulls out the fArenas sk_sp on
the GrRenderTargetProxy to limit the life span of the arenas.

New plumbing was added to GR_DRAW_OP_TEST_DEFINE to allow a
proper GrSurfaceDrawContext to be passed to GrAtlasTextOp's
GR_DRAW_OP_TEST_DEFINE so the arena will have a proper lifetime.

The second CL will work on replacing GrOpsTask's fAllocators
system with the shared arena.

Change-Id: Ieb568e4533c17e31b3b015e7781365d7d898c483
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/396818
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Herb Derby <herb@google.com>
diff --git a/src/gpu/ops/GrAtlasTextOp.cpp b/src/gpu/ops/GrAtlasTextOp.cpp
index 2553c95..4efb410 100644
--- a/src/gpu/ops/GrAtlasTextOp.cpp
+++ b/src/gpu/ops/GrAtlasTextOp.cpp
@@ -112,14 +112,18 @@
                                           SkPoint drawOrigin,
                                           SkIRect clipRect,
                                           sk_sp<GrTextBlob> blob,
-                                          const SkPMColor4f& color) -> Geometry* {
-    return new Geometry{subRun,
-                        drawMatrix,
-                        drawOrigin,
-                        clipRect,
-                        std::move(blob),
-                        nullptr,
-                        color};
+                                          const SkPMColor4f& color,
+                                          SkArenaAlloc* alloc) -> Geometry* {
+    // Bypass the automatic dtor behavior in SkArenaAlloc. I'm leaving this up to the Op to run
+    // all geometry dtors for now.
+    void* geo = alloc->makeBytesAlignedTo(sizeof(Geometry), alignof(Geometry));
+    return new(geo) Geometry{subRun,
+                             drawMatrix,
+                             drawOrigin,
+                             clipRect,
+                             std::move(blob),
+                             nullptr,
+                             color};
 }
 
 void GrAtlasTextOp::Geometry::fillVertexData(void *dst, int offset, int count) const {
@@ -522,10 +526,6 @@
 }
 
 GR_DRAW_OP_TEST_DEFINE(GrAtlasTextOp) {
-    // Setup dummy SkPaint / GrPaint / GrSurfaceDrawContext
-    auto rtc = GrSurfaceDrawContext::Make(
-            context, GrColorType::kRGBA_8888, nullptr, SkBackingFit::kApprox, {1024, 1024});
-
     SkSimpleMatrixProvider matrixProvider(GrTest::TestMatrixInvertible(random));
 
     SkPaint skPaint;
@@ -548,8 +548,7 @@
     int xInt = (random->nextU() % kMaxTrans) * xPos;
     int yInt = (random->nextU() % kMaxTrans) * yPos;
 
-    return GrAtlasTextOp::CreateOpTestingOnly(
-            rtc.get(), skPaint, font, matrixProvider, text, xInt, yInt);
+    return GrAtlasTextOp::CreateOpTestingOnly(sdc, skPaint, font, matrixProvider, text, xInt, yInt);
 }
 
 #endif