• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
__anon527788a70202() 71     { "aarectmodes", []() -> std::shared_ptr<TestBase> { return std::make_shared<AARectModes>(); } },
__anon527788a70302() 72     { "blurcircles", []() -> std::shared_ptr<TestBase> { return std::make_shared<BlurCircles>(); } },
__anon527788a70402() 73     { "blur_large_rrects", []() -> std::shared_ptr<TestBase> { return std::make_shared<BlurLargeRrects>(); } },
__anon527788a70502() 74     { "addarc_meas", []() -> std::shared_ptr<TestBase> { return std::make_shared<AddArcMeas>(); } },
__anon527788a70602() 75     { "addarc", []() -> std::shared_ptr<TestBase> { return std::make_shared<AddArc>(); } },
76     { "badapple",
__anon527788a70702() 77         []() -> std::shared_ptr<TestBase> { return std::make_shared<BadApple>(); } }, // 字体相关问题,函数缺失
__anon527788a70802() 78     { "alpha_image_alpha_tint", []() -> std::shared_ptr<TestBase> { return std::make_shared<AlphaImageAlphaTint>(); } },
79     { "shadowutils",
__anon527788a70902() 80         []() -> std::shared_ptr<TestBase> {
81             return std::make_shared<ShadowUtils>(ShadowUtils::K_NO_OCCLUDERS);
82         } }, // maprect 接口计算不对
83     { "shadowutils_occl",
__anon527788a70a02() 84         []() -> std::shared_ptr<TestBase> {
85             return std::make_shared<ShadowUtils>(ShadowUtils::K_OCCLUDERS);
86         } }, // maprect 接口计算不对
87     { "shadowutils_gray",
__anon527788a70b02() 88         []() -> std::shared_ptr<TestBase> {
89             return std::make_shared<ShadowUtils>(ShadowUtils::K_GRAY_SCALE);
90         } }, // maprect 接口计算不对
91     { "circular_arc_stroke_matrix",
__anon527788a70c02() 92         []() -> std::shared_ptr<TestBase> { return std::make_shared<CircularArcStrokeMatrix>(); } },
__anon527788a70d02() 93     { "clippedcubic", []() -> std::shared_ptr<TestBase> { return std::make_shared<ClippedCubic>(); } },
94     { "largeclippedpath_winding",
__anon527788a70e02() 95         []() -> std::shared_ptr<TestBase> { return std::make_shared<LargeClippedPath>(PATH_FILL_TYPE_WINDING); } },
96     { "largeclippedpath_evenodd",
__anon527788a70f02() 97         []() -> std::shared_ptr<TestBase> { return std::make_shared<LargeClippedPath>(PATH_FILL_TYPE_EVEN_ODD); } },
__anon527788a71002() 98     { "filltypes", []() -> std::shared_ptr<TestBase> { return std::make_shared<FillType>(); } },
__anon527788a71102() 99     { "dashing", []() -> std::shared_ptr<TestBase> { return std::make_shared<Dashing>(); } },
__anon527788a71202() 100     { "pathinterior", []() -> std::shared_ptr<TestBase> { return std::make_shared<PathInterior>(); } },
__anon527788a71302() 101     { "dashing2", []() -> std::shared_ptr<TestBase> { return std::make_shared<Dashing2>(); } },
__anon527788a71402() 102     { "alphagradients", []() -> std::shared_ptr<TestBase> { return std::make_shared<AlphaGradients>(); } },
__anon527788a71502() 103     { "dashing4", []() -> std::shared_ptr<TestBase> { return std::make_shared<Dashing4>(); } },
__anon527788a71602() 104     { "convexpaths", []() -> std::shared_ptr<TestBase> { return std::make_shared<ConvexPaths>(); } },
105     { "gradient_dirty_laundry",
__anon527788a71702() 106         []() -> std::shared_ptr<TestBase> { return std::make_shared<Gradients>(); } }, // 内部形状和颜色差异较大
__anon527788a71802() 107     { "arcofzorro", []() -> std::shared_ptr<TestBase> { return std::make_shared<ArcOfZorro>(); } },
__anon527788a71902() 108     { "stroke_rect_shader", []() -> std::shared_ptr<TestBase> { return std::make_shared<StrokeRectShader>(); } },
109     { "lumafilter",
__anon527788a71a02() 110         []() -> std::shared_ptr<TestBase> { return std::make_shared<LumaFilter>(); } }, // 字体粗细、位置有差异
111     { "points_maskfilter",
__anon527788a71b02() 112         []() -> std::shared_ptr<TestBase> {
113             return std::make_shared<PointsMaskFilter>();
114         } }, // drawpoints argb参数存在部分偏差
__anon527788a71c02() 115     { "clipcubic", []() -> std::shared_ptr<TestBase> { return std::make_shared<ClipCubic>(); } },
__anon527788a71d02() 116     { "filltypespersp", []() -> std::shared_ptr<TestBase> { return std::make_shared<FillTypePersp>(); } },
__anon527788a71e02() 117     { "strokes_poly", []() -> std::shared_ptr<TestBase> { return std::make_shared<Strokes2>(); } },
__anon527788a71f02() 118     { "bug7792", []() -> std::shared_ptr<TestBase> { return std::make_shared<BugFix7792>(); } },
__anon527788a72002() 119     { "points", []() -> std::shared_ptr<TestBase> { return std::make_shared<Points>(); } },
120     { "alpha_image",
__anon527788a72102() 121         []() -> std::shared_ptr<TestBase> { return std::make_shared<AlphaImage>(); } }, // 第二个三角形虚化不对
122     { "conicpaths",
__anon527788a72202() 123         []() -> std::shared_ptr<TestBase> {
124             return std::make_shared<ConicPaths>();
125         } }, // 有部分线条cpu出图部分缺失,gpu正常出图,颜色为黑色
126     { "onebadarc",
__anon527788a72302() 127         []() -> std::shared_ptr<TestBase> { return std::make_shared<OneBadArc>(); } }, // 完全按照逻辑所画出的图形不一致
128     { "skbug_8955",
__anon527788a72402() 129         []() -> std::shared_ptr<TestBase> {
130             return std::make_shared<SkBug8955>();
131         } }, // font.textToGlyphs、font.getPos接口缺失
__anon527788a72502() 132     { "surfacenew", []() -> std::shared_ptr<TestBase> { return std::make_shared<NewSurfaceGM>(); } },
133     { "bitmaprect",
__anon527788a72602() 134         []() -> std::shared_ptr<TestBase> {
135             return std::make_shared<DrawBitmapRect2>();
136         } }, // OH_Drawing_CanvasDrawRect接口有问题内部逻辑并未用画笔而是用画刷
__anon527788a72702() 137     { "bigbitmaprect", []() -> std::shared_ptr<TestBase> { return std::make_shared<DrawBitmapRect4>(false); } },
138     { "anisotropic_hq",
__anon527788a72802() 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",
__anon527788a72902() 148         []() -> std::shared_ptr<TestBase> { return std::make_shared<CanvasDrawRect>(TestBase::DRAW_STYLE_COMPLEX); } },
149     { "canvas_rotate",
__anon527788a72a02() 150         []() -> std::shared_ptr<TestBase> { return std::make_shared<CanvasRotate>(TestBase::DRAW_STYLE_COMPLEX); } },
151     { "canvas_drawimagerect",
__anon527788a72b02() 152         []() -> std::shared_ptr<TestBase> {
153             return std::make_shared<CanvasDrawImageRect>(TestBase::DRAW_STYLE_COMPLEX);
154         } },
155     { "canvas_translate",
__anon527788a72c02() 156         []() -> std::shared_ptr<TestBase> { return std::make_shared<CanvasTranslate>(TestBase::DRAW_STYLE_COMPLEX); } },
157     { "canvas_scale",
__anon527788a72d02() 158         []() -> std::shared_ptr<TestBase> { return std::make_shared<CanvasScale>(TestBase::DRAW_STYLE_COMPLEX); } },
159     { "canvas_clear",
__anon527788a72e02() 160         []() -> std::shared_ptr<TestBase> { return std::make_shared<CanvasClear>(TestBase::DRAW_STYLE_COMPLEX); } },
161     { "canvas_setmatrix",
__anon527788a72f02() 162         []() -> std::shared_ptr<TestBase> { return std::make_shared<CanvasSetMatrix>(TestBase::DRAW_STYLE_COMPLEX); } },
163     { "canvas_resetmatrix",
__anon527788a73002() 164         []() -> std::shared_ptr<TestBase> {
165             return std::make_shared<CanvasResetMatrix>(TestBase::DRAW_STYLE_COMPLEX);
166         } },
167     { "canvas_readpixels",
__anon527788a73102() 168         []() -> std::shared_ptr<TestBase> {
169             return std::make_shared<CanvasReadPixels>(TestBase::DRAW_STYLE_COMPLEX);
170         } },
171     { "canvas_readpixelstobitmap",
__anon527788a73202() 172         []() -> std::shared_ptr<TestBase> {
173             return std::make_shared<CanvasReadPixelsToBitmap>(TestBase::DRAW_STYLE_COMPLEX);
174         } },
175     { "canvas_drawimagerectwithsrc",
__anon527788a73302() 176         []() -> std::shared_ptr<TestBase> {
177             return std::make_shared<CanvasDrawImageRectWithSrc>(TestBase::DRAW_STYLE_COMPLEX);
178         } },
179     { "canvas_drawshadow",
__anon527788a73402() 180         []() -> std::shared_ptr<TestBase> {
181             return std::make_shared<CanvasDrawShadow>(TestBase::DRAW_STYLE_COMPLEX);
182         } },
183     { "canvas_skew",
__anon527788a73502() 184         []() -> std::shared_ptr<TestBase> { return std::make_shared<CanvasSkew>(TestBase::DRAW_STYLE_COMPLEX); } },
185     { "canvas_drawvertices",
__anon527788a73602() 186         []() -> std::shared_ptr<TestBase> {
187             return std::make_shared<CanvasDrawVertices>(TestBase::DRAW_STYLE_COMPLEX);
188         } },
189     { "canvas_drawbitmaprect",
__anon527788a73702() 190         []() -> std::shared_ptr<TestBase> {
191             return std::make_shared<CanvasDrawBitmapRect>(TestBase::DRAW_STYLE_COMPLEX);
192         } },
193     { "canvas_drawcircle",
__anon527788a73802() 194         []() -> std::shared_ptr<TestBase> {
195             return std::make_shared<CanvasDrawCircle>(TestBase::DRAW_STYLE_COMPLEX);
196         } },
197     { "canvas_drawoval",
__anon527788a73902() 198         []() -> std::shared_ptr<TestBase> { return std::make_shared<CanvasDrawOval>(TestBase::DRAW_STYLE_COMPLEX); } },
199     { "canvas_drawarc",
__anon527788a73a02() 200         []() -> std::shared_ptr<TestBase> { return std::make_shared<CanvasDrawArc>(TestBase::DRAW_STYLE_COMPLEX); } },
201     { "canvas_drawroundrect",
__anon527788a73b02() 202         []() -> std::shared_ptr<TestBase> {
203             return std::make_shared<CanvasDrawRoundRect>(TestBase::DRAW_STYLE_COMPLEX);
204         } },
205     { "canvas_drawtextblob",
__anon527788a73c02() 206         []() -> std::shared_ptr<TestBase> {
207             return std::make_shared<CanvasDrawTextBlob>(TestBase::DRAW_STYLE_COMPLEX);
208         } },
209     { "canvas_drawcliprect",
__anon527788a73d02() 210         []() -> std::shared_ptr<TestBase> { return std::make_shared<CanvasClipRect>(TestBase::DRAW_STYLE_COMPLEX); } },
211     { "canvas_drawcliproundrect",
__anon527788a73e02() 212         []() -> std::shared_ptr<TestBase> {
213             return std::make_shared<CanvasClipRoundRect>(TestBase::DRAW_STYLE_COMPLEX);
214         } },
215     { "canvas_drawclippath",
__anon527788a73f02() 216         []() -> std::shared_ptr<TestBase> { return std::make_shared<CanvasClipPath>(TestBase::DRAW_STYLE_COMPLEX); } },
217     { "canvas_drawpath",
__anon527788a74002() 218         []() -> std::shared_ptr<TestBase> { return std::make_shared<CanvasDrawPath>(TestBase::DRAW_STYLE_COMPLEX); } },
219     { "canvas_drawbitmap",
__anon527788a74102() 220         []() -> std::shared_ptr<TestBase> {
221             return std::make_shared<CanvasDrawBitmap>(TestBase::DRAW_STYLE_COMPLEX);
222         } },
223     { "canvas_drawlayer",
__anon527788a74202() 224         []() -> std::shared_ptr<TestBase> { return std::make_shared<CanvasDrawLayer>(TestBase::DRAW_STYLE_COMPLEX); } },
225     { "canvas_drawpoints",
__anon527788a74302() 226         []() -> std::shared_ptr<TestBase> {
227             return std::make_shared<CanvasDrawPoints>(TestBase::DRAW_STYLE_COMPLEX);
228         } },
229     { "canvas_drawline",
__anon527788a74402() 230         []() -> std::shared_ptr<TestBase> { return std::make_shared<CanvasDrawLine>(TestBase::DRAW_STYLE_COMPLEX); } },
231     { "canvas_drawbackground",
__anon527788a74502() 232         []() -> std::shared_ptr<TestBase> {
233             return std::make_shared<CanvasDrawBackground>(TestBase::DRAW_STYLE_COMPLEX);
234         } },
235     { "canvas_drawregion",
__anon527788a74602() 236         []() -> std::shared_ptr<TestBase> {
237             return std::make_shared<CanvasDrawRegion>(TestBase::DRAW_STYLE_COMPLEX);
238         } },
239     { "canvas_restoretocount",
__anon527788a74702() 240         []() -> std::shared_ptr<TestBase> {
241             return std::make_shared<CanvasRestoreToCount>(TestBase::DRAW_STYLE_COMPLEX);
242         } },
243     { "canvas_save",
__anon527788a74802() 244         []() -> std::shared_ptr<TestBase> { return std::make_shared<CanvasSave>(TestBase::DRAW_STYLE_COMPLEX); } },
245     { "canvas_drawpixelmaprect",
__anon527788a74902() 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",
__anon527788a74a02() 250         []() -> std::shared_ptr<TestBase> {
251             return std::make_shared<CanvasGetTotalMatrix>(TestBase::DRAW_STYLE_COMPLEX);
252         } },
253     { "canvas_restore",
__anon527788a74b02() 254         []() -> std::shared_ptr<TestBase> { return std::make_shared<CanvasRestore>(TestBase::DRAW_STYLE_COMPLEX); } },
255     { "canvas_getlocalclipbounds",
__anon527788a74c02() 256         []() -> std::shared_ptr<TestBase> {
257             return std::make_shared<CanvasGetLocalClipBounds>(TestBase::DRAW_STYLE_COMPLEX);
258         } },
259     { "canvas_getsavecount",
__anon527788a74d02() 260         []() -> std::shared_ptr<TestBase> {
261             return std::make_shared<CanvasGetSaveCount>(TestBase::DRAW_STYLE_COMPLEX);
262         } },
263     { "canvas_getheight",
__anon527788a74e02() 264         []() -> std::shared_ptr<TestBase> { return std::make_shared<CanvasGetHeight>(TestBase::DRAW_STYLE_COMPLEX); } },
265     { "canvas_getwidth",
__anon527788a74f02() 266         []() -> std::shared_ptr<TestBase> { return std::make_shared<CanvasGetWidth>(TestBase::DRAW_STYLE_COMPLEX); } },
267 
268     // path
269     { "path_create",
__anon527788a75002() 270         []() -> std::shared_ptr<TestBase> { return std::make_shared<PathCreate>(TestBase::DRAW_STYLE_COMPLEX); } },
271     { "path_lineto",
__anon527788a75102() 272         []() -> std::shared_ptr<TestBase> { return std::make_shared<PathLineTo>(TestBase::DRAW_STYLE_COMPLEX); } },
273     { "path_arcto",
__anon527788a75202() 274         []() -> std::shared_ptr<TestBase> { return std::make_shared<PathArcTo>(TestBase::DRAW_STYLE_COMPLEX); } },
275     { "path_quadto",
__anon527788a75302() 276         []() -> std::shared_ptr<TestBase> { return std::make_shared<PathQuadTo>(TestBase::DRAW_STYLE_COMPLEX); } },
277     { "path_copy",
__anon527788a75402() 278         []() -> std::shared_ptr<TestBase> { return std::make_shared<PathCopy>(TestBase::DRAW_STYLE_COMPLEX); } },
279     { "path_effectcreatedashpatheffect",
__anon527788a75502() 280         []() -> std::shared_ptr<TestBase> {
281             return std::make_shared<PathEffectCreateDashPathEffect>(TestBase::DRAW_STYLE_COMPLEX);
282         } },
283     { "path_addovalwithinitialpoint",
__anon527788a75602() 284         []() -> std::shared_ptr<TestBase> {
285             return std::make_shared<PathAddOvalWithInitialPoint>(TestBase::DRAW_STYLE_COMPLEX);
286         } },
287     { "path_addarc",
__anon527788a75702() 288         []() -> std::shared_ptr<TestBase> { return std::make_shared<PathAddArc>(TestBase::DRAW_STYLE_COMPLEX); } },
289     { "path_addpathwithmatrixandmode",
__anon527788a75802() 290         []() -> std::shared_ptr<TestBase> {
291             return std::make_shared<PathAddPathWithMatrixAndMode>(TestBase::DRAW_STYLE_COMPLEX);
292         } },
293     { "path_conicto",
__anon527788a75902() 294         []() -> std::shared_ptr<TestBase> { return std::make_shared<PathConicTo>(TestBase::DRAW_STYLE_COMPLEX); } },
295     { "path_transformwithclip",
__anon527788a75a02() 296         []() -> std::shared_ptr<TestBase> {
297             return std::make_shared<PathTransformWithPerspectiveClip>(TestBase::DRAW_STYLE_COMPLEX, false);
298         } },
299     { "path_setfilltype",
__anon527788a75b02() 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",
__anon527788a75c02() 305         []() -> std::shared_ptr<TestBase> {
306             return std::make_shared<PathGetLength>(TestBase::DRAW_STYLE_COMPLEX, true);
307         } },
308     { "path_close",
__anon527788a75d02() 309         []() -> std::shared_ptr<TestBase> { return std::make_shared<PathClose>(TestBase::DRAW_STYLE_COMPLEX); } },
310     { "path_offset",
__anon527788a75e02() 311         []() -> std::shared_ptr<TestBase> { return std::make_shared<PathOffset>(TestBase::DRAW_STYLE_COMPLEX); } },
312     { "path_reset",
__anon527788a75f02() 313         []() -> std::shared_ptr<TestBase> { return std::make_shared<PathReset>(TestBase::DRAW_STYLE_COMPLEX); } },
314     { "path_transform",
__anon527788a76002() 315         []() -> std::shared_ptr<TestBase> { return std::make_shared<PathTransform>(TestBase::DRAW_STYLE_COMPLEX); } },
316     { "path_addoval",
__anon527788a76102() 317         []() -> std::shared_ptr<TestBase> { return std::make_shared<PathAddOval>(TestBase::DRAW_STYLE_COMPLEX); } },
318     { "path_contain",
__anon527788a76202() 319         []() -> std::shared_ptr<TestBase> { return std::make_shared<PathContains>(TestBase::DRAW_STYLE_COMPLEX); } },
320     { "path_cubicto",
__anon527788a76302() 321         []() -> std::shared_ptr<TestBase> { return std::make_shared<PathCubicTo>(TestBase::DRAW_STYLE_COMPLEX); } },
322     { "path_rmoveto",
__anon527788a76402() 323         []() -> std::shared_ptr<TestBase> { return std::make_shared<PathRMoveTo>(TestBase::DRAW_STYLE_COMPLEX); } },
324     { "path_rlineto",
__anon527788a76502() 325         []() -> std::shared_ptr<TestBase> { return std::make_shared<PathRLineTo>(TestBase::DRAW_STYLE_COMPLEX); } },
326     { "path_rquadto",
__anon527788a76602() 327         []() -> std::shared_ptr<TestBase> { return std::make_shared<PathRQuadTo>(TestBase::DRAW_STYLE_COMPLEX); } },
328     { "path_rconicto",
__anon527788a76702() 329         []() -> std::shared_ptr<TestBase> { return std::make_shared<PathRConicTo>(TestBase::DRAW_STYLE_COMPLEX); } },
330     { "path_rcubicto",
__anon527788a76802() 331         []() -> std::shared_ptr<TestBase> { return std::make_shared<PathRCubicTo>(TestBase::DRAW_STYLE_COMPLEX); } },
332     { "path_addrect",
__anon527788a76902() 333         []() -> std::shared_ptr<TestBase> { return std::make_shared<PathAddRect>(TestBase::DRAW_STYLE_COMPLEX); } },
334     { "path_addrect_withcorner",
__anon527788a76a02() 335         []() -> std::shared_ptr<TestBase> {
336             return std::make_shared<PathAddRectWithInitialCorner>(TestBase::DRAW_STYLE_COMPLEX);
337         } },
338     { "path_addroundrect",
__anon527788a76b02() 339         []() -> std::shared_ptr<TestBase> {
340             return std::make_shared<PathAddRoundRect>(TestBase::DRAW_STYLE_COMPLEX);
341         } },
342     { "path_addpath",
__anon527788a76c02() 343         []() -> std::shared_ptr<TestBase> { return std::make_shared<PathAddPath>(TestBase::DRAW_STYLE_COMPLEX); } },
344     { "path_addpathwithmode",
__anon527788a76d02() 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",
__anon527788a76e02() 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",
__anon527788a76f02() 357         []() -> std::shared_ptr<TestBase> {
358             return std::make_shared<TextBlobBuilderCreate>(TestBase::DRAW_STYLE_COMPLEX);
359         } },
360     { "textblob_createfrom_text",
__anon527788a77002() 361         []() -> std::shared_ptr<TestBase> {
362             return std::make_shared<TextBlobCreateFromText>(TestBase::DRAW_STYLE_COMPLEX);
363         } },
364     { "textblob_createfrom_postext",
__anon527788a77102() 365         []() -> std::shared_ptr<TestBase> {
366             return std::make_shared<TextBlobCreateFromPosText>(TestBase::DRAW_STYLE_COMPLEX);
367         } },
368     { "textblob_createfrom_string",
__anon527788a77202() 369         []() -> std::shared_ptr<TestBase> {
370             return std::make_shared<TextBlobCreateFromString>(TestBase::DRAW_STYLE_COMPLEX);
371         } },
372     { "textblob_getbounds",
__anon527788a77302() 373         []() -> std::shared_ptr<TestBase> {
374             return std::make_shared<TextBlobGetBounds>(TestBase::DRAW_STYLE_COMPLEX);
375         } },
376     { "textblob_builderallocrunpos",
__anon527788a77402() 377         []() -> std::shared_ptr<TestBase> {
378             return std::make_shared<TextBlobBuilderAllocRunPos>(TestBase::DRAW_STYLE_COMPLEX);
379         } },
380 
381     // shader_effect
382     { "shader_effectcreatelineargradient",
__anon527788a77502() 383         []() -> std::shared_ptr<TestBase> {
384             return std::make_shared<ShaderEffectCreateLinearGradient>(TestBase::DRAW_STYLE_COMPLEX);
385         } },
386     { "shader_effectcreateradialgradient",
__anon527788a77602() 387         []() -> std::shared_ptr<TestBase> {
388             return std::make_shared<ShaderEffectCreateRadialGradient>(TestBase::DRAW_STYLE_COMPLEX);
389         } },
390     { "shader_effectcreateimageshader",
__anon527788a77702() 391         []() -> std::shared_ptr<TestBase> {
392             return std::make_shared<ShaderEffectCreateImageShader>(TestBase::DRAW_STYLE_COMPLEX);
393         } },
394     { "shader_effectcreatesweepgradient",
__anon527788a77802() 395         []() -> std::shared_ptr<TestBase> {
396             return std::make_shared<ShaderEffectCreateSweepGradient>(TestBase::DRAW_STYLE_COMPLEX);
397         } },
398 
399     // typeface
400     { "typeface_createdefault",
__anon527788a77902() 401         []() -> std::shared_ptr<TestBase> {
402             return std::make_shared<TypefaceCreateDefault>(TestBase::DRAW_STYLE_COMPLEX);
403         } },
404     { "typeface_createfromfile",
__anon527788a77a02() 405         []() -> std::shared_ptr<TestBase> {
406             return std::make_shared<TypefaceCreateFromFile>(TestBase::DRAW_STYLE_COMPLEX);
407         } },
408     { "typeface_createfromstream",
__anon527788a77b02() 409         []() -> std::shared_ptr<TestBase> {
410             return std::make_shared<TypefaceCreateFromStream>(TestBase::DRAW_STYLE_COMPLEX);
411         } },
412 
413     // matrix
414     { "matrix_reset",
__anon527788a77c02() 415         []() -> std::shared_ptr<TestBase> { return std::make_shared<MatrixReset>(TestBase::DRAW_STYLE_COMPLEX); } },
416     { "matrix_concat",
__anon527788a77d02() 417         []() -> std::shared_ptr<TestBase> { return std::make_shared<MatrixConcat>(TestBase::DRAW_STYLE_COMPLEX); } },
418     { "matrix_invert",
__anon527788a77e02() 419         []() -> std::shared_ptr<TestBase> { return std::make_shared<MatrixInvert>(TestBase::DRAW_STYLE_COMPLEX); } },
420     { "matrix_setpolytopoly",
__anon527788a77f02() 421         []() -> std::shared_ptr<TestBase> {
422             return std::make_shared<MatrixSetPolyToPoly>(TestBase::DRAW_STYLE_COMPLEX);
423         } },
424     { "matrix_prerotate",
__anon527788a78002() 425         []() -> std::shared_ptr<TestBase> { return std::make_shared<MatrixPreRotate>(TestBase::DRAW_STYLE_COMPLEX); } },
426     { "matrix_postscale",
__anon527788a78102() 427         []() -> std::shared_ptr<TestBase> { return std::make_shared<MatrixPostScale>(TestBase::DRAW_STYLE_COMPLEX); } },
428     { "matrix_posttranslate",
__anon527788a78202() 429         []() -> std::shared_ptr<TestBase> {
430             return std::make_shared<MatrixPostTranslate>(TestBase::DRAW_STYLE_COMPLEX);
431         } },
432     { "matrix_is_equal",
__anon527788a78302() 433         []() -> std::shared_ptr<TestBase> { return std::make_shared<MatrixIsEqual>(TestBase::DRAW_STYLE_COMPLEX); } },
434 
435     // mask_filter
436     { "mask_filter_createblur",
__anon527788a78402() 437         []() -> std::shared_ptr<TestBase> {
438             return std::make_shared<MaskFilterCreateBlur>(TestBase::DRAW_STYLE_COMPLEX);
439         } },
440 
441     // color
442     { "color_filtercreateblendmode",
__anon527788a78502() 443         []() -> std::shared_ptr<TestBase> {
444             return std::make_shared<ColorFilterCreateBlendMode>(TestBase::DRAW_STYLE_COMPLEX);
445         } },
446     { "color_filtercreatecompose",
__anon527788a78602() 447         []() -> std::shared_ptr<TestBase> {
448             return std::make_shared<ColorFilterCreateCompose>(TestBase::DRAW_STYLE_COMPLEX);
449         } },
450     { "color_filtercreatematrix",
__anon527788a78702() 451         []() -> std::shared_ptr<TestBase> {
452             return std::make_shared<ColorFilterCreateMatrix>(TestBase::DRAW_STYLE_COMPLEX);
453         } },
454     { "color_filtercreatelineartosrgbgamma",
__anon527788a78802() 455         []() -> std::shared_ptr<TestBase> {
456             return std::make_shared<ColorFilterCreateLinearToSrgbGamma>(TestBase::DRAW_STYLE_COMPLEX);
457         } },
458     { "color_filtercreatesrgbgammatolinear",
__anon527788a78902() 459         []() -> std::shared_ptr<TestBase> {
460             return std::make_shared<ColorFilterCreateSrgbGammaToLinear>(TestBase::DRAW_STYLE_COMPLEX);
461         } },
462     { "color_filtercreateluma",
__anon527788a78a02() 463         []() -> std::shared_ptr<TestBase> {
464             return std::make_shared<ColorFilterCreateLuma>(TestBase::DRAW_STYLE_COMPLEX);
465         } },
466     { "color_spacecreatesrgb",
__anon527788a78b02() 467         []() -> std::shared_ptr<TestBase> {
468             return std::make_shared<ColorSpaceCreateSrgb>(TestBase::DRAW_STYLE_COMPLEX);
469         } },
470     { "color_spacecreatesrgblinear",
__anon527788a78c02() 471         []() -> std::shared_ptr<TestBase> {
472             return std::make_shared<ColorSpaceCreateSrgbLinear>(TestBase::DRAW_STYLE_COMPLEX);
473         } },
474 
475     // bitmap and image
476     { "bitmap_readpixels",
__anon527788a78d02() 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",
__anon527788a78e02() 482         []() -> std::shared_ptr<TestBase> {
483             return std::make_shared<ImageBuildFromBitmap>(TestBase::DRAW_STYLE_COMPLEX);
484         } },
485     { "bitmap_build",
__anon527788a78f02() 486         []() -> std::shared_ptr<TestBase> { return std::make_shared<BitmapBuild>(TestBase::DRAW_STYLE_COMPLEX); } },
487     { "bitmap_createfrompixels",
__anon527788a79002() 488         []() -> std::shared_ptr<TestBase> {
489             return std::make_shared<BitmapCreateFromPixels>(TestBase::DRAW_STYLE_COMPLEX);
490         } },
491 
492     // textblob
493     { "textblob_builderallocrunpos",
__anon527788a79102() 494         []() -> std::shared_ptr<TestBase> {
495             return std::make_shared<TextBlobBuilderAllocRunPos>(TestBase::DRAW_STYLE_COMPLEX);
496         } },
497 
498     // pen
499     { "pen_reset",
__anon527788a79202() 500         []() -> std::shared_ptr<TestBase> { return std::make_shared<PenReset>(TestBase::DRAW_STYLE_COMPLEX); } },
501 
502     // sampling_option
503     { "sampling_options_create",
__anon527788a79302() 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",
__anon527788a79402() 511         []() -> std::shared_ptr<TestBase> {
512             return std::make_shared<MemoryStreamCreate>(TestBase::DRAW_STYLE_COMPLEX, true);
513         } },
514     { "surface_create_from_gpu_context",
__anon527788a79502() 515         []() -> std::shared_ptr<TestBase> {
516             return std::make_shared<SurfaceCreateFromGpuContext>(TestBase::DRAW_STYLE_COMPLEX, false);
517         } }, // 只能用gpu来画,用cpu会闪退
518 
519     // font
520     { "fontcounttext",
__anon527788a79602() 521         []() -> std::shared_ptr<TestBase> { return std::make_shared<FontCountText>(TestBase::DRAW_STYLE_COMPLEX); } },
522 
523     // brush
524     { "brushrest",
__anon527788a79702() 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 = {
__anon527788a79802() 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