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/tools/gpu/GrTest.cpp b/tools/gpu/GrTest.cpp
index 85f25cb..ac03100 100644
--- a/tools/gpu/GrTest.cpp
+++ b/tools/gpu/GrTest.cpp
@@ -53,7 +53,7 @@
#define DRAW_OP_TEST_EXTERN(Op) \
extern GrOp::Owner Op##__Test(GrPaint&&, SkRandom*, \
- GrRecordingContext*, int numSamples)
+ GrRecordingContext*, GrSurfaceDrawContext*, int)
#define DRAW_OP_TEST_ENTRY(Op) Op##__Test
DRAW_OP_TEST_EXTERN(AAConvexPathOp);
@@ -81,7 +81,7 @@
void GrDrawRandomOp(SkRandom* random, GrSurfaceDrawContext* surfaceDrawContext, GrPaint&& paint) {
auto context = surfaceDrawContext->recordingContext();
using MakeDrawOpFn = GrOp::Owner (GrPaint&&, SkRandom*,
- GrRecordingContext*, int numSamples);
+ GrRecordingContext*, GrSurfaceDrawContext*, int numSamples);
static constexpr MakeDrawOpFn* gFactories[] = {
DRAW_OP_TEST_ENTRY(AAConvexPathOp),
DRAW_OP_TEST_ENTRY(AAFlatteningConvexPathOp),
@@ -108,8 +108,11 @@
static constexpr size_t kTotal = SK_ARRAY_COUNT(gFactories);
uint32_t index = random->nextULessThan(static_cast<uint32_t>(kTotal));
- auto op = gFactories[index](
- std::move(paint), random, context, surfaceDrawContext->numSamples());
+ auto op = gFactories[index](std::move(paint),
+ random,
+ context,
+ surfaceDrawContext,
+ surfaceDrawContext->numSamples());
// Creating a GrAtlasTextOp my not produce an op if for example, it is totally outside the
// render target context.