@shopify/react-native-skia 2.2.18 → 2.2.20

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.
Files changed (436) hide show
  1. package/android/CMakeLists.txt +2 -0
  2. package/cpp/api/JsiSkCanvas.h +22 -0
  3. package/cpp/api/JsiSkDispatcher.cpp +9 -0
  4. package/cpp/api/JsiSkDispatcher.h +149 -0
  5. package/cpp/api/JsiSkImage.h +27 -9
  6. package/cpp/api/JsiSkPicture.h +22 -1
  7. package/cpp/api/JsiSkSurface.h +15 -10
  8. package/cpp/api/recorder/Drawings.h +64 -51
  9. package/cpp/api/recorder/JsiRecorder.h +3 -1
  10. package/cpp/api/recorder/RNRecorder.h +10 -4
  11. package/cpp/jsi/JsiHostObject.cpp +16 -0
  12. package/jestSetup.js +1 -1
  13. package/lib/commonjs/Platform/Platform.js.map +1 -1
  14. package/lib/commonjs/Platform/Platform.web.js +0 -1
  15. package/lib/commonjs/Platform/Platform.web.js.map +1 -1
  16. package/lib/commonjs/animation/functions/interpolate.js +0 -1
  17. package/lib/commonjs/animation/functions/interpolate.js.map +1 -1
  18. package/lib/commonjs/dom/nodes/datatypes/Fitting.js.map +1 -1
  19. package/lib/commonjs/dom/types/Drawings.js.map +1 -1
  20. package/lib/commonjs/external/reanimated/textures.js +31 -28
  21. package/lib/commonjs/external/reanimated/textures.js.map +1 -1
  22. package/lib/commonjs/external/reanimated/useVideo.js.map +1 -1
  23. package/lib/commonjs/renderer/Canvas.js +1 -3
  24. package/lib/commonjs/renderer/Canvas.js.map +1 -1
  25. package/lib/commonjs/renderer/Offscreen.js +1 -7
  26. package/lib/commonjs/renderer/Offscreen.js.map +1 -1
  27. package/lib/commonjs/renderer/__tests__/e2e/setup/Paragraph.d.ts +1 -0
  28. package/lib/commonjs/renderer/__tests__/e2e/setup/SVG.d.ts +1 -0
  29. package/lib/commonjs/renderer/processors/Animations/Animations.js.map +1 -1
  30. package/lib/commonjs/skia/core/Image.js.map +1 -1
  31. package/lib/commonjs/skia/core/SVG.web.js +9 -2
  32. package/lib/commonjs/skia/core/SVG.web.js.map +1 -1
  33. package/lib/commonjs/skia/types/JsiInstance.d.ts +1 -1
  34. package/lib/commonjs/skia/types/JsiInstance.js.map +1 -1
  35. package/lib/commonjs/skia/types/Matrix4.js.map +1 -1
  36. package/lib/commonjs/skia/types/NativeBuffer/NativeBufferFactory.js.map +1 -1
  37. package/lib/commonjs/skia/types/Shader/Shader.js +1 -3
  38. package/lib/commonjs/skia/types/Shader/Shader.js.map +1 -1
  39. package/lib/commonjs/skia/web/CanvasKitWebGLBufferImpl.js.map +1 -1
  40. package/lib/commonjs/skia/web/Host.d.ts +2 -1
  41. package/lib/commonjs/skia/web/Host.js +8 -0
  42. package/lib/commonjs/skia/web/Host.js.map +1 -1
  43. package/lib/commonjs/skia/web/JsiSkAnimatedImage.d.ts +0 -1
  44. package/lib/commonjs/skia/web/JsiSkAnimatedImage.js +0 -6
  45. package/lib/commonjs/skia/web/JsiSkAnimatedImage.js.map +1 -1
  46. package/lib/commonjs/skia/web/JsiSkCanvas.d.ts +0 -1
  47. package/lib/commonjs/skia/web/JsiSkCanvas.js +0 -6
  48. package/lib/commonjs/skia/web/JsiSkCanvas.js.map +1 -1
  49. package/lib/commonjs/skia/web/JsiSkColor.js +0 -1
  50. package/lib/commonjs/skia/web/JsiSkColor.js.map +1 -1
  51. package/lib/commonjs/skia/web/JsiSkColorFilter.d.ts +0 -1
  52. package/lib/commonjs/skia/web/JsiSkColorFilter.js +0 -6
  53. package/lib/commonjs/skia/web/JsiSkColorFilter.js.map +1 -1
  54. package/lib/commonjs/skia/web/JsiSkContourMeasure.d.ts +0 -1
  55. package/lib/commonjs/skia/web/JsiSkContourMeasure.js +0 -6
  56. package/lib/commonjs/skia/web/JsiSkContourMeasure.js.map +1 -1
  57. package/lib/commonjs/skia/web/JsiSkContourMeasureIter.d.ts +0 -1
  58. package/lib/commonjs/skia/web/JsiSkContourMeasureIter.js +0 -6
  59. package/lib/commonjs/skia/web/JsiSkContourMeasureIter.js.map +1 -1
  60. package/lib/commonjs/skia/web/JsiSkData.d.ts +0 -1
  61. package/lib/commonjs/skia/web/JsiSkData.js +0 -6
  62. package/lib/commonjs/skia/web/JsiSkData.js.map +1 -1
  63. package/lib/commonjs/skia/web/JsiSkDataFactory.js.map +1 -1
  64. package/lib/commonjs/skia/web/JsiSkFont.d.ts +0 -1
  65. package/lib/commonjs/skia/web/JsiSkFont.js +0 -6
  66. package/lib/commonjs/skia/web/JsiSkFont.js.map +1 -1
  67. package/lib/commonjs/skia/web/JsiSkFontMgr.js +1 -1
  68. package/lib/commonjs/skia/web/JsiSkFontMgr.js.map +1 -1
  69. package/lib/commonjs/skia/web/JsiSkImage.d.ts +0 -1
  70. package/lib/commonjs/skia/web/JsiSkImage.js +0 -6
  71. package/lib/commonjs/skia/web/JsiSkImage.js.map +1 -1
  72. package/lib/commonjs/skia/web/JsiSkImageFilter.d.ts +0 -1
  73. package/lib/commonjs/skia/web/JsiSkImageFilter.js +0 -6
  74. package/lib/commonjs/skia/web/JsiSkImageFilter.js.map +1 -1
  75. package/lib/commonjs/skia/web/JsiSkMaskFilter.d.ts +0 -1
  76. package/lib/commonjs/skia/web/JsiSkMaskFilter.js +0 -6
  77. package/lib/commonjs/skia/web/JsiSkMaskFilter.js.map +1 -1
  78. package/lib/commonjs/skia/web/JsiSkMatrix.d.ts +0 -1
  79. package/lib/commonjs/skia/web/JsiSkMatrix.js +0 -6
  80. package/lib/commonjs/skia/web/JsiSkMatrix.js.map +1 -1
  81. package/lib/commonjs/skia/web/JsiSkPaint.d.ts +0 -1
  82. package/lib/commonjs/skia/web/JsiSkPaint.js +0 -6
  83. package/lib/commonjs/skia/web/JsiSkPaint.js.map +1 -1
  84. package/lib/commonjs/skia/web/JsiSkParagraph.d.ts +0 -1
  85. package/lib/commonjs/skia/web/JsiSkParagraph.js +0 -3
  86. package/lib/commonjs/skia/web/JsiSkParagraph.js.map +1 -1
  87. package/lib/commonjs/skia/web/JsiSkParagraphBuilder.d.ts +0 -1
  88. package/lib/commonjs/skia/web/JsiSkParagraphBuilder.js +0 -3
  89. package/lib/commonjs/skia/web/JsiSkParagraphBuilder.js.map +1 -1
  90. package/lib/commonjs/skia/web/JsiSkPath.d.ts +0 -1
  91. package/lib/commonjs/skia/web/JsiSkPath.js +0 -6
  92. package/lib/commonjs/skia/web/JsiSkPath.js.map +1 -1
  93. package/lib/commonjs/skia/web/JsiSkPathEffect.d.ts +0 -1
  94. package/lib/commonjs/skia/web/JsiSkPathEffect.js +0 -6
  95. package/lib/commonjs/skia/web/JsiSkPathEffect.js.map +1 -1
  96. package/lib/commonjs/skia/web/JsiSkPicture.d.ts +0 -1
  97. package/lib/commonjs/skia/web/JsiSkPicture.js +2 -6
  98. package/lib/commonjs/skia/web/JsiSkPicture.js.map +1 -1
  99. package/lib/commonjs/skia/web/JsiSkPictureRecorder.d.ts +0 -1
  100. package/lib/commonjs/skia/web/JsiSkPictureRecorder.js +0 -6
  101. package/lib/commonjs/skia/web/JsiSkPictureRecorder.js.map +1 -1
  102. package/lib/commonjs/skia/web/JsiSkPoint.d.ts +1 -2
  103. package/lib/commonjs/skia/web/JsiSkPoint.js +0 -6
  104. package/lib/commonjs/skia/web/JsiSkPoint.js.map +1 -1
  105. package/lib/commonjs/skia/web/JsiSkRRect.d.ts +2 -2
  106. package/lib/commonjs/skia/web/JsiSkRRect.js +3 -6
  107. package/lib/commonjs/skia/web/JsiSkRRect.js.map +1 -1
  108. package/lib/commonjs/skia/web/JsiSkRSXform.d.ts +1 -2
  109. package/lib/commonjs/skia/web/JsiSkRSXform.js +0 -6
  110. package/lib/commonjs/skia/web/JsiSkRSXform.js.map +1 -1
  111. package/lib/commonjs/skia/web/JsiSkRect.d.ts +0 -1
  112. package/lib/commonjs/skia/web/JsiSkRect.js +0 -6
  113. package/lib/commonjs/skia/web/JsiSkRect.js.map +1 -1
  114. package/lib/commonjs/skia/web/JsiSkRuntimeEffect.d.ts +0 -1
  115. package/lib/commonjs/skia/web/JsiSkRuntimeEffect.js +0 -6
  116. package/lib/commonjs/skia/web/JsiSkRuntimeEffect.js.map +1 -1
  117. package/lib/commonjs/skia/web/JsiSkSVG.d.ts +1 -1
  118. package/lib/commonjs/skia/web/JsiSkSVG.js +5 -8
  119. package/lib/commonjs/skia/web/JsiSkSVG.js.map +1 -1
  120. package/lib/commonjs/skia/web/JsiSkShader.d.ts +0 -1
  121. package/lib/commonjs/skia/web/JsiSkShader.js +0 -6
  122. package/lib/commonjs/skia/web/JsiSkShader.js.map +1 -1
  123. package/lib/commonjs/skia/web/JsiSkSurface.d.ts +1 -1
  124. package/lib/commonjs/skia/web/JsiSkSurface.js +3 -6
  125. package/lib/commonjs/skia/web/JsiSkSurface.js.map +1 -1
  126. package/lib/commonjs/skia/web/JsiSkTextBlob.d.ts +0 -1
  127. package/lib/commonjs/skia/web/JsiSkTextBlob.js +0 -6
  128. package/lib/commonjs/skia/web/JsiSkTextBlob.js.map +1 -1
  129. package/lib/commonjs/skia/web/JsiSkTypeface.d.ts +0 -1
  130. package/lib/commonjs/skia/web/JsiSkTypeface.js +0 -6
  131. package/lib/commonjs/skia/web/JsiSkTypeface.js.map +1 -1
  132. package/lib/commonjs/skia/web/JsiSkTypefaceFontProvider.d.ts +0 -2
  133. package/lib/commonjs/skia/web/JsiSkTypefaceFontProvider.js +0 -12
  134. package/lib/commonjs/skia/web/JsiSkTypefaceFontProvider.js.map +1 -1
  135. package/lib/commonjs/skia/web/JsiSkVertices.d.ts +0 -1
  136. package/lib/commonjs/skia/web/JsiSkVertices.js +0 -6
  137. package/lib/commonjs/skia/web/JsiSkVertices.js.map +1 -1
  138. package/lib/commonjs/skia/web/JsiSkottieAnimation.d.ts +0 -1
  139. package/lib/commonjs/skia/web/JsiSkottieAnimation.js +0 -3
  140. package/lib/commonjs/skia/web/JsiSkottieAnimation.js.map +1 -1
  141. package/lib/commonjs/skia/web/JsiVideo.d.ts +1 -0
  142. package/lib/commonjs/skia/web/JsiVideo.js +4 -1
  143. package/lib/commonjs/skia/web/JsiVideo.js.map +1 -1
  144. package/lib/commonjs/sksg/Container.native.js.map +1 -1
  145. package/lib/commonjs/sksg/Container.web.js.map +1 -1
  146. package/lib/commonjs/sksg/Elements.js.map +1 -1
  147. package/lib/commonjs/sksg/Reconciler.js.map +1 -1
  148. package/lib/commonjs/sksg/Recorder/ReanimatedRecorder.d.ts +4 -0
  149. package/lib/commonjs/sksg/Recorder/ReanimatedRecorder.js +4 -0
  150. package/lib/commonjs/sksg/Recorder/ReanimatedRecorder.js.map +1 -1
  151. package/lib/commonjs/sksg/Recorder/Visitor.js.map +1 -1
  152. package/lib/commonjs/sksg/StaticContainer.js.map +1 -1
  153. package/lib/commonjs/views/SkiaPictureView.web.js +3 -1
  154. package/lib/commonjs/views/SkiaPictureView.web.js.map +1 -1
  155. package/lib/module/Platform/Platform.js.map +1 -1
  156. package/lib/module/Platform/Platform.web.js +0 -1
  157. package/lib/module/Platform/Platform.web.js.map +1 -1
  158. package/lib/module/animation/functions/interpolate.js +0 -1
  159. package/lib/module/animation/functions/interpolate.js.map +1 -1
  160. package/lib/module/dom/nodes/datatypes/Fitting.js.map +1 -1
  161. package/lib/module/dom/types/Drawings.js.map +1 -1
  162. package/lib/module/external/reanimated/textures.js +33 -30
  163. package/lib/module/external/reanimated/textures.js.map +1 -1
  164. package/lib/module/external/reanimated/useVideo.js.map +1 -1
  165. package/lib/module/renderer/Canvas.js +1 -3
  166. package/lib/module/renderer/Canvas.js.map +1 -1
  167. package/lib/module/renderer/Offscreen.js +1 -8
  168. package/lib/module/renderer/Offscreen.js.map +1 -1
  169. package/lib/module/renderer/__tests__/e2e/setup/Paragraph.d.ts +1 -0
  170. package/lib/module/renderer/__tests__/e2e/setup/SVG.d.ts +1 -0
  171. package/lib/module/renderer/processors/Animations/Animations.js.map +1 -1
  172. package/lib/module/skia/core/Image.js.map +1 -1
  173. package/lib/module/skia/core/SVG.web.js +9 -2
  174. package/lib/module/skia/core/SVG.web.js.map +1 -1
  175. package/lib/module/skia/types/JsiInstance.d.ts +1 -1
  176. package/lib/module/skia/types/JsiInstance.js.map +1 -1
  177. package/lib/module/skia/types/Matrix4.js.map +1 -1
  178. package/lib/module/skia/types/NativeBuffer/NativeBufferFactory.js.map +1 -1
  179. package/lib/module/skia/types/Shader/Shader.js +1 -3
  180. package/lib/module/skia/types/Shader/Shader.js.map +1 -1
  181. package/lib/module/skia/web/CanvasKitWebGLBufferImpl.js.map +1 -1
  182. package/lib/module/skia/web/Host.d.ts +2 -1
  183. package/lib/module/skia/web/Host.js +8 -0
  184. package/lib/module/skia/web/Host.js.map +1 -1
  185. package/lib/module/skia/web/JsiSkAnimatedImage.d.ts +0 -1
  186. package/lib/module/skia/web/JsiSkAnimatedImage.js +0 -6
  187. package/lib/module/skia/web/JsiSkAnimatedImage.js.map +1 -1
  188. package/lib/module/skia/web/JsiSkCanvas.d.ts +0 -1
  189. package/lib/module/skia/web/JsiSkCanvas.js +0 -6
  190. package/lib/module/skia/web/JsiSkCanvas.js.map +1 -1
  191. package/lib/module/skia/web/JsiSkColor.js +0 -1
  192. package/lib/module/skia/web/JsiSkColor.js.map +1 -1
  193. package/lib/module/skia/web/JsiSkColorFilter.d.ts +0 -1
  194. package/lib/module/skia/web/JsiSkColorFilter.js +0 -6
  195. package/lib/module/skia/web/JsiSkColorFilter.js.map +1 -1
  196. package/lib/module/skia/web/JsiSkContourMeasure.d.ts +0 -1
  197. package/lib/module/skia/web/JsiSkContourMeasure.js +0 -6
  198. package/lib/module/skia/web/JsiSkContourMeasure.js.map +1 -1
  199. package/lib/module/skia/web/JsiSkContourMeasureIter.d.ts +0 -1
  200. package/lib/module/skia/web/JsiSkContourMeasureIter.js +0 -6
  201. package/lib/module/skia/web/JsiSkContourMeasureIter.js.map +1 -1
  202. package/lib/module/skia/web/JsiSkData.d.ts +0 -1
  203. package/lib/module/skia/web/JsiSkData.js +0 -6
  204. package/lib/module/skia/web/JsiSkData.js.map +1 -1
  205. package/lib/module/skia/web/JsiSkDataFactory.js.map +1 -1
  206. package/lib/module/skia/web/JsiSkFont.d.ts +0 -1
  207. package/lib/module/skia/web/JsiSkFont.js +0 -6
  208. package/lib/module/skia/web/JsiSkFont.js.map +1 -1
  209. package/lib/module/skia/web/JsiSkFontMgr.js +1 -1
  210. package/lib/module/skia/web/JsiSkFontMgr.js.map +1 -1
  211. package/lib/module/skia/web/JsiSkImage.d.ts +0 -1
  212. package/lib/module/skia/web/JsiSkImage.js +0 -6
  213. package/lib/module/skia/web/JsiSkImage.js.map +1 -1
  214. package/lib/module/skia/web/JsiSkImageFilter.d.ts +0 -1
  215. package/lib/module/skia/web/JsiSkImageFilter.js +0 -6
  216. package/lib/module/skia/web/JsiSkImageFilter.js.map +1 -1
  217. package/lib/module/skia/web/JsiSkMaskFilter.d.ts +0 -1
  218. package/lib/module/skia/web/JsiSkMaskFilter.js +0 -6
  219. package/lib/module/skia/web/JsiSkMaskFilter.js.map +1 -1
  220. package/lib/module/skia/web/JsiSkMatrix.d.ts +0 -1
  221. package/lib/module/skia/web/JsiSkMatrix.js +0 -6
  222. package/lib/module/skia/web/JsiSkMatrix.js.map +1 -1
  223. package/lib/module/skia/web/JsiSkPaint.d.ts +0 -1
  224. package/lib/module/skia/web/JsiSkPaint.js +0 -6
  225. package/lib/module/skia/web/JsiSkPaint.js.map +1 -1
  226. package/lib/module/skia/web/JsiSkParagraph.d.ts +0 -1
  227. package/lib/module/skia/web/JsiSkParagraph.js +0 -3
  228. package/lib/module/skia/web/JsiSkParagraph.js.map +1 -1
  229. package/lib/module/skia/web/JsiSkParagraphBuilder.d.ts +0 -1
  230. package/lib/module/skia/web/JsiSkParagraphBuilder.js +0 -3
  231. package/lib/module/skia/web/JsiSkParagraphBuilder.js.map +1 -1
  232. package/lib/module/skia/web/JsiSkPath.d.ts +0 -1
  233. package/lib/module/skia/web/JsiSkPath.js +0 -6
  234. package/lib/module/skia/web/JsiSkPath.js.map +1 -1
  235. package/lib/module/skia/web/JsiSkPathEffect.d.ts +0 -1
  236. package/lib/module/skia/web/JsiSkPathEffect.js +0 -6
  237. package/lib/module/skia/web/JsiSkPathEffect.js.map +1 -1
  238. package/lib/module/skia/web/JsiSkPicture.d.ts +0 -1
  239. package/lib/module/skia/web/JsiSkPicture.js +0 -6
  240. package/lib/module/skia/web/JsiSkPicture.js.map +1 -1
  241. package/lib/module/skia/web/JsiSkPictureRecorder.d.ts +0 -1
  242. package/lib/module/skia/web/JsiSkPictureRecorder.js +0 -6
  243. package/lib/module/skia/web/JsiSkPictureRecorder.js.map +1 -1
  244. package/lib/module/skia/web/JsiSkPoint.d.ts +1 -2
  245. package/lib/module/skia/web/JsiSkPoint.js +0 -6
  246. package/lib/module/skia/web/JsiSkPoint.js.map +1 -1
  247. package/lib/module/skia/web/JsiSkRRect.d.ts +2 -2
  248. package/lib/module/skia/web/JsiSkRRect.js +3 -6
  249. package/lib/module/skia/web/JsiSkRRect.js.map +1 -1
  250. package/lib/module/skia/web/JsiSkRSXform.d.ts +1 -2
  251. package/lib/module/skia/web/JsiSkRSXform.js +0 -6
  252. package/lib/module/skia/web/JsiSkRSXform.js.map +1 -1
  253. package/lib/module/skia/web/JsiSkRect.d.ts +0 -1
  254. package/lib/module/skia/web/JsiSkRect.js +0 -6
  255. package/lib/module/skia/web/JsiSkRect.js.map +1 -1
  256. package/lib/module/skia/web/JsiSkRuntimeEffect.d.ts +0 -1
  257. package/lib/module/skia/web/JsiSkRuntimeEffect.js +0 -6
  258. package/lib/module/skia/web/JsiSkRuntimeEffect.js.map +1 -1
  259. package/lib/module/skia/web/JsiSkSVG.d.ts +1 -1
  260. package/lib/module/skia/web/JsiSkSVG.js +5 -8
  261. package/lib/module/skia/web/JsiSkSVG.js.map +1 -1
  262. package/lib/module/skia/web/JsiSkShader.d.ts +0 -1
  263. package/lib/module/skia/web/JsiSkShader.js +0 -6
  264. package/lib/module/skia/web/JsiSkShader.js.map +1 -1
  265. package/lib/module/skia/web/JsiSkSurface.d.ts +1 -1
  266. package/lib/module/skia/web/JsiSkSurface.js +3 -6
  267. package/lib/module/skia/web/JsiSkSurface.js.map +1 -1
  268. package/lib/module/skia/web/JsiSkTextBlob.d.ts +0 -1
  269. package/lib/module/skia/web/JsiSkTextBlob.js +0 -6
  270. package/lib/module/skia/web/JsiSkTextBlob.js.map +1 -1
  271. package/lib/module/skia/web/JsiSkTypeface.d.ts +0 -1
  272. package/lib/module/skia/web/JsiSkTypeface.js +0 -6
  273. package/lib/module/skia/web/JsiSkTypeface.js.map +1 -1
  274. package/lib/module/skia/web/JsiSkTypefaceFontProvider.d.ts +0 -2
  275. package/lib/module/skia/web/JsiSkTypefaceFontProvider.js +0 -12
  276. package/lib/module/skia/web/JsiSkTypefaceFontProvider.js.map +1 -1
  277. package/lib/module/skia/web/JsiSkVertices.d.ts +0 -1
  278. package/lib/module/skia/web/JsiSkVertices.js +0 -6
  279. package/lib/module/skia/web/JsiSkVertices.js.map +1 -1
  280. package/lib/module/skia/web/JsiSkottieAnimation.d.ts +0 -1
  281. package/lib/module/skia/web/JsiSkottieAnimation.js +0 -3
  282. package/lib/module/skia/web/JsiSkottieAnimation.js.map +1 -1
  283. package/lib/module/skia/web/JsiVideo.d.ts +1 -0
  284. package/lib/module/skia/web/JsiVideo.js +4 -1
  285. package/lib/module/skia/web/JsiVideo.js.map +1 -1
  286. package/lib/module/sksg/Container.native.js.map +1 -1
  287. package/lib/module/sksg/Container.web.js.map +1 -1
  288. package/lib/module/sksg/Elements.js.map +1 -1
  289. package/lib/module/sksg/Reconciler.js.map +1 -1
  290. package/lib/module/sksg/Recorder/ReanimatedRecorder.d.ts +4 -0
  291. package/lib/module/sksg/Recorder/ReanimatedRecorder.js +5 -0
  292. package/lib/module/sksg/Recorder/ReanimatedRecorder.js.map +1 -1
  293. package/lib/module/sksg/Recorder/Visitor.js.map +1 -1
  294. package/lib/module/sksg/StaticContainer.js.map +1 -1
  295. package/lib/module/views/SkiaPictureView.web.js +3 -1
  296. package/lib/module/views/SkiaPictureView.web.js.map +1 -1
  297. package/lib/typescript/eslint.config.d.mts +2 -0
  298. package/lib/typescript/jest.config.d.ts +11 -2
  299. package/lib/typescript/lib/commonjs/skia/web/Host.d.ts +2 -0
  300. package/lib/typescript/lib/commonjs/skia/web/JsiSkFontMgr.d.ts +0 -1
  301. package/lib/typescript/lib/commonjs/skia/web/JsiSkParagraph.d.ts +0 -1
  302. package/lib/typescript/lib/commonjs/skia/web/JsiSkParagraphBuilder.d.ts +0 -1
  303. package/lib/typescript/lib/commonjs/skia/web/JsiSkTypefaceFontProvider.d.ts +0 -1
  304. package/lib/typescript/lib/commonjs/skia/web/JsiSkottieAnimation.d.ts +0 -1
  305. package/lib/typescript/lib/commonjs/skia/web/JsiVideo.d.ts +1 -0
  306. package/lib/typescript/lib/commonjs/sksg/Recorder/ReanimatedRecorder.d.ts +4 -0
  307. package/lib/typescript/lib/module/skia/web/Host.d.ts +2 -0
  308. package/lib/typescript/lib/module/skia/web/JsiSkFontMgr.d.ts +0 -1
  309. package/lib/typescript/lib/module/skia/web/JsiSkParagraph.d.ts +0 -1
  310. package/lib/typescript/lib/module/skia/web/JsiSkParagraphBuilder.d.ts +0 -1
  311. package/lib/typescript/lib/module/skia/web/JsiSkTypefaceFontProvider.d.ts +0 -1
  312. package/lib/typescript/lib/module/skia/web/JsiSkottieAnimation.d.ts +0 -1
  313. package/lib/typescript/lib/module/skia/web/JsiVideo.d.ts +1 -0
  314. package/lib/typescript/lib/module/sksg/Recorder/ReanimatedRecorder.d.ts +4 -0
  315. package/lib/typescript/src/renderer/__tests__/e2e/setup/Paragraph.d.ts +1 -0
  316. package/lib/typescript/src/renderer/__tests__/e2e/setup/SVG.d.ts +1 -0
  317. package/lib/typescript/src/skia/types/JsiInstance.d.ts +1 -1
  318. package/lib/typescript/src/skia/web/Host.d.ts +2 -1
  319. package/lib/typescript/src/skia/web/JsiSkAnimatedImage.d.ts +0 -1
  320. package/lib/typescript/src/skia/web/JsiSkCanvas.d.ts +0 -1
  321. package/lib/typescript/src/skia/web/JsiSkColorFilter.d.ts +0 -1
  322. package/lib/typescript/src/skia/web/JsiSkContourMeasure.d.ts +0 -1
  323. package/lib/typescript/src/skia/web/JsiSkContourMeasureIter.d.ts +0 -1
  324. package/lib/typescript/src/skia/web/JsiSkData.d.ts +0 -1
  325. package/lib/typescript/src/skia/web/JsiSkFont.d.ts +0 -1
  326. package/lib/typescript/src/skia/web/JsiSkImage.d.ts +0 -1
  327. package/lib/typescript/src/skia/web/JsiSkImageFilter.d.ts +0 -1
  328. package/lib/typescript/src/skia/web/JsiSkMaskFilter.d.ts +0 -1
  329. package/lib/typescript/src/skia/web/JsiSkMatrix.d.ts +0 -1
  330. package/lib/typescript/src/skia/web/JsiSkPaint.d.ts +0 -1
  331. package/lib/typescript/src/skia/web/JsiSkParagraph.d.ts +0 -1
  332. package/lib/typescript/src/skia/web/JsiSkParagraphBuilder.d.ts +0 -1
  333. package/lib/typescript/src/skia/web/JsiSkPath.d.ts +0 -1
  334. package/lib/typescript/src/skia/web/JsiSkPathEffect.d.ts +0 -1
  335. package/lib/typescript/src/skia/web/JsiSkPicture.d.ts +0 -1
  336. package/lib/typescript/src/skia/web/JsiSkPictureRecorder.d.ts +0 -1
  337. package/lib/typescript/src/skia/web/JsiSkPoint.d.ts +1 -2
  338. package/lib/typescript/src/skia/web/JsiSkRRect.d.ts +2 -2
  339. package/lib/typescript/src/skia/web/JsiSkRSXform.d.ts +1 -2
  340. package/lib/typescript/src/skia/web/JsiSkRect.d.ts +0 -1
  341. package/lib/typescript/src/skia/web/JsiSkRuntimeEffect.d.ts +0 -1
  342. package/lib/typescript/src/skia/web/JsiSkSVG.d.ts +1 -1
  343. package/lib/typescript/src/skia/web/JsiSkShader.d.ts +0 -1
  344. package/lib/typescript/src/skia/web/JsiSkSurface.d.ts +1 -1
  345. package/lib/typescript/src/skia/web/JsiSkTextBlob.d.ts +0 -1
  346. package/lib/typescript/src/skia/web/JsiSkTypeface.d.ts +0 -1
  347. package/lib/typescript/src/skia/web/JsiSkTypefaceFontProvider.d.ts +0 -2
  348. package/lib/typescript/src/skia/web/JsiSkVertices.d.ts +0 -1
  349. package/lib/typescript/src/skia/web/JsiSkottieAnimation.d.ts +0 -1
  350. package/lib/typescript/src/skia/web/JsiVideo.d.ts +1 -0
  351. package/lib/typescript/src/sksg/Recorder/ReanimatedRecorder.d.ts +4 -0
  352. package/package.json +19 -12
  353. package/scripts/setup-canvaskit.js +15 -9
  354. package/src/Platform/Platform.ts +2 -2
  355. package/src/Platform/Platform.web.tsx +0 -1
  356. package/src/__tests__/setup.ts +1 -4
  357. package/src/animation/functions/interpolate.ts +0 -1
  358. package/src/dom/nodes/datatypes/Fitting.ts +1 -1
  359. package/src/dom/types/Drawings.ts +1 -1
  360. package/src/external/reanimated/textures.tsx +36 -27
  361. package/src/external/reanimated/useVideo.ts +1 -1
  362. package/src/renderer/Canvas.tsx +1 -2
  363. package/src/renderer/Offscreen.tsx +1 -7
  364. package/src/renderer/__tests__/FitBox.spec.tsx +0 -1
  365. package/src/renderer/__tests__/Picture.spec.tsx +8 -5
  366. package/src/renderer/__tests__/Surfaces.spec.tsx +11 -16
  367. package/src/renderer/__tests__/documentation/Group.spec.tsx +0 -1
  368. package/src/renderer/__tests__/e2e/AnimatedImages.spec.tsx +0 -1
  369. package/src/renderer/__tests__/e2e/Drawings.spec.tsx +0 -4
  370. package/src/renderer/__tests__/e2e/Group.spec.tsx +0 -1
  371. package/src/renderer/__tests__/e2e/ImageFilters.spec.tsx +0 -2
  372. package/src/renderer/__tests__/e2e/Paint.spec.tsx +0 -1
  373. package/src/renderer/__tests__/e2e/Paths.spec.tsx +1 -6
  374. package/src/renderer/__tests__/e2e/RuntimeShader.spec.tsx +0 -1
  375. package/src/renderer/__tests__/e2e/Skottie.spec.tsx +6 -6
  376. package/src/renderer/__tests__/e2e/Surfaces.spec.tsx +2 -2
  377. package/src/renderer/__tests__/e2e/TextPath.spec.tsx +0 -2
  378. package/src/renderer/__tests__/e2e/Video.ts +0 -1
  379. package/src/renderer/__tests__/e2e/setup/Paragraph.ts +5 -1
  380. package/src/renderer/__tests__/e2e/setup/SVG.ts +5 -1
  381. package/src/renderer/__tests__/e2e/setup/SkiaObject.ts +1 -1
  382. package/src/renderer/__tests__/setup.tsx +0 -1
  383. package/src/renderer/processors/Animations/Animations.ts +4 -4
  384. package/src/skia/__tests__/Path.spec.ts +1 -3
  385. package/src/skia/core/Image.ts +1 -1
  386. package/src/skia/core/SVG.web.ts +12 -8
  387. package/src/skia/types/JsiInstance.ts +1 -1
  388. package/src/skia/types/Matrix4.ts +4 -4
  389. package/src/skia/types/NativeBuffer/NativeBufferFactory.ts +1 -1
  390. package/src/skia/types/Shader/Shader.ts +0 -1
  391. package/src/skia/web/CanvasKitWebGLBufferImpl.ts +4 -1
  392. package/src/skia/web/Host.ts +14 -1
  393. package/src/skia/web/JsiSkAnimatedImage.ts +0 -4
  394. package/src/skia/web/JsiSkCanvas.ts +0 -4
  395. package/src/skia/web/JsiSkColor.ts +1 -1
  396. package/src/skia/web/JsiSkColorFilter.ts +0 -4
  397. package/src/skia/web/JsiSkContourMeasure.ts +0 -4
  398. package/src/skia/web/JsiSkContourMeasureIter.ts +0 -4
  399. package/src/skia/web/JsiSkData.ts +0 -4
  400. package/src/skia/web/JsiSkDataFactory.ts +1 -1
  401. package/src/skia/web/JsiSkFont.ts +0 -4
  402. package/src/skia/web/JsiSkFontMgr.ts +2 -1
  403. package/src/skia/web/JsiSkImage.ts +0 -4
  404. package/src/skia/web/JsiSkImageFilter.ts +0 -4
  405. package/src/skia/web/JsiSkMaskFilter.ts +0 -4
  406. package/src/skia/web/JsiSkMatrix.ts +2 -6
  407. package/src/skia/web/JsiSkPaint.ts +0 -4
  408. package/src/skia/web/JsiSkParagraph.ts +0 -4
  409. package/src/skia/web/JsiSkParagraphBuilder.ts +0 -4
  410. package/src/skia/web/JsiSkPath.ts +0 -4
  411. package/src/skia/web/JsiSkPathEffect.ts +0 -4
  412. package/src/skia/web/JsiSkPicture.ts +0 -4
  413. package/src/skia/web/JsiSkPictureRecorder.ts +0 -4
  414. package/src/skia/web/JsiSkPoint.ts +0 -4
  415. package/src/skia/web/JsiSkRRect.ts +3 -3
  416. package/src/skia/web/JsiSkRSXform.ts +5 -3
  417. package/src/skia/web/JsiSkRect.ts +0 -4
  418. package/src/skia/web/JsiSkRuntimeEffect.ts +5 -5
  419. package/src/skia/web/JsiSkSVG.ts +2 -2
  420. package/src/skia/web/JsiSkShader.ts +0 -4
  421. package/src/skia/web/JsiSkSurface.ts +2 -2
  422. package/src/skia/web/JsiSkTextBlob.ts +0 -4
  423. package/src/skia/web/JsiSkTypeface.ts +0 -4
  424. package/src/skia/web/JsiSkTypefaceFontProvider.ts +0 -12
  425. package/src/skia/web/JsiSkVertices.ts +0 -4
  426. package/src/skia/web/JsiSkottieAnimation.ts +0 -3
  427. package/src/skia/web/JsiVideo.ts +5 -1
  428. package/src/sksg/Container.native.ts +4 -1
  429. package/src/sksg/Container.web.ts +4 -1
  430. package/src/sksg/Elements.tsx +0 -1
  431. package/src/sksg/Reconciler.ts +4 -1
  432. package/src/sksg/Recorder/ReanimatedRecorder.ts +4 -0
  433. package/src/sksg/Recorder/Visitor.ts +1 -1
  434. package/src/sksg/StaticContainer.ts +4 -1
  435. package/src/views/SkiaPictureView.web.tsx +12 -3
  436. package/cpp/api/JsiSkThreadSafeDeletion.h +0 -105
@@ -126,6 +126,8 @@ add_library(
126
126
  "${PROJECT_SOURCE_DIR}/../cpp/api/third_party/CSSColorParser.cpp"
127
127
  "${PROJECT_SOURCE_DIR}/../cpp/api/third_party/base64.cpp"
128
128
  "${PROJECT_SOURCE_DIR}/../cpp/api/third_party/SkottieUtils.cpp"
129
+
130
+ "${PROJECT_SOURCE_DIR}/../cpp/api/JsiSkDispatcher.cpp"
129
131
  ${BACKEND_SOURCES}
130
132
  )
131
133
 
@@ -34,6 +34,7 @@
34
34
  #include "include/core/SkRegion.h"
35
35
  #include "include/core/SkSurface.h"
36
36
  #include "include/core/SkTypeface.h"
37
+ #include "include/gpu/ganesh/GrDirectContext.h"
37
38
 
38
39
  #pragma clang diagnostic pop
39
40
 
@@ -68,6 +69,7 @@ public:
68
69
 
69
70
  JSI_HOST_FUNCTION(drawImage) {
70
71
  auto image = JsiSkImage::fromValue(runtime, arguments[0]);
72
+ validateImageForDrawing(runtime, image);
71
73
  auto x = arguments[1].asNumber();
72
74
  auto y = arguments[2].asNumber();
73
75
  std::shared_ptr<SkPaint> paint;
@@ -80,6 +82,7 @@ public:
80
82
 
81
83
  JSI_HOST_FUNCTION(drawImageRect) {
82
84
  auto image = JsiSkImage::fromValue(runtime, arguments[0]);
85
+ validateImageForDrawing(runtime, image);
83
86
  auto src = JsiSkRect::fromValue(runtime, arguments[1]);
84
87
  auto dest = JsiSkRect::fromValue(runtime, arguments[2]);
85
88
  auto paint = JsiSkPaint::fromValue(runtime, arguments[3]);
@@ -92,6 +95,7 @@ public:
92
95
 
93
96
  JSI_HOST_FUNCTION(drawImageCubic) {
94
97
  auto image = JsiSkImage::fromValue(runtime, arguments[0]);
98
+ validateImageForDrawing(runtime, image);
95
99
  auto x = arguments[1].asNumber();
96
100
  auto y = arguments[2].asNumber();
97
101
  float B = arguments[3].asNumber();
@@ -108,6 +112,7 @@ public:
108
112
 
109
113
  JSI_HOST_FUNCTION(drawImageOptions) {
110
114
  auto image = JsiSkImage::fromValue(runtime, arguments[0]);
115
+ validateImageForDrawing(runtime, image);
111
116
  auto x = arguments[1].asNumber();
112
117
  auto y = arguments[2].asNumber();
113
118
  auto fm = (SkFilterMode)arguments[3].asNumber();
@@ -124,6 +129,7 @@ public:
124
129
 
125
130
  JSI_HOST_FUNCTION(drawImageNine) {
126
131
  auto image = JsiSkImage::fromValue(runtime, arguments[0]);
132
+ validateImageForDrawing(runtime, image);
127
133
  auto center = JsiSkRect::fromValue(runtime, arguments[1]);
128
134
  auto dest = JsiSkRect::fromValue(runtime, arguments[2]);
129
135
  auto fm = (SkFilterMode)arguments[3].asNumber();
@@ -140,6 +146,7 @@ public:
140
146
 
141
147
  JSI_HOST_FUNCTION(drawImageRectCubic) {
142
148
  auto image = JsiSkImage::fromValue(runtime, arguments[0]);
149
+ validateImageForDrawing(runtime, image);
143
150
  auto src = JsiSkRect::fromValue(runtime, arguments[1]);
144
151
  auto dest = JsiSkRect::fromValue(runtime, arguments[2]);
145
152
  float B = arguments[3].asNumber();
@@ -159,6 +166,7 @@ public:
159
166
 
160
167
  JSI_HOST_FUNCTION(drawImageRectOptions) {
161
168
  auto image = JsiSkImage::fromValue(runtime, arguments[0]);
169
+ validateImageForDrawing(runtime, image);
162
170
  auto src = JsiSkRect::fromValue(runtime, arguments[1]);
163
171
  auto dest = JsiSkRect::fromValue(runtime, arguments[2]);
164
172
  auto filter = (SkFilterMode)arguments[3].asNumber();
@@ -695,6 +703,20 @@ public:
695
703
  SkCanvas *getCanvas() { return _canvas; }
696
704
 
697
705
  private:
706
+ void validateImageForDrawing(jsi::Runtime &runtime,
707
+ const sk_sp<SkImage> image) {
708
+ #if !defined(SK_GRAPHITE)
709
+ auto ctx = getContext()->getDirectContext();
710
+ if (!ctx) {
711
+ throw jsi::JSError(runtime, "No GPU context available");
712
+ }
713
+ if (image && !image->isValid(ctx->asRecorder())) {
714
+ throw jsi::JSError(
715
+ runtime, "image used in drawImage() does not belong to this context");
716
+ }
717
+ #endif
718
+ }
719
+
698
720
  SkCanvas *_canvas;
699
721
  };
700
722
  } // namespace RNSkia
@@ -0,0 +1,9 @@
1
+ #include "JsiSkDispatcher.h"
2
+
3
+ namespace RNSkia {
4
+
5
+ // Thread-local storage definition
6
+ thread_local std::shared_ptr<Dispatcher::DispatcherData>
7
+ Dispatcher::_threadDispatcher;
8
+
9
+ } // namespace RNSkia
@@ -0,0 +1,149 @@
1
+ #pragma once
2
+
3
+ #include <functional>
4
+ #include <memory>
5
+ #include <mutex>
6
+ #include <queue>
7
+ #include <thread>
8
+ #include <unordered_map>
9
+
10
+ namespace RNSkia {
11
+
12
+ /**
13
+ * Thread-local dispatcher for managing deferred operations.
14
+ * Each thread gets its own dispatcher instance for queueing operations
15
+ * to be executed on that specific thread.
16
+ */
17
+ class Dispatcher {
18
+ private:
19
+ using Operation = std::function<void()>;
20
+
21
+ struct DispatcherData {
22
+ std::queue<Operation> operationQueue;
23
+ std::mutex queueMutex;
24
+ };
25
+
26
+ // Thread-local storage for dispatcher data
27
+ static thread_local std::shared_ptr<DispatcherData> _threadDispatcher;
28
+
29
+ // Global registry of all dispatchers by thread ID
30
+ static inline std::mutex _registryMutex;
31
+ static inline std::unordered_map<std::thread::id,
32
+ std::weak_ptr<DispatcherData>>
33
+ _dispatcherRegistry;
34
+
35
+ std::shared_ptr<DispatcherData> _data;
36
+ std::thread::id _threadId;
37
+
38
+ public:
39
+ Dispatcher() : _threadId(std::this_thread::get_id()) {
40
+ // Get or create dispatcher data for current thread
41
+ if (!_threadDispatcher) {
42
+ _threadDispatcher = std::make_shared<DispatcherData>();
43
+
44
+ // Register in global registry
45
+ std::lock_guard<std::mutex> lock(_registryMutex);
46
+ _dispatcherRegistry[_threadId] = _threadDispatcher;
47
+ }
48
+ _data = _threadDispatcher;
49
+ }
50
+
51
+ /**
52
+ * Get the dispatcher for the current thread.
53
+ * Creates one if it doesn't exist.
54
+ */
55
+ static std::shared_ptr<Dispatcher> getDispatcher() {
56
+ return std::make_shared<Dispatcher>();
57
+ }
58
+
59
+ /**
60
+ * Get the dispatcher for a specific thread.
61
+ * Returns nullptr if that thread doesn't have a dispatcher.
62
+ */
63
+ static std::shared_ptr<Dispatcher> getDispatcher(std::thread::id threadId) {
64
+ std::lock_guard<std::mutex> lock(_registryMutex);
65
+ auto it = _dispatcherRegistry.find(threadId);
66
+ if (it != _dispatcherRegistry.end()) {
67
+ if (auto data = it->second.lock()) {
68
+ auto dispatcher = std::make_shared<Dispatcher>();
69
+ dispatcher->_data = data;
70
+ dispatcher->_threadId = threadId;
71
+ return dispatcher;
72
+ }
73
+ }
74
+ return nullptr;
75
+ }
76
+
77
+ /**
78
+ * Queue an operation to be executed on the dispatcher's thread.
79
+ * The operation will be executed when processQueue() is called on that
80
+ * thread.
81
+ */
82
+ void run(Operation op) {
83
+ if (!_data)
84
+ return;
85
+
86
+ std::lock_guard<std::mutex> lock(_data->queueMutex);
87
+ _data->operationQueue.push(std::move(op));
88
+ }
89
+
90
+ /**
91
+ * Process all pending operations for the current thread.
92
+ * Must be called from the thread that owns this dispatcher.
93
+ * Returns the number of operations processed.
94
+ */
95
+ size_t processQueue() {
96
+ if (!_data)
97
+ return 0;
98
+
99
+ // Only process if we're on the correct thread
100
+ if (std::this_thread::get_id() != _threadId) {
101
+ return 0;
102
+ }
103
+
104
+ std::queue<Operation> operations;
105
+ {
106
+ std::lock_guard<std::mutex> lock(_data->queueMutex);
107
+ operations.swap(_data->operationQueue);
108
+ }
109
+
110
+ size_t count = operations.size();
111
+ while (!operations.empty()) {
112
+ auto &op = operations.front();
113
+ op();
114
+ operations.pop();
115
+ }
116
+
117
+ return count;
118
+ }
119
+
120
+ /**
121
+ * Get the number of pending operations.
122
+ */
123
+ size_t getPendingCount() const {
124
+ if (!_data)
125
+ return 0;
126
+
127
+ std::lock_guard<std::mutex> lock(_data->queueMutex);
128
+ return _data->operationQueue.size();
129
+ }
130
+
131
+ /**
132
+ * Clean up dispatcher for a thread that's shutting down.
133
+ */
134
+ static void cleanup() {
135
+ if (_threadDispatcher) {
136
+ // Process any remaining operations
137
+ auto dispatcher = getDispatcher();
138
+ dispatcher->processQueue();
139
+
140
+ // Remove from registry
141
+ std::lock_guard<std::mutex> lock(_registryMutex);
142
+ _dispatcherRegistry.erase(std::this_thread::get_id());
143
+
144
+ _threadDispatcher.reset();
145
+ }
146
+ }
147
+ };
148
+
149
+ } // namespace RNSkia
@@ -4,11 +4,11 @@
4
4
  #include <string>
5
5
  #include <utility>
6
6
 
7
+ #include "JsiSkDispatcher.h"
7
8
  #include "JsiSkHostObjects.h"
8
9
  #include "JsiSkImageInfo.h"
9
10
  #include "JsiSkMatrix.h"
10
11
  #include "JsiSkShader.h"
11
- #include "JsiSkThreadSafeDeletion.h"
12
12
  #include "third_party/base64.h"
13
13
 
14
14
  #include "JsiTextureInfo.h"
@@ -63,7 +63,7 @@ inline SkSamplingOptions SamplingOptionsFromValue(jsi::Runtime &runtime,
63
63
 
64
64
  class JsiSkImage : public JsiSkWrappingSkPtrHostObject<SkImage> {
65
65
  private:
66
- ThreadSafeDeletion<SkImage> _deletionHandler;
66
+ std::shared_ptr<Dispatcher> _dispatcher;
67
67
 
68
68
  public:
69
69
  // TODO-API: Properties?
@@ -258,6 +258,10 @@ public:
258
258
  return JsiTextureInfo::toValue(runtime, texInfo);
259
259
  }
260
260
 
261
+ JSI_HOST_FUNCTION(isTextureBacked) {
262
+ return jsi::Value(getObject()->isTextureBacked());
263
+ }
264
+
261
265
  EXPORT_JSI_API_TYPENAME(JsiSkImage, Image)
262
266
 
263
267
  JSI_EXPORT_FUNCTIONS(JSI_EXPORT_FUNC(JsiSkImage, width),
@@ -270,27 +274,41 @@ public:
270
274
  JSI_EXPORT_FUNC(JsiSkImage, readPixels),
271
275
  JSI_EXPORT_FUNC(JsiSkImage, makeNonTextureImage),
272
276
  JSI_EXPORT_FUNC(JsiSkImage, getNativeTextureUnstable),
277
+ JSI_EXPORT_FUNC(JsiSkImage, isTextureBacked),
273
278
  JSI_EXPORT_FUNC(JsiSkImage, dispose))
274
279
 
275
280
  JsiSkImage(std::shared_ptr<RNSkPlatformContext> context,
276
281
  const sk_sp<SkImage> image)
277
282
  : JsiSkWrappingSkPtrHostObject<SkImage>(std::move(context),
278
283
  std::move(image)) {
279
- // Drain any pending deletions when creating new images
280
- ThreadSafeDeletion<SkImage>::drainDeletionQueue();
284
+ // Get the dispatcher for the current thread
285
+ _dispatcher = Dispatcher::getDispatcher();
286
+ // Process any pending operations
287
+ _dispatcher->processQueue();
281
288
  }
282
289
 
283
290
  ~JsiSkImage() override {
284
- // Handle thread-safe deletion
285
- _deletionHandler.handleDeletion(getObject());
286
- // Always clear the object to prevent base class destructor from deleting it
287
- // handleDeletion takes full responsibility for the object's lifetime
291
+ // Queue deletion on the creation thread if needed
292
+ auto image = getObject();
293
+ if (image && _dispatcher) {
294
+ _dispatcher->run([image]() {
295
+ // Image will be deleted when this lambda is destroyed
296
+ });
297
+ }
298
+ // Clear the object to prevent base class destructor from deleting it
288
299
  setObject(nullptr);
289
300
  }
290
301
 
291
302
  size_t getMemoryPressure() const override {
292
303
  auto image = getObject();
293
- return image ? image->imageInfo().computeMinByteSize() : 0;
304
+ if (image) {
305
+ if (image->isTextureBacked()) {
306
+ return image->textureSize();
307
+ } else {
308
+ return image->imageInfo().computeMinByteSize();
309
+ }
310
+ }
311
+ return 0;
294
312
  }
295
313
  };
296
314
 
@@ -3,6 +3,7 @@
3
3
  #include <memory>
4
4
 
5
5
  #include "JsiSkData.h"
6
+ #include "JsiSkDispatcher.h"
6
7
  #include "JsiSkHostObjects.h"
7
8
  #include "JsiSkMatrix.h"
8
9
  #include "JsiSkRect.h"
@@ -20,10 +21,30 @@ namespace RNSkia {
20
21
  namespace jsi = facebook::jsi;
21
22
 
22
23
  class JsiSkPicture : public JsiSkWrappingSkPtrHostObject<SkPicture> {
24
+ private:
25
+ std::shared_ptr<Dispatcher> _dispatcher;
26
+
23
27
  public:
24
28
  JsiSkPicture(std::shared_ptr<RNSkPlatformContext> context,
25
29
  const sk_sp<SkPicture> picture)
26
- : JsiSkWrappingSkPtrHostObject<SkPicture>(context, picture) {}
30
+ : JsiSkWrappingSkPtrHostObject<SkPicture>(context, picture) {
31
+ // Get the dispatcher for the current thread
32
+ _dispatcher = Dispatcher::getDispatcher();
33
+ // Process any pending operations
34
+ _dispatcher->processQueue();
35
+ }
36
+
37
+ ~JsiSkPicture() override {
38
+ // Queue deletion on the creation thread if needed
39
+ auto picture = getObject();
40
+ if (picture && _dispatcher) {
41
+ _dispatcher->run([picture]() {
42
+ // Picture will be deleted when this lambda is destroyed
43
+ });
44
+ }
45
+ // Clear the object to prevent base class destructor from deleting it
46
+ setObject(nullptr);
47
+ }
27
48
 
28
49
  JSI_HOST_FUNCTION(makeShader) {
29
50
  auto tmx = (SkTileMode)arguments[0].asNumber();
@@ -5,8 +5,8 @@
5
5
 
6
6
  #include <jsi/jsi.h>
7
7
 
8
+ #include "JsiSkDispatcher.h"
8
9
  #include "JsiSkHostObjects.h"
9
- #include "JsiSkThreadSafeDeletion.h"
10
10
  #include "JsiTextureInfo.h"
11
11
 
12
12
  #include "JsiSkCanvas.h"
@@ -30,23 +30,28 @@ namespace jsi = facebook::jsi;
30
30
 
31
31
  class JsiSkSurface : public JsiSkWrappingSkPtrHostObject<SkSurface> {
32
32
  private:
33
- ThreadSafeDeletion<SkSurface> _deletionHandler;
33
+ std::shared_ptr<Dispatcher> _dispatcher;
34
34
 
35
35
  public:
36
36
  JsiSkSurface(std::shared_ptr<RNSkPlatformContext> context,
37
37
  sk_sp<SkSurface> surface)
38
38
  : JsiSkWrappingSkPtrHostObject<SkSurface>(std::move(context),
39
- std::move(surface)),
40
- _deletionHandler() {
41
- // Drain any pending deletions when creating new surfaces
42
- ThreadSafeDeletion<SkSurface>::drainDeletionQueue();
39
+ std::move(surface)) {
40
+ // Get the dispatcher for the current thread
41
+ _dispatcher = Dispatcher::getDispatcher();
42
+ // Process any pending operations
43
+ _dispatcher->processQueue();
43
44
  }
44
45
 
45
46
  ~JsiSkSurface() override {
46
- // Handle thread-safe deletion
47
- _deletionHandler.handleDeletion(getObject());
48
- // Always clear the object to prevent base class destructor from deleting it
49
- // handleDeletion takes full responsibility for the object's lifetime
47
+ // Queue deletion on the creation thread if needed
48
+ auto surface = getObject();
49
+ if (surface && _dispatcher) {
50
+ _dispatcher->run([surface]() {
51
+ // Surface will be deleted when this lambda is destroyed
52
+ });
53
+ }
54
+ // Clear the object to prevent base class destructor from deleting it
50
55
  setObject(nullptr);
51
56
  }
52
57