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