@shopify/react-native-skia 1.3.13 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/android/CMakeLists.txt +9 -4
- package/android/cpp/rnskia-android/RNSkAndroidPlatformContext.h +6 -0
- package/android/cpp/rnskia-android/SkiaOpenGLSurfaceFactory.cpp +81 -0
- package/android/cpp/rnskia-android/SkiaOpenGLSurfaceFactory.h +40 -0
- package/cpp/api/JsiSkApi.h +2 -0
- package/cpp/api/JsiSkPath.h +29 -19
- package/cpp/api/JsiSkRuntimeEffect.h +7 -0
- package/cpp/api/JsiSkiaContext.h +79 -0
- package/cpp/rnskia/RNSkPlatformContext.h +4 -0
- package/cpp/rnskia/SkiaContext.h +22 -0
- package/cpp/skia/include/android/GrAHardwareBufferUtils.h +2 -2
- package/cpp/skia/include/android/SkImageAndroid.h +1 -1
- package/cpp/skia/include/android/SkSurfaceAndroid.h +1 -1
- package/cpp/skia/include/codec/SkAndroidCodec.h +13 -9
- package/cpp/skia/include/codec/SkCodec.h +28 -5
- package/cpp/skia/include/core/SkArc.h +69 -0
- package/cpp/skia/include/core/SkBitmap.h +10 -0
- package/cpp/skia/include/core/SkBlender.h +2 -3
- package/cpp/skia/include/core/SkCanvas.h +86 -16
- package/cpp/skia/include/core/SkCapabilities.h +0 -4
- package/cpp/skia/include/core/SkColorFilter.h +4 -4
- package/cpp/skia/include/core/SkColorPriv.h +5 -7
- package/cpp/skia/include/core/SkColorType.h +2 -0
- package/cpp/skia/include/core/SkFlattenable.h +1 -1
- package/cpp/skia/include/core/SkFontArguments.h +3 -1
- package/cpp/skia/include/core/SkFontParameters.h +3 -2
- package/cpp/skia/include/core/SkFourByteTag.h +19 -0
- package/cpp/skia/include/core/SkImage.h +41 -1
- package/cpp/skia/include/core/SkImageGenerator.h +0 -5
- package/cpp/skia/include/core/SkImageInfo.h +20 -0
- package/cpp/skia/include/core/SkM44.h +1 -1
- package/cpp/skia/include/core/SkMatrix.h +2 -1
- package/cpp/skia/include/core/SkMilestone.h +1 -1
- package/cpp/skia/include/core/SkPaint.h +1 -1
- package/cpp/skia/include/core/SkPath.h +20 -6
- package/cpp/skia/include/core/SkPathMeasure.h +1 -0
- package/cpp/skia/include/core/SkPicture.h +5 -5
- package/cpp/skia/include/core/SkPoint3.h +2 -12
- package/cpp/skia/include/core/SkRRect.h +5 -0
- package/cpp/skia/include/core/SkRect.h +5 -16
- package/cpp/skia/include/core/SkRefCnt.h +2 -0
- package/cpp/skia/include/core/SkScalar.h +20 -32
- package/cpp/skia/include/core/SkShader.h +17 -0
- package/cpp/skia/include/core/SkSize.h +2 -1
- package/cpp/skia/include/core/SkStream.h +2 -3
- package/cpp/skia/include/core/SkStrokeRec.h +6 -1
- package/cpp/skia/include/core/SkSurface.h +13 -4
- package/cpp/skia/include/core/SkSurfaceProps.h +5 -0
- package/cpp/skia/include/core/SkSwizzle.h +3 -1
- package/cpp/skia/include/core/SkTypeface.h +1 -0
- package/cpp/skia/include/core/SkTypes.h +1 -19
- package/cpp/skia/include/core/SkUnPreMultiply.h +4 -5
- package/cpp/skia/include/core/SkVertices.h +4 -2
- package/cpp/skia/include/docs/SkPDFDocument.h +11 -14
- package/cpp/skia/include/effects/SkHighContrastFilter.h +6 -6
- package/cpp/skia/include/effects/SkImageFilters.h +49 -23
- package/cpp/skia/include/effects/SkRuntimeEffect.h +51 -70
- package/cpp/skia/include/effects/SkShaderMaskFilter.h +2 -0
- package/cpp/skia/include/effects/SkTableMaskFilter.h +2 -0
- package/cpp/skia/include/gpu/GrBackendSemaphore.h +2 -120
- package/cpp/skia/include/gpu/GrBackendSurface.h +2 -466
- package/cpp/skia/include/gpu/GrContextOptions.h +2 -368
- package/cpp/skia/include/gpu/GrContextThreadSafeProxy.h +2 -179
- package/cpp/skia/include/gpu/GrDirectContext.h +2 -1011
- package/cpp/skia/include/gpu/GrDriverBugWorkarounds.h +2 -47
- package/cpp/skia/include/gpu/GrDriverBugWorkaroundsAutogen.h +2 -41
- package/cpp/skia/include/gpu/GrRecordingContext.h +2 -279
- package/cpp/skia/include/gpu/GrTypes.h +2 -238
- package/cpp/skia/include/gpu/GrYUVABackendTextures.h +2 -118
- package/cpp/skia/include/gpu/d3d/GrD3DBackendContext.h +2 -29
- package/cpp/skia/include/gpu/d3d/GrD3DTypes.h +2 -242
- package/cpp/skia/include/gpu/ganesh/GrBackendSemaphore.h +80 -0
- package/cpp/skia/include/gpu/ganesh/GrBackendSurface.h +412 -0
- package/cpp/skia/include/gpu/ganesh/GrContextOptions.h +386 -0
- package/cpp/skia/include/gpu/ganesh/GrContextThreadSafeProxy.h +175 -0
- package/cpp/skia/include/gpu/ganesh/GrDirectContext.h +993 -0
- package/cpp/skia/include/gpu/ganesh/GrDriverBugWorkarounds.h +53 -0
- package/cpp/skia/include/gpu/ganesh/GrDriverBugWorkaroundsAutogen.h +45 -0
- package/cpp/skia/include/gpu/ganesh/GrExternalTextureGenerator.h +1 -1
- package/cpp/skia/include/gpu/ganesh/GrRecordingContext.h +285 -0
- package/cpp/skia/include/gpu/ganesh/GrTypes.h +177 -0
- package/cpp/skia/include/gpu/ganesh/GrYUVABackendTextures.h +130 -0
- package/cpp/skia/include/gpu/ganesh/SkImageGanesh.h +1 -1
- package/cpp/skia/include/gpu/ganesh/SkSurfaceGanesh.h +1 -1
- package/cpp/skia/include/gpu/ganesh/d3d/GrD3DBackendContext.h +35 -0
- package/cpp/skia/include/gpu/ganesh/d3d/GrD3DTypes.h +248 -0
- package/cpp/skia/include/gpu/ganesh/gl/GrGLAssembleHelpers.h +17 -0
- package/cpp/skia/include/gpu/ganesh/gl/GrGLAssembleInterface.h +45 -0
- package/cpp/skia/include/gpu/ganesh/gl/GrGLBackendSurface.h +1 -1
- package/cpp/skia/include/gpu/ganesh/gl/GrGLConfig.h +69 -0
- package/cpp/skia/include/gpu/ganesh/gl/GrGLExtensions.h +79 -0
- package/cpp/skia/include/gpu/ganesh/gl/GrGLFunctions.h +306 -0
- package/cpp/skia/include/gpu/ganesh/gl/GrGLInterface.h +338 -0
- package/cpp/skia/include/gpu/ganesh/gl/GrGLMakeWebGLInterface.h +19 -0
- package/cpp/skia/include/gpu/ganesh/gl/GrGLTypes.h +219 -0
- package/cpp/skia/include/gpu/{gl → ganesh/gl}/egl/GrGLMakeEGLInterface.h +2 -2
- package/cpp/skia/include/gpu/ganesh/gl/epoxy/GrGLMakeEpoxyEGLInterface.h +20 -0
- package/cpp/skia/include/gpu/ganesh/gl/ios/GrGLMakeIOSInterface.h +20 -0
- package/cpp/skia/include/gpu/ganesh/gl/mac/GrGLMakeMacInterface.h +20 -0
- package/cpp/skia/include/gpu/ganesh/gl/win/GrGLMakeWinInterface.h +20 -0
- package/cpp/skia/include/gpu/ganesh/mock/GrMockTypes.h +166 -0
- package/cpp/skia/include/gpu/{mtl → ganesh/mtl}/GrMtlBackendContext.h +2 -2
- package/cpp/skia/include/gpu/ganesh/mtl/GrMtlBackendSemaphore.h +23 -0
- package/cpp/skia/include/gpu/ganesh/mtl/GrMtlBackendSurface.h +44 -0
- package/cpp/skia/include/gpu/ganesh/mtl/GrMtlDirectContext.h +30 -0
- package/cpp/skia/include/gpu/{mtl → ganesh/mtl}/GrMtlTypes.h +1 -3
- package/cpp/skia/include/gpu/ganesh/mtl/SkSurfaceMetal.h +2 -2
- package/cpp/skia/include/gpu/ganesh/vk/GrBackendDrawableInfo.h +2 -2
- package/cpp/skia/include/gpu/ganesh/vk/GrVkBackendSemaphore.h +1 -1
- package/cpp/skia/include/gpu/ganesh/vk/GrVkBackendSurface.h +7 -3
- package/cpp/skia/include/gpu/ganesh/vk/GrVkDirectContext.h +6 -3
- package/cpp/skia/include/gpu/ganesh/vk/GrVkTypes.h +101 -0
- package/cpp/skia/include/gpu/gl/GrGLAssembleHelpers.h +2 -9
- package/cpp/skia/include/gpu/gl/GrGLAssembleInterface.h +2 -38
- package/cpp/skia/include/gpu/gl/GrGLConfig.h +2 -73
- package/cpp/skia/include/gpu/gl/GrGLExtensions.h +2 -72
- package/cpp/skia/include/gpu/gl/GrGLFunctions.h +2 -301
- package/cpp/skia/include/gpu/gl/GrGLInterface.h +2 -332
- package/cpp/skia/include/gpu/gl/GrGLTypes.h +2 -213
- package/cpp/skia/include/gpu/graphite/BackendSemaphore.h +20 -41
- package/cpp/skia/include/gpu/graphite/BackendTexture.h +18 -118
- package/cpp/skia/include/gpu/graphite/Context.h +122 -44
- package/cpp/skia/include/gpu/graphite/ContextOptions.h +30 -3
- package/cpp/skia/include/gpu/graphite/GraphiteTypes.h +45 -17
- package/cpp/skia/include/gpu/graphite/Image.h +56 -54
- package/cpp/skia/include/gpu/graphite/Recorder.h +68 -14
- package/cpp/skia/include/gpu/graphite/Recording.h +3 -3
- package/cpp/skia/include/gpu/graphite/Surface.h +6 -2
- package/cpp/skia/include/gpu/graphite/TextureInfo.h +36 -117
- package/cpp/skia/include/gpu/graphite/dawn/DawnTypes.h +108 -6
- package/cpp/skia/include/gpu/graphite/mtl/MtlBackendContext.h +4 -1
- package/cpp/skia/include/gpu/graphite/mtl/MtlGraphiteTypes.h +41 -25
- package/cpp/skia/include/gpu/graphite/precompile/PaintOptions.h +197 -0
- package/cpp/skia/include/gpu/graphite/precompile/Precompile.h +48 -0
- package/cpp/skia/include/gpu/graphite/precompile/PrecompileBase.h +84 -0
- package/cpp/skia/include/gpu/graphite/precompile/PrecompileBlender.h +56 -0
- package/cpp/skia/include/gpu/graphite/precompile/PrecompileColorFilter.h +85 -0
- package/cpp/skia/include/gpu/graphite/precompile/PrecompileImageFilter.h +119 -0
- package/cpp/skia/include/gpu/graphite/precompile/PrecompileMaskFilter.h +51 -0
- package/cpp/skia/include/gpu/graphite/precompile/PrecompileRuntimeEffect.h +47 -0
- package/cpp/skia/include/gpu/graphite/precompile/PrecompileShader.h +170 -0
- package/cpp/skia/include/gpu/graphite/vk/VulkanGraphiteTypes.h +24 -2
- package/cpp/skia/include/gpu/mock/GrMockTypes.h +2 -157
- package/cpp/skia/include/gpu/mtl/MtlMemoryAllocator.h +2 -0
- package/cpp/skia/include/gpu/vk/GrVkTypes.h +2 -101
- package/cpp/skia/include/gpu/vk/VulkanBackendContext.h +13 -8
- package/cpp/skia/include/gpu/vk/VulkanExtensions.h +9 -3
- package/cpp/skia/include/gpu/vk/VulkanMemoryAllocator.h +4 -1
- package/cpp/skia/include/gpu/vk/VulkanTypes.h +25 -8
- package/cpp/skia/include/ports/SkFontMgr_Fontations.h +20 -0
- package/cpp/skia/include/ports/SkFontMgr_android.h +7 -0
- package/cpp/skia/include/ports/SkImageGeneratorCG.h +3 -1
- package/cpp/skia/include/ports/SkTypeface_win.h +0 -17
- package/cpp/skia/include/private/SkEncodedInfo.h +8 -2
- package/cpp/skia/include/private/SkExif.h +28 -75
- package/cpp/skia/include/private/SkGainmapInfo.h +47 -7
- package/cpp/skia/include/private/SkJpegMetadataDecoder.h +12 -0
- package/cpp/skia/include/private/SkPathRef.h +52 -44
- package/cpp/skia/include/private/SkXmp.h +13 -4
- package/cpp/skia/include/private/base/SkASAN.h +56 -0
- package/cpp/skia/include/private/base/SkAlign.h +5 -0
- package/cpp/skia/include/private/base/SkContainers.h +10 -2
- package/cpp/skia/include/private/base/SkFeatures.h +22 -1
- package/cpp/skia/include/private/base/SkFloatingPoint.h +51 -65
- package/cpp/skia/include/private/base/SkMacros.h +67 -0
- package/cpp/skia/include/private/base/SkMalloc.h +8 -0
- package/cpp/skia/include/private/base/SkPoint_impl.h +2 -11
- package/cpp/skia/include/private/base/SkTArray.h +108 -23
- package/cpp/skia/include/private/base/SkTFitsIn.h +1 -12
- package/cpp/skia/include/private/chromium/GrDeferredDisplayList.h +1 -1
- package/cpp/skia/include/private/chromium/GrDeferredDisplayListRecorder.h +0 -39
- package/cpp/skia/include/private/chromium/GrPromiseImageTexture.h +1 -1
- package/cpp/skia/include/private/chromium/GrSurfaceCharacterization.h +3 -3
- package/cpp/skia/include/private/chromium/SkChromeRemoteGlyphCache.h +1 -4
- package/cpp/skia/include/private/chromium/Slug.h +5 -11
- package/cpp/skia/include/private/gpu/ganesh/GrContext_Base.h +1 -1
- package/cpp/skia/include/private/gpu/ganesh/GrD3DTypesMinimal.h +2 -2
- package/cpp/skia/include/private/gpu/ganesh/GrTextureGenerator.h +1 -1
- package/cpp/skia/include/private/gpu/ganesh/GrTypesPriv.h +21 -93
- package/cpp/skia/include/private/gpu/vk/SkiaVulkan.h +2 -2
- package/cpp/skia/include/utils/SkCustomTypeface.h +1 -0
- package/cpp/skia/include/utils/SkNWayCanvas.h +1 -1
- package/cpp/skia/include/utils/SkParse.h +0 -1
- package/cpp/skia/modules/skcms/src/Transform_inl.h +59 -56
- package/cpp/skia/modules/skcms/src/skcms_Transform.h +3 -0
- package/cpp/skia/modules/skcms/src/skcms_internals.h +2 -0
- package/cpp/skia/modules/skcms/src/skcms_public.h +46 -14
- package/cpp/skia/modules/skparagraph/include/ParagraphBuilder.h +15 -1
- package/cpp/skia/modules/skparagraph/include/TextStyle.h +2 -2
- package/cpp/skia/modules/skparagraph/include/TypefaceFontProvider.h +2 -4
- package/cpp/skia/modules/skresources/include/SkResources.h +1 -1
- package/cpp/skia/modules/skshaper/include/SkShaper.h +316 -0
- package/cpp/skia/modules/skshaper/include/SkShaper_coretext.h +19 -0
- package/cpp/skia/modules/skshaper/include/SkShaper_factory.h +41 -0
- package/cpp/skia/modules/skshaper/include/SkShaper_harfbuzz.h +39 -0
- package/cpp/skia/modules/skshaper/include/SkShaper_skunicode.h +28 -0
- package/cpp/skia/modules/skunicode/include/SkUnicode.h +6 -23
- package/cpp/skia/modules/svg/include/SkSVGAttribute.h +0 -3
- package/cpp/skia/modules/svg/include/SkSVGAttributeParser.h +12 -2
- package/cpp/skia/modules/svg/include/SkSVGCircle.h +13 -0
- package/cpp/skia/modules/svg/include/SkSVGClipPath.h +6 -0
- package/cpp/skia/modules/svg/include/SkSVGContainer.h +17 -1
- package/cpp/skia/modules/svg/include/SkSVGDOM.h +25 -15
- package/cpp/skia/modules/svg/include/SkSVGEllipse.h +13 -2
- package/cpp/skia/modules/svg/include/SkSVGFe.h +11 -2
- package/cpp/skia/modules/svg/include/SkSVGFeBlend.h +9 -0
- package/cpp/skia/modules/svg/include/SkSVGFeColorMatrix.h +9 -0
- package/cpp/skia/modules/svg/include/SkSVGFeComponentTransfer.h +82 -0
- package/cpp/skia/modules/svg/include/SkSVGFeComposite.h +10 -1
- package/cpp/skia/modules/svg/include/SkSVGFeDisplacementMap.h +10 -0
- package/cpp/skia/modules/svg/include/SkSVGFeFlood.h +10 -0
- package/cpp/skia/modules/svg/include/SkSVGFeGaussianBlur.h +9 -0
- package/cpp/skia/modules/svg/include/SkSVGFeImage.h +9 -0
- package/cpp/skia/modules/svg/include/SkSVGFeLightSource.h +5 -0
- package/cpp/skia/modules/svg/include/SkSVGFeLighting.h +11 -0
- package/cpp/skia/modules/svg/include/SkSVGFeMerge.h +63 -0
- package/cpp/skia/modules/svg/include/SkSVGFeMorphology.h +8 -0
- package/cpp/skia/modules/svg/include/SkSVGFeOffset.h +9 -0
- package/cpp/skia/modules/svg/include/SkSVGFeTurbulence.h +9 -0
- package/cpp/skia/modules/svg/include/SkSVGFilter.h +9 -0
- package/cpp/skia/modules/svg/include/SkSVGFilterContext.h +3 -3
- package/cpp/skia/modules/svg/include/SkSVGGradient.h +10 -2
- package/cpp/skia/modules/svg/include/SkSVGImage.h +9 -0
- package/cpp/skia/modules/svg/include/SkSVGLine.h +11 -0
- package/cpp/skia/modules/svg/include/SkSVGLinearGradient.h +10 -0
- package/cpp/skia/modules/svg/include/SkSVGMask.h +6 -0
- package/cpp/skia/modules/svg/include/SkSVGNode.h +13 -2
- package/cpp/skia/modules/svg/include/SkSVGOpenTypeSVGDecoder.h +5 -0
- package/cpp/skia/modules/svg/include/SkSVGPath.h +10 -0
- package/cpp/skia/modules/svg/include/SkSVGPattern.h +5 -0
- package/cpp/skia/modules/svg/include/SkSVGPoly.h +11 -0
- package/cpp/skia/modules/svg/include/SkSVGRadialGradient.h +11 -0
- package/cpp/skia/modules/svg/include/SkSVGRect.h +11 -0
- package/cpp/skia/modules/svg/include/SkSVGRenderContext.h +43 -7
- package/cpp/skia/modules/svg/include/SkSVGSVG.h +7 -0
- package/cpp/skia/modules/svg/include/SkSVGShape.h +8 -2
- package/cpp/skia/modules/svg/include/SkSVGStop.h +5 -3
- package/cpp/skia/modules/svg/include/SkSVGText.h +8 -2
- package/cpp/skia/modules/svg/include/SkSVGTransformableNode.h +8 -0
- package/cpp/skia/modules/svg/include/SkSVGTypes.h +9 -0
- package/cpp/skia/modules/svg/include/SkSVGUse.h +7 -0
- package/cpp/skia/src/base/SkMathPriv.h +337 -0
- package/cpp/skia/src/base/SkTLazy.h +208 -0
- package/cpp/skia/src/core/SkTHash.h +58 -7
- package/cpp/skia/src/gpu/ganesh/gl/GrGLDefines.h +3 -0
- package/ios/RNSkia-iOS/RNSkiOSPlatformContext.h +3 -0
- package/ios/RNSkia-iOS/RNSkiOSPlatformContext.mm +7 -0
- package/ios/RNSkia-iOS/SkiaCVPixelBufferUtils.mm +7 -2
- package/ios/RNSkia-iOS/SkiaMetalSurfaceFactory.h +78 -0
- package/ios/RNSkia-iOS/SkiaMetalSurfaceFactory.mm +20 -4
- package/lib/commonjs/renderer/HostConfig.js.map +1 -1
- package/lib/commonjs/skia/types/Paragraph/TextStyle.d.ts +2 -2
- package/lib/commonjs/skia/types/Paragraph/TextStyle.js.map +1 -1
- package/lib/commonjs/skia/types/Skia.d.ts +6 -1
- package/lib/commonjs/skia/types/Skia.js.map +1 -1
- package/lib/commonjs/skia/web/JsiSkia.js +4 -1
- package/lib/commonjs/skia/web/JsiSkia.js.map +1 -1
- package/lib/commonjs/web/WithSkiaWeb.d.ts +11 -4
- package/lib/commonjs/web/WithSkiaWeb.js +3 -2
- package/lib/commonjs/web/WithSkiaWeb.js.map +1 -1
- package/lib/module/renderer/HostConfig.js.map +1 -1
- package/lib/module/skia/types/Paragraph/TextStyle.d.ts +2 -2
- package/lib/module/skia/types/Paragraph/TextStyle.js.map +1 -1
- package/lib/module/skia/types/Skia.d.ts +6 -1
- package/lib/module/skia/types/Skia.js.map +1 -1
- package/lib/module/skia/web/JsiSkia.js +4 -1
- package/lib/module/skia/web/JsiSkia.js.map +1 -1
- package/lib/module/web/WithSkiaWeb.d.ts +11 -4
- package/lib/module/web/WithSkiaWeb.js +3 -2
- package/lib/module/web/WithSkiaWeb.js.map +1 -1
- package/lib/typescript/lib/commonjs/skia/web/JsiSkia.d.ts +1 -0
- package/lib/typescript/lib/commonjs/web/WithSkiaWeb.d.ts +2 -1
- package/lib/typescript/lib/module/skia/Skia.web.d.ts +1 -0
- package/lib/typescript/lib/module/skia/web/JsiSkia.d.ts +1 -0
- package/lib/typescript/lib/module/web/WithSkiaWeb.d.ts +2 -1
- package/lib/typescript/src/skia/types/Paragraph/TextStyle.d.ts +2 -2
- package/lib/typescript/src/skia/types/Skia.d.ts +6 -1
- package/lib/typescript/src/web/WithSkiaWeb.d.ts +11 -4
- package/libs/android/arm64-v8a/libskia.a +0 -0
- package/libs/android/arm64-v8a/libskottie.a +0 -0
- package/libs/android/arm64-v8a/libskparagraph.a +0 -0
- package/libs/android/arm64-v8a/libsksg.a +0 -0
- package/libs/android/arm64-v8a/libskshaper.a +0 -0
- package/libs/android/arm64-v8a/libskunicode_core.a +0 -0
- package/libs/android/arm64-v8a/libskunicode_icu.a +0 -0
- package/libs/android/arm64-v8a/libsvg.a +0 -0
- package/libs/android/armeabi-v7a/libskia.a +0 -0
- package/libs/android/armeabi-v7a/libskottie.a +0 -0
- package/libs/android/armeabi-v7a/libskparagraph.a +0 -0
- package/libs/android/armeabi-v7a/libsksg.a +0 -0
- package/libs/android/armeabi-v7a/libskshaper.a +0 -0
- package/libs/android/armeabi-v7a/libskunicode_core.a +0 -0
- package/libs/android/armeabi-v7a/libskunicode_icu.a +0 -0
- package/libs/android/armeabi-v7a/libsvg.a +0 -0
- package/libs/android/x86/libskia.a +0 -0
- package/libs/android/x86/libskottie.a +0 -0
- package/libs/android/x86/libskparagraph.a +0 -0
- package/libs/android/x86/libsksg.a +0 -0
- package/libs/android/x86/libskshaper.a +0 -0
- package/libs/android/x86/libskunicode_core.a +0 -0
- package/libs/android/x86/libskunicode_icu.a +0 -0
- package/libs/android/x86/libsvg.a +0 -0
- package/libs/android/x86_64/libskia.a +0 -0
- package/libs/android/x86_64/libskottie.a +0 -0
- package/libs/android/x86_64/libskparagraph.a +0 -0
- package/libs/android/x86_64/libsksg.a +0 -0
- package/libs/android/x86_64/libskshaper.a +0 -0
- package/libs/android/x86_64/libskunicode_core.a +0 -0
- package/libs/android/x86_64/libskunicode_icu.a +0 -0
- package/libs/android/x86_64/libsvg.a +0 -0
- package/libs/ios/libskia.xcframework/Info.plist +5 -5
- package/libs/ios/libskia.xcframework/ios-arm64_arm64e/libskia.a +0 -0
- package/libs/ios/libskia.xcframework/ios-arm64_arm64e_x86_64-simulator/libskia.a +0 -0
- package/libs/ios/libskottie.xcframework/Info.plist +5 -5
- package/libs/ios/libskottie.xcframework/ios-arm64_arm64e/libskottie.a +0 -0
- package/libs/ios/libskottie.xcframework/ios-arm64_arm64e_x86_64-simulator/libskottie.a +0 -0
- package/libs/ios/libskparagraph.xcframework/ios-arm64_arm64e/libskparagraph.a +0 -0
- package/libs/ios/libskparagraph.xcframework/ios-arm64_arm64e_x86_64-simulator/libskparagraph.a +0 -0
- package/libs/ios/libsksg.xcframework/Info.plist +5 -5
- package/libs/ios/libsksg.xcframework/ios-arm64_arm64e/libsksg.a +0 -0
- package/libs/ios/libsksg.xcframework/ios-arm64_arm64e_x86_64-simulator/libsksg.a +0 -0
- package/libs/ios/libskshaper.xcframework/ios-arm64_arm64e/libskshaper.a +0 -0
- package/libs/ios/libskshaper.xcframework/ios-arm64_arm64e_x86_64-simulator/libskshaper.a +0 -0
- package/libs/ios/libsvg.xcframework/Info.plist +5 -5
- package/libs/ios/libsvg.xcframework/ios-arm64_arm64e/libsvg.a +0 -0
- package/libs/ios/libsvg.xcframework/ios-arm64_arm64e_x86_64-simulator/libsvg.a +0 -0
- package/package.json +3 -5
- package/react-native-skia.podspec +2 -1
- package/src/renderer/HostConfig.ts +5 -1
- package/src/renderer/__tests__/e2e/ImageFilters.spec.tsx +5 -2
- package/src/renderer/__tests__/e2e/Paths.spec.tsx +12 -5
- package/src/renderer/__tests__/e2e/SDF.spec.tsx +1 -1
- package/src/renderer/__tests__/e2e/Snapshot.spec.tsx +1 -1
- package/src/skia/types/Paragraph/TextStyle.ts +2 -2
- package/src/skia/types/Skia.ts +7 -1
- package/src/skia/web/JsiSkia.ts +3 -0
- package/src/web/WithSkiaWeb.tsx +17 -6
- package/cpp/skia/include/core/SkDrawLooper.h +0 -135
- package/cpp/skia/include/effects/SkBlurDrawLooper.h +0 -26
- package/cpp/skia/include/effects/SkLayerDrawLooper.h +0 -161
- package/cpp/skia/include/gpu/gl/GrGLConfig_chrome.h +0 -14
- package/cpp/skia/include/gpu/vk/GrVkBackendContext.h +0 -84
- package/cpp/skia/include/gpu/vk/GrVkExtensions.h +0 -15
- package/cpp/skia/include/gpu/vk/GrVkMemoryAllocator.h +0 -15
- package/cpp/skia/include/ports/SkFontMgr_indirect.h +0 -102
- package/cpp/skia/include/ports/SkRemotableFontMgr.h +0 -139
- package/cpp/skia/include/private/base/SkFloatBits.h +0 -90
- package/cpp/skia/include/private/gpu/graphite/ContextOptionsPriv.h +0 -69
- package/cpp/skia/include/private/gpu/graphite/DawnTypesPriv.h +0 -54
- package/cpp/skia/include/private/gpu/graphite/MtlGraphiteTypesPriv.h +0 -95
- package/cpp/skia/include/private/gpu/graphite/VulkanGraphiteTypesPriv.h +0 -83
- package/cpp/skia/src/core/SkPathEnums.h +0 -25
- package/cpp/skia/src/core/SkPathPriv.h +0 -540
- package/libs/android/arm64-v8a/libskunicode.a +0 -0
- package/libs/android/armeabi-v7a/libskunicode.a +0 -0
- package/libs/android/x86/libskunicode.a +0 -0
- package/libs/android/x86_64/libskunicode.a +0 -0
- package/libs/ios/libskunicode.xcframework/Info.plist +0 -46
- package/libs/ios/libskunicode.xcframework/ios-arm64_arm64e/libskunicode.a +0 -0
- package/libs/ios/libskunicode.xcframework/ios-arm64_arm64e_x86_64-simulator/libskunicode.a +0 -0
- /package/cpp/skia/include/gpu/{gl → ganesh/gl}/glx/GrGLMakeGLXInterface.h +0 -0
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2012 Google Inc.
|
|
3
|
+
*
|
|
4
|
+
* Use of this source code is governed by a BSD-style license that can be
|
|
5
|
+
* found in the LICENSE file.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#ifndef SkMathPriv_DEFINED
|
|
9
|
+
#define SkMathPriv_DEFINED
|
|
10
|
+
|
|
11
|
+
#include "include/private/base/SkAssert.h"
|
|
12
|
+
#include "include/private/base/SkCPUTypes.h"
|
|
13
|
+
#include "include/private/base/SkTemplates.h"
|
|
14
|
+
|
|
15
|
+
#include <cstddef>
|
|
16
|
+
#include <cstdint>
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Return the integer square root of value, with a bias of bitBias
|
|
20
|
+
*/
|
|
21
|
+
int32_t SkSqrtBits(int32_t value, int bitBias);
|
|
22
|
+
|
|
23
|
+
/** Return the integer square root of n, treated as a SkFixed (16.16)
|
|
24
|
+
*/
|
|
25
|
+
static inline int32_t SkSqrt32(int32_t n) { return SkSqrtBits(n, 15); }
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Returns (value < 0 ? 0 : value) efficiently (i.e. no compares or branches)
|
|
29
|
+
*/
|
|
30
|
+
static inline int SkClampPos(int value) {
|
|
31
|
+
return value & ~(value >> 31);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Stores numer/denom and numer%denom into div and mod respectively.
|
|
36
|
+
*/
|
|
37
|
+
template <typename In, typename Out>
|
|
38
|
+
inline void SkTDivMod(In numer, In denom, Out* div, Out* mod) {
|
|
39
|
+
*div = static_cast<Out>(numer/denom);
|
|
40
|
+
*mod = static_cast<Out>(numer%denom);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/** Returns -1 if n < 0, else returns 0
|
|
44
|
+
*/
|
|
45
|
+
#define SkExtractSign(n) ((int32_t)(n) >> 31)
|
|
46
|
+
|
|
47
|
+
/** If sign == -1, returns -n, else sign must be 0, and returns n.
|
|
48
|
+
Typically used in conjunction with SkExtractSign().
|
|
49
|
+
*/
|
|
50
|
+
static inline int32_t SkApplySign(int32_t n, int32_t sign) {
|
|
51
|
+
SkASSERT(sign == 0 || sign == -1);
|
|
52
|
+
return (n ^ sign) - sign;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/** Return x with the sign of y */
|
|
56
|
+
static inline int32_t SkCopySign32(int32_t x, int32_t y) {
|
|
57
|
+
return SkApplySign(x, SkExtractSign(x ^ y));
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/** Given a positive value and a positive max, return the value
|
|
61
|
+
pinned against max.
|
|
62
|
+
Note: only works as long as max - value doesn't wrap around
|
|
63
|
+
@return max if value >= max, else value
|
|
64
|
+
*/
|
|
65
|
+
static inline unsigned SkClampUMax(unsigned value, unsigned max) {
|
|
66
|
+
if (value > max) {
|
|
67
|
+
value = max;
|
|
68
|
+
}
|
|
69
|
+
return value;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// If a signed int holds min_int (e.g. 0x80000000) it is undefined what happens when
|
|
73
|
+
// we negate it (even though we *know* we're 2's complement and we'll get the same
|
|
74
|
+
// value back). So we create this helper function that casts to size_t (unsigned) first,
|
|
75
|
+
// to avoid the complaint.
|
|
76
|
+
static inline size_t sk_negate_to_size_t(int32_t value) {
|
|
77
|
+
#if defined(_MSC_VER)
|
|
78
|
+
#pragma warning(push)
|
|
79
|
+
#pragma warning(disable : 4146) // Thanks MSVC, we know what we're negating an unsigned
|
|
80
|
+
#endif
|
|
81
|
+
return -static_cast<size_t>(value);
|
|
82
|
+
#if defined(_MSC_VER)
|
|
83
|
+
#pragma warning(pop)
|
|
84
|
+
#endif
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
88
|
+
|
|
89
|
+
/** Return a*b/255, truncating away any fractional bits. Only valid if both
|
|
90
|
+
a and b are 0..255
|
|
91
|
+
*/
|
|
92
|
+
static inline U8CPU SkMulDiv255Trunc(U8CPU a, U8CPU b) {
|
|
93
|
+
SkASSERT((uint8_t)a == a);
|
|
94
|
+
SkASSERT((uint8_t)b == b);
|
|
95
|
+
unsigned prod = a*b + 1;
|
|
96
|
+
return (prod + (prod >> 8)) >> 8;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/** Return (a*b)/255, taking the ceiling of any fractional bits. Only valid if
|
|
100
|
+
both a and b are 0..255. The expected result equals (a * b + 254) / 255.
|
|
101
|
+
*/
|
|
102
|
+
static inline U8CPU SkMulDiv255Ceiling(U8CPU a, U8CPU b) {
|
|
103
|
+
SkASSERT((uint8_t)a == a);
|
|
104
|
+
SkASSERT((uint8_t)b == b);
|
|
105
|
+
unsigned prod = a*b + 255;
|
|
106
|
+
return (prod + (prod >> 8)) >> 8;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/** Just the rounding step in SkDiv255Round: round(value / 255)
|
|
110
|
+
*/
|
|
111
|
+
static inline unsigned SkDiv255Round(unsigned prod) {
|
|
112
|
+
prod += 128;
|
|
113
|
+
return (prod + (prod >> 8)) >> 8;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Swap byte order of a 4-byte value, e.g. 0xaarrggbb -> 0xbbggrraa.
|
|
118
|
+
*/
|
|
119
|
+
#if defined(_MSC_VER)
|
|
120
|
+
#include <stdlib.h>
|
|
121
|
+
static inline uint32_t SkBSwap32(uint32_t v) { return _byteswap_ulong(v); }
|
|
122
|
+
#else
|
|
123
|
+
static inline uint32_t SkBSwap32(uint32_t v) { return __builtin_bswap32(v); }
|
|
124
|
+
#endif
|
|
125
|
+
|
|
126
|
+
/*
|
|
127
|
+
* Return the number of set bits (i.e., the population count) in the provided uint32_t.
|
|
128
|
+
*/
|
|
129
|
+
int SkPopCount_portable(uint32_t n);
|
|
130
|
+
|
|
131
|
+
#if defined(__GNUC__) || defined(__clang__)
|
|
132
|
+
static inline int SkPopCount(uint32_t n) {
|
|
133
|
+
return __builtin_popcount(n);
|
|
134
|
+
}
|
|
135
|
+
#else
|
|
136
|
+
static inline int SkPopCount(uint32_t n) {
|
|
137
|
+
return SkPopCount_portable(n);
|
|
138
|
+
}
|
|
139
|
+
#endif
|
|
140
|
+
|
|
141
|
+
/*
|
|
142
|
+
* Return the 0-based index of the nth bit set in target
|
|
143
|
+
* Returns 32 if there is no nth bit set.
|
|
144
|
+
*/
|
|
145
|
+
int SkNthSet(uint32_t target, int n);
|
|
146
|
+
|
|
147
|
+
//! Returns the number of leading zero bits (0...32)
|
|
148
|
+
// From Hacker's Delight 2nd Edition
|
|
149
|
+
constexpr int SkCLZ_portable(uint32_t x) {
|
|
150
|
+
int n = 32;
|
|
151
|
+
uint32_t y = x >> 16; if (y != 0) {n -= 16; x = y;}
|
|
152
|
+
y = x >> 8; if (y != 0) {n -= 8; x = y;}
|
|
153
|
+
y = x >> 4; if (y != 0) {n -= 4; x = y;}
|
|
154
|
+
y = x >> 2; if (y != 0) {n -= 2; x = y;}
|
|
155
|
+
y = x >> 1; if (y != 0) {return n - 2;}
|
|
156
|
+
return n - static_cast<int>(x);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
static_assert(32 == SkCLZ_portable(0));
|
|
160
|
+
static_assert(31 == SkCLZ_portable(1));
|
|
161
|
+
static_assert( 1 == SkCLZ_portable(1 << 30));
|
|
162
|
+
static_assert( 1 == SkCLZ_portable((1 << 30) | (1 << 24) | 1));
|
|
163
|
+
static_assert( 0 == SkCLZ_portable(~0U));
|
|
164
|
+
|
|
165
|
+
#if defined(SK_BUILD_FOR_WIN)
|
|
166
|
+
#include <intrin.h>
|
|
167
|
+
|
|
168
|
+
static inline int SkCLZ(uint32_t mask) {
|
|
169
|
+
if (mask) {
|
|
170
|
+
unsigned long index = 0;
|
|
171
|
+
_BitScanReverse(&index, mask);
|
|
172
|
+
// Suppress this bogus /analyze warning. The check for non-zero
|
|
173
|
+
// guarantees that _BitScanReverse will succeed.
|
|
174
|
+
#pragma warning(push)
|
|
175
|
+
#pragma warning(suppress : 6102) // Using 'index' from failed function call
|
|
176
|
+
return static_cast<int>(index ^ 0x1F);
|
|
177
|
+
#pragma warning(pop)
|
|
178
|
+
} else {
|
|
179
|
+
return 32;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
#elif defined(SK_CPU_ARM32) || defined(__GNUC__) || defined(__clang__)
|
|
183
|
+
static inline int SkCLZ(uint32_t mask) {
|
|
184
|
+
// __builtin_clz(0) is undefined, so we have to detect that case.
|
|
185
|
+
return mask ? __builtin_clz(mask) : 32;
|
|
186
|
+
}
|
|
187
|
+
#else
|
|
188
|
+
static inline int SkCLZ(uint32_t mask) {
|
|
189
|
+
return SkCLZ_portable(mask);
|
|
190
|
+
}
|
|
191
|
+
#endif
|
|
192
|
+
|
|
193
|
+
//! Returns the number of trailing zero bits (0...32)
|
|
194
|
+
// From Hacker's Delight 2nd Edition
|
|
195
|
+
constexpr int SkCTZ_portable(uint32_t x) {
|
|
196
|
+
return 32 - SkCLZ_portable(~x & (x - 1));
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
static_assert(32 == SkCTZ_portable(0));
|
|
200
|
+
static_assert( 0 == SkCTZ_portable(1));
|
|
201
|
+
static_assert(30 == SkCTZ_portable(1 << 30));
|
|
202
|
+
static_assert( 2 == SkCTZ_portable((1 << 30) | (1 << 24) | (1 << 2)));
|
|
203
|
+
static_assert( 0 == SkCTZ_portable(~0U));
|
|
204
|
+
|
|
205
|
+
#if defined(SK_BUILD_FOR_WIN)
|
|
206
|
+
#include <intrin.h>
|
|
207
|
+
|
|
208
|
+
static inline int SkCTZ(uint32_t mask) {
|
|
209
|
+
if (mask) {
|
|
210
|
+
unsigned long index = 0;
|
|
211
|
+
_BitScanForward(&index, mask);
|
|
212
|
+
// Suppress this bogus /analyze warning. The check for non-zero
|
|
213
|
+
// guarantees that _BitScanReverse will succeed.
|
|
214
|
+
#pragma warning(push)
|
|
215
|
+
#pragma warning(suppress : 6102) // Using 'index' from failed function call
|
|
216
|
+
return static_cast<int>(index);
|
|
217
|
+
#pragma warning(pop)
|
|
218
|
+
} else {
|
|
219
|
+
return 32;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
#elif defined(SK_CPU_ARM32) || defined(__GNUC__) || defined(__clang__)
|
|
223
|
+
static inline int SkCTZ(uint32_t mask) {
|
|
224
|
+
// __builtin_ctz(0) is undefined, so we have to detect that case.
|
|
225
|
+
return mask ? __builtin_ctz(mask) : 32;
|
|
226
|
+
}
|
|
227
|
+
#else
|
|
228
|
+
static inline int SkCTZ(uint32_t mask) {
|
|
229
|
+
return SkCTZ_portable(mask);
|
|
230
|
+
}
|
|
231
|
+
#endif
|
|
232
|
+
|
|
233
|
+
/**
|
|
234
|
+
* Returns the log2 of the specified value, were that value to be rounded up
|
|
235
|
+
* to the next power of 2. It is undefined to pass 0. Examples:
|
|
236
|
+
* SkNextLog2(1) -> 0
|
|
237
|
+
* SkNextLog2(2) -> 1
|
|
238
|
+
* SkNextLog2(3) -> 2
|
|
239
|
+
* SkNextLog2(4) -> 2
|
|
240
|
+
* SkNextLog2(5) -> 3
|
|
241
|
+
*/
|
|
242
|
+
static inline int SkNextLog2(uint32_t value) {
|
|
243
|
+
SkASSERT(value != 0);
|
|
244
|
+
return 32 - SkCLZ(value - 1);
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
constexpr int SkNextLog2_portable(uint32_t value) {
|
|
248
|
+
SkASSERT(value != 0);
|
|
249
|
+
return 32 - SkCLZ_portable(value - 1);
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
/**
|
|
253
|
+
* Returns the log2 of the specified value, were that value to be rounded down
|
|
254
|
+
* to the previous power of 2. It is undefined to pass 0. Examples:
|
|
255
|
+
* SkPrevLog2(1) -> 0
|
|
256
|
+
* SkPrevLog2(2) -> 1
|
|
257
|
+
* SkPrevLog2(3) -> 1
|
|
258
|
+
* SkPrevLog2(4) -> 2
|
|
259
|
+
* SkPrevLog2(5) -> 2
|
|
260
|
+
*/
|
|
261
|
+
static inline int SkPrevLog2(uint32_t value) {
|
|
262
|
+
SkASSERT(value != 0);
|
|
263
|
+
return 32 - SkCLZ(value >> 1);
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
constexpr int SkPrevLog2_portable(uint32_t value) {
|
|
267
|
+
SkASSERT(value != 0);
|
|
268
|
+
return 32 - SkCLZ_portable(value >> 1);
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
/**
|
|
272
|
+
* Returns the smallest power-of-2 that is >= the specified value. If value
|
|
273
|
+
* is already a power of 2, then it is returned unchanged. It is undefined
|
|
274
|
+
* if value is <= 0.
|
|
275
|
+
*/
|
|
276
|
+
static inline int SkNextPow2(int value) {
|
|
277
|
+
SkASSERT(value > 0);
|
|
278
|
+
return 1 << SkNextLog2(static_cast<uint32_t>(value));
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
constexpr int SkNextPow2_portable(int value) {
|
|
282
|
+
SkASSERT(value > 0);
|
|
283
|
+
return 1 << SkNextLog2_portable(static_cast<uint32_t>(value));
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
/**
|
|
287
|
+
* Returns the largest power-of-2 that is <= the specified value. If value
|
|
288
|
+
* is already a power of 2, then it is returned unchanged. It is undefined
|
|
289
|
+
* if value is <= 0.
|
|
290
|
+
*/
|
|
291
|
+
static inline int SkPrevPow2(int value) {
|
|
292
|
+
SkASSERT(value > 0);
|
|
293
|
+
return 1 << SkPrevLog2(static_cast<uint32_t>(value));
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
constexpr int SkPrevPow2_portable(int value) {
|
|
297
|
+
SkASSERT(value > 0);
|
|
298
|
+
return 1 << SkPrevLog2_portable(static_cast<uint32_t>(value));
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
302
|
+
|
|
303
|
+
/**
|
|
304
|
+
* Return the smallest power-of-2 >= n.
|
|
305
|
+
*/
|
|
306
|
+
static inline uint32_t GrNextPow2(uint32_t n) {
|
|
307
|
+
return n ? (1 << (32 - SkCLZ(n - 1))) : 1;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
/**
|
|
311
|
+
* Returns the next power of 2 >= n or n if the next power of 2 can't be represented by size_t.
|
|
312
|
+
*/
|
|
313
|
+
static inline size_t GrNextSizePow2(size_t n) {
|
|
314
|
+
constexpr int kNumSizeTBits = 8 * sizeof(size_t);
|
|
315
|
+
constexpr size_t kHighBitSet = size_t(1) << (kNumSizeTBits - 1);
|
|
316
|
+
|
|
317
|
+
if (!n) {
|
|
318
|
+
return 1;
|
|
319
|
+
} else if (n >= kHighBitSet) {
|
|
320
|
+
return n;
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
n--;
|
|
324
|
+
uint32_t shift = 1;
|
|
325
|
+
while (shift < kNumSizeTBits) {
|
|
326
|
+
n |= n >> shift;
|
|
327
|
+
shift <<= 1;
|
|
328
|
+
}
|
|
329
|
+
return n + 1;
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
// conservative check. will return false for very large values that "could" fit
|
|
333
|
+
template <typename T> static inline bool SkFitsInFixed(T x) {
|
|
334
|
+
return SkTAbs(x) <= 32767.0f;
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
#endif
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2011 Google Inc.
|
|
3
|
+
*
|
|
4
|
+
* Use of this source code is governed by a BSD-style license that can be
|
|
5
|
+
* found in the LICENSE file.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#ifndef SkTLazy_DEFINED
|
|
9
|
+
#define SkTLazy_DEFINED
|
|
10
|
+
|
|
11
|
+
#include "include/private/base/SkAssert.h"
|
|
12
|
+
|
|
13
|
+
#include <optional>
|
|
14
|
+
#include <utility>
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Efficient way to defer allocating/initializing a class until it is needed
|
|
18
|
+
* (if ever).
|
|
19
|
+
*/
|
|
20
|
+
template <typename T> class SkTLazy {
|
|
21
|
+
public:
|
|
22
|
+
SkTLazy() = default;
|
|
23
|
+
explicit SkTLazy(const T* src) : fValue(src ? std::optional<T>(*src) : std::nullopt) {}
|
|
24
|
+
SkTLazy(const SkTLazy& that) : fValue(that.fValue) {}
|
|
25
|
+
SkTLazy(SkTLazy&& that) : fValue(std::move(that.fValue)) {}
|
|
26
|
+
|
|
27
|
+
~SkTLazy() = default;
|
|
28
|
+
|
|
29
|
+
SkTLazy& operator=(const SkTLazy& that) {
|
|
30
|
+
fValue = that.fValue;
|
|
31
|
+
return *this;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
SkTLazy& operator=(SkTLazy&& that) {
|
|
35
|
+
fValue = std::move(that.fValue);
|
|
36
|
+
return *this;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Return a pointer to an instance of the class initialized with 'args'.
|
|
41
|
+
* If a previous instance had been initialized (either from init() or
|
|
42
|
+
* set()) it will first be destroyed, so that a freshly initialized
|
|
43
|
+
* instance is always returned.
|
|
44
|
+
*/
|
|
45
|
+
template <typename... Args> T* init(Args&&... args) {
|
|
46
|
+
fValue.emplace(std::forward<Args>(args)...);
|
|
47
|
+
return this->get();
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Copy src into this, and return a pointer to a copy of it. Note this
|
|
52
|
+
* will always return the same pointer, so if it is called on a lazy that
|
|
53
|
+
* has already been initialized, then this will copy over the previous
|
|
54
|
+
* contents.
|
|
55
|
+
*/
|
|
56
|
+
T* set(const T& src) {
|
|
57
|
+
fValue = src;
|
|
58
|
+
return this->get();
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
T* set(T&& src) {
|
|
62
|
+
fValue = std::move(src);
|
|
63
|
+
return this->get();
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Destroy the lazy object (if it was created via init() or set())
|
|
68
|
+
*/
|
|
69
|
+
void reset() {
|
|
70
|
+
fValue.reset();
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Returns true if a valid object has been initialized in the SkTLazy,
|
|
75
|
+
* false otherwise.
|
|
76
|
+
*/
|
|
77
|
+
bool isValid() const { return fValue.has_value(); }
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Returns the object. This version should only be called when the caller
|
|
81
|
+
* knows that the object has been initialized.
|
|
82
|
+
*/
|
|
83
|
+
T* get() {
|
|
84
|
+
SkASSERT(fValue.has_value());
|
|
85
|
+
return &fValue.value();
|
|
86
|
+
}
|
|
87
|
+
const T* get() const {
|
|
88
|
+
SkASSERT(fValue.has_value());
|
|
89
|
+
return &fValue.value();
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
T* operator->() { return this->get(); }
|
|
93
|
+
const T* operator->() const { return this->get(); }
|
|
94
|
+
|
|
95
|
+
T& operator*() {
|
|
96
|
+
SkASSERT(fValue.has_value());
|
|
97
|
+
return *fValue;
|
|
98
|
+
}
|
|
99
|
+
const T& operator*() const {
|
|
100
|
+
SkASSERT(fValue.has_value());
|
|
101
|
+
return *fValue;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Like above but doesn't assert if object isn't initialized (in which case
|
|
106
|
+
* nullptr is returned).
|
|
107
|
+
*/
|
|
108
|
+
const T* getMaybeNull() const { return fValue.has_value() ? this->get() : nullptr; }
|
|
109
|
+
T* getMaybeNull() { return fValue.has_value() ? this->get() : nullptr; }
|
|
110
|
+
|
|
111
|
+
private:
|
|
112
|
+
std::optional<T> fValue;
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* A helper built on top of std::optional to do copy-on-first-write. The object is initialized
|
|
117
|
+
* with a const pointer but provides a non-const pointer accessor. The first time the
|
|
118
|
+
* accessor is called (if ever) the object is cloned.
|
|
119
|
+
*
|
|
120
|
+
* In the following example at most one copy of constThing is made:
|
|
121
|
+
*
|
|
122
|
+
* SkTCopyOnFirstWrite<Thing> thing(&constThing);
|
|
123
|
+
* ...
|
|
124
|
+
* function_that_takes_a_const_thing_ptr(thing); // constThing is passed
|
|
125
|
+
* ...
|
|
126
|
+
* if (need_to_modify_thing()) {
|
|
127
|
+
* thing.writable()->modifyMe(); // makes a copy of constThing
|
|
128
|
+
* }
|
|
129
|
+
* ...
|
|
130
|
+
* x = thing->readSomething();
|
|
131
|
+
* ...
|
|
132
|
+
* if (need_to_modify_thing_now()) {
|
|
133
|
+
* thing.writable()->changeMe(); // makes a copy of constThing if we didn't call modifyMe()
|
|
134
|
+
* }
|
|
135
|
+
*
|
|
136
|
+
* consume_a_thing(thing); // could be constThing or a modified copy.
|
|
137
|
+
*/
|
|
138
|
+
template <typename T>
|
|
139
|
+
class SkTCopyOnFirstWrite {
|
|
140
|
+
public:
|
|
141
|
+
explicit SkTCopyOnFirstWrite(const T& initial) : fObj(&initial) {}
|
|
142
|
+
|
|
143
|
+
explicit SkTCopyOnFirstWrite(const T* initial) : fObj(initial) {}
|
|
144
|
+
|
|
145
|
+
// Constructor for delayed initialization.
|
|
146
|
+
SkTCopyOnFirstWrite() : fObj(nullptr) {}
|
|
147
|
+
|
|
148
|
+
SkTCopyOnFirstWrite(const SkTCopyOnFirstWrite& that) { *this = that; }
|
|
149
|
+
SkTCopyOnFirstWrite( SkTCopyOnFirstWrite&& that) { *this = std::move(that); }
|
|
150
|
+
|
|
151
|
+
SkTCopyOnFirstWrite& operator=(const SkTCopyOnFirstWrite& that) {
|
|
152
|
+
fLazy = that.fLazy;
|
|
153
|
+
fObj = fLazy.has_value() ? &fLazy.value() : that.fObj;
|
|
154
|
+
return *this;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
SkTCopyOnFirstWrite& operator=(SkTCopyOnFirstWrite&& that) {
|
|
158
|
+
fLazy = std::move(that.fLazy);
|
|
159
|
+
fObj = fLazy.has_value() ? &fLazy.value() : that.fObj;
|
|
160
|
+
return *this;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
// Should only be called once, and only if the default constructor was used.
|
|
164
|
+
void init(const T& initial) {
|
|
165
|
+
SkASSERT(!fObj);
|
|
166
|
+
SkASSERT(!fLazy.has_value());
|
|
167
|
+
fObj = &initial;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
// If not already initialized, in-place instantiates the writable object
|
|
171
|
+
template <typename... Args>
|
|
172
|
+
void initIfNeeded(Args&&... args) {
|
|
173
|
+
if (!fObj) {
|
|
174
|
+
SkASSERT(!fLazy.has_value());
|
|
175
|
+
fObj = &fLazy.emplace(std::forward<Args>(args)...);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* Returns a writable T*. The first time this is called the initial object is cloned.
|
|
181
|
+
*/
|
|
182
|
+
T* writable() {
|
|
183
|
+
SkASSERT(fObj);
|
|
184
|
+
if (!fLazy.has_value()) {
|
|
185
|
+
fLazy = *fObj;
|
|
186
|
+
fObj = &fLazy.value();
|
|
187
|
+
}
|
|
188
|
+
return &fLazy.value();
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
const T* get() const { return fObj; }
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* Operators for treating this as though it were a const pointer.
|
|
195
|
+
*/
|
|
196
|
+
|
|
197
|
+
const T *operator->() const { return fObj; }
|
|
198
|
+
|
|
199
|
+
operator const T*() const { return fObj; }
|
|
200
|
+
|
|
201
|
+
const T& operator *() const { return *fObj; }
|
|
202
|
+
|
|
203
|
+
private:
|
|
204
|
+
const T* fObj;
|
|
205
|
+
std::optional<T> fLazy;
|
|
206
|
+
};
|
|
207
|
+
|
|
208
|
+
#endif
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
#define SkTHash_DEFINED
|
|
10
10
|
|
|
11
11
|
#include "include/core/SkTypes.h"
|
|
12
|
+
#include "src/base/SkMathPriv.h"
|
|
12
13
|
#include "src/core/SkChecksum.h"
|
|
13
14
|
|
|
14
15
|
#include <initializer_list>
|
|
@@ -73,6 +74,17 @@ public:
|
|
|
73
74
|
// Approximately how many bytes of memory do we use beyond sizeof(*this)?
|
|
74
75
|
size_t approxBytesUsed() const { return fCapacity * sizeof(Slot); }
|
|
75
76
|
|
|
77
|
+
// Exchange two hash tables.
|
|
78
|
+
void swap(THashTable& that) {
|
|
79
|
+
std::swap(fCount, that.fCount);
|
|
80
|
+
std::swap(fCapacity, that.fCapacity);
|
|
81
|
+
std::swap(fSlots, that.fSlots);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
void swap(THashTable&& that) {
|
|
85
|
+
*this = std::move(that);
|
|
86
|
+
}
|
|
87
|
+
|
|
76
88
|
// !!!!!!!!!!!!!!!!! CAUTION !!!!!!!!!!!!!!!!!
|
|
77
89
|
// set(), find() and foreach() all allow mutable access to table entries.
|
|
78
90
|
// If you change an entry so that it no longer has the same key, all hell
|
|
@@ -130,11 +142,11 @@ public:
|
|
|
130
142
|
return false;
|
|
131
143
|
}
|
|
132
144
|
if (hash == s.fHash && key == Traits::GetKey(*s)) {
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
145
|
+
this->removeSlot(index);
|
|
146
|
+
if (4 * fCount <= fCapacity && fCapacity > 4) {
|
|
147
|
+
this->resize(fCapacity / 2);
|
|
148
|
+
}
|
|
149
|
+
return true;
|
|
138
150
|
}
|
|
139
151
|
index = this->next(index);
|
|
140
152
|
}
|
|
@@ -150,7 +162,12 @@ public:
|
|
|
150
162
|
// Hash tables will automatically resize themselves when set() and remove() are called, but
|
|
151
163
|
// resize() can be called to manually grow capacity before a bulk insertion.
|
|
152
164
|
void resize(int capacity) {
|
|
165
|
+
// We must have enough capacity to hold every key.
|
|
153
166
|
SkASSERT(capacity >= fCount);
|
|
167
|
+
// `capacity` must be a power of two, because we use `hash & (capacity-1)` to look up keys
|
|
168
|
+
// in the table (since this is faster than a modulo).
|
|
169
|
+
SkASSERT((capacity & (capacity - 1)) == 0);
|
|
170
|
+
|
|
154
171
|
int oldCapacity = fCapacity;
|
|
155
172
|
SkDEBUGCODE(int oldCount = fCount);
|
|
156
173
|
|
|
@@ -168,6 +185,22 @@ public:
|
|
|
168
185
|
SkASSERT(fCount == oldCount);
|
|
169
186
|
}
|
|
170
187
|
|
|
188
|
+
// Reserve extra capacity. This only grows capacity; requests to shrink are ignored.
|
|
189
|
+
// We assume that the passed-in value represents the number of items that the caller wants to
|
|
190
|
+
// store in the table. The passed-in value is adjusted to honor the following rules:
|
|
191
|
+
// - Hash tables must have a power-of-two capacity.
|
|
192
|
+
// - Hash tables grow when they exceed 3/4 capacity, not when they are full.
|
|
193
|
+
void reserve(int n) {
|
|
194
|
+
int newCapacity = SkNextPow2(n);
|
|
195
|
+
if (n * 4 > newCapacity * 3) {
|
|
196
|
+
newCapacity *= 2;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
if (newCapacity > fCapacity) {
|
|
200
|
+
this->resize(newCapacity);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
|
|
171
204
|
// Call fn on every entry in the table. You may mutate the entries, but be very careful.
|
|
172
205
|
template <typename Fn> // f(T*)
|
|
173
206
|
void foreach(Fn&& fn) {
|
|
@@ -447,7 +480,9 @@ public:
|
|
|
447
480
|
};
|
|
448
481
|
|
|
449
482
|
THashMap(std::initializer_list<Pair> pairs) {
|
|
450
|
-
|
|
483
|
+
int capacity = pairs.size() >= 4 ? SkNextPow2(pairs.size() * 4 / 3)
|
|
484
|
+
: 4;
|
|
485
|
+
fTable.resize(capacity);
|
|
451
486
|
for (const Pair& p : pairs) {
|
|
452
487
|
fTable.set(p);
|
|
453
488
|
}
|
|
@@ -465,6 +500,13 @@ public:
|
|
|
465
500
|
// Approximately how many bytes of memory do we use beyond sizeof(*this)?
|
|
466
501
|
size_t approxBytesUsed() const { return fTable.approxBytesUsed(); }
|
|
467
502
|
|
|
503
|
+
// Reserve extra capacity.
|
|
504
|
+
void reserve(int n) { fTable.reserve(n); }
|
|
505
|
+
|
|
506
|
+
// Exchange two hash maps.
|
|
507
|
+
void swap(THashMap& that) { fTable.swap(that.fTable); }
|
|
508
|
+
void swap(THashMap&& that) { fTable.swap(std::move(that.fTable)); }
|
|
509
|
+
|
|
468
510
|
// N.B. The pointers returned by set() and find() are valid only until the next call to set().
|
|
469
511
|
|
|
470
512
|
// Set key to val in the table, replacing any previous value with the same key.
|
|
@@ -551,7 +593,9 @@ public:
|
|
|
551
593
|
|
|
552
594
|
// Construct with an initializer list of Ts.
|
|
553
595
|
THashSet(std::initializer_list<T> vals) {
|
|
554
|
-
|
|
596
|
+
int capacity = vals.size() >= 4 ? SkNextPow2(vals.size() * 4 / 3)
|
|
597
|
+
: 4;
|
|
598
|
+
fTable.resize(capacity);
|
|
555
599
|
for (const T& val : vals) {
|
|
556
600
|
fTable.set(val);
|
|
557
601
|
}
|
|
@@ -569,6 +613,13 @@ public:
|
|
|
569
613
|
// Approximately how many bytes of memory do we use beyond sizeof(*this)?
|
|
570
614
|
size_t approxBytesUsed() const { return fTable.approxBytesUsed(); }
|
|
571
615
|
|
|
616
|
+
// Reserve extra capacity.
|
|
617
|
+
void reserve(int n) { fTable.reserve(n); }
|
|
618
|
+
|
|
619
|
+
// Exchange two hash sets.
|
|
620
|
+
void swap(THashSet& that) { fTable.swap(that.fTable); }
|
|
621
|
+
void swap(THashSet&& that) { fTable.swap(std::move(that.fTable)); }
|
|
622
|
+
|
|
572
623
|
// Copy an item into the set.
|
|
573
624
|
void add(T item) { fTable.set(std::move(item)); }
|
|
574
625
|
|
|
@@ -67,6 +67,9 @@ public:
|
|
|
67
67
|
|
|
68
68
|
std::shared_ptr<RNSkVideo> createVideo(const std::string &url) override;
|
|
69
69
|
|
|
70
|
+
std::shared_ptr<SkiaContext>
|
|
71
|
+
makeContextFromNativeSurface(void *surface, int width, int height) override;
|
|
72
|
+
|
|
70
73
|
virtual void performStreamOperation(
|
|
71
74
|
const std::string &sourceUri,
|
|
72
75
|
const std::function<void(std::unique_ptr<SkStreamAsset>)> &op) override;
|
|
@@ -149,6 +149,13 @@ RNSkiOSPlatformContext::createVideo(const std::string &url) {
|
|
|
149
149
|
return std::make_shared<RNSkiOSVideo>(url, this);
|
|
150
150
|
}
|
|
151
151
|
|
|
152
|
+
std::shared_ptr<SkiaContext>
|
|
153
|
+
RNSkiOSPlatformContext::makeContextFromNativeSurface(void *surface, int width,
|
|
154
|
+
int height) {
|
|
155
|
+
return SkiaMetalSurfaceFactory::makeContext((__bridge CALayer *)surface,
|
|
156
|
+
width, height);
|
|
157
|
+
}
|
|
158
|
+
|
|
152
159
|
void RNSkiOSPlatformContext::raiseError(const std::exception &err) {
|
|
153
160
|
RCTFatal(RCTErrorWithMessage([NSString stringWithUTF8String:err.what()]));
|
|
154
161
|
}
|