@shopify/react-native-skia 2.9.1 → 2.10.1
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 +8 -46
- package/android/build.gradle +33 -0
- package/android/src/main/java/com/shopify/reactnative/skia/RNSkiaPackage.java +1 -2
- package/cpp/api/JsiNativeBuffer.h +23 -24
- package/cpp/api/JsiSkAnimatedImage.h +24 -25
- package/cpp/api/JsiSkAnimatedImageFactory.h +18 -17
- package/cpp/api/JsiSkApi.h +254 -96
- package/cpp/api/JsiSkCanvas.h +141 -266
- package/cpp/api/JsiSkColor.h +7 -5
- package/cpp/api/JsiSkColorFilter.h +15 -8
- package/cpp/api/JsiSkColorFilterFactory.h +49 -67
- package/cpp/api/JsiSkContourMeasure.h +31 -38
- package/cpp/api/JsiSkContourMeasureIter.h +20 -23
- package/cpp/api/JsiSkConverters.h +410 -0
- package/cpp/api/JsiSkData.h +13 -7
- package/cpp/api/JsiSkDataFactory.h +27 -32
- package/cpp/api/JsiSkFont.h +123 -192
- package/cpp/api/JsiSkFontMgr.h +33 -26
- package/cpp/api/JsiSkFontMgrFactory.h +12 -11
- package/cpp/api/JsiSkFontStyle.h +14 -12
- package/cpp/api/JsiSkImage.h +90 -79
- package/cpp/api/JsiSkImageFactory.h +93 -95
- package/cpp/api/JsiSkImageFilter.h +21 -11
- package/cpp/api/JsiSkImageFilterFactory.h +375 -629
- package/cpp/api/JsiSkImageInfo.h +25 -25
- package/cpp/api/JsiSkMaskFilter.h +21 -11
- package/cpp/api/JsiSkMaskFilterFactory.h +17 -17
- package/cpp/api/JsiSkMatrix.h +51 -88
- package/cpp/api/JsiSkNativeObjects.h +387 -0
- package/cpp/api/JsiSkPaint.h +104 -142
- package/cpp/api/JsiSkParagraph.h +54 -64
- package/cpp/api/JsiSkParagraphBuilder.h +43 -68
- package/cpp/api/JsiSkParagraphBuilderFactory.h +20 -24
- package/cpp/api/JsiSkPath.h +242 -350
- package/cpp/api/JsiSkPathBuilder.h +153 -273
- package/cpp/api/JsiSkPathBuilderFactory.h +19 -20
- package/cpp/api/JsiSkPathEffect.h +21 -11
- package/cpp/api/JsiSkPathEffectFactory.h +61 -80
- package/cpp/api/JsiSkPathFactory.h +148 -238
- package/cpp/api/JsiSkPicture.h +32 -27
- package/cpp/api/JsiSkPictureFactory.h +21 -26
- package/cpp/api/JsiSkPictureRecorder.h +27 -29
- package/cpp/api/JsiSkPoint.h +20 -23
- package/cpp/api/JsiSkRRect.h +24 -32
- package/cpp/api/JsiSkRSXform.h +31 -48
- package/cpp/api/JsiSkRect.h +40 -50
- package/cpp/api/JsiSkRuntimeEffect.h +85 -92
- package/cpp/api/JsiSkRuntimeEffectFactory.h +14 -18
- package/cpp/api/JsiSkRuntimeShaderBuilder.h +28 -30
- package/cpp/api/JsiSkSVG.h +15 -15
- package/cpp/api/JsiSkSVGFactory.h +17 -20
- package/cpp/api/JsiSkShader.h +15 -8
- package/cpp/api/JsiSkShaderFactory.h +159 -238
- package/cpp/api/JsiSkSkottie.h +131 -143
- package/cpp/api/JsiSkSurface.h +29 -32
- package/cpp/api/JsiSkSurfaceFactory.h +18 -20
- package/cpp/api/JsiSkTextBlob.h +15 -8
- package/cpp/api/JsiSkTextBlobFactory.h +40 -66
- package/cpp/api/JsiSkTypeface.h +25 -22
- package/cpp/api/JsiSkTypefaceFactory.h +17 -15
- package/cpp/api/JsiSkTypefaceFontProvider.h +43 -39
- package/cpp/api/JsiSkTypefaceFontProviderFactory.h +13 -12
- package/cpp/api/JsiSkVertices.h +23 -22
- package/cpp/api/JsiSkiaContext.h +22 -23
- package/cpp/api/JsiSkottieFactory.h +16 -17
- package/cpp/api/JsiVideo.h +43 -81
- package/cpp/api/recorder/Convertor.h +31 -61
- package/cpp/api/recorder/DataTypes.h +8 -16
- package/cpp/api/recorder/JsiRecorder.h +83 -55
- package/cpp/api/recorder/RNRecorder.h +1 -1
- package/cpp/jsi/BoxedNativeObject.h +146 -0
- package/cpp/{jsi2 → jsi}/EnumMapper.h +4 -1
- package/cpp/{jsi2 → jsi}/JSIConverter.h +0 -31
- package/cpp/{jsi2 → jsi}/NativeObject.h +131 -152
- package/cpp/jsi/RuntimeAwareCache.cpp +1 -1
- package/cpp/jsi/RuntimeAwareCache.h +26 -8
- package/cpp/jsi/ViewProperty.h +5 -11
- package/cpp/rnskia/RNDawnContext.h +18 -2
- package/cpp/rnskia/RNDawnInterop.cpp +19 -0
- package/cpp/rnskia/RNDawnUtils.h +18 -1
- package/cpp/rnskia/RNSkJsiViewApi.h +20 -11
- package/cpp/rnskia/RNSkManager.cpp +9 -168
- package/cpp/rnskia/RNSkPictureView.h +1 -1
- package/cpp/skia/include/gpu/ganesh/GrDriverBugWorkaroundsAutogen.h +2 -0
- package/lib/commonjs/external/reanimated/renderHelpers.d.ts +15 -0
- package/lib/commonjs/external/reanimated/renderHelpers.js +30 -1
- package/lib/commonjs/external/reanimated/renderHelpers.js.map +1 -1
- package/lib/commonjs/mock/index.js +0 -1
- package/lib/commonjs/mock/index.js.map +1 -1
- package/lib/commonjs/skia/NativeSetup.js +4 -0
- package/lib/commonjs/skia/NativeSetup.js.map +1 -1
- package/lib/commonjs/skia/SkiaWorkletSerialization.d.ts +1 -0
- package/lib/commonjs/skia/SkiaWorkletSerialization.js +66 -0
- package/lib/commonjs/skia/SkiaWorkletSerialization.js.map +1 -0
- package/lib/commonjs/skia/types/Image/ImageFactory.d.ts +15 -6
- package/lib/commonjs/skia/types/Image/ImageFactory.js.map +1 -1
- package/lib/commonjs/skia/types/Skia.d.ts +5 -15
- package/lib/commonjs/skia/types/Skia.js.map +1 -1
- package/lib/commonjs/skia/types/index.d.ts +0 -1
- package/lib/commonjs/skia/types/index.js +0 -11
- package/lib/commonjs/skia/types/index.js.map +1 -1
- package/lib/commonjs/skia/web/JsiSkImageFactory.d.ts +2 -2
- package/lib/commonjs/skia/web/JsiSkImageFactory.js +2 -2
- package/lib/commonjs/skia/web/JsiSkImageFactory.js.map +1 -1
- package/lib/commonjs/skia/web/JsiSkia.js +1 -4
- package/lib/commonjs/skia/web/JsiSkia.js.map +1 -1
- package/lib/commonjs/sksg/Container.native.js +20 -1
- package/lib/commonjs/sksg/Container.native.js.map +1 -1
- package/lib/commonjs/views/index.d.ts +0 -1
- package/lib/commonjs/views/index.js +0 -11
- package/lib/commonjs/views/index.js.map +1 -1
- package/lib/module/external/reanimated/renderHelpers.d.ts +15 -0
- package/lib/module/external/reanimated/renderHelpers.js +29 -0
- package/lib/module/external/reanimated/renderHelpers.js.map +1 -1
- package/lib/module/mock/index.js +0 -1
- package/lib/module/mock/index.js.map +1 -1
- package/lib/module/skia/NativeSetup.js +4 -0
- package/lib/module/skia/NativeSetup.js.map +1 -1
- package/lib/module/skia/SkiaWorkletSerialization.d.ts +1 -0
- package/lib/module/skia/SkiaWorkletSerialization.js +59 -0
- package/lib/module/skia/SkiaWorkletSerialization.js.map +1 -0
- package/lib/module/skia/types/Image/ImageFactory.d.ts +15 -6
- package/lib/module/skia/types/Image/ImageFactory.js.map +1 -1
- package/lib/module/skia/types/Skia.d.ts +5 -15
- package/lib/module/skia/types/Skia.js.map +1 -1
- package/lib/module/skia/types/index.d.ts +0 -1
- package/lib/module/skia/types/index.js +0 -1
- package/lib/module/skia/types/index.js.map +1 -1
- package/lib/module/skia/web/JsiSkImageFactory.d.ts +2 -2
- package/lib/module/skia/web/JsiSkImageFactory.js +2 -2
- package/lib/module/skia/web/JsiSkImageFactory.js.map +1 -1
- package/lib/module/skia/web/JsiSkia.js +1 -4
- package/lib/module/skia/web/JsiSkia.js.map +1 -1
- package/lib/module/sksg/Container.native.js +21 -2
- package/lib/module/sksg/Container.native.js.map +1 -1
- package/lib/module/views/index.d.ts +0 -1
- package/lib/module/views/index.js +0 -1
- package/lib/module/views/index.js.map +1 -1
- package/lib/typescript/lib/commonjs/external/reanimated/renderHelpers.d.ts +2 -0
- package/lib/typescript/lib/commonjs/mock/index.d.ts +0 -1
- package/lib/typescript/lib/commonjs/skia/SkiaWorkletSerialization.d.ts +2 -0
- package/lib/typescript/lib/commonjs/skia/web/JsiSkImageFactory.d.ts +2 -2
- package/lib/typescript/lib/commonjs/skia/web/JsiSkia.d.ts +1 -2
- package/lib/typescript/lib/module/external/reanimated/renderHelpers.d.ts +15 -0
- package/lib/typescript/lib/module/mock/index.d.ts +0 -2
- package/lib/typescript/lib/module/skia/Skia.web.d.ts +1 -2
- package/lib/typescript/lib/module/skia/SkiaWorkletSerialization.d.ts +1 -0
- package/lib/typescript/lib/module/skia/types/index.d.ts +0 -1
- package/lib/typescript/lib/module/skia/web/JsiSkImageFactory.d.ts +2 -2
- package/lib/typescript/lib/module/skia/web/JsiSkia.d.ts +1 -2
- package/lib/typescript/lib/module/views/index.d.ts +0 -1
- package/lib/typescript/src/external/reanimated/renderHelpers.d.ts +15 -0
- package/lib/typescript/src/skia/SkiaWorkletSerialization.d.ts +1 -0
- package/lib/typescript/src/skia/types/Image/ImageFactory.d.ts +15 -6
- package/lib/typescript/src/skia/types/Skia.d.ts +5 -15
- package/lib/typescript/src/skia/types/index.d.ts +0 -1
- package/lib/typescript/src/skia/web/JsiSkImageFactory.d.ts +2 -2
- package/lib/typescript/src/views/index.d.ts +0 -1
- package/package.json +8 -5
- package/react-native-skia.podspec +38 -5
- package/src/external/reanimated/renderHelpers.ts +30 -0
- package/src/mock/index.ts +0 -1
- package/src/skia/NativeSetup.ts +5 -0
- package/src/skia/SkiaWorkletSerialization.ts +67 -0
- package/src/skia/types/Image/ImageFactory.ts +15 -6
- package/src/skia/types/Skia.ts +5 -15
- package/src/skia/types/index.ts +0 -1
- package/src/skia/web/JsiSkImageFactory.ts +3 -3
- package/src/skia/web/JsiSkia.ts +2 -5
- package/src/sksg/Container.native.ts +40 -2
- package/src/views/index.ts +0 -1
- package/android/cpp/jni/JniWebGPUView.cpp +0 -112
- package/android/cpp/rnskia-android/SkiaPlatformContext.h +0 -26
- package/android/src/main/java/com/shopify/reactnative/skia/WebGPUSurfaceView.java +0 -43
- package/android/src/main/java/com/shopify/reactnative/skia/WebGPUTextureView.java +0 -50
- package/android/src/main/java/com/shopify/reactnative/skia/WebGPUView.java +0 -98
- package/android/src/main/java/com/shopify/reactnative/skia/WebGPUViewAPI.java +0 -19
- package/android/src/main/java/com/shopify/reactnative/skia/WebGPUViewManager.java +0 -58
- package/apple/RNWebGPUAppleNativeBuffer.mm +0 -33
- package/apple/SkiaPlatformContext.h +0 -20
- package/apple/SkiaPlatformContext.mm +0 -21
- package/apple/SkiaWebGPUView.mm +0 -81
- package/apple/WebGPUMetalView.mm +0 -136
- package/cpp/api/JsiSkHostObjects.h +0 -257
- package/cpp/jsi/JsiHostObject.cpp +0 -137
- package/cpp/jsi/JsiHostObject.h +0 -385
- package/cpp/rnwgpu/ArrayBuffer.h +0 -117
- package/cpp/rnwgpu/Canvas.h +0 -50
- package/cpp/rnwgpu/PlatformContext.h +0 -18
- package/cpp/rnwgpu/SurfaceRegistry.h +0 -605
- package/cpp/rnwgpu/api/AppleNativeBuffer.h +0 -22
- package/cpp/rnwgpu/api/Convertors.h +0 -783
- package/cpp/rnwgpu/api/External.h +0 -12
- package/cpp/rnwgpu/api/GPU.cpp +0 -162
- package/cpp/rnwgpu/api/GPU.h +0 -60
- package/cpp/rnwgpu/api/GPUAdapter.cpp +0 -240
- package/cpp/rnwgpu/api/GPUAdapter.h +0 -60
- package/cpp/rnwgpu/api/GPUAdapterInfo.h +0 -57
- package/cpp/rnwgpu/api/GPUBindGroup.cpp +0 -3
- package/cpp/rnwgpu/api/GPUBindGroup.h +0 -51
- package/cpp/rnwgpu/api/GPUBindGroupLayout.h +0 -52
- package/cpp/rnwgpu/api/GPUBuffer.cpp +0 -107
- package/cpp/rnwgpu/api/GPUBuffer.h +0 -88
- package/cpp/rnwgpu/api/GPUCanvasContext.cpp +0 -75
- package/cpp/rnwgpu/api/GPUCanvasContext.h +0 -70
- package/cpp/rnwgpu/api/GPUCommandBuffer.h +0 -45
- package/cpp/rnwgpu/api/GPUCommandEncoder.cpp +0 -179
- package/cpp/rnwgpu/api/GPUCommandEncoder.h +0 -111
- package/cpp/rnwgpu/api/GPUCompilationInfo.h +0 -79
- package/cpp/rnwgpu/api/GPUCompilationMessage.h +0 -36
- package/cpp/rnwgpu/api/GPUComputePassEncoder.cpp +0 -60
- package/cpp/rnwgpu/api/GPUComputePassEncoder.h +0 -85
- package/cpp/rnwgpu/api/GPUComputePipeline.cpp +0 -12
- package/cpp/rnwgpu/api/GPUComputePipeline.h +0 -60
- package/cpp/rnwgpu/api/GPUDevice.cpp +0 -614
- package/cpp/rnwgpu/api/GPUDevice.h +0 -258
- package/cpp/rnwgpu/api/GPUDeviceLostInfo.cpp +0 -7
- package/cpp/rnwgpu/api/GPUDeviceLostInfo.h +0 -40
- package/cpp/rnwgpu/api/GPUError.h +0 -35
- package/cpp/rnwgpu/api/GPUExtent3D.h +0 -66
- package/cpp/rnwgpu/api/GPUExternalTexture.cpp +0 -139
- package/cpp/rnwgpu/api/GPUExternalTexture.h +0 -95
- package/cpp/rnwgpu/api/GPUFeatures.h +0 -203
- package/cpp/rnwgpu/api/GPUInternalError.h +0 -31
- package/cpp/rnwgpu/api/GPUOrigin2D.h +0 -55
- package/cpp/rnwgpu/api/GPUOrigin3D.h +0 -62
- package/cpp/rnwgpu/api/GPUOutOfMemoryError.h +0 -33
- package/cpp/rnwgpu/api/GPUPipelineLayout.h +0 -45
- package/cpp/rnwgpu/api/GPUQuerySet.cpp +0 -11
- package/cpp/rnwgpu/api/GPUQuerySet.h +0 -73
- package/cpp/rnwgpu/api/GPUQueue.cpp +0 -179
- package/cpp/rnwgpu/api/GPUQueue.h +0 -84
- package/cpp/rnwgpu/api/GPURenderBundle.h +0 -44
- package/cpp/rnwgpu/api/GPURenderBundleEncoder.cpp +0 -131
- package/cpp/rnwgpu/api/GPURenderBundleEncoder.h +0 -110
- package/cpp/rnwgpu/api/GPURenderPassEncoder.cpp +0 -165
- package/cpp/rnwgpu/api/GPURenderPassEncoder.h +0 -130
- package/cpp/rnwgpu/api/GPURenderPipeline.cpp +0 -13
- package/cpp/rnwgpu/api/GPURenderPipeline.h +0 -61
- package/cpp/rnwgpu/api/GPUSampler.h +0 -44
- package/cpp/rnwgpu/api/GPUShaderModule.cpp +0 -56
- package/cpp/rnwgpu/api/GPUShaderModule.h +0 -66
- package/cpp/rnwgpu/api/GPUSharedFence.cpp +0 -80
- package/cpp/rnwgpu/api/GPUSharedFence.h +0 -53
- package/cpp/rnwgpu/api/GPUSharedTextureMemory.cpp +0 -135
- package/cpp/rnwgpu/api/GPUSharedTextureMemory.h +0 -75
- package/cpp/rnwgpu/api/GPUSupportedLimits.cpp +0 -129
- package/cpp/rnwgpu/api/GPUSupportedLimits.h +0 -131
- package/cpp/rnwgpu/api/GPUTexture.cpp +0 -47
- package/cpp/rnwgpu/api/GPUTexture.h +0 -162
- package/cpp/rnwgpu/api/GPUTextureView.h +0 -44
- package/cpp/rnwgpu/api/GPUUncapturedErrorEvent.h +0 -60
- package/cpp/rnwgpu/api/GPUValidationError.h +0 -32
- package/cpp/rnwgpu/api/ImageBitmap.h +0 -62
- package/cpp/rnwgpu/api/NativeBufferUtils.h +0 -87
- package/cpp/rnwgpu/api/RNWebGPU.h +0 -82
- package/cpp/rnwgpu/api/WebGPUConstants.h +0 -36
- package/cpp/rnwgpu/api/descriptors/GPUBindGroupDescriptor.h +0 -64
- package/cpp/rnwgpu/api/descriptors/GPUBindGroupEntry.h +0 -78
- package/cpp/rnwgpu/api/descriptors/GPUBindGroupLayoutDescriptor.h +0 -56
- package/cpp/rnwgpu/api/descriptors/GPUBindGroupLayoutEntry.h +0 -97
- package/cpp/rnwgpu/api/descriptors/GPUBlendComponent.h +0 -57
- package/cpp/rnwgpu/api/descriptors/GPUBlendState.h +0 -52
- package/cpp/rnwgpu/api/descriptors/GPUBufferBinding.h +0 -56
- package/cpp/rnwgpu/api/descriptors/GPUBufferBindingLayout.h +0 -56
- package/cpp/rnwgpu/api/descriptors/GPUBufferDescriptor.h +0 -59
- package/cpp/rnwgpu/api/descriptors/GPUBufferUsage.h +0 -39
- package/cpp/rnwgpu/api/descriptors/GPUCanvasConfiguration.h +0 -76
- package/cpp/rnwgpu/api/descriptors/GPUColor.h +0 -66
- package/cpp/rnwgpu/api/descriptors/GPUColorTargetState.h +0 -58
- package/cpp/rnwgpu/api/descriptors/GPUColorWrite.h +0 -29
- package/cpp/rnwgpu/api/descriptors/GPUCommandBufferDescriptor.h +0 -45
- package/cpp/rnwgpu/api/descriptors/GPUCommandEncoderDescriptor.h +0 -45
- package/cpp/rnwgpu/api/descriptors/GPUComputePassDescriptor.h +0 -56
- package/cpp/rnwgpu/api/descriptors/GPUComputePassTimestampWrites.h +0 -58
- package/cpp/rnwgpu/api/descriptors/GPUComputePipelineDescriptor.h +0 -67
- package/cpp/rnwgpu/api/descriptors/GPUDawnTogglesDescriptor.h +0 -56
- package/cpp/rnwgpu/api/descriptors/GPUDepthStencilState.h +0 -103
- package/cpp/rnwgpu/api/descriptors/GPUDeviceDescriptor.h +0 -109
- package/cpp/rnwgpu/api/descriptors/GPUExternalTextureBindingLayout.h +0 -38
- package/cpp/rnwgpu/api/descriptors/GPUExternalTextureDescriptor.h +0 -90
- package/cpp/rnwgpu/api/descriptors/GPUFragmentState.h +0 -73
- package/cpp/rnwgpu/api/descriptors/GPUImageCopyBuffer.h +0 -62
- package/cpp/rnwgpu/api/descriptors/GPUImageCopyExternalImage.h +0 -63
- package/cpp/rnwgpu/api/descriptors/GPUImageCopyTexture.h +0 -65
- package/cpp/rnwgpu/api/descriptors/GPUImageCopyTextureTagged.h +0 -81
- package/cpp/rnwgpu/api/descriptors/GPUImageDataLayout.h +0 -54
- package/cpp/rnwgpu/api/descriptors/GPUMapMode.h +0 -22
- package/cpp/rnwgpu/api/descriptors/GPUMultisampleState.h +0 -54
- package/cpp/rnwgpu/api/descriptors/GPUPipelineLayoutDescriptor.h +0 -57
- package/cpp/rnwgpu/api/descriptors/GPUPrimitiveState.h +0 -69
- package/cpp/rnwgpu/api/descriptors/GPUProgrammableStage.h +0 -61
- package/cpp/rnwgpu/api/descriptors/GPUQuerySetDescriptor.h +0 -55
- package/cpp/rnwgpu/api/descriptors/GPUQueueDescriptor.h +0 -43
- package/cpp/rnwgpu/api/descriptors/GPURenderBundleDescriptor.h +0 -45
- package/cpp/rnwgpu/api/descriptors/GPURenderBundleEncoderDescriptor.h +0 -80
- package/cpp/rnwgpu/api/descriptors/GPURenderPassColorAttachment.h +0 -81
- package/cpp/rnwgpu/api/descriptors/GPURenderPassDepthStencilAttachment.h +0 -101
- package/cpp/rnwgpu/api/descriptors/GPURenderPassDescriptor.h +0 -92
- package/cpp/rnwgpu/api/descriptors/GPURenderPassTimestampWrites.h +0 -58
- package/cpp/rnwgpu/api/descriptors/GPURenderPipelineDescriptor.h +0 -103
- package/cpp/rnwgpu/api/descriptors/GPURequestAdapterOptions.h +0 -51
- package/cpp/rnwgpu/api/descriptors/GPUSamplerBindingLayout.h +0 -45
- package/cpp/rnwgpu/api/descriptors/GPUSamplerDescriptor.h +0 -110
- package/cpp/rnwgpu/api/descriptors/GPUShaderModuleCompilationHint.h +0 -60
- package/cpp/rnwgpu/api/descriptors/GPUShaderModuleDescriptor.h +0 -62
- package/cpp/rnwgpu/api/descriptors/GPUShaderStage.h +0 -25
- package/cpp/rnwgpu/api/descriptors/GPUSharedFenceDescriptor.h +0 -58
- package/cpp/rnwgpu/api/descriptors/GPUSharedFenceState.h +0 -51
- package/cpp/rnwgpu/api/descriptors/GPUSharedTextureMemoryDescriptor.h +0 -73
- package/cpp/rnwgpu/api/descriptors/GPUStencilFaceState.h +0 -64
- package/cpp/rnwgpu/api/descriptors/GPUStorageTextureBindingLayout.h +0 -59
- package/cpp/rnwgpu/api/descriptors/GPUTextureBindingLayout.h +0 -59
- package/cpp/rnwgpu/api/descriptors/GPUTextureDescriptor.h +0 -91
- package/cpp/rnwgpu/api/descriptors/GPUTextureUsage.h +0 -29
- package/cpp/rnwgpu/api/descriptors/GPUTextureViewDescriptor.h +0 -91
- package/cpp/rnwgpu/api/descriptors/GPUUncapturedErrorEventInit.h +0 -64
- package/cpp/rnwgpu/api/descriptors/GPUVertexAttribute.h +0 -53
- package/cpp/rnwgpu/api/descriptors/GPUVertexBufferLayout.h +0 -62
- package/cpp/rnwgpu/api/descriptors/GPUVertexState.h +0 -73
- package/cpp/rnwgpu/api/descriptors/Unions.h +0 -1969
- package/cpp/rnwgpu/async/AsyncTaskHandle.cpp +0 -214
- package/cpp/rnwgpu/async/AsyncTaskHandle.h +0 -58
- package/cpp/rnwgpu/async/RuntimeContext.cpp +0 -199
- package/cpp/rnwgpu/async/RuntimeContext.h +0 -134
- package/lib/commonjs/skia/types/WebGPU.d.ts +0 -184
- package/lib/commonjs/skia/types/WebGPU.js +0 -105
- package/lib/commonjs/skia/types/WebGPU.js.map +0 -1
- package/lib/commonjs/specs/WebGPUViewNativeComponent.d.ts +0 -8
- package/lib/commonjs/specs/WebGPUViewNativeComponent.js +0 -10
- package/lib/commonjs/specs/WebGPUViewNativeComponent.js.map +0 -1
- package/lib/commonjs/specs/WebGPUViewNativeComponent.web.d.ts +0 -8
- package/lib/commonjs/specs/WebGPUViewNativeComponent.web.js +0 -103
- package/lib/commonjs/specs/WebGPUViewNativeComponent.web.js.map +0 -1
- package/lib/commonjs/specs/utils.d.ts +0 -1
- package/lib/commonjs/specs/utils.js +0 -11
- package/lib/commonjs/specs/utils.js.map +0 -1
- package/lib/commonjs/views/WebGPUCanvas.d.ts +0 -33
- package/lib/commonjs/views/WebGPUCanvas.js +0 -79
- package/lib/commonjs/views/WebGPUCanvas.js.map +0 -1
- package/lib/commonjs/views/WebGPUCanvas.web.d.ts +0 -23
- package/lib/commonjs/views/WebGPUCanvas.web.js +0 -20
- package/lib/commonjs/views/WebGPUCanvas.web.js.map +0 -1
- package/lib/module/skia/types/WebGPU.d.ts +0 -184
- package/lib/module/skia/types/WebGPU.js +0 -99
- package/lib/module/skia/types/WebGPU.js.map +0 -1
- package/lib/module/specs/WebGPUViewNativeComponent.d.ts +0 -8
- package/lib/module/specs/WebGPUViewNativeComponent.js +0 -4
- package/lib/module/specs/WebGPUViewNativeComponent.js.map +0 -1
- package/lib/module/specs/WebGPUViewNativeComponent.web.d.ts +0 -8
- package/lib/module/specs/WebGPUViewNativeComponent.web.js +0 -96
- package/lib/module/specs/WebGPUViewNativeComponent.web.js.map +0 -1
- package/lib/module/specs/utils.d.ts +0 -1
- package/lib/module/specs/utils.js +0 -5
- package/lib/module/specs/utils.js.map +0 -1
- package/lib/module/views/WebGPUCanvas.d.ts +0 -33
- package/lib/module/views/WebGPUCanvas.js +0 -70
- package/lib/module/views/WebGPUCanvas.js.map +0 -1
- package/lib/module/views/WebGPUCanvas.web.d.ts +0 -23
- package/lib/module/views/WebGPUCanvas.web.js +0 -12
- package/lib/module/views/WebGPUCanvas.web.js.map +0 -1
- package/lib/typescript/lib/commonjs/skia/types/WebGPU.d.ts +0 -2
- package/lib/typescript/lib/commonjs/specs/WebGPUViewNativeComponent.d.ts +0 -4
- package/lib/typescript/lib/commonjs/specs/WebGPUViewNativeComponent.web.d.ts +0 -3
- package/lib/typescript/lib/commonjs/specs/utils.d.ts +0 -2
- package/lib/typescript/lib/commonjs/views/WebGPUCanvas.d.ts +0 -6
- package/lib/typescript/lib/commonjs/views/WebGPUCanvas.web.d.ts +0 -6
- package/lib/typescript/lib/module/skia/types/WebGPU.d.ts +0 -31
- package/lib/typescript/lib/module/specs/WebGPUViewNativeComponent.d.ts +0 -2
- package/lib/typescript/lib/module/specs/WebGPUViewNativeComponent.web.d.ts +0 -2
- package/lib/typescript/lib/module/specs/utils.d.ts +0 -1
- package/lib/typescript/lib/module/views/WebGPUCanvas.d.ts +0 -7
- package/lib/typescript/lib/module/views/WebGPUCanvas.web.d.ts +0 -8
- package/lib/typescript/src/skia/types/WebGPU.d.ts +0 -184
- package/lib/typescript/src/specs/WebGPUViewNativeComponent.d.ts +0 -8
- package/lib/typescript/src/specs/WebGPUViewNativeComponent.web.d.ts +0 -8
- package/lib/typescript/src/specs/utils.d.ts +0 -1
- package/lib/typescript/src/views/WebGPUCanvas.d.ts +0 -33
- package/lib/typescript/src/views/WebGPUCanvas.web.d.ts +0 -23
- package/src/skia/types/WebGPU.ts +0 -226
- package/src/specs/WebGPUViewNativeComponent.ts +0 -11
- package/src/specs/WebGPUViewNativeComponent.web.ts +0 -110
- package/src/specs/utils.ts +0 -4
- package/src/views/WebGPUCanvas.tsx +0 -125
- package/src/views/WebGPUCanvas.web.tsx +0 -36
- /package/cpp/{jsi2 → jsi}/Promise.cpp +0 -0
- /package/cpp/{jsi2 → jsi}/Promise.h +0 -0
|
@@ -0,0 +1,387 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <atomic>
|
|
4
|
+
#include <memory>
|
|
5
|
+
#include <string>
|
|
6
|
+
#include <utility>
|
|
7
|
+
|
|
8
|
+
#include <jsi/jsi.h>
|
|
9
|
+
|
|
10
|
+
#include "jsi/NativeObject.h"
|
|
11
|
+
#include "rnskia/RNSkPlatformContext.h"
|
|
12
|
+
#include "utils/RNSkLog.h"
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Creates a new Host function declaration as a lambda with all deps passed
|
|
16
|
+
* with implicit lambda capture clause
|
|
17
|
+
*/
|
|
18
|
+
#define JSI_HOST_FUNCTION_LAMBDA \
|
|
19
|
+
[=](jsi::Runtime & runtime, const jsi::Value &thisValue, \
|
|
20
|
+
const jsi::Value *arguments, size_t count) -> jsi::Value
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Creates a new Host function declaration. Only used for methods that cannot
|
|
24
|
+
* be expressed as typed signatures (heterogeneous argument dispatch, typed
|
|
25
|
+
* array construction, lenient options objects, promises) — everything else
|
|
26
|
+
* uses installMethod/installGetter/installChainableMethod with typed C++
|
|
27
|
+
* signatures converted through rnwgpu::JSIConverter.
|
|
28
|
+
*/
|
|
29
|
+
#define JSI_HOST_FUNCTION(NAME) \
|
|
30
|
+
jsi::Value NAME(jsi::Runtime &runtime, const jsi::Value &thisValue, \
|
|
31
|
+
const jsi::Value *arguments, size_t count)
|
|
32
|
+
|
|
33
|
+
namespace RNSkia {
|
|
34
|
+
|
|
35
|
+
namespace jsi = facebook::jsi;
|
|
36
|
+
|
|
37
|
+
// Minimum memory pressure reported for any native object — aliased from the
|
|
38
|
+
// NativeObject infrastructure so dispose() and create() agree on the floor.
|
|
39
|
+
static constexpr size_t kMinMemoryPressure = rnwgpu::kMinMemoryPressure;
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Creates the JS object for a wrapper instance (a class based on the
|
|
43
|
+
* NativeObject pattern below).
|
|
44
|
+
*/
|
|
45
|
+
template <typename T>
|
|
46
|
+
jsi::Value makeJsiObject(jsi::Runtime &runtime, std::shared_ptr<T> instance) {
|
|
47
|
+
return T::create(runtime, std::move(instance));
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Returns the wrapper instance backing the given JS object or nullptr if the
|
|
52
|
+
* object is not backed by the requested type.
|
|
53
|
+
*/
|
|
54
|
+
template <typename T>
|
|
55
|
+
std::shared_ptr<T> tryGetJsiObject(jsi::Runtime &runtime,
|
|
56
|
+
const jsi::Object &object) {
|
|
57
|
+
if (object.hasNativeState<T>(runtime)) {
|
|
58
|
+
return object.getNativeState<T>(runtime);
|
|
59
|
+
}
|
|
60
|
+
return nullptr;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
template <typename T>
|
|
64
|
+
std::shared_ptr<T> tryGetJsiObject(jsi::Runtime &runtime,
|
|
65
|
+
const jsi::Value &value) {
|
|
66
|
+
if (!value.isObject()) {
|
|
67
|
+
return nullptr;
|
|
68
|
+
}
|
|
69
|
+
auto object = value.asObject(runtime);
|
|
70
|
+
return tryGetJsiObject<T>(runtime, object);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Returns the wrapper instance backing the given JS value or throws a JS
|
|
75
|
+
* error if the value is not backed by the requested type.
|
|
76
|
+
*/
|
|
77
|
+
template <typename T>
|
|
78
|
+
std::shared_ptr<T> getJsiObject(jsi::Runtime &runtime,
|
|
79
|
+
const jsi::Value &value) {
|
|
80
|
+
auto result = tryGetJsiObject<T>(runtime, value);
|
|
81
|
+
if (result == nullptr) {
|
|
82
|
+
throw jsi::JSError(runtime, "Expected a Skia object of a different type.");
|
|
83
|
+
}
|
|
84
|
+
return result;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Base class for Skia API objects implemented with the NativeObject /
|
|
89
|
+
* jsi::NativeState pattern (see jsi/NativeObject.h). Instead of a HostObject
|
|
90
|
+
* intercepting every property access, methods and properties live on a shared
|
|
91
|
+
* per-runtime prototype and the C++ instance is attached to plain JS objects
|
|
92
|
+
* as native state.
|
|
93
|
+
*
|
|
94
|
+
* Derived classes must provide:
|
|
95
|
+
* - `static constexpr const char *CLASS_NAME` — the public __typename__
|
|
96
|
+
* (e.g. "Rect"); also used as the boxing brand, so it must be unique.
|
|
97
|
+
* - `static void definePrototype(jsi::Runtime&, jsi::Object& prototype)` —
|
|
98
|
+
* installs methods/getters. The shared pieces (`__typename__`, `__box()`
|
|
99
|
+
* and the boxing reconstructor) are installed by
|
|
100
|
+
* NativeObject::installPrototype; wrapping classes additionally call
|
|
101
|
+
* `installCommon(runtime, proto)` to install dispose().
|
|
102
|
+
*
|
|
103
|
+
* Most methods use typed C++ signatures installed with installMethod /
|
|
104
|
+
* installGetter / installChainableMethod (arguments and results converted
|
|
105
|
+
* through rnwgpu::JSIConverter, see JsiSkConverters.h). Methods that cannot
|
|
106
|
+
* be typed keep the classic JSI_HOST_FUNCTION signature and are installed
|
|
107
|
+
* with installHostMethod, which resolves the C++ instance from `this` via
|
|
108
|
+
* native state.
|
|
109
|
+
*/
|
|
110
|
+
template <typename Derived>
|
|
111
|
+
class JsiSkNativeObject : public rnwgpu::NativeObject<Derived> {
|
|
112
|
+
public:
|
|
113
|
+
explicit JsiSkNativeObject(std::shared_ptr<RNSkPlatformContext> context)
|
|
114
|
+
: rnwgpu::NativeObject<Derived>(Derived::CLASS_NAME),
|
|
115
|
+
_context(std::move(context)) {}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Resolves the C++ instance backing `thisValue`. Throws a JSError if the
|
|
119
|
+
* value is not backed by this class.
|
|
120
|
+
*/
|
|
121
|
+
static std::shared_ptr<Derived> fromThis(jsi::Runtime &runtime,
|
|
122
|
+
const jsi::Value &thisValue) {
|
|
123
|
+
return rnwgpu::NativeObject<Derived>::fromValue(runtime, thisValue);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
protected:
|
|
127
|
+
std::shared_ptr<RNSkPlatformContext> getContext() { return _context; }
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
@Returns a reference to the argument at the given position in the arguments
|
|
131
|
+
array. Raises an error if the index is above the number of arguments.
|
|
132
|
+
*/
|
|
133
|
+
static const jsi::Value &getArgument(jsi::Runtime &runtime,
|
|
134
|
+
const jsi::Value *arguments,
|
|
135
|
+
size_t count, size_t index) {
|
|
136
|
+
if (index >= count) {
|
|
137
|
+
throw jsi::JSError(runtime, "Argument index out of bounds.");
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
return arguments[index];
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
Returns argument as number or throws
|
|
145
|
+
*/
|
|
146
|
+
static double getArgumentAsNumber(jsi::Runtime &runtime,
|
|
147
|
+
const jsi::Value *arguments, size_t count,
|
|
148
|
+
size_t index) {
|
|
149
|
+
const jsi::Value &value = getArgument(runtime, arguments, count, index);
|
|
150
|
+
if (!value.isNumber()) {
|
|
151
|
+
throw jsi::JSError(runtime,
|
|
152
|
+
"Expected type number for parameter at index " +
|
|
153
|
+
std::to_string(index));
|
|
154
|
+
}
|
|
155
|
+
return value.asNumber();
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
Returns argument as string or throws
|
|
160
|
+
*/
|
|
161
|
+
static jsi::String getArgumentAsString(jsi::Runtime &runtime,
|
|
162
|
+
const jsi::Value *arguments,
|
|
163
|
+
size_t count, size_t index) {
|
|
164
|
+
const jsi::Value &value = getArgument(runtime, arguments, count, index);
|
|
165
|
+
if (!value.isString()) {
|
|
166
|
+
throw jsi::JSError(runtime,
|
|
167
|
+
"Expected type string for parameter at index " +
|
|
168
|
+
std::to_string(index));
|
|
169
|
+
}
|
|
170
|
+
return value.asString(runtime);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
Returns argument as object or throws
|
|
175
|
+
*/
|
|
176
|
+
static jsi::Object getArgumentAsObject(jsi::Runtime &runtime,
|
|
177
|
+
const jsi::Value *arguments,
|
|
178
|
+
size_t count, size_t index) {
|
|
179
|
+
const jsi::Value &value = getArgument(runtime, arguments, count, index);
|
|
180
|
+
if (!value.isObject()) {
|
|
181
|
+
throw jsi::JSError(runtime,
|
|
182
|
+
"Expected type object for parameter at index " +
|
|
183
|
+
std::to_string(index));
|
|
184
|
+
}
|
|
185
|
+
return value.asObject(runtime);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
Returns argument as function or throws
|
|
190
|
+
*/
|
|
191
|
+
static jsi::Object getArgumentAsFunction(jsi::Runtime &runtime,
|
|
192
|
+
const jsi::Value *arguments,
|
|
193
|
+
size_t count, size_t index) {
|
|
194
|
+
auto value = getArgumentAsObject(runtime, arguments, count, index);
|
|
195
|
+
if (!value.isFunction(runtime)) {
|
|
196
|
+
throw jsi::JSError(runtime,
|
|
197
|
+
"Expected type function for parameter at index " +
|
|
198
|
+
std::to_string(index));
|
|
199
|
+
}
|
|
200
|
+
return value.asFunction(runtime);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
using HostMethod = jsi::Value (Derived::*)(jsi::Runtime &, const jsi::Value &,
|
|
204
|
+
const jsi::Value *, size_t);
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* Installs a method with the classic host-function signature
|
|
208
|
+
* (JSI_HOST_FUNCTION) on the prototype.
|
|
209
|
+
*/
|
|
210
|
+
static void installHostMethod(jsi::Runtime &runtime, jsi::Object &prototype,
|
|
211
|
+
const char *name, HostMethod method) {
|
|
212
|
+
auto func = jsi::Function::createFromHostFunction(
|
|
213
|
+
runtime, jsi::PropNameID::forUtf8(runtime, name), 0,
|
|
214
|
+
[method](jsi::Runtime &rt, const jsi::Value &thisValue,
|
|
215
|
+
const jsi::Value *arguments, size_t count) -> jsi::Value {
|
|
216
|
+
auto native = fromThis(rt, thisValue);
|
|
217
|
+
return ((*native).*method)(rt, thisValue, arguments, count);
|
|
218
|
+
});
|
|
219
|
+
prototype.setProperty(runtime, name, func);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
/**
|
|
223
|
+
* Installs a typed mutating method that returns `this` for chaining
|
|
224
|
+
* (e.g. path.moveTo(...).lineTo(...)). Arguments are converted through
|
|
225
|
+
* rnwgpu::JSIConverter like installMethod; the member function's return
|
|
226
|
+
* value (if any) is ignored and the JS function returns thisValue.
|
|
227
|
+
*/
|
|
228
|
+
template <typename ReturnType, typename... Args>
|
|
229
|
+
static void installChainableMethod(jsi::Runtime &runtime,
|
|
230
|
+
jsi::Object &prototype, const char *name,
|
|
231
|
+
ReturnType (Derived::*method)(Args...)) {
|
|
232
|
+
auto func = jsi::Function::createFromHostFunction(
|
|
233
|
+
runtime, jsi::PropNameID::forUtf8(runtime, name), sizeof...(Args),
|
|
234
|
+
[method](jsi::Runtime &rt, const jsi::Value &thisValue,
|
|
235
|
+
const jsi::Value *args, size_t count) -> jsi::Value {
|
|
236
|
+
auto native = fromThis(rt, thisValue);
|
|
237
|
+
invokeChainable(native.get(), method, rt, args,
|
|
238
|
+
std::index_sequence_for<Args...>{}, count);
|
|
239
|
+
return jsi::Value(rt, thisValue);
|
|
240
|
+
});
|
|
241
|
+
prototype.setProperty(runtime, name, func);
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* Chainable variant for methods that need the calling jsi::Runtime as
|
|
246
|
+
* their first parameter (e.g. the deprecated SkPath mutators, which log a
|
|
247
|
+
* warning to the JS console).
|
|
248
|
+
*/
|
|
249
|
+
template <typename ReturnType, typename... Args>
|
|
250
|
+
static void installChainableMethodWithRuntime(
|
|
251
|
+
jsi::Runtime &runtime, jsi::Object &prototype, const char *name,
|
|
252
|
+
ReturnType (Derived::*method)(jsi::Runtime &, Args...)) {
|
|
253
|
+
auto func = jsi::Function::createFromHostFunction(
|
|
254
|
+
runtime, jsi::PropNameID::forUtf8(runtime, name), sizeof...(Args),
|
|
255
|
+
[method](jsi::Runtime &rt, const jsi::Value &thisValue,
|
|
256
|
+
const jsi::Value *args, size_t count) -> jsi::Value {
|
|
257
|
+
auto native = fromThis(rt, thisValue);
|
|
258
|
+
invokeChainableWithRuntime(native.get(), method, rt, args,
|
|
259
|
+
std::index_sequence_for<Args...>{}, count);
|
|
260
|
+
return jsi::Value(rt, thisValue);
|
|
261
|
+
});
|
|
262
|
+
prototype.setProperty(runtime, name, func);
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
private:
|
|
266
|
+
// Invokes a typed member function with JSI argument conversion, discarding
|
|
267
|
+
// the result. Used by installChainableMethod, which returns thisValue.
|
|
268
|
+
template <typename ReturnType, typename... Args, size_t... Is>
|
|
269
|
+
static void invokeChainable(Derived *obj,
|
|
270
|
+
ReturnType (Derived::*method)(Args...),
|
|
271
|
+
jsi::Runtime &runtime, const jsi::Value *args,
|
|
272
|
+
std::index_sequence<Is...>, size_t count) {
|
|
273
|
+
(obj->*method)(rnwgpu::JSIConverter<std::decay_t<Args>>::fromJSI(
|
|
274
|
+
runtime, args[Is], Is >= count)...);
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
template <typename ReturnType, typename... Args, size_t... Is>
|
|
278
|
+
static void invokeChainableWithRuntime(
|
|
279
|
+
Derived *obj, ReturnType (Derived::*method)(jsi::Runtime &, Args...),
|
|
280
|
+
jsi::Runtime &runtime, const jsi::Value *args, std::index_sequence<Is...>,
|
|
281
|
+
size_t count) {
|
|
282
|
+
(obj->*method)(runtime,
|
|
283
|
+
rnwgpu::JSIConverter<std::decay_t<Args>>::fromJSI(
|
|
284
|
+
runtime, args[Is], Is >= count)...);
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
std::shared_ptr<RNSkPlatformContext> _context;
|
|
288
|
+
};
|
|
289
|
+
|
|
290
|
+
/**
|
|
291
|
+
* NativeObject equivalent of JsiSkWrappingHostObject: wraps an inner object
|
|
292
|
+
* (a std::shared_ptr or sk_sp) and provides dispose() semantics.
|
|
293
|
+
*/
|
|
294
|
+
template <typename Derived, typename T>
|
|
295
|
+
class JsiSkWrappingNativeObject : public JsiSkNativeObject<Derived> {
|
|
296
|
+
public:
|
|
297
|
+
JsiSkWrappingNativeObject(std::shared_ptr<RNSkPlatformContext> context,
|
|
298
|
+
T object)
|
|
299
|
+
: JsiSkNativeObject<Derived>(std::move(context)),
|
|
300
|
+
_object(std::move(object)) {}
|
|
301
|
+
|
|
302
|
+
/**
|
|
303
|
+
* Returns the wrapped object. Throws if the object has been disposed.
|
|
304
|
+
*/
|
|
305
|
+
T getObject() { return validateObject(); }
|
|
306
|
+
const T getObject() const { return validateObject(); }
|
|
307
|
+
|
|
308
|
+
/**
|
|
309
|
+
* Updates the inner object with a new version of the object.
|
|
310
|
+
*/
|
|
311
|
+
void setObject(T object) { _object = object; }
|
|
312
|
+
|
|
313
|
+
/**
|
|
314
|
+
* Returns the wrapped object from a JS value backed by this class.
|
|
315
|
+
*/
|
|
316
|
+
static T objectFromValue(jsi::Runtime &runtime, const jsi::Value &value) {
|
|
317
|
+
return JsiSkNativeObject<Derived>::fromThis(runtime, value)->getObject();
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
/**
|
|
321
|
+
* dispose() releases the wrapped resources eagerly instead of waiting for
|
|
322
|
+
* garbage collection. Installed on the prototype via installCommon.
|
|
323
|
+
*/
|
|
324
|
+
JSI_HOST_FUNCTION(dispose) {
|
|
325
|
+
if (!isDisposed()) {
|
|
326
|
+
thisValue.asObject(runtime).setExternalMemoryPressure(runtime,
|
|
327
|
+
kMinMemoryPressure);
|
|
328
|
+
}
|
|
329
|
+
safeDispose();
|
|
330
|
+
return jsi::Value::undefined();
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
/**
|
|
334
|
+
* Installs dispose() on the prototype (the shared pieces — __typename__,
|
|
335
|
+
* __box() and the boxing reconstructor — are installed by
|
|
336
|
+
* NativeObject::installPrototype). Must be called from definePrototype().
|
|
337
|
+
*/
|
|
338
|
+
static void installCommon(jsi::Runtime &runtime, jsi::Object &prototype) {
|
|
339
|
+
JsiSkNativeObject<Derived>::installHostMethod(runtime, prototype, "dispose",
|
|
340
|
+
&Derived::dispose);
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
protected:
|
|
344
|
+
/**
|
|
345
|
+
* Override to release additional resources. Called exactly once.
|
|
346
|
+
*/
|
|
347
|
+
virtual void releaseResources() { setObject(nullptr); }
|
|
348
|
+
|
|
349
|
+
bool isDisposed() const {
|
|
350
|
+
return _isDisposed.load(std::memory_order_acquire);
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
/**
|
|
354
|
+
* Returns the wrapped object without the disposed check — for destructors
|
|
355
|
+
* and releaseResources() implementations.
|
|
356
|
+
*/
|
|
357
|
+
T getObjectUnchecked() const { return _object; }
|
|
358
|
+
|
|
359
|
+
private:
|
|
360
|
+
T validateObject() const {
|
|
361
|
+
if (_isDisposed.load(std::memory_order_acquire)) {
|
|
362
|
+
throw std::runtime_error("Attempted to access a disposed object.");
|
|
363
|
+
}
|
|
364
|
+
return _object;
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
void safeDispose() {
|
|
368
|
+
bool expected = false;
|
|
369
|
+
if (_isDisposed.compare_exchange_strong(expected, true,
|
|
370
|
+
std::memory_order_acq_rel)) {
|
|
371
|
+
releaseResources();
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
T _object;
|
|
376
|
+
std::atomic<bool> _isDisposed = {false};
|
|
377
|
+
};
|
|
378
|
+
|
|
379
|
+
template <typename Derived, typename T>
|
|
380
|
+
using JsiSkWrappingSharedPtrNativeObject =
|
|
381
|
+
JsiSkWrappingNativeObject<Derived, std::shared_ptr<T>>;
|
|
382
|
+
|
|
383
|
+
template <typename Derived, typename T>
|
|
384
|
+
using JsiSkWrappingSkPtrNativeObject =
|
|
385
|
+
JsiSkWrappingNativeObject<Derived, sk_sp<T>>;
|
|
386
|
+
|
|
387
|
+
} // namespace RNSkia
|