1 /*
2 * Copyright (c) 2021-2023 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 "impl_factory.h"
17
18 #include "effect/runtime_effect.h"
19 #include "skia_adapter/skia_impl_factory.h"
20 #include "utils/matrix.h"
21 #include "utils/system_properties.h"
22 #ifdef ENABLE_DDGR_OPTIMIZE
23 #include "ddgr_impl_factory.h"
24 #endif
25 namespace OHOS {
26 namespace Rosen {
27 namespace Drawing {
28 using EngineImplFactory = SkiaImplFactory;
29
CreateCoreCanvasImpl()30 std::unique_ptr<CoreCanvasImpl> ImplFactory::CreateCoreCanvasImpl()
31 {
32 #ifdef ENABLE_DDGR_OPTIMIZE
33 if (SystemProperties::GetGpuApiType() == GpuApiType::DDGR) {
34 return DDGRImplFactory::CreateCoreCanvas();
35 }
36 #endif
37 return EngineImplFactory::CreateCoreCanvas();
38 }
39
CreateCoreCanvasImpl(void * rawCanvas)40 std::unique_ptr<CoreCanvasImpl> ImplFactory::CreateCoreCanvasImpl(void* rawCanvas)
41 {
42 #ifdef ENABLE_DDGR_OPTIMIZE
43 if (SystemProperties::GetGpuApiType() == GpuApiType::DDGR) {
44 return DDGRImplFactory::CreateCoreCanvas(rawCanvas);
45 }
46 #endif
47 return EngineImplFactory::CreateCoreCanvas(rawCanvas);
48 }
49
CreateCoreCanvasImpl(int32_t width,int32_t height)50 std::unique_ptr<CoreCanvasImpl> ImplFactory::CreateCoreCanvasImpl(int32_t width, int32_t height)
51 {
52 #ifdef ENABLE_DDGR_OPTIMIZE
53 if (SystemProperties::GetGpuApiType() == GpuApiType::DDGR) {
54 return DDGRImplFactory::CreateCoreCanvas(width, height);
55 }
56 #endif
57 return EngineImplFactory::CreateCoreCanvas(width, height);
58 }
59
CreateDataImpl()60 std::unique_ptr<DataImpl> ImplFactory::CreateDataImpl()
61 {
62 #ifdef ENABLE_DDGR_OPTIMIZE
63 if (SystemProperties::GetGpuApiType() == GpuApiType::DDGR) {
64 return DDGRImplFactory::CreateData();
65 }
66 #endif
67 return EngineImplFactory::CreateData();
68 }
69
70 #ifdef RS_ENABLE_GPU
CreateGPUContextImpl()71 std::unique_ptr<GPUContextImpl> ImplFactory::CreateGPUContextImpl()
72 {
73 #ifdef ENABLE_DDGR_OPTIMIZE
74 if (SystemProperties::GetGpuApiType() == GpuApiType::DDGR) {
75 return DDGRImplFactory::CreateGPUContext();
76 }
77 #endif
78 return EngineImplFactory::CreateGPUContext();
79 }
80 #endif
81
CreateTraceMemoryDumpImpl(const char * categoryKey,bool itemizeType)82 std::unique_ptr<TraceMemoryDumpImpl> ImplFactory::CreateTraceMemoryDumpImpl(const char* categoryKey, bool itemizeType)
83 {
84 #ifdef ENABLE_DDGR_OPTIMIZE
85 if (SystemProperties::GetGpuApiType() == GpuApiType::DDGR) {
86 return DDGRImplFactory::CreateTraceMemoryDump(categoryKey, itemizeType);
87 }
88 #endif
89 return EngineImplFactory::CreateTraceMemoryDump(categoryKey, itemizeType);
90 }
91
CreateBitmapImpl()92 std::unique_ptr<BitmapImpl> ImplFactory::CreateBitmapImpl()
93 {
94 #ifdef ENABLE_DDGR_OPTIMIZE
95 if (SystemProperties::GetGpuApiType() == GpuApiType::DDGR) {
96 return DDGRImplFactory::CreateBitmap();
97 }
98 #endif
99 return EngineImplFactory::CreateBitmap();
100 }
101
CreatePixmapImpl()102 std::unique_ptr<PixmapImpl> ImplFactory::CreatePixmapImpl()
103 {
104 #ifdef ENABLE_DDGR_OPTIMIZE
105 if (SystemProperties::GetGpuApiType() == GpuApiType::DDGR) {
106 return DDGRImplFactory::CreatePixmap();
107 }
108 #endif
109 return EngineImplFactory::CreatePixmap();
110 }
111
CreatePixmapImpl(const ImageInfo & imageInfo,const void * addr,size_t rowBytes)112 std::unique_ptr<PixmapImpl> ImplFactory::CreatePixmapImpl(const ImageInfo& imageInfo, const void* addr, size_t rowBytes)
113 {
114 #ifdef ENABLE_DDGR_OPTIMIZE
115 if (SystemProperties::GetGpuApiType() == GpuApiType::DDGR) {
116 return DDGRImplFactory::CreatePixmap(imageInfo, addr, rowBytes);
117 }
118 #endif
119 return EngineImplFactory::CreatePixmap(imageInfo, addr, rowBytes);
120 }
121
CreateImageImpl()122 std::unique_ptr<ImageImpl> ImplFactory::CreateImageImpl()
123 {
124 #ifdef ENABLE_DDGR_OPTIMIZE
125 if (SystemProperties::GetGpuApiType() == GpuApiType::DDGR) {
126 return DDGRImplFactory::CreateImage();
127 }
128 #endif
129 return EngineImplFactory::CreateImage();
130 }
131
CreateImageImpl(void * rawImage)132 std::unique_ptr<ImageImpl> ImplFactory::CreateImageImpl(void* rawImage)
133 {
134 #ifdef ENABLE_DDGR_OPTIMIZE
135 if (SystemProperties::GetGpuApiType() == GpuApiType::DDGR) {
136 return DDGRImplFactory::CreateImage(rawImage);
137 }
138 #endif
139 return EngineImplFactory::CreateImage(rawImage);
140 }
141
CreatePictureImpl()142 std::unique_ptr<PictureImpl> ImplFactory::CreatePictureImpl()
143 {
144 #ifdef ENABLE_DDGR_OPTIMIZE
145 if (SystemProperties::GetGpuApiType() == GpuApiType::DDGR) {
146 return DDGRImplFactory::CreatePicture();
147 }
148 #endif
149 return EngineImplFactory::CreatePicture();
150 }
151
CreatePathImpl()152 std::unique_ptr<PathImpl> ImplFactory::CreatePathImpl()
153 {
154 #ifdef ENABLE_DDGR_OPTIMIZE
155 if (SystemProperties::GetGpuApiType() == GpuApiType::DDGR) {
156 return DDGRImplFactory::CreatePath();
157 }
158 #endif
159 return EngineImplFactory::CreatePath();
160 }
161
CreateColorFilterImpl()162 std::unique_ptr<ColorFilterImpl> ImplFactory::CreateColorFilterImpl()
163 {
164 #ifdef ENABLE_DDGR_OPTIMIZE
165 if (SystemProperties::GetGpuApiType() == GpuApiType::DDGR) {
166 return DDGRImplFactory::CreateColorFilter();
167 }
168 #endif
169 return EngineImplFactory::CreateColorFilter();
170 }
CreateMaskFilterImpl()171 std::unique_ptr<MaskFilterImpl> ImplFactory::CreateMaskFilterImpl()
172 {
173 #ifdef ENABLE_DDGR_OPTIMIZE
174 if (SystemProperties::GetGpuApiType() == GpuApiType::DDGR) {
175 return DDGRImplFactory::CreateMaskFilter();
176 }
177 #endif
178 return EngineImplFactory::CreateMaskFilter();
179 }
180
CreateImageFilterImpl()181 std::unique_ptr<ImageFilterImpl> ImplFactory::CreateImageFilterImpl()
182 {
183 #ifdef ENABLE_DDGR_OPTIMIZE
184 if (SystemProperties::GetGpuApiType() == GpuApiType::DDGR) {
185 return DDGRImplFactory::CreateImageFilter();
186 }
187 #endif
188 return EngineImplFactory::CreateImageFilter();
189 }
190
CreateShaderEffectImpl()191 std::unique_ptr<ShaderEffectImpl> ImplFactory::CreateShaderEffectImpl()
192 {
193 #ifdef ENABLE_DDGR_OPTIMIZE
194 if (SystemProperties::GetGpuApiType() == GpuApiType::DDGR) {
195 return DDGRImplFactory::CreateShaderEffect();
196 }
197 #endif
198 return EngineImplFactory::CreateShaderEffect();
199 }
200
CreateBlenderImpl()201 std::unique_ptr<BlenderImpl> ImplFactory::CreateBlenderImpl()
202 {
203 #ifdef ENABLE_DDGR_OPTIMIZE
204 if (SystemProperties::GetGpuApiType() == GpuApiType::DDGR) {
205 return DDGRImplFactory::CreateBlender();
206 }
207 #endif
208 return EngineImplFactory::CreateBlender();
209 }
210
CreateRuntimeEffectImpl()211 std::unique_ptr<RuntimeEffectImpl> ImplFactory::CreateRuntimeEffectImpl()
212 {
213 #ifdef ENABLE_DDGR_OPTIMIZE
214 if (SystemProperties::GetGpuApiType() == GpuApiType::DDGR) {
215 return DDGRImplFactory::CreateRuntimeEffect();
216 }
217 #endif
218 return EngineImplFactory::CreateRuntimeEffect();
219 }
220
CreateRuntimeShaderBuilderImpl(std::shared_ptr<RuntimeEffect> runtimeEffect)221 std::unique_ptr<RuntimeShaderBuilderImpl> ImplFactory::CreateRuntimeShaderBuilderImpl(
222 std::shared_ptr<RuntimeEffect> runtimeEffect)
223 {
224 #ifdef ENABLE_DDGR_OPTIMIZE
225 if (SystemProperties::GetGpuApiType() == GpuApiType::DDGR) {
226 return DDGRImplFactory::CreateRuntimeShaderBuilder(runtimeEffect);
227 }
228 #endif
229 return EngineImplFactory::CreateRuntimeShaderBuilder(runtimeEffect);
230 }
231
CreateRuntimeBlenderBuilderImpl(std::shared_ptr<RuntimeEffect> runtimeEffect)232 std::unique_ptr<RuntimeBlenderBuilderImpl> ImplFactory::CreateRuntimeBlenderBuilderImpl(
233 std::shared_ptr<RuntimeEffect> runtimeEffect)
234 {
235 #ifdef ENABLE_DDGR_OPTIMIZE
236 if (SystemProperties::GetGpuApiType() == GpuApiType::DDGR) {
237 return DDGRImplFactory::CreateRuntimeBlenderBuilder(runtimeEffect);
238 }
239 #endif
240 return EngineImplFactory::CreateRuntimeBlenderBuilder(runtimeEffect);
241 }
242
CreateSurfaceImpl()243 std::unique_ptr<SurfaceImpl> ImplFactory::CreateSurfaceImpl()
244 {
245 #ifdef ENABLE_DDGR_OPTIMIZE
246 if (SystemProperties::GetGpuApiType() == GpuApiType::DDGR) {
247 return DDGRImplFactory::CreateSurface();
248 }
249 #endif
250 return EngineImplFactory::CreateSurface();
251 }
252
CreateOplistHandleImpl()253 std::unique_ptr<OpListHandleImpl> ImplFactory::CreateOplistHandleImpl()
254 {
255 #ifdef ENABLE_DDGR_OPTIMIZE
256 if (SystemProperties::GetGpuApiType() == GpuApiType::DDGR) {
257 return DDGRImplFactory::CreateOplistHandle();
258 }
259 #endif
260 return EngineImplFactory::CreateOplistHandle();
261 }
262
CreatePathEffectImpl()263 std::unique_ptr<PathEffectImpl> ImplFactory::CreatePathEffectImpl()
264 {
265 #ifdef ENABLE_DDGR_OPTIMIZE
266 if (SystemProperties::GetGpuApiType() == GpuApiType::DDGR) {
267 return DDGRImplFactory::CreatePathEffect();
268 }
269 #endif
270 return EngineImplFactory::CreatePathEffect();
271 }
272
CreateColorSpaceImpl()273 std::unique_ptr<ColorSpaceImpl> ImplFactory::CreateColorSpaceImpl()
274 {
275 #ifdef ENABLE_DDGR_OPTIMIZE
276 if (SystemProperties::GetGpuApiType() == GpuApiType::DDGR) {
277 return DDGRImplFactory::CreateColorSpace();
278 }
279 #endif
280 return EngineImplFactory::CreateColorSpace();
281 }
282
CreateMatrixImpl()283 std::unique_ptr<MatrixImpl> ImplFactory::CreateMatrixImpl()
284 {
285 #ifdef ENABLE_DDGR_OPTIMIZE
286 if (SystemProperties::GetGpuApiType() == GpuApiType::DDGR) {
287 return DDGRImplFactory::CreateMatrix();
288 }
289 #endif
290 return EngineImplFactory::CreateMatrix();
291 }
292
CreateMatrixImpl(const Matrix & other)293 std::unique_ptr<MatrixImpl> ImplFactory::CreateMatrixImpl(const Matrix& other)
294 {
295 #ifdef ENABLE_DDGR_OPTIMIZE
296 if (SystemProperties::GetGpuApiType() == GpuApiType::DDGR) {
297 return DDGRImplFactory::CreateMatrix(other);
298 }
299 #endif
300 return EngineImplFactory::CreateMatrix(other);
301 }
302
CreateMatrix44Impl()303 std::unique_ptr<Matrix44Impl> ImplFactory::CreateMatrix44Impl()
304 {
305 #ifdef ENABLE_DDGR_OPTIMIZE
306 if (SystemProperties::GetGpuApiType() == GpuApiType::DDGR) {
307 return DDGRImplFactory::CreateMatrix44();
308 }
309 #endif
310 return EngineImplFactory::CreateMatrix44();
311 }
312
CreateCameraImpl()313 std::unique_ptr<CameraImpl> ImplFactory::CreateCameraImpl()
314 {
315 #ifdef ENABLE_DDGR_OPTIMIZE
316 if (SystemProperties::GetGpuApiType() == GpuApiType::DDGR) {
317 return DDGRImplFactory::CreateCamera();
318 }
319 #endif
320 return EngineImplFactory::CreateCamera();
321 }
322
CreateRegionImpl()323 std::unique_ptr<RegionImpl> ImplFactory::CreateRegionImpl()
324 {
325 #ifdef ENABLE_DDGR_OPTIMIZE
326 if (SystemProperties::GetGpuApiType() == GpuApiType::DDGR) {
327 return DDGRImplFactory::CreateRegion();
328 }
329 #endif
330 return EngineImplFactory::CreateRegion();
331 }
332
CreateFontImpl()333 std::unique_ptr<FontImpl> ImplFactory::CreateFontImpl()
334 {
335 #ifdef ENABLE_DDGR_OPTIMIZE
336 if (SystemProperties::GetGpuApiType() == GpuApiType::DDGR) {
337 return DDGRImplFactory::CreateFont();
338 }
339 #endif
340 return EngineImplFactory::CreateFont();
341 }
342
CreateFontImpl(std::shared_ptr<Typeface> typeface,scalar size,scalar scaleX,scalar skewX)343 std::unique_ptr<FontImpl> ImplFactory::CreateFontImpl(std::shared_ptr<Typeface> typeface,
344 scalar size, scalar scaleX, scalar skewX)
345 {
346 #ifdef ENABLE_DDGR_OPTIMIZE
347 if (SystemProperties::GetGpuApiType() == GpuApiType::DDGR) {
348 return DDGRImplFactory::CreateFont(typeface, size, scaleX, skewX);
349 }
350 #endif
351 return EngineImplFactory::CreateFont(typeface, size, scaleX, skewX);
352 }
353
CreateFontImpl(const Font & font)354 std::unique_ptr<FontImpl> ImplFactory::CreateFontImpl(const Font& font)
355 {
356 #ifdef ENABLE_DDGR_OPTIMIZE
357 if (SystemProperties::GetGpuApiType() == GpuApiType::DDGR) {
358 return DDGRImplFactory::CreateFont(font);
359 }
360 #endif
361 return EngineImplFactory::CreateFont(font);
362 }
363
CreateTextBlobBuilderImpl()364 std::unique_ptr<TextBlobBuilderImpl> ImplFactory::CreateTextBlobBuilderImpl()
365 {
366 #ifdef ENABLE_DDGR_OPTIMIZE
367 if (SystemProperties::GetGpuApiType() == GpuApiType::DDGR) {
368 return DDGRImplFactory::CreateTextBlobBuilder();
369 }
370 #endif
371 return EngineImplFactory::CreateTextBlobBuilder();
372 }
373
CreateDefaultFontMgrImpl()374 std::shared_ptr<FontMgrImpl> ImplFactory::CreateDefaultFontMgrImpl()
375 {
376 #ifdef ENABLE_DDGR_OPTIMIZE
377 if (SystemProperties::GetGpuApiType() == GpuApiType::DDGR) {
378 return DDGRImplFactory::CreateDefaultFontMgr();
379 }
380 #endif
381 return EngineImplFactory::CreateDefaultFontMgr();
382 }
383
384 #ifndef USE_TEXGINE
CreateDynamicFontMgrImpl()385 std::shared_ptr<FontMgrImpl> ImplFactory::CreateDynamicFontMgrImpl()
386 {
387 #ifdef ENABLE_DDGR_OPTIMIZE
388 if (SystemProperties::GetGpuApiType() == GpuApiType::DDGR) {
389 return DDGRImplFactory::CreateDynamicFontMgr();
390 }
391 #endif
392 return EngineImplFactory::CreateDynamicFontMgr();
393 }
394 #endif
395
CreateVerticesImpl()396 std::unique_ptr<VerticesImpl> ImplFactory::CreateVerticesImpl()
397 {
398 #ifdef ENABLE_DDGR_OPTIMIZE
399 if (SystemProperties::GetGpuApiType() == GpuApiType::DDGR) {
400 return DDGRImplFactory::CreateVertices();
401 }
402 #endif
403 return EngineImplFactory::CreateVertices();
404 }
405
CreateVerticesBuilderImpl()406 std::unique_ptr<VerticesImpl::BuilderImpl> ImplFactory::CreateVerticesBuilderImpl()
407 {
408 #ifdef ENABLE_DDGR_OPTIMIZE
409 if (SystemProperties::GetGpuApiType() == GpuApiType::DDGR) {
410 return DDGRImplFactory::CreateVerticesBuilder();
411 }
412 #endif
413 return EngineImplFactory::CreateVerticesBuilder();
414 }
415
CreateMemoryStreamImpl()416 std::shared_ptr<MemoryStreamImpl> ImplFactory::CreateMemoryStreamImpl()
417 {
418 #ifdef ENABLE_DDGR_OPTIMIZE
419 if (SystemProperties::GetGpuApiType() == GpuApiType::DDGR) {
420 return DDGRImplFactory::CreateMemoryStream();
421 }
422 #endif
423 return EngineImplFactory::CreateMemoryStream();
424 }
425
CreateMemoryStreamImpl(const void * data,size_t length,bool copyData)426 std::shared_ptr<MemoryStreamImpl> ImplFactory::CreateMemoryStreamImpl(const void* data, size_t length, bool copyData)
427 {
428 #ifdef ENABLE_DDGR_OPTIMIZE
429 if (SystemProperties::GetGpuApiType() == GpuApiType::DDGR) {
430 return DDGRImplFactory::CreateMemoryStream(data, length, copyData);
431 }
432 #endif
433 return EngineImplFactory::CreateMemoryStream(data, length, copyData);
434 }
435
CreateResourceHolderImpl()436 std::shared_ptr<ResourceHolderImpl> ImplFactory::CreateResourceHolderImpl()
437 {
438 #ifdef ENABLE_DDGR_OPTIMIZE
439 if (SystemProperties::GetGpuApiType() == GpuApiType::DDGR) {
440 return DDGRImplFactory::CreateResourceHolder();
441 }
442 #endif
443 return EngineImplFactory::CreateResourceHolder();
444 }
445 } // namespace Drawing
446 } // namespace Rosen
447 } // namespace OHOS