1 /*
2  * Copyright (c) 2024 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "testcasefactory.h"
17 
18 #include "dm/aa_rect_modes.h"
19 #include "dm/add_arc.h"
20 #include "dm/alpha_gradients.h"
21 #include "dm/alpha_image.h"
22 #include "dm/anisotropic.h"
23 #include "dm/arcofzorro.h"
24 #include "dm/bitmaprect.h"
25 #include "dm/blur_circles.h"
26 #include "dm/blur_large_rrects.h"
27 #include "dm/bugfix7792.h"
28 #include "dm/circular_arcs.h"
29 #include "dm/clip_cubic.h"
30 #include "dm/clipped_cubic.h"
31 #include "dm/conic_paths.h"
32 #include "dm/convex_paths.h"
33 #include "dm/dashing.h"
34 #include "dm/drawbitmaprect.h"
35 #include "dm/fill_types_persp.h"
36 #include "dm/filltypes.h"
37 #include "dm/font_regen.h"
38 #include "dm/gradient_dirty_laundry.h"
39 #include "dm/largeclippedpath.h"
40 #include "dm/luma_filter.h"
41 #include "dm/newsurface.h"
42 #include "dm/onebadarc.h"
43 #include "dm/path_interior.h"
44 #include "dm/points.h"
45 #include "dm/points_mask_filter.h"
46 #include "dm/shadowutils.h"
47 #include "dm/skbug_8955.h"
48 #include "dm/stroke_rect_shader.h"
49 #include "dm/strokes.h"
50 #include "interface/bitmap_test.h"
51 #include "interface/brush_test.h"
52 #include "interface/canvas_test.h"
53 #include "interface/color_test.h"
54 #include "interface/font_test.h"
55 #include "interface/mask_filter_test.h"
56 #include "interface/matrix_test.h"
57 #include "interface/memory_stream_test.h"
58 #include "interface/path_test.h"
59 #include "interface/pen_test.h"
60 #include "interface/sample_option_test.h"
61 #include "interface/shader_effect_test.h"
62 #include "interface/surface_test.h"
63 #include "interface/text_blob_test.h"
64 #include "interface/typeface_test.h"
65 
66 #include "common/log_common.h"
67 
68 namespace {
69 std::unordered_map<std::string, std::function<std::shared_ptr<TestBase>()>> FunctionalCpuMap = {
70     // DM
__anonec8024be0202() 71     { "aarectmodes", []() -> std::shared_ptr<TestBase> { return std::make_shared<AARectModes>(); } },
__anonec8024be0302() 72     { "blurcircles", []() -> std::shared_ptr<TestBase> { return std::make_shared<BlurCircles>(); } },
__anonec8024be0402() 73     { "blur_large_rrects", []() -> std::shared_ptr<TestBase> { return std::make_shared<BlurLargeRrects>(); } },
__anonec8024be0502() 74     { "addarc_meas", []() -> std::shared_ptr<TestBase> { return std::make_shared<AddArcMeas>(); } },
__anonec8024be0602() 75     { "addarc", []() -> std::shared_ptr<TestBase> { return std::make_shared<AddArc>(); } },
76     { "badapple",
__anonec8024be0702() 77         []() -> std::shared_ptr<TestBase> { return std::make_shared<BadApple>(); } }, // 字体相关问题,函数缺失
__anonec8024be0802() 78     { "alpha_image_alpha_tint", []() -> std::shared_ptr<TestBase> { return std::make_shared<AlphaImageAlphaTint>(); } },
79     { "shadowutils",
__anonec8024be0902() 80         []() -> std::shared_ptr<TestBase> {
81             return std::make_shared<ShadowUtils>(ShadowUtils::K_NO_OCCLUDERS);
82         } }, // maprect 接口计算不对
83     { "shadowutils_occl",
__anonec8024be0a02() 84         []() -> std::shared_ptr<TestBase> {
85             return std::make_shared<ShadowUtils>(ShadowUtils::K_OCCLUDERS);
86         } }, // maprect 接口计算不对
87     { "shadowutils_gray",
__anonec8024be0b02() 88         []() -> std::shared_ptr<TestBase> {
89             return std::make_shared<ShadowUtils>(ShadowUtils::K_GRAY_SCALE);
90         } }, // maprect 接口计算不对
91     { "circular_arc_stroke_matrix",
__anonec8024be0c02() 92         []() -> std::shared_ptr<TestBase> { return std::make_shared<CircularArcStrokeMatrix>(); } },
__anonec8024be0d02() 93     { "clippedcubic", []() -> std::shared_ptr<TestBase> { return std::make_shared<ClippedCubic>(); } },
94     { "largeclippedpath_winding",
__anonec8024be0e02() 95         []() -> std::shared_ptr<TestBase> { return std::make_shared<LargeClippedPath>(PATH_FILL_TYPE_WINDING); } },
96     { "largeclippedpath_evenodd",
__anonec8024be0f02() 97         []() -> std::shared_ptr<TestBase> { return std::make_shared<LargeClippedPath>(PATH_FILL_TYPE_EVEN_ODD); } },
__anonec8024be1002() 98     { "filltypes", []() -> std::shared_ptr<TestBase> { return std::make_shared<FillType>(); } },
__anonec8024be1102() 99     { "dashing", []() -> std::shared_ptr<TestBase> { return std::make_shared<Dashing>(); } },
__anonec8024be1202() 100     { "pathinterior", []() -> std::shared_ptr<TestBase> { return std::make_shared<PathInterior>(); } },
__anonec8024be1302() 101     { "dashing2", []() -> std::shared_ptr<TestBase> { return std::make_shared<Dashing2>(); } },
__anonec8024be1402() 102     { "alphagradients", []() -> std::shared_ptr<TestBase> { return std::make_shared<AlphaGradients>(); } },
__anonec8024be1502() 103     { "dashing4", []() -> std::shared_ptr<TestBase> { return std::make_shared<Dashing4>(); } },
__anonec8024be1602() 104     { "convexpaths", []() -> std::shared_ptr<TestBase> { return std::make_shared<ConvexPaths>(); } },
105     { "gradient_dirty_laundry",
__anonec8024be1702() 106         []() -> std::shared_ptr<TestBase> { return std::make_shared<Gradients>(); } }, // 内部形状和颜色差异较大
__anonec8024be1802() 107     { "arcofzorro", []() -> std::shared_ptr<TestBase> { return std::make_shared<ArcOfZorro>(); } },
__anonec8024be1902() 108     { "stroke_rect_shader", []() -> std::shared_ptr<TestBase> { return std::make_shared<StrokeRectShader>(); } },
109     { "lumafilter",
__anonec8024be1a02() 110         []() -> std::shared_ptr<TestBase> { return std::make_shared<LumaFilter>(); } }, // 字体粗细、位置有差异
111     { "points_maskfilter",
__anonec8024be1b02() 112         []() -> std::shared_ptr<TestBase> {
113             return std::make_shared<PointsMaskFilter>();
114         } }, // drawpoints argb参数存在部分偏差
__anonec8024be1c02() 115     { "clipcubic", []() -> std::shared_ptr<TestBase> { return std::make_shared<ClipCubic>(); } },
__anonec8024be1d02() 116     { "filltypespersp", []() -> std::shared_ptr<TestBase> { return std::make_shared<FillTypePersp>(); } },
__anonec8024be1e02() 117     { "strokes_poly", []() -> std::shared_ptr<TestBase> { return std::make_shared<Strokes2>(); } },
__anonec8024be1f02() 118     { "bug7792", []() -> std::shared_ptr<TestBase> { return std::make_shared<BugFix7792>(); } },
__anonec8024be2002() 119     { "points", []() -> std::shared_ptr<TestBase> { return std::make_shared<Points>(); } },
120     { "alpha_image",
__anonec8024be2102() 121         []() -> std::shared_ptr<TestBase> { return std::make_shared<AlphaImage>(); } }, // 第二个三角形虚化不对
122     { "conicpaths",
__anonec8024be2202() 123         []() -> std::shared_ptr<TestBase> {
124             return std::make_shared<ConicPaths>();
125         } }, // 有部分线条cpu出图部分缺失,gpu正常出图,颜色为黑色
126     { "onebadarc",
__anonec8024be2302() 127         []() -> std::shared_ptr<TestBase> { return std::make_shared<OneBadArc>(); } }, // 完全按照逻辑所画出的图形不一致
128     { "skbug_8955",
__anonec8024be2402() 129         []() -> std::shared_ptr<TestBase> {
130             return std::make_shared<SkBug8955>();
131         } }, // font.textToGlyphs、font.getPos接口缺失
__anonec8024be2502() 132     { "surfacenew", []() -> std::shared_ptr<TestBase> { return std::make_shared<NewSurfaceGM>(); } },
133     { "bitmaprect",
__anonec8024be2602() 134         []() -> std::shared_ptr<TestBase> {
135             return std::make_shared<DrawBitmapRect2>();
136         } }, // OH_Drawing_CanvasDrawRect接口有问题内部逻辑并未用画笔而是用画刷
__anonec8024be2702() 137     { "bigbitmaprect", []() -> std::shared_ptr<TestBase> { return std::make_shared<DrawBitmapRect4>(false); } },
138     { "anisotropic_hq",
__anonec8024be2802() 139         []() -> std::shared_ptr<TestBase> {
140             return std::make_shared<Anisotropic>();
141         } }, // 该用例OH_Drawing_SamplingOptionsCreate接口mode对应内容未开放,无法实现
142 };
143 
144 std::unordered_map<std::string, std::function<std::shared_ptr<TestBase>()>> PerformanceCpuMap = {
145 
146     // interface canvas
147     { "canvas_drawrect",
__anonec8024be2902() 148         []() -> std::shared_ptr<TestBase> { return std::make_shared<CanvasDrawRect>(TestBase::DRAW_STYLE_COMPLEX); } },
149     { "canvas_rotate",
__anonec8024be2a02() 150         []() -> std::shared_ptr<TestBase> { return std::make_shared<CanvasRotate>(TestBase::DRAW_STYLE_COMPLEX); } },
151     { "canvas_drawimagerect",
__anonec8024be2b02() 152         []() -> std::shared_ptr<TestBase> {
153             return std::make_shared<CanvasDrawImageRect>(TestBase::DRAW_STYLE_COMPLEX);
154         } },
155     { "canvas_translate",
__anonec8024be2c02() 156         []() -> std::shared_ptr<TestBase> { return std::make_shared<CanvasTranslate>(TestBase::DRAW_STYLE_COMPLEX); } },
157     { "canvas_scale",
__anonec8024be2d02() 158         []() -> std::shared_ptr<TestBase> { return std::make_shared<CanvasScale>(TestBase::DRAW_STYLE_COMPLEX); } },
159     { "canvas_clear",
__anonec8024be2e02() 160         []() -> std::shared_ptr<TestBase> { return std::make_shared<CanvasClear>(TestBase::DRAW_STYLE_COMPLEX); } },
161     { "canvas_setmatrix",
__anonec8024be2f02() 162         []() -> std::shared_ptr<TestBase> { return std::make_shared<CanvasSetMatrix>(TestBase::DRAW_STYLE_COMPLEX); } },
163     { "canvas_resetmatrix",
__anonec8024be3002() 164         []() -> std::shared_ptr<TestBase> {
165             return std::make_shared<CanvasResetMatrix>(TestBase::DRAW_STYLE_COMPLEX);
166         } },
167     { "canvas_readpixels",
__anonec8024be3102() 168         []() -> std::shared_ptr<TestBase> {
169             return std::make_shared<CanvasReadPixels>(TestBase::DRAW_STYLE_COMPLEX);
170         } },
171     { "canvas_readpixelstobitmap",
__anonec8024be3202() 172         []() -> std::shared_ptr<TestBase> {
173             return std::make_shared<CanvasReadPixelsToBitmap>(TestBase::DRAW_STYLE_COMPLEX);
174         } },
175     { "canvas_drawimagerectwithsrc",
__anonec8024be3302() 176         []() -> std::shared_ptr<TestBase> {
177             return std::make_shared<CanvasDrawImageRectWithSrc>(TestBase::DRAW_STYLE_COMPLEX);
178         } },
179     { "canvas_drawshadow",
__anonec8024be3402() 180         []() -> std::shared_ptr<TestBase> {
181             return std::make_shared<CanvasDrawShadow>(TestBase::DRAW_STYLE_COMPLEX);
182         } },
183     { "canvas_skew",
__anonec8024be3502() 184         []() -> std::shared_ptr<TestBase> { return std::make_shared<CanvasSkew>(TestBase::DRAW_STYLE_COMPLEX); } },
185     { "canvas_drawvertices",
__anonec8024be3602() 186         []() -> std::shared_ptr<TestBase> {
187             return std::make_shared<CanvasDrawVertices>(TestBase::DRAW_STYLE_COMPLEX);
188         } },
189     { "canvas_drawbitmaprect",
__anonec8024be3702() 190         []() -> std::shared_ptr<TestBase> {
191             return std::make_shared<CanvasDrawBitmapRect>(TestBase::DRAW_STYLE_COMPLEX);
192         } },
193     { "canvas_drawcircle",
__anonec8024be3802() 194         []() -> std::shared_ptr<TestBase> {
195             return std::make_shared<CanvasDrawCircle>(TestBase::DRAW_STYLE_COMPLEX);
196         } },
197     { "canvas_drawoval",
__anonec8024be3902() 198         []() -> std::shared_ptr<TestBase> { return std::make_shared<CanvasDrawOval>(TestBase::DRAW_STYLE_COMPLEX); } },
199     { "canvas_drawarc",
__anonec8024be3a02() 200         []() -> std::shared_ptr<TestBase> { return std::make_shared<CanvasDrawArc>(TestBase::DRAW_STYLE_COMPLEX); } },
201     { "canvas_drawroundrect",
__anonec8024be3b02() 202         []() -> std::shared_ptr<TestBase> {
203             return std::make_shared<CanvasDrawRoundRect>(TestBase::DRAW_STYLE_COMPLEX);
204         } },
205     { "canvas_drawtextblob",
__anonec8024be3c02() 206         []() -> std::shared_ptr<TestBase> {
207             return std::make_shared<CanvasDrawTextBlob>(TestBase::DRAW_STYLE_COMPLEX);
208         } },
209     { "canvas_drawcliprect",
__anonec8024be3d02() 210         []() -> std::shared_ptr<TestBase> { return std::make_shared<CanvasClipRect>(TestBase::DRAW_STYLE_COMPLEX); } },
211     { "canvas_drawcliproundrect",
__anonec8024be3e02() 212         []() -> std::shared_ptr<TestBase> {
213             return std::make_shared<CanvasClipRoundRect>(TestBase::DRAW_STYLE_COMPLEX);
214         } },
215     { "canvas_drawclippath",
__anonec8024be3f02() 216         []() -> std::shared_ptr<TestBase> { return std::make_shared<CanvasClipPath>(TestBase::DRAW_STYLE_COMPLEX); } },
217     { "canvas_drawpath",
__anonec8024be4002() 218         []() -> std::shared_ptr<TestBase> { return std::make_shared<CanvasDrawPath>(TestBase::DRAW_STYLE_COMPLEX); } },
219     { "canvas_drawbitmap",
__anonec8024be4102() 220         []() -> std::shared_ptr<TestBase> {
221             return std::make_shared<CanvasDrawBitmap>(TestBase::DRAW_STYLE_COMPLEX);
222         } },
223     { "canvas_drawlayer",
__anonec8024be4202() 224         []() -> std::shared_ptr<TestBase> { return std::make_shared<CanvasDrawLayer>(TestBase::DRAW_STYLE_COMPLEX); } },
225     { "canvas_drawpoints",
__anonec8024be4302() 226         []() -> std::shared_ptr<TestBase> {
227             return std::make_shared<CanvasDrawPoints>(TestBase::DRAW_STYLE_COMPLEX);
228         } },
229     { "canvas_drawline",
__anonec8024be4402() 230         []() -> std::shared_ptr<TestBase> { return std::make_shared<CanvasDrawLine>(TestBase::DRAW_STYLE_COMPLEX); } },
231     { "canvas_drawbackground",
__anonec8024be4502() 232         []() -> std::shared_ptr<TestBase> {
233             return std::make_shared<CanvasDrawBackground>(TestBase::DRAW_STYLE_COMPLEX);
234         } },
235     { "canvas_drawregion",
__anonec8024be4602() 236         []() -> std::shared_ptr<TestBase> {
237             return std::make_shared<CanvasDrawRegion>(TestBase::DRAW_STYLE_COMPLEX);
238         } },
239     { "canvas_restoretocount",
__anonec8024be4702() 240         []() -> std::shared_ptr<TestBase> {
241             return std::make_shared<CanvasRestoreToCount>(TestBase::DRAW_STYLE_COMPLEX);
242         } },
243     { "canvas_save",
__anonec8024be4802() 244         []() -> std::shared_ptr<TestBase> { return std::make_shared<CanvasSave>(TestBase::DRAW_STYLE_COMPLEX); } },
245     { "canvas_drawpixelmaprect",
__anonec8024be4902() 246         []() -> std::shared_ptr<TestBase> {
247             return std::make_shared<CanvasDrawPixelMapRect>(TestBase::DRAW_STYLE_COMPLEX);
248         } }, // OH_PixelMap_CreatePixelMap传入参数napi_env env无法获取,无法实现
249     { "canvas_gettotalmatrix",
__anonec8024be4a02() 250         []() -> std::shared_ptr<TestBase> {
251             return std::make_shared<CanvasGetTotalMatrix>(TestBase::DRAW_STYLE_COMPLEX);
252         } },
253     { "canvas_restore",
__anonec8024be4b02() 254         []() -> std::shared_ptr<TestBase> { return std::make_shared<CanvasRestore>(TestBase::DRAW_STYLE_COMPLEX); } },
255     { "canvas_getlocalclipbounds",
__anonec8024be4c02() 256         []() -> std::shared_ptr<TestBase> {
257             return std::make_shared<CanvasGetLocalClipBounds>(TestBase::DRAW_STYLE_COMPLEX);
258         } },
259     { "canvas_getsavecount",
__anonec8024be4d02() 260         []() -> std::shared_ptr<TestBase> {
261             return std::make_shared<CanvasGetSaveCount>(TestBase::DRAW_STYLE_COMPLEX);
262         } },
263     { "canvas_getheight",
__anonec8024be4e02() 264         []() -> std::shared_ptr<TestBase> { return std::make_shared<CanvasGetHeight>(TestBase::DRAW_STYLE_COMPLEX); } },
265     { "canvas_getwidth",
__anonec8024be4f02() 266         []() -> std::shared_ptr<TestBase> { return std::make_shared<CanvasGetWidth>(TestBase::DRAW_STYLE_COMPLEX); } },
267 
268     // path
269     { "path_create",
__anonec8024be5002() 270         []() -> std::shared_ptr<TestBase> { return std::make_shared<PathCreate>(TestBase::DRAW_STYLE_COMPLEX); } },
271     { "path_lineto",
__anonec8024be5102() 272         []() -> std::shared_ptr<TestBase> { return std::make_shared<PathLineTo>(TestBase::DRAW_STYLE_COMPLEX); } },
273     { "path_arcto",
__anonec8024be5202() 274         []() -> std::shared_ptr<TestBase> { return std::make_shared<PathArcTo>(TestBase::DRAW_STYLE_COMPLEX); } },
275     { "path_quadto",
__anonec8024be5302() 276         []() -> std::shared_ptr<TestBase> { return std::make_shared<PathQuadTo>(TestBase::DRAW_STYLE_COMPLEX); } },
277     { "path_copy",
__anonec8024be5402() 278         []() -> std::shared_ptr<TestBase> { return std::make_shared<PathCopy>(TestBase::DRAW_STYLE_COMPLEX); } },
279     { "path_effectcreatedashpatheffect",
__anonec8024be5502() 280         []() -> std::shared_ptr<TestBase> {
281             return std::make_shared<PathEffectCreateDashPathEffect>(TestBase::DRAW_STYLE_COMPLEX);
282         } },
283     { "path_addovalwithinitialpoint",
__anonec8024be5602() 284         []() -> std::shared_ptr<TestBase> {
285             return std::make_shared<PathAddOvalWithInitialPoint>(TestBase::DRAW_STYLE_COMPLEX);
286         } },
287     { "path_addarc",
__anonec8024be5702() 288         []() -> std::shared_ptr<TestBase> { return std::make_shared<PathAddArc>(TestBase::DRAW_STYLE_COMPLEX); } },
289     { "path_addpathwithmatrixandmode",
__anonec8024be5802() 290         []() -> std::shared_ptr<TestBase> {
291             return std::make_shared<PathAddPathWithMatrixAndMode>(TestBase::DRAW_STYLE_COMPLEX);
292         } },
293     { "path_conicto",
__anonec8024be5902() 294         []() -> std::shared_ptr<TestBase> { return std::make_shared<PathConicTo>(TestBase::DRAW_STYLE_COMPLEX); } },
295     { "path_transformwithclip",
__anonec8024be5a02() 296         []() -> std::shared_ptr<TestBase> {
297             return std::make_shared<PathTransformWithPerspectiveClip>(TestBase::DRAW_STYLE_COMPLEX, false);
298         } },
299     { "path_setfilltype",
__anonec8024be5b02() 300         []() -> std::shared_ptr<TestBase> {
301             return std::make_shared<PathSetFillType>(
302                 TestBase::DRAW_STYLE_COMPLEX, OH_Drawing_PathFillType::PATH_FILL_TYPE_WINDING);
303         } },
304     { "path_getlength",
__anonec8024be5c02() 305         []() -> std::shared_ptr<TestBase> {
306             return std::make_shared<PathGetLength>(TestBase::DRAW_STYLE_COMPLEX, true);
307         } },
308     { "path_close",
__anonec8024be5d02() 309         []() -> std::shared_ptr<TestBase> { return std::make_shared<PathClose>(TestBase::DRAW_STYLE_COMPLEX); } },
310     { "path_offset",
__anonec8024be5e02() 311         []() -> std::shared_ptr<TestBase> { return std::make_shared<PathOffset>(TestBase::DRAW_STYLE_COMPLEX); } },
312     { "path_reset",
__anonec8024be5f02() 313         []() -> std::shared_ptr<TestBase> { return std::make_shared<PathReset>(TestBase::DRAW_STYLE_COMPLEX); } },
314     { "path_transform",
__anonec8024be6002() 315         []() -> std::shared_ptr<TestBase> { return std::make_shared<PathTransform>(TestBase::DRAW_STYLE_COMPLEX); } },
316     { "path_addoval",
__anonec8024be6102() 317         []() -> std::shared_ptr<TestBase> { return std::make_shared<PathAddOval>(TestBase::DRAW_STYLE_COMPLEX); } },
318     { "path_contain",
__anonec8024be6202() 319         []() -> std::shared_ptr<TestBase> { return std::make_shared<PathContains>(TestBase::DRAW_STYLE_COMPLEX); } },
320     { "path_cubicto",
__anonec8024be6302() 321         []() -> std::shared_ptr<TestBase> { return std::make_shared<PathCubicTo>(TestBase::DRAW_STYLE_COMPLEX); } },
322     { "path_rmoveto",
__anonec8024be6402() 323         []() -> std::shared_ptr<TestBase> { return std::make_shared<PathRMoveTo>(TestBase::DRAW_STYLE_COMPLEX); } },
324     { "path_rlineto",
__anonec8024be6502() 325         []() -> std::shared_ptr<TestBase> { return std::make_shared<PathRLineTo>(TestBase::DRAW_STYLE_COMPLEX); } },
326     { "path_rquadto",
__anonec8024be6602() 327         []() -> std::shared_ptr<TestBase> { return std::make_shared<PathRQuadTo>(TestBase::DRAW_STYLE_COMPLEX); } },
328     { "path_rconicto",
__anonec8024be6702() 329         []() -> std::shared_ptr<TestBase> { return std::make_shared<PathRConicTo>(TestBase::DRAW_STYLE_COMPLEX); } },
330     { "path_rcubicto",
__anonec8024be6802() 331         []() -> std::shared_ptr<TestBase> { return std::make_shared<PathRCubicTo>(TestBase::DRAW_STYLE_COMPLEX); } },
332     { "path_addrect",
__anonec8024be6902() 333         []() -> std::shared_ptr<TestBase> { return std::make_shared<PathAddRect>(TestBase::DRAW_STYLE_COMPLEX); } },
334     { "path_addrect_withcorner",
__anonec8024be6a02() 335         []() -> std::shared_ptr<TestBase> {
336             return std::make_shared<PathAddRectWithInitialCorner>(TestBase::DRAW_STYLE_COMPLEX);
337         } },
338     { "path_addroundrect",
__anonec8024be6b02() 339         []() -> std::shared_ptr<TestBase> {
340             return std::make_shared<PathAddRoundRect>(TestBase::DRAW_STYLE_COMPLEX);
341         } },
342     { "path_addpath",
__anonec8024be6c02() 343         []() -> std::shared_ptr<TestBase> { return std::make_shared<PathAddPath>(TestBase::DRAW_STYLE_COMPLEX); } },
344     { "path_addpathwithmode",
__anonec8024be6d02() 345         []() -> std::shared_ptr<TestBase> {
346             return std::make_shared<PathAddPathWithMode>(
347                 TestBase::DRAW_STYLE_COMPLEX, OH_Drawing_PathAddMode::PATH_ADD_MODE_APPEND);
348         } },
349     { "path_addpathwithoffsetmode",
__anonec8024be6e02() 350         []() -> std::shared_ptr<TestBase> {
351             return std::make_shared<PathAddPathWithOffsetAndMode>(
352                 TestBase::DRAW_STYLE_COMPLEX, OH_Drawing_PathAddMode::PATH_ADD_MODE_APPEND);
353         } },
354 
355     // textblob
356     { "textblob_createbuilder",
__anonec8024be6f02() 357         []() -> std::shared_ptr<TestBase> {
358             return std::make_shared<TextBlobBuilderCreate>(TestBase::DRAW_STYLE_COMPLEX);
359         } },
360     { "textblob_createfrom_text",
__anonec8024be7002() 361         []() -> std::shared_ptr<TestBase> {
362             return std::make_shared<TextBlobCreateFromText>(TestBase::DRAW_STYLE_COMPLEX);
363         } },
364     { "textblob_createfrom_postext",
__anonec8024be7102() 365         []() -> std::shared_ptr<TestBase> {
366             return std::make_shared<TextBlobCreateFromPosText>(TestBase::DRAW_STYLE_COMPLEX);
367         } },
368     { "textblob_createfrom_string",
__anonec8024be7202() 369         []() -> std::shared_ptr<TestBase> {
370             return std::make_shared<TextBlobCreateFromString>(TestBase::DRAW_STYLE_COMPLEX);
371         } },
372     { "textblob_getbounds",
__anonec8024be7302() 373         []() -> std::shared_ptr<TestBase> {
374             return std::make_shared<TextBlobGetBounds>(TestBase::DRAW_STYLE_COMPLEX);
375         } },
376     { "textblob_builderallocrunpos",
__anonec8024be7402() 377         []() -> std::shared_ptr<TestBase> {
378             return std::make_shared<TextBlobBuilderAllocRunPos>(TestBase::DRAW_STYLE_COMPLEX);
379         } },
380 
381     // shader_effect
382     { "shader_effectcreatelineargradient",
__anonec8024be7502() 383         []() -> std::shared_ptr<TestBase> {
384             return std::make_shared<ShaderEffectCreateLinearGradient>(TestBase::DRAW_STYLE_COMPLEX);
385         } },
386     { "shader_effectcreateradialgradient",
__anonec8024be7602() 387         []() -> std::shared_ptr<TestBase> {
388             return std::make_shared<ShaderEffectCreateRadialGradient>(TestBase::DRAW_STYLE_COMPLEX);
389         } },
390     { "shader_effectcreateimageshader",
__anonec8024be7702() 391         []() -> std::shared_ptr<TestBase> {
392             return std::make_shared<ShaderEffectCreateImageShader>(TestBase::DRAW_STYLE_COMPLEX);
393         } },
394     { "shader_effectcreatesweepgradient",
__anonec8024be7802() 395         []() -> std::shared_ptr<TestBase> {
396             return std::make_shared<ShaderEffectCreateSweepGradient>(TestBase::DRAW_STYLE_COMPLEX);
397         } },
398 
399     // typeface
400     { "typeface_createdefault",
__anonec8024be7902() 401         []() -> std::shared_ptr<TestBase> {
402             return std::make_shared<TypefaceCreateDefault>(TestBase::DRAW_STYLE_COMPLEX);
403         } },
404     { "typeface_createfromfile",
__anonec8024be7a02() 405         []() -> std::shared_ptr<TestBase> {
406             return std::make_shared<TypefaceCreateFromFile>(TestBase::DRAW_STYLE_COMPLEX);
407         } },
408     { "typeface_createfromstream",
__anonec8024be7b02() 409         []() -> std::shared_ptr<TestBase> {
410             return std::make_shared<TypefaceCreateFromStream>(TestBase::DRAW_STYLE_COMPLEX);
411         } },
412 
413     // matrix
414     { "matrix_reset",
__anonec8024be7c02() 415         []() -> std::shared_ptr<TestBase> { return std::make_shared<MatrixReset>(TestBase::DRAW_STYLE_COMPLEX); } },
416     { "matrix_concat",
__anonec8024be7d02() 417         []() -> std::shared_ptr<TestBase> { return std::make_shared<MatrixConcat>(TestBase::DRAW_STYLE_COMPLEX); } },
418     { "matrix_invert",
__anonec8024be7e02() 419         []() -> std::shared_ptr<TestBase> { return std::make_shared<MatrixInvert>(TestBase::DRAW_STYLE_COMPLEX); } },
420     { "matrix_setpolytopoly",
__anonec8024be7f02() 421         []() -> std::shared_ptr<TestBase> {
422             return std::make_shared<MatrixSetPolyToPoly>(TestBase::DRAW_STYLE_COMPLEX);
423         } },
424     { "matrix_prerotate",
__anonec8024be8002() 425         []() -> std::shared_ptr<TestBase> { return std::make_shared<MatrixPreRotate>(TestBase::DRAW_STYLE_COMPLEX); } },
426     { "matrix_postscale",
__anonec8024be8102() 427         []() -> std::shared_ptr<TestBase> { return std::make_shared<MatrixPostScale>(TestBase::DRAW_STYLE_COMPLEX); } },
428     { "matrix_posttranslate",
__anonec8024be8202() 429         []() -> std::shared_ptr<TestBase> {
430             return std::make_shared<MatrixPostTranslate>(TestBase::DRAW_STYLE_COMPLEX);
431         } },
432     { "matrix_is_equal",
__anonec8024be8302() 433         []() -> std::shared_ptr<TestBase> { return std::make_shared<MatrixIsEqual>(TestBase::DRAW_STYLE_COMPLEX); } },
434 
435     // mask_filter
436     { "mask_filter_createblur",
__anonec8024be8402() 437         []() -> std::shared_ptr<TestBase> {
438             return std::make_shared<MaskFilterCreateBlur>(TestBase::DRAW_STYLE_COMPLEX);
439         } },
440 
441     // color
442     { "color_filtercreateblendmode",
__anonec8024be8502() 443         []() -> std::shared_ptr<TestBase> {
444             return std::make_shared<ColorFilterCreateBlendMode>(TestBase::DRAW_STYLE_COMPLEX);
445         } },
446     { "color_filtercreatecompose",
__anonec8024be8602() 447         []() -> std::shared_ptr<TestBase> {
448             return std::make_shared<ColorFilterCreateCompose>(TestBase::DRAW_STYLE_COMPLEX);
449         } },
450     { "color_filtercreatematrix",
__anonec8024be8702() 451         []() -> std::shared_ptr<TestBase> {
452             return std::make_shared<ColorFilterCreateMatrix>(TestBase::DRAW_STYLE_COMPLEX);
453         } },
454     { "color_filtercreatelineartosrgbgamma",
__anonec8024be8802() 455         []() -> std::shared_ptr<TestBase> {
456             return std::make_shared<ColorFilterCreateLinearToSrgbGamma>(TestBase::DRAW_STYLE_COMPLEX);
457         } },
458     { "color_filtercreatesrgbgammatolinear",
__anonec8024be8902() 459         []() -> std::shared_ptr<TestBase> {
460             return std::make_shared<ColorFilterCreateSrgbGammaToLinear>(TestBase::DRAW_STYLE_COMPLEX);
461         } },
462     { "color_filtercreateluma",
__anonec8024be8a02() 463         []() -> std::shared_ptr<TestBase> {
464             return std::make_shared<ColorFilterCreateLuma>(TestBase::DRAW_STYLE_COMPLEX);
465         } },
466     { "color_spacecreatesrgb",
__anonec8024be8b02() 467         []() -> std::shared_ptr<TestBase> {
468             return std::make_shared<ColorSpaceCreateSrgb>(TestBase::DRAW_STYLE_COMPLEX);
469         } },
470     { "color_spacecreatesrgblinear",
__anonec8024be8c02() 471         []() -> std::shared_ptr<TestBase> {
472             return std::make_shared<ColorSpaceCreateSrgbLinear>(TestBase::DRAW_STYLE_COMPLEX);
473         } },
474 
475     // bitmap and image
476     { "bitmap_readpixels",
__anonec8024be8d02() 477         []() -> std::shared_ptr<TestBase> {
478             return std::make_shared<BitmapReadPixels>(
479                 TestBase::DRAW_STYLE_COMPLEX, COLOR_FORMAT_RGBA_8888, ALPHA_FORMAT_OPAQUE);
480         } },
481     { "image_buildfrombitmap",
__anonec8024be8e02() 482         []() -> std::shared_ptr<TestBase> {
483             return std::make_shared<ImageBuildFromBitmap>(TestBase::DRAW_STYLE_COMPLEX);
484         } },
485     { "bitmap_build",
__anonec8024be8f02() 486         []() -> std::shared_ptr<TestBase> { return std::make_shared<BitmapBuild>(TestBase::DRAW_STYLE_COMPLEX); } },
487     { "bitmap_createfrompixels",
__anonec8024be9002() 488         []() -> std::shared_ptr<TestBase> {
489             return std::make_shared<BitmapCreateFromPixels>(TestBase::DRAW_STYLE_COMPLEX);
490         } },
491 
492     // textblob
493     { "textblob_builderallocrunpos",
__anonec8024be9102() 494         []() -> std::shared_ptr<TestBase> {
495             return std::make_shared<TextBlobBuilderAllocRunPos>(TestBase::DRAW_STYLE_COMPLEX);
496         } },
497 
498     // pen
499     { "pen_reset",
__anonec8024be9202() 500         []() -> std::shared_ptr<TestBase> { return std::make_shared<PenReset>(TestBase::DRAW_STYLE_COMPLEX); } },
501 
502     // sampling_option
503     { "sampling_options_create",
__anonec8024be9302() 504         []() -> std::shared_ptr<TestBase> {
505             return std::make_shared<SamplingOptionsCreate>(TestBase::DRAW_STYLE_COMPLEX,
506                 OH_Drawing_FilterMode::FILTER_MODE_LINEAR, OH_Drawing_MipmapMode::MIPMAP_MODE_NEAREST);
507         } },
508 
509     // memory_stream
510     { "memory_stream_create",
__anonec8024be9402() 511         []() -> std::shared_ptr<TestBase> {
512             return std::make_shared<MemoryStreamCreate>(TestBase::DRAW_STYLE_COMPLEX, true);
513         } },
514     { "surface_create_from_gpu_context",
__anonec8024be9502() 515         []() -> std::shared_ptr<TestBase> {
516             return std::make_shared<SurfaceCreateFromGpuContext>(TestBase::DRAW_STYLE_COMPLEX, false);
517         } }, // 只能用gpu来画,用cpu会闪退
518 
519     // font
520     { "fontcounttext",
__anonec8024be9602() 521         []() -> std::shared_ptr<TestBase> { return std::make_shared<FontCountText>(TestBase::DRAW_STYLE_COMPLEX); } },
522 
523     // brush
524     { "brushrest",
__anonec8024be9702() 525         []() -> std::shared_ptr<TestBase> { return std::make_shared<BrushReset>(TestBase::DRAW_STYLE_COMPLEX); } },
526 };
527 
528 std::unordered_map<std::string, std::function<std::shared_ptr<TestBase>()>> StabilityCpuMap = {
__anonec8024be9802() 529     { "aarectmodes", []() -> std::shared_ptr<TestBase> { return std::make_shared<AARectModes>(); } },
530 };
531 } // namespace
532 
GetFunctionCpuCase(std::string caseName)533 std::shared_ptr<TestBase> TestCaseFactory::GetFunctionCpuCase(std::string caseName)
534 {
535     if (FunctionalCpuMap.find(caseName) == FunctionalCpuMap.end()) {
536         DRAWING_LOGE("caseName error");
537         return nullptr;
538     }
539 
540     return FunctionalCpuMap.find(caseName)->second();
541 }
542 
GetPerformanceCpuCase(std::string caseName)543 std::shared_ptr<TestBase> TestCaseFactory::GetPerformanceCpuCase(std::string caseName)
544 {
545     if (PerformanceCpuMap.find(caseName) == PerformanceCpuMap.end()) {
546         DRAWING_LOGE("caseName error");
547         return nullptr;
548     }
549 
550     return PerformanceCpuMap.find(caseName)->second();
551 }
552 
GetStabilityCpuCase(std::string caseName)553 std::shared_ptr<TestBase> TestCaseFactory::GetStabilityCpuCase(std::string caseName)
554 {
555     if (StabilityCpuMap.find(caseName) == StabilityCpuMap.end()) {
556         DRAWING_LOGE("caseName error");
557         return nullptr;
558     }
559 
560     return StabilityCpuMap.find(caseName)->second();
561 }
562 
GetFunctionCpuCaseAll()563 std::unordered_map<std::string, std::function<std::shared_ptr<TestBase>()>> TestCaseFactory::GetFunctionCpuCaseAll()
564 {
565     return FunctionalCpuMap;
566 }
567 
GetStabilityCpuCaseAll()568 std::unordered_map<std::string, std::function<std::shared_ptr<TestBase>()>> TestCaseFactory::GetStabilityCpuCaseAll()
569 {
570     return StabilityCpuMap;
571 }
572