/* * Copyright 2013 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #include "include/core/SkString.h" #include "include/gpu/GrBackendSurface.h" #include "include/gpu/GrContextOptions.h" #include "include/gpu/GrRecordingContext.h" #include "include/private/SkTo.h" #include "src/core/SkMathPriv.h" #include "src/gpu/GrClip.h" #include "src/gpu/GrDirectContextPriv.h" #include "src/gpu/GrDrawOpAtlas.h" #include "src/gpu/GrDrawingManager.h" #include "src/gpu/GrGpu.h" #include "src/gpu/GrGpuResourceCacheAccess.h" #include "src/gpu/GrMemoryPool.h" #include "src/gpu/GrRecordingContextPriv.h" #include "src/gpu/GrRenderTargetProxy.h" #include "src/gpu/GrResourceCache.h" #include "src/gpu/GrSemaphore.h" #include "src/gpu/GrTexture.h" #include "src/gpu/SkGr.h" #include "src/gpu/text/GrStrikeCache.h" #include "src/gpu/text/GrTextBlobRedrawCoordinator.h" #include "src/gpu/v1/SurfaceDrawContext_v1.h" #include "src/image/SkImage_Gpu.h" #include ////////////////////////////////////////////////////////////////////////////// #define DRAW_OP_TEST_EXTERN(Op) \ extern GrOp::Owner Op##__Test(GrPaint&&, \ SkRandom*, \ GrRecordingContext*, \ skgpu::v1::SurfaceDrawContext*, \ int) #define DRAW_OP_TEST_ENTRY(Op) Op##__Test DRAW_OP_TEST_EXTERN(AAConvexPathOp); DRAW_OP_TEST_EXTERN(AAFlatteningConvexPathOp); DRAW_OP_TEST_EXTERN(AAHairlineOp); DRAW_OP_TEST_EXTERN(AAStrokeRectOp); DRAW_OP_TEST_EXTERN(AtlasTextOp); DRAW_OP_TEST_EXTERN(ButtCapDashedCircleOp); DRAW_OP_TEST_EXTERN(CircleOp); DRAW_OP_TEST_EXTERN(DashOpImpl); DRAW_OP_TEST_EXTERN(DefaultPathOp); DRAW_OP_TEST_EXTERN(DrawAtlasOp); DRAW_OP_TEST_EXTERN(DIEllipseOp); DRAW_OP_TEST_EXTERN(EllipseOp); DRAW_OP_TEST_EXTERN(FillRectOp); DRAW_OP_TEST_EXTERN(NonAALatticeOp); DRAW_OP_TEST_EXTERN(NonAAStrokeRectOp); DRAW_OP_TEST_EXTERN(RegionOp); DRAW_OP_TEST_EXTERN(RRectOp); DRAW_OP_TEST_EXTERN(ShadowRRectOp); DRAW_OP_TEST_EXTERN(SmallPathOp); DRAW_OP_TEST_EXTERN(TextureOpImpl); DRAW_OP_TEST_EXTERN(TriangulatingPathOp); void GrDrawRandomOp(SkRandom* random, skgpu::v1::SurfaceDrawContext* sdc, GrPaint&& paint) { auto rContext = sdc->recordingContext(); using MakeDrawOpFn = GrOp::Owner (GrPaint&&, SkRandom*, GrRecordingContext*, skgpu::v1::SurfaceDrawContext*, int numSamples); static constexpr MakeDrawOpFn* gFactories[] = { DRAW_OP_TEST_ENTRY(AAConvexPathOp), DRAW_OP_TEST_ENTRY(AAFlatteningConvexPathOp), DRAW_OP_TEST_ENTRY(AAHairlineOp), DRAW_OP_TEST_ENTRY(AAStrokeRectOp), DRAW_OP_TEST_ENTRY(AtlasTextOp), DRAW_OP_TEST_ENTRY(ButtCapDashedCircleOp), DRAW_OP_TEST_ENTRY(CircleOp), DRAW_OP_TEST_ENTRY(DashOpImpl), DRAW_OP_TEST_ENTRY(DefaultPathOp), DRAW_OP_TEST_ENTRY(DrawAtlasOp), DRAW_OP_TEST_ENTRY(DIEllipseOp), DRAW_OP_TEST_ENTRY(EllipseOp), DRAW_OP_TEST_ENTRY(FillRectOp), DRAW_OP_TEST_ENTRY(NonAALatticeOp), DRAW_OP_TEST_ENTRY(NonAAStrokeRectOp), DRAW_OP_TEST_ENTRY(RegionOp), DRAW_OP_TEST_ENTRY(RRectOp), DRAW_OP_TEST_ENTRY(ShadowRRectOp), DRAW_OP_TEST_ENTRY(SmallPathOp), DRAW_OP_TEST_ENTRY(TextureOpImpl), DRAW_OP_TEST_ENTRY(TriangulatingPathOp), }; static constexpr size_t kTotal = SK_ARRAY_COUNT(gFactories); uint32_t index = random->nextULessThan(static_cast(kTotal)); auto op = gFactories[index](std::move(paint), random, rContext, sdc, sdc->numSamples()); // Creating a GrAtlasTextOp my not produce an op if for example, it is totally outside the // render target context. if (op) { sdc->addDrawOp(std::move(op)); } }