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