@shopify/react-native-skia 0.1.212 → 0.1.214

Sign up to get free protection for your applications and to get access to all the features.
Files changed (254) hide show
  1. package/android/build.gradle +5 -0
  2. package/android/cpp/rnskia-android/SkiaOpenGLHelper.h +3 -2
  3. package/android/cpp/rnskia-android/SkiaOpenGLSurfaceFactory.cpp +9 -2
  4. package/cpp/api/JsiSkSurface.h +4 -1
  5. package/cpp/skia/include/android/GrAHardwareBufferUtils.h +99 -0
  6. package/cpp/skia/include/android/SkHeifDecoder.h +10 -3
  7. package/cpp/skia/include/codec/SkAvifDecoder.h +1 -0
  8. package/cpp/skia/include/codec/SkBmpDecoder.h +1 -0
  9. package/cpp/skia/include/codec/SkCodec.h +4 -3
  10. package/cpp/skia/include/codec/SkEncodedImageFormat.h +0 -3
  11. package/cpp/skia/include/codec/SkGifDecoder.h +1 -0
  12. package/cpp/skia/include/codec/SkIcoDecoder.h +1 -0
  13. package/cpp/skia/include/codec/SkJpegDecoder.h +1 -0
  14. package/cpp/skia/include/codec/SkJpegxlDecoder.h +1 -0
  15. package/cpp/skia/include/codec/SkPngDecoder.h +1 -0
  16. package/cpp/skia/include/codec/SkRawDecoder.h +1 -0
  17. package/cpp/skia/include/codec/SkWbmpDecoder.h +1 -0
  18. package/cpp/skia/include/codec/SkWebpDecoder.h +1 -0
  19. package/cpp/skia/include/config/SkUserConfig.h +0 -2
  20. package/cpp/skia/include/core/SkBitmap.h +8 -8
  21. package/cpp/skia/include/core/SkCanvas.h +37 -50
  22. package/cpp/skia/include/core/SkCapabilities.h +2 -7
  23. package/cpp/skia/include/core/SkColor.h +1 -1
  24. package/cpp/skia/include/core/SkColorFilter.h +6 -0
  25. package/cpp/skia/include/core/SkColorTable.h +3 -0
  26. package/cpp/skia/include/core/SkColorType.h +2 -0
  27. package/cpp/skia/include/core/SkContourMeasure.h +12 -8
  28. package/cpp/skia/include/core/SkDocument.h +1 -0
  29. package/cpp/skia/include/core/SkFont.h +11 -2
  30. package/cpp/skia/include/core/SkFontMgr.h +2 -3
  31. package/cpp/skia/include/core/SkGraphics.h +3 -13
  32. package/cpp/skia/include/core/SkImage.h +57 -111
  33. package/cpp/skia/include/core/SkImageFilter.h +6 -1
  34. package/cpp/skia/include/core/SkImageGenerator.h +8 -0
  35. package/cpp/skia/include/core/SkImageInfo.h +0 -2
  36. package/cpp/skia/include/core/SkM44.h +7 -3
  37. package/cpp/skia/include/core/SkMallocPixelRef.h +4 -1
  38. package/cpp/skia/include/core/SkMatrix.h +17 -17
  39. package/cpp/skia/include/core/SkMesh.h +71 -61
  40. package/cpp/skia/include/core/SkMilestone.h +1 -1
  41. package/cpp/skia/include/core/SkOverdrawCanvas.h +25 -0
  42. package/cpp/skia/include/core/SkPaint.h +1 -1
  43. package/cpp/skia/include/core/SkPath.h +12 -4
  44. package/cpp/skia/include/core/SkPathMeasure.h +3 -4
  45. package/cpp/skia/include/core/SkPicture.h +19 -6
  46. package/cpp/skia/include/core/SkPictureRecorder.h +6 -6
  47. package/cpp/skia/include/core/SkPixmap.h +2 -3
  48. package/cpp/skia/include/core/SkRRect.h +1 -1
  49. package/cpp/skia/include/core/SkRect.h +107 -110
  50. package/cpp/skia/include/core/SkRefCnt.h +1 -1
  51. package/cpp/skia/include/core/SkRegion.h +7 -1
  52. package/cpp/skia/include/core/SkSerialProcs.h +14 -0
  53. package/cpp/skia/include/core/SkShader.h +9 -0
  54. package/cpp/skia/include/core/SkStream.h +9 -9
  55. package/cpp/skia/include/core/SkString.h +1 -1
  56. package/cpp/skia/include/core/SkSurface.h +14 -25
  57. package/cpp/skia/include/core/SkTextBlob.h +17 -4
  58. package/cpp/skia/include/core/SkTiledImageUtils.h +28 -0
  59. package/cpp/skia/include/core/SkTypeface.h +7 -2
  60. package/cpp/skia/include/core/SkTypes.h +4 -12
  61. package/cpp/skia/include/docs/SkPDFDocument.h +17 -3
  62. package/cpp/skia/include/effects/SkImageFilters.h +73 -24
  63. package/cpp/skia/include/effects/SkRuntimeEffect.h +20 -51
  64. package/cpp/skia/include/gpu/GpuTypes.h +13 -0
  65. package/cpp/skia/include/gpu/GrBackendSurface.h +95 -262
  66. package/cpp/skia/include/gpu/GrContextOptions.h +7 -1
  67. package/cpp/skia/include/gpu/GrDirectContext.h +138 -128
  68. package/cpp/skia/include/gpu/GrRecordingContext.h +9 -4
  69. package/cpp/skia/include/gpu/GrSurfaceInfo.h +0 -24
  70. package/cpp/skia/include/gpu/GrTypes.h +16 -1
  71. package/cpp/skia/include/gpu/GrYUVABackendTextures.h +4 -4
  72. package/cpp/skia/include/gpu/d3d/GrD3DTypes.h +2 -2
  73. package/cpp/skia/include/gpu/ganesh/SkImageGanesh.h +44 -12
  74. package/cpp/skia/include/gpu/ganesh/SkMeshGanesh.h +57 -0
  75. package/cpp/skia/include/gpu/ganesh/SkSurfaceGanesh.h +2 -1
  76. package/cpp/skia/include/gpu/ganesh/gl/GrGLBackendSurface.h +58 -0
  77. package/cpp/skia/include/gpu/ganesh/gl/GrGLDirectContext.h +29 -0
  78. package/cpp/skia/include/gpu/ganesh/mtl/SkSurfaceMetal.h +1 -1
  79. package/cpp/skia/include/gpu/ganesh/vk/GrVkBackendSurface.h +67 -0
  80. package/cpp/skia/include/gpu/gl/GrGLInterface.h +2 -2
  81. package/cpp/skia/include/gpu/graphite/BackendTexture.h +14 -3
  82. package/cpp/skia/include/gpu/graphite/Context.h +93 -13
  83. package/cpp/skia/include/gpu/graphite/ContextOptions.h +19 -8
  84. package/cpp/skia/include/gpu/graphite/GraphiteTypes.h +23 -0
  85. package/cpp/skia/include/gpu/graphite/Image.h +56 -0
  86. package/cpp/skia/include/gpu/graphite/ImageProvider.h +5 -0
  87. package/cpp/skia/include/gpu/graphite/Recorder.h +26 -9
  88. package/cpp/skia/include/gpu/graphite/Recording.h +7 -5
  89. package/cpp/skia/include/gpu/graphite/TextureInfo.h +8 -0
  90. package/cpp/skia/include/gpu/graphite/mtl/MtlGraphiteTypes.h +2 -2
  91. package/cpp/skia/include/gpu/mtl/GrMtlTypes.h +2 -2
  92. package/cpp/skia/include/gpu/vk/GrVkTypes.h +4 -3
  93. package/cpp/skia/include/ports/SkCFObject.h +1 -1
  94. package/cpp/skia/include/private/SkGainmapInfo.h +4 -13
  95. package/cpp/skia/include/private/SkJpegGainmapEncoder.h +1 -24
  96. package/cpp/skia/include/private/SkWeakRefCnt.h +1 -1
  97. package/cpp/skia/include/private/base/SkAnySubclass.h +73 -0
  98. package/cpp/skia/include/private/base/SkAssert.h +106 -12
  99. package/cpp/skia/include/private/base/SkAttributes.h +0 -12
  100. package/cpp/skia/include/private/base/SkFeatures.h +0 -3
  101. package/cpp/skia/include/private/base/SkFloatingPoint.h +58 -105
  102. package/cpp/skia/include/private/base/SkSpan_impl.h +18 -12
  103. package/cpp/skia/include/private/base/SkTArray.h +22 -17
  104. package/cpp/skia/include/private/base/SkTDArray.h +5 -6
  105. package/cpp/skia/include/private/base/SkTemplates.h +50 -30
  106. package/cpp/skia/include/private/chromium/GrDeferredDisplayListRecorder.h +5 -2
  107. package/cpp/skia/include/private/chromium/GrSurfaceCharacterization.h +2 -2
  108. package/cpp/skia/include/private/chromium/SkChromeRemoteGlyphCache.h +13 -8
  109. package/cpp/skia/include/private/chromium/SkDiscardableMemory.h +1 -1
  110. package/cpp/skia/include/private/chromium/SkImageChromium.h +16 -3
  111. package/cpp/skia/include/private/chromium/Slug.h +11 -4
  112. package/cpp/skia/include/private/gpu/ganesh/GrD3DTypesMinimal.h +1 -1
  113. package/cpp/skia/include/private/gpu/ganesh/GrGLTypesPriv.h +6 -9
  114. package/cpp/skia/include/private/gpu/ganesh/GrTypesPriv.h +29 -13
  115. package/cpp/skia/include/private/gpu/ganesh/GrVkTypesPriv.h +2 -28
  116. package/cpp/skia/include/private/gpu/graphite/ContextOptionsPriv.h +34 -0
  117. package/cpp/skia/include/private/gpu/graphite/DawnTypesPriv.h +6 -0
  118. package/cpp/skia/include/private/gpu/graphite/MtlGraphiteTypesPriv.h +8 -0
  119. package/cpp/skia/include/private/gpu/graphite/VulkanGraphiteTypesPriv.h +10 -0
  120. package/cpp/skia/include/utils/SkBase64.h +2 -2
  121. package/cpp/skia/include/utils/SkNWayCanvas.h +1 -11
  122. package/cpp/skia/include/utils/SkNoDrawCanvas.h +0 -2
  123. package/cpp/skia/include/utils/SkPaintFilterCanvas.h +1 -2
  124. package/cpp/skia/include/utils/SkShadowUtils.h +15 -1
  125. package/cpp/skia/include/utils/SkTextUtils.h +1 -1
  126. package/cpp/skia/modules/skparagraph/include/Paragraph.h +107 -1
  127. package/cpp/skia/modules/skparagraph/include/ParagraphBuilder.h +3 -2
  128. package/cpp/skia/modules/skparagraph/include/ParagraphStyle.h +4 -0
  129. package/cpp/skia/modules/skparagraph/include/TypefaceFontProvider.h +5 -3
  130. package/cpp/skia/modules/svg/include/SkSVGAttributeParser.h +4 -0
  131. package/cpp/skia/src/core/SkChecksum.h +2 -1
  132. package/cpp/skia/src/core/SkPathPriv.h +1 -1
  133. package/cpp/skia/src/core/SkTHash.h +19 -9
  134. package/ios/RNSkia-iOS/RNSkMetalCanvasProvider.mm +3 -1
  135. package/ios/RNSkia-iOS/SkiaMetalSurfaceFactory.mm +1 -1
  136. package/lib/commonjs/dom/nodes/datatypes/Rect.js +5 -1
  137. package/lib/commonjs/dom/nodes/datatypes/Rect.js.map +1 -1
  138. package/lib/commonjs/external/reanimated/index.d.ts +1 -0
  139. package/lib/commonjs/external/reanimated/index.js +13 -0
  140. package/lib/commonjs/external/reanimated/index.js.map +1 -1
  141. package/lib/commonjs/external/reanimated/moduleWrapper.js +3 -8
  142. package/lib/commonjs/external/reanimated/moduleWrapper.js.map +1 -1
  143. package/lib/commonjs/external/reanimated/renderHelpers.js +46 -1
  144. package/lib/commonjs/external/reanimated/renderHelpers.js.map +1 -1
  145. package/lib/commonjs/external/reanimated/useDerivedValueOnJS.d.ts +2 -0
  146. package/lib/commonjs/external/reanimated/useDerivedValueOnJS.js +26 -0
  147. package/lib/commonjs/external/reanimated/useDerivedValueOnJS.js.map +1 -0
  148. package/lib/commonjs/external/reanimated/useSharedValueEffect.js +2 -5
  149. package/lib/commonjs/external/reanimated/useSharedValueEffect.js.map +1 -1
  150. package/lib/commonjs/index.d.ts +1 -0
  151. package/lib/commonjs/index.js +21 -0
  152. package/lib/commonjs/index.js.map +1 -1
  153. package/lib/commonjs/skia/types/MaskFilter.js +4 -0
  154. package/lib/commonjs/skia/types/MaskFilter.js.map +1 -1
  155. package/lib/commonjs/skia/web/JsiSkPicture.js +2 -1
  156. package/lib/commonjs/skia/web/JsiSkPicture.js.map +1 -1
  157. package/lib/commonjs/views/SkiaBaseWebView.js +1 -1
  158. package/lib/commonjs/views/SkiaBaseWebView.js.map +1 -1
  159. package/lib/commonjs/views/types.js +3 -0
  160. package/lib/commonjs/views/types.js.map +1 -1
  161. package/lib/module/dom/nodes/datatypes/Rect.js +5 -1
  162. package/lib/module/dom/nodes/datatypes/Rect.js.map +1 -1
  163. package/lib/module/external/reanimated/index.d.ts +1 -0
  164. package/lib/module/external/reanimated/index.js +1 -0
  165. package/lib/module/external/reanimated/index.js.map +1 -1
  166. package/lib/module/external/reanimated/moduleWrapper.js +1 -9
  167. package/lib/module/external/reanimated/moduleWrapper.js.map +1 -1
  168. package/lib/module/external/reanimated/renderHelpers.js +48 -2
  169. package/lib/module/external/reanimated/renderHelpers.js.map +1 -1
  170. package/lib/module/external/reanimated/useDerivedValueOnJS.d.ts +2 -0
  171. package/lib/module/external/reanimated/useDerivedValueOnJS.js +15 -0
  172. package/lib/module/external/reanimated/useDerivedValueOnJS.js.map +1 -0
  173. package/lib/module/external/reanimated/useSharedValueEffect.js +3 -6
  174. package/lib/module/external/reanimated/useSharedValueEffect.js.map +1 -1
  175. package/lib/module/index.d.ts +1 -0
  176. package/lib/module/index.js +1 -0
  177. package/lib/module/index.js.map +1 -1
  178. package/lib/module/skia/types/MaskFilter.js +3 -0
  179. package/lib/module/skia/types/MaskFilter.js.map +1 -1
  180. package/lib/module/views/types.js +3 -0
  181. package/lib/module/views/types.js.map +1 -1
  182. package/lib/typescript/src/external/reanimated/index.d.ts +1 -0
  183. package/lib/typescript/src/external/reanimated/useDerivedValueOnJS.d.ts +2 -0
  184. package/lib/typescript/src/index.d.ts +1 -0
  185. package/libs/android/arm64-v8a/libskia.a +0 -0
  186. package/libs/android/arm64-v8a/libskottie.a +0 -0
  187. package/libs/android/arm64-v8a/libskparagraph.a +0 -0
  188. package/libs/android/arm64-v8a/libsksg.a +0 -0
  189. package/libs/android/arm64-v8a/libskshaper.a +0 -0
  190. package/libs/android/arm64-v8a/libskunicode.a +0 -0
  191. package/libs/android/arm64-v8a/libsvg.a +0 -0
  192. package/libs/android/armeabi-v7a/libskia.a +0 -0
  193. package/libs/android/armeabi-v7a/libskottie.a +0 -0
  194. package/libs/android/armeabi-v7a/libskparagraph.a +0 -0
  195. package/libs/android/armeabi-v7a/libsksg.a +0 -0
  196. package/libs/android/armeabi-v7a/libskshaper.a +0 -0
  197. package/libs/android/armeabi-v7a/libskunicode.a +0 -0
  198. package/libs/android/armeabi-v7a/libsvg.a +0 -0
  199. package/libs/android/x86/libskia.a +0 -0
  200. package/libs/android/x86/libskottie.a +0 -0
  201. package/libs/android/x86/libskparagraph.a +0 -0
  202. package/libs/android/x86/libsksg.a +0 -0
  203. package/libs/android/x86/libskshaper.a +0 -0
  204. package/libs/android/x86/libskunicode.a +0 -0
  205. package/libs/android/x86/libsvg.a +0 -0
  206. package/libs/android/x86_64/libskia.a +0 -0
  207. package/libs/android/x86_64/libskottie.a +0 -0
  208. package/libs/android/x86_64/libskparagraph.a +0 -0
  209. package/libs/android/x86_64/libsksg.a +0 -0
  210. package/libs/android/x86_64/libskshaper.a +0 -0
  211. package/libs/android/x86_64/libskunicode.a +0 -0
  212. package/libs/android/x86_64/libsvg.a +0 -0
  213. package/libs/ios/libskia.xcframework/Info.plist +5 -5
  214. package/libs/ios/libskia.xcframework/ios-arm64_arm64e/libskia.a +0 -0
  215. package/libs/ios/libskia.xcframework/ios-arm64_arm64e_x86_64-simulator/libskia.a +0 -0
  216. package/libs/ios/libskottie.xcframework/ios-arm64_arm64e/libskottie.a +0 -0
  217. package/libs/ios/libskottie.xcframework/ios-arm64_arm64e_x86_64-simulator/libskottie.a +0 -0
  218. package/libs/ios/libskparagraph.xcframework/Info.plist +5 -5
  219. package/libs/ios/libskparagraph.xcframework/ios-arm64_arm64e/libskparagraph.a +0 -0
  220. package/libs/ios/libskparagraph.xcframework/ios-arm64_arm64e_x86_64-simulator/libskparagraph.a +0 -0
  221. package/libs/ios/libsksg.xcframework/Info.plist +5 -5
  222. package/libs/ios/libsksg.xcframework/ios-arm64_arm64e/libsksg.a +0 -0
  223. package/libs/ios/libsksg.xcframework/ios-arm64_arm64e_x86_64-simulator/libsksg.a +0 -0
  224. package/libs/ios/libskshaper.xcframework/ios-arm64_arm64e/libskshaper.a +0 -0
  225. package/libs/ios/libskshaper.xcframework/ios-arm64_arm64e_x86_64-simulator/libskshaper.a +0 -0
  226. package/libs/ios/libskunicode.xcframework/Info.plist +5 -5
  227. package/libs/ios/libskunicode.xcframework/ios-arm64_arm64e/libskunicode.a +0 -0
  228. package/libs/ios/libskunicode.xcframework/ios-arm64_arm64e_x86_64-simulator/libskunicode.a +0 -0
  229. package/libs/ios/libsvg.xcframework/Info.plist +5 -5
  230. package/libs/ios/libsvg.xcframework/ios-arm64_arm64e/libsvg.a +0 -0
  231. package/libs/ios/libsvg.xcframework/ios-arm64_arm64e_x86_64-simulator/libsvg.a +0 -0
  232. package/package.json +1 -1
  233. package/react-native-skia.podspec +1 -1
  234. package/src/dom/nodes/datatypes/Rect.ts +6 -2
  235. package/src/external/reanimated/index.ts +1 -0
  236. package/src/external/reanimated/moduleWrapper.ts +6 -10
  237. package/src/external/reanimated/renderHelpers.ts +41 -1
  238. package/src/external/reanimated/useDerivedValueOnJS.ts +24 -0
  239. package/src/external/reanimated/useSharedValueEffect.ts +4 -7
  240. package/src/index.ts +1 -0
  241. package/cpp/skia/include/core/SkDeferredDisplayList.h +0 -15
  242. package/cpp/skia/include/core/SkDeferredDisplayListRecorder.h +0 -15
  243. package/cpp/skia/include/core/SkPromiseImageTexture.h +0 -20
  244. package/cpp/skia/include/core/SkSurfaceCharacterization.h +0 -15
  245. package/cpp/skia/include/core/SkTime.h +0 -63
  246. package/cpp/skia/include/effects/SkOpPathEffect.h +0 -43
  247. package/cpp/skia/include/effects/SkStrokeAndFillPathEffect.h +0 -28
  248. package/cpp/skia/include/gpu/GrBackendSurfaceMutableState.h +0 -32
  249. package/cpp/skia/include/gpu/dawn/GrDawnTypes.h +0 -95
  250. package/cpp/skia/include/private/SkBitmaskEnum.h +0 -59
  251. package/cpp/skia/include/private/SkSLDefines.h +0 -64
  252. package/cpp/skia/include/private/SkShadowFlags.h +0 -27
  253. package/cpp/skia/include/private/gpu/ganesh/GrDawnTypesPriv.h +0 -26
  254. /package/cpp/skia/{include/private/base → src/core}/SkPathEnums.h +0 -0
@@ -11,6 +11,7 @@
11
11
  #include "include/core/SkImage.h"
12
12
  #include "include/core/SkRefCnt.h"
13
13
  #include "include/core/SkSpan.h"
14
+ #include "include/gpu/GpuTypes.h"
14
15
 
15
16
  class SkYUVAInfo;
16
17
  class SkYUVAPixmaps;
@@ -58,8 +59,19 @@ using GraphitePromiseTextureReleaseProc = void (*)(GraphitePromiseTextureRelease
58
59
  backend texture is linear, then the colorSpace should include
59
60
  a description of the transfer function as
60
61
  well (e.g., SkColorSpace::MakeSRGB()).
62
+ @param origin Whether the Texture logically treats the origin as TopLeft or
63
+ BottomLeft
61
64
  @return created SkImage, or nullptr
62
65
  */
66
+ SK_API sk_sp<SkImage> AdoptTextureFrom(skgpu::graphite::Recorder*,
67
+ const skgpu::graphite::BackendTexture&,
68
+ SkColorType colorType,
69
+ SkAlphaType alphaType,
70
+ sk_sp<SkColorSpace> colorSpace,
71
+ skgpu::Origin origin,
72
+ TextureReleaseProc = nullptr,
73
+ ReleaseContext = nullptr);
74
+
63
75
  SK_API sk_sp<SkImage> AdoptTextureFrom(skgpu::graphite::Recorder*,
64
76
  const skgpu::graphite::BackendTexture&,
65
77
  SkColorType colorType,
@@ -107,6 +119,7 @@ SK_API sk_sp<SkImage> AdoptTextureFrom(skgpu::graphite::Recorder*,
107
119
  @param dimensions width & height of promised gpu texture
108
120
  @param textureInfo structural information for the promised gpu texture
109
121
  @param colorInfo color type, alpha type and colorSpace information for the image
122
+ @param origin Whether the Texture logically treats the origin as TopLeft or BottomLeft
110
123
  @param isVolatile volatility of the promise image
111
124
  @param fulfill function called to get the actual backend texture,
112
125
  and the instance for the GraphitePromiseTextureReleaseProc
@@ -115,6 +128,17 @@ SK_API sk_sp<SkImage> AdoptTextureFrom(skgpu::graphite::Recorder*,
115
128
  @param imageContext state passed to fulfill and imageRelease
116
129
  @return created SkImage, or nullptr
117
130
  */
131
+ SK_API sk_sp<SkImage> PromiseTextureFrom(skgpu::graphite::Recorder*,
132
+ SkISize dimensions,
133
+ const skgpu::graphite::TextureInfo&,
134
+ const SkColorInfo&,
135
+ skgpu::Origin origin,
136
+ skgpu::graphite::Volatile,
137
+ GraphitePromiseImageFulfillProc,
138
+ GraphitePromiseImageReleaseProc,
139
+ GraphitePromiseTextureReleaseProc,
140
+ GraphitePromiseImageContext);
141
+
118
142
  SK_API sk_sp<SkImage> PromiseTextureFrom(skgpu::graphite::Recorder*,
119
143
  SkISize dimensions,
120
144
  const skgpu::graphite::TextureInfo&,
@@ -271,6 +295,38 @@ SK_API sk_sp<SkImage> SubsetTextureFrom(skgpu::graphite::Recorder* recorder,
271
295
  const SkImage* img,
272
296
  const SkIRect& subset,
273
297
  SkImage::RequiredProperties props = {});
298
+
299
+ /** Creates a filtered SkImage on the GPU. filter processes the src image, potentially changing
300
+ color, position, and size. subset is the bounds of src that are processed
301
+ by filter. clipBounds is the expected bounds of the filtered SkImage. outSubset
302
+ is required storage for the actual bounds of the filtered SkImage. offset is
303
+ required storage for translation of returned SkImage.
304
+
305
+ Returns nullptr if SkImage could not be created. If nullptr is returned, outSubset
306
+ and offset are undefined.
307
+
308
+ Useful for animation of SkImageFilter that varies size from frame to frame.
309
+ Returned SkImage is created larger than required by filter so that GPU texture
310
+ can be reused with different sized effects. outSubset describes the valid bounds
311
+ of GPU texture returned. offset translates the returned SkImage to keep subsequent
312
+ animation frames aligned with respect to each other.
313
+
314
+ @param recorder the recorder in which the filtering operation is to be performed
315
+ @param filter how SkImage is sampled when transformed
316
+ @param subset bounds of SkImage processed by filter
317
+ @param clipBounds expected bounds of filtered SkImage
318
+ @param outSubset storage for returned SkImage bounds
319
+ @param offset storage for returned SkImage translation
320
+ @return filtered SkImage, or nullptr
321
+ */
322
+ SK_API sk_sp<SkImage> MakeWithFilter(skgpu::graphite::Recorder* recorder,
323
+ sk_sp<SkImage> src,
324
+ const SkImageFilter* filter,
325
+ const SkIRect& subset,
326
+ const SkIRect& clipBounds,
327
+ SkIRect* outSubset,
328
+ SkIPoint* offset);
329
+
274
330
  } // namespace SkImages
275
331
 
276
332
 
@@ -33,6 +33,11 @@ class Recorder;
33
33
  * If the requirements are not met by the returned image (modulo the flexibility wrt mipmapping)
34
34
  * Graphite will drop the draw.
35
35
  *
36
+ * All returned images must be backed by textures that have a TopLeft origin. If Skia is used to
37
+ * create the texture (e.g. using makeTextureImage) then this is always guaranteed. If the client
38
+ * returns a texture they created themselves and wrapped in Skia, they must ensure that texture has
39
+ * a TopLeft origin.
40
+ *
36
41
  * Note: by default, Graphite will not perform any caching of images
37
42
  *
38
43
  * Threading concerns:
@@ -15,6 +15,7 @@
15
15
  #include "include/private/base/SingleOwner.h"
16
16
  #include "include/private/base/SkTArray.h"
17
17
 
18
+ #include <chrono>
18
19
  #include <vector>
19
20
 
20
21
  class SkCanvas;
@@ -33,7 +34,7 @@ class TextBlobRedrawCoordinator;
33
34
 
34
35
  namespace skgpu::graphite {
35
36
 
36
- class AtlasManager;
37
+ class AtlasProvider;
37
38
  class BackendTexture;
38
39
  class Caps;
39
40
  class Context;
@@ -63,6 +64,10 @@ struct SK_API RecorderOptions final {
63
64
  ~RecorderOptions();
64
65
 
65
66
  sk_sp<ImageProvider> fImageProvider;
67
+
68
+ const size_t kDefaultRecorderBudget = 256 * (1 << 20);
69
+ // What is the budget for GPU resources allocated and held by this Recorder.
70
+ size_t fGpuBudgetInBytes = kDefaultRecorderBudget;
66
71
  };
67
72
 
68
73
  class SK_API Recorder final {
@@ -120,7 +125,7 @@ public:
120
125
  * Otherwise this will delete/release the backend object that is wrapped in the BackendTexture.
121
126
  * The BackendTexture will be reset to an invalid state and should not be used again.
122
127
  */
123
- void deleteBackendTexture(BackendTexture&);
128
+ void deleteBackendTexture(const BackendTexture&);
124
129
 
125
130
  // Adds a proc that will be moved to the Recording upon snap, subsequently attached to the
126
131
  // CommandBuffer when the Recording is added, and called when that CommandBuffer is submitted
@@ -134,14 +139,25 @@ public:
134
139
  // Recording snap, at which point it is deleted.
135
140
  SkCanvas* makeDeferredCanvas(const SkImageInfo&, const TextureInfo&);
136
141
 
142
+ /**
143
+ * Frees GPU resources created and held by the Recorder. Can be called to reduce GPU memory
144
+ * pressure. Any resources that are still in use (e.g. being used by work submitted to the GPU)
145
+ * will not be deleted by this call. If the caller wants to make sure all resources are freed,
146
+ * then they should first make sure to submit and wait on any outstanding work.
147
+ */
148
+ void freeGpuResources();
149
+
150
+ /**
151
+ * Purge GPU resources on the Recorder that haven't been used in the past 'msNotUsed'
152
+ * milliseconds or are otherwise marked for deletion, regardless of whether the context is under
153
+ * budget.
154
+ */
155
+ void performDeferredCleanup(std::chrono::milliseconds msNotUsed);
156
+
137
157
  // Provides access to functions that aren't part of the public API.
138
158
  RecorderPriv priv();
139
159
  const RecorderPriv priv() const; // NOLINT(readability-const-return-type)
140
160
 
141
- #if GRAPHITE_TEST_UTILS
142
- bool deviceIsRegistered(Device*);
143
- #endif
144
-
145
161
  private:
146
162
  friend class Context; // For ctor
147
163
  friend class Device; // For registering and deregistering Devices;
@@ -184,8 +200,9 @@ private:
184
200
  std::unique_ptr<UploadBufferManager> fUploadBufferManager;
185
201
  std::vector<Device*> fTrackedDevices;
186
202
 
187
- uint32_t fRecorderID; // Needed for MessageBox handling for text
188
- std::unique_ptr<AtlasManager> fAtlasManager;
203
+ uint32_t fUniqueID; // Needed for MessageBox handling for text
204
+ uint32_t fNextRecordingID = 1;
205
+ std::unique_ptr<AtlasProvider> fAtlasProvider;
189
206
  std::unique_ptr<TokenTracker> fTokenTracker;
190
207
  std::unique_ptr<sktext::gpu::StrikeCache> fStrikeCache;
191
208
  std::unique_ptr<sktext::gpu::TextBlobRedrawCoordinator> fTextBlobCache;
@@ -202,7 +219,7 @@ private:
202
219
 
203
220
  skia_private::TArray<sk_sp<RefCntedCallback>> fFinishedProcs;
204
221
 
205
- #if GRAPHITE_TEST_UTILS
222
+ #if defined(GRAPHITE_TEST_UTILS)
206
223
  // For testing use only -- the Context used to create this Recorder
207
224
  Context* fContext = nullptr;
208
225
  #endif
@@ -36,10 +36,6 @@ public:
36
36
 
37
37
  RecordingPriv priv();
38
38
 
39
- #if GRAPHITE_TEST_UTILS
40
- bool isTargetProxyInstantiated() const;
41
- #endif
42
-
43
39
  private:
44
40
  friend class Recorder; // for ctor and LazyProxyData
45
41
  friend class RecordingPriv;
@@ -64,7 +60,9 @@ private:
64
60
  std::size_t operator()(const sk_sp<TextureProxy>& proxy) const;
65
61
  };
66
62
 
67
- Recording(std::unique_ptr<TaskGraph>,
63
+ Recording(uint32_t uniqueID,
64
+ uint32_t recorderID,
65
+ std::unique_ptr<TaskGraph>,
68
66
  std::unordered_set<sk_sp<TextureProxy>, ProxyHash>&& nonVolatileLazyProxies,
69
67
  std::unordered_set<sk_sp<TextureProxy>, ProxyHash>&& volatileLazyProxies,
70
68
  std::unique_ptr<LazyProxyData> targetProxyData,
@@ -73,6 +71,10 @@ private:
73
71
  bool addCommands(CommandBuffer*, ResourceProvider*);
74
72
  void addResourceRef(sk_sp<Resource>);
75
73
 
74
+ // Used to verify ordering
75
+ uint32_t fUniqueID;
76
+ uint32_t fRecorderID;
77
+
76
78
  std::unique_ptr<TaskGraph> fGraph;
77
79
  // We don't always take refs to all resources used by specific Tasks (e.g. a common buffer used
78
80
  // for uploads). Instead we'll just hold onto one ref for those Resources outside the Tasks.
@@ -23,6 +23,8 @@
23
23
  #include "include/private/gpu/graphite/VulkanGraphiteTypesPriv.h"
24
24
  #endif
25
25
 
26
+ struct SkISize;
27
+
26
28
  namespace skgpu::graphite {
27
29
 
28
30
  class SK_API TextureInfo {
@@ -100,12 +102,18 @@ public:
100
102
  }
101
103
  #endif
102
104
 
105
+ bool isCompatible(const TextureInfo& that) const;
103
106
  SkString toString() const;
104
107
 
105
108
  private:
109
+ friend size_t ComputeSize(SkISize dimensions, const TextureInfo&); // for bytesPerPixel
110
+
111
+ size_t bytesPerPixel() const;
112
+
106
113
  #ifdef SK_DAWN
107
114
  friend class DawnCaps;
108
115
  friend class DawnCommandBuffer;
116
+ friend class DawnComputePipeline;
109
117
  friend class DawnGraphicsPipeline;
110
118
  friend class DawnResourceProvider;
111
119
  friend class DawnTexture;
@@ -19,9 +19,9 @@
19
19
  #include <TargetConditionals.h>
20
20
 
21
21
  #if TARGET_OS_SIMULATOR
22
- #define SK_API_AVAILABLE_CA_METAL_LAYER SK_API_AVAILABLE(macos(10.11), ios(13.0))
22
+ #define SK_API_AVAILABLE_CA_METAL_LAYER SK_API_AVAILABLE(macos(10.11), ios(13.0), tvos(13.0))
23
23
  #else // TARGET_OS_SIMULATOR
24
- #define SK_API_AVAILABLE_CA_METAL_LAYER SK_API_AVAILABLE(macos(10.11), ios(8.0))
24
+ #define SK_API_AVAILABLE_CA_METAL_LAYER SK_API_AVAILABLE(macos(10.11), ios(8.0), tvos(9.0))
25
25
  #endif // TARGET_OS_SIMULATOR
26
26
 
27
27
  #endif // __APPLE__
@@ -26,9 +26,9 @@ using GrMTLHandle = const void*;
26
26
  #include <TargetConditionals.h>
27
27
 
28
28
  #if TARGET_OS_SIMULATOR
29
- #define SK_API_AVAILABLE_CA_METAL_LAYER SK_API_AVAILABLE(macos(10.11), ios(13.0))
29
+ #define SK_API_AVAILABLE_CA_METAL_LAYER SK_API_AVAILABLE(macos(10.11), ios(13.0), tvos(13.0))
30
30
  #else // TARGET_OS_SIMULATOR
31
- #define SK_API_AVAILABLE_CA_METAL_LAYER SK_API_AVAILABLE(macos(10.11), ios(8.0))
31
+ #define SK_API_AVAILABLE_CA_METAL_LAYER SK_API_AVAILABLE(macos(10.11), ios(8.0), tvos(9.0))
32
32
  #endif // TARGET_OS_SIMULATOR
33
33
 
34
34
  /**
@@ -34,7 +34,10 @@ struct GrVkYcbcrConversionInfo {
34
34
  }
35
35
  bool operator!=(const GrVkYcbcrConversionInfo& that) const { return !(*this == that); }
36
36
 
37
- bool isValid() const { return fYcbcrModel != VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY; }
37
+ bool isValid() const {
38
+ return fYcbcrModel != VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY ||
39
+ fExternalFormat != 0;
40
+ }
38
41
 
39
42
  // Format of the source image. Must be set to VK_FORMAT_UNDEFINED for external images or
40
43
  // a valid image format otherwise.
@@ -79,7 +82,6 @@ struct GrVkImageInfo {
79
82
  bool fPartOfSwapchainOrAndroidWindow = false;
80
83
  #endif
81
84
 
82
- #if GR_TEST_UTILS
83
85
  bool operator==(const GrVkImageInfo& that) const {
84
86
  bool equal = fImage == that.fImage && fAlloc == that.fAlloc &&
85
87
  fImageTiling == that.fImageTiling &&
@@ -97,7 +99,6 @@ struct GrVkImageInfo {
97
99
  #endif
98
100
  return equal;
99
101
  }
100
- #endif
101
102
  };
102
103
 
103
104
  using GrVkGetProc = skgpu::VulkanGetProc;
@@ -130,7 +130,7 @@ public:
130
130
  * The caller must assume ownership of the object, and manage its reference count directly.
131
131
  * No call to CFRelease() will be made.
132
132
  */
133
- T SK_WARN_UNUSED_RESULT release() {
133
+ [[nodiscard]] T release() {
134
134
  T obj = fObject;
135
135
  fObject = nil;
136
136
  return obj;
@@ -71,29 +71,20 @@ struct SkGainmapInfo {
71
71
  };
72
72
  BaseImageType fBaseImageType = BaseImageType::kSDR;
73
73
 
74
- inline bool operator==(const SkGainmapInfo& other) {
74
+ inline bool operator==(const SkGainmapInfo& other) const {
75
75
  return fGainmapRatioMin == other.fGainmapRatioMin &&
76
76
  fGainmapRatioMax == other.fGainmapRatioMax && fGainmapGamma == other.fGainmapGamma &&
77
77
  fEpsilonSdr == other.fEpsilonSdr && fEpsilonHdr == other.fEpsilonHdr &&
78
78
  fDisplayRatioSdr == other.fDisplayRatioSdr &&
79
79
  fDisplayRatioHdr == other.fDisplayRatioHdr && fBaseImageType == other.fBaseImageType;
80
80
  }
81
- inline bool operator!=(const SkGainmapInfo& other) { return !(*this == other); }
81
+ inline bool operator!=(const SkGainmapInfo& other) const { return !(*this == other); }
82
82
 
83
83
  // TODO(ccameron): Remove these parameters once we are certain they are not used in Android.
84
84
  enum class Type {
85
- kUnknown,
86
- kMultiPicture,
87
- kJpegR_Linear,
88
- kJpegR_HLG,
89
- kJpegR_PQ,
90
- kHDRGM,
85
+ kDefault,
91
86
  };
92
- SkColor4f fLogRatioMin = {0.f, 0.f, 0.f, 1.0};
93
- SkColor4f fLogRatioMax = {1.f, 1.f, 1.f, 1.0};
94
- float fHdrRatioMin = 1.f;
95
- float fHdrRatioMax = 50.f;
96
- Type fType = Type::kUnknown;
87
+ Type fType = Type::kDefault;
97
88
  };
98
89
 
99
90
  #endif
@@ -17,30 +17,7 @@ struct SkGainmapInfo;
17
17
  class SK_API SkJpegGainmapEncoder {
18
18
  public:
19
19
  /**
20
- * Encode a JpegR image to |dst|.
21
- *
22
- * The base image is specified by |base|, and |baseOptions| controls the encoding behavior for
23
- * the base image.
24
- *
25
- * The gainmap image is specified by |gainmap|, and |gainmapOptions| controls the encoding
26
- * behavior for the gainmap image.
27
- *
28
- * The rendering behavior of the gainmap image is provided in |gainmapInfo|. Not all gainmap
29
- * based images are compatible with JpegR. If the image is not compatible with JpegR, then
30
- * convert the gainmap to a format that is capable with JpegR. This conversion may result in
31
- * less precise quantization of the gainmap image.
32
- *
33
- * Returns true on success. Returns false on an invalid or unsupported |src|.
34
- */
35
- static bool EncodeJpegR(SkWStream* dst,
36
- const SkPixmap& base,
37
- const SkJpegEncoder::Options& baseOptions,
38
- const SkPixmap& gainmap,
39
- const SkJpegEncoder::Options& gainmapOptions,
40
- const SkGainmapInfo& gainmapInfo);
41
-
42
- /**
43
- * Encode an HDRGM image to |dst|.
20
+ * Encode an UltraHDR image to |dst|.
44
21
  *
45
22
  * The base image is specified by |base|, and |baseOptions| controls the encoding behavior for
46
23
  * the base image.
@@ -100,7 +100,7 @@ public:
100
100
  returns false, no strong reference could be created and the owner's
101
101
  reference is in the same state as before the call.
102
102
  */
103
- bool SK_WARN_UNUSED_RESULT try_ref() const {
103
+ [[nodiscard]] bool try_ref() const {
104
104
  if (atomic_conditional_acquire_strong_ref() != 0) {
105
105
  // Acquire barrier (L/SL), if not provided above.
106
106
  // Prevents subsequent code from happening before the increment.
@@ -0,0 +1,73 @@
1
+ /*
2
+ * Copyright 2023 Google LLC
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 SkAnySubclass_DEFINED
9
+ #define SkAnySubclass_DEFINED
10
+
11
+ #include "include/private/base/SkAssert.h"
12
+
13
+ #include <cstddef>
14
+ #include <new>
15
+ #include <type_traits> // IWYU pragma: keep
16
+ #include <utility>
17
+
18
+ /**
19
+ * Stores any subclass `T` of `Base`, where sizeof(T) <= `Size`, without using the heap.
20
+ * Doesn't need advance knowledge of T, so it's particularly suited to platform or backend
21
+ * implementations of a generic interface, where the set of possible subclasses is finite and
22
+ * known, but can't be made available at compile-time.
23
+ */
24
+ template <typename Base, size_t Size>
25
+ class SkAnySubclass {
26
+ public:
27
+ SkAnySubclass() = default;
28
+ ~SkAnySubclass() {
29
+ this->reset();
30
+ }
31
+
32
+ SkAnySubclass(const SkAnySubclass&) = delete;
33
+ SkAnySubclass& operator=(const SkAnySubclass&) = delete;
34
+ SkAnySubclass(SkAnySubclass&&) = delete;
35
+ SkAnySubclass& operator=(SkAnySubclass&&) = delete;
36
+
37
+ template <typename T, typename... Args>
38
+ void emplace(Args&&... args) {
39
+ static_assert(std::is_base_of_v<Base, T>);
40
+ static_assert(sizeof(T) <= Size);
41
+ // We're going to clean up our stored object by calling ~Base:
42
+ static_assert(std::has_virtual_destructor_v<Base> || std::is_trivially_destructible_v<T>);
43
+ SkASSERT(!fValid);
44
+ new (fData) T(std::forward<Args>(args)...);
45
+ fValid = true;
46
+ }
47
+
48
+ void reset() {
49
+ if (fValid) {
50
+ this->get()->~Base();
51
+ }
52
+ fValid = false;
53
+ }
54
+
55
+ const Base* get() const {
56
+ SkASSERT(fValid);
57
+ return std::launder(reinterpret_cast<const Base*>(fData));
58
+ }
59
+
60
+ Base* get() {
61
+ SkASSERT(fValid);
62
+ return std::launder(reinterpret_cast<Base*>(fData));
63
+ }
64
+
65
+ Base* operator->() { return this->get(); }
66
+ const Base* operator->() const { return this->get(); }
67
+
68
+ private:
69
+ alignas(8) std::byte fData[Size];
70
+ bool fValid = false;
71
+ };
72
+
73
+ #endif // SkAnySubclass_DEFINED
@@ -9,8 +9,25 @@
9
9
  #define SkAssert_DEFINED
10
10
 
11
11
  #include "include/private/base/SkAPI.h"
12
+ #include "include/private/base/SkAttributes.h"
12
13
  #include "include/private/base/SkDebug.h" // IWYU pragma: keep
13
14
 
15
+ #include <cstddef>
16
+ #include <limits>
17
+
18
+ #if defined(__clang__) && defined(__has_attribute)
19
+ #if __has_attribute(likely)
20
+ #define SK_LIKELY [[likely]]
21
+ #define SK_UNLIKELY [[unlikely]]
22
+ #else
23
+ #define SK_LIKELY
24
+ #define SK_UNLIKELY
25
+ #endif
26
+ #else
27
+ #define SK_LIKELY
28
+ #define SK_UNLIKELY
29
+ #endif
30
+
14
31
  /** Called internally if we hit an unrecoverable error.
15
32
  The platform implementation must not return, but should either throw
16
33
  an exception or otherwise exit.
@@ -43,7 +60,7 @@
43
60
  } while (false)
44
61
  #endif
45
62
 
46
- // SkASSERT, SkASSERTF and SkASSERT_RELEASE can be used as stand alone assertion expressions, e.g.
63
+ // SkASSERT, SkASSERTF and SkASSERT_RELEASE can be used as standalone assertion expressions, e.g.
47
64
  // uint32_t foo(int x) {
48
65
  // SkASSERT(x > 4);
49
66
  // return x - 4;
@@ -53,18 +70,32 @@
53
70
  // return SkASSERT(x > 4),
54
71
  // x - 4;
55
72
  // }
73
+ #if defined(__clang__)
74
+ #define SkASSERT_RELEASE(cond) \
75
+ static_cast<void>( __builtin_expect(static_cast<bool>(cond), 1) \
76
+ ? static_cast<void>(0) \
77
+ : []{ SK_ABORT("check(%s)", #cond); }() )
78
+
79
+ #define SkASSERTF_RELEASE(cond, fmt, ...) \
80
+ static_cast<void>( __builtin_expect(static_cast<bool>(cond), 1) \
81
+ ? static_cast<void>(0) \
82
+ : [&]{ SK_ABORT("assertf(%s): " fmt, #cond, ##__VA_ARGS__); }() )
83
+ #else
56
84
  #define SkASSERT_RELEASE(cond) \
57
- static_cast<void>( (cond) ? (void)0 : []{ SK_ABORT("assert(%s)", #cond); }() )
85
+ static_cast<void>( (cond) ? static_cast<void>(0) : []{ SK_ABORT("check(%s)", #cond); }() )
86
+
87
+ #define SkASSERTF_RELEASE(cond, fmt, ...) \
88
+ static_cast<void>( (cond) \
89
+ ? static_cast<void>(0) \
90
+ : [&]{ SK_ABORT("assertf(%s): " fmt, #cond, ##__VA_ARGS__); }() )
91
+ #endif
58
92
 
59
93
  #if defined(SK_DEBUG)
60
- #define SkASSERT(cond) SkASSERT_RELEASE(cond)
61
- #define SkASSERTF(cond, fmt, ...) static_cast<void>( (cond) ? (void)0 : [&]{ \
62
- SkDebugf(fmt"\n", ##__VA_ARGS__); \
63
- SK_ABORT("assert(%s)", #cond); \
64
- }() )
65
- #define SkDEBUGFAIL(message) SK_ABORT("%s", message)
66
- #define SkDEBUGFAILF(fmt, ...) SK_ABORT(fmt, ##__VA_ARGS__)
67
- #define SkAssertResult(cond) SkASSERT(cond)
94
+ #define SkASSERT(cond) SkASSERT_RELEASE(cond)
95
+ #define SkASSERTF(cond, fmt, ...) SkASSERTF_RELEASE(cond, fmt, ##__VA_ARGS__)
96
+ #define SkDEBUGFAIL(message) SK_ABORT("%s", message)
97
+ #define SkDEBUGFAILF(fmt, ...) SK_ABORT(fmt, ##__VA_ARGS__)
98
+ #define SkAssertResult(cond) SkASSERT(cond)
68
99
  #else
69
100
  #define SkASSERT(cond) static_cast<void>(0)
70
101
  #define SkASSERTF(cond, fmt, ...) static_cast<void>(0)
@@ -72,7 +103,7 @@
72
103
  #define SkDEBUGFAILF(fmt, ...)
73
104
 
74
105
  // unlike SkASSERT, this macro executes its condition in the non-debug build.
75
- // The if is present so that this can be used with functions marked SK_WARN_UNUSED_RESULT.
106
+ // The if is present so that this can be used with functions marked [[nodiscard]].
76
107
  #define SkAssertResult(cond) if (cond) {} do {} while(false)
77
108
  #endif
78
109
 
@@ -89,4 +120,67 @@
89
120
  # endif
90
121
  #endif
91
122
 
92
- #endif
123
+ [[noreturn]] SK_API inline void sk_print_index_out_of_bounds(size_t i, size_t size) {
124
+ SK_ABORT("Index (%zu) out of bounds for size %zu.\n", i, size);
125
+ }
126
+
127
+ template <typename T> SK_API inline T sk_collection_check_bounds(T i, T size) {
128
+ if (0 <= i && i < size) SK_LIKELY {
129
+ return i;
130
+ }
131
+
132
+ SK_UNLIKELY {
133
+ #if defined(SK_DEBUG)
134
+ sk_print_index_out_of_bounds(static_cast<size_t>(i), static_cast<size_t>(size));
135
+ #else
136
+ SkUNREACHABLE;
137
+ #endif
138
+ }
139
+ }
140
+
141
+ [[noreturn]] SK_API inline void sk_print_length_too_big(size_t i, size_t size) {
142
+ SK_ABORT("Length (%zu) is too big for size %zu.\n", i, size);
143
+ }
144
+
145
+ template <typename T> SK_API inline T sk_collection_check_length(T i, T size) {
146
+ if (0 <= i && i <= size) SK_LIKELY {
147
+ return i;
148
+ }
149
+
150
+ SK_UNLIKELY {
151
+ #if defined(SK_DEBUG)
152
+ sk_print_length_too_big(static_cast<size_t>(i), static_cast<size_t>(size));
153
+ #else
154
+ SkUNREACHABLE;
155
+ #endif
156
+ }
157
+ }
158
+
159
+ SK_API inline void sk_collection_not_empty(bool empty) {
160
+ if (empty) SK_UNLIKELY {
161
+ #if defined(SK_DEBUG)
162
+ SK_ABORT("Collection is empty.\n");
163
+ #else
164
+ SkUNREACHABLE;
165
+ #endif
166
+ }
167
+ }
168
+
169
+ [[noreturn]] SK_API inline void sk_print_size_too_big(size_t size, size_t maxSize) {
170
+ SK_ABORT("Size (%zu) can't be represented in bytes. Max size is %zu.\n", size, maxSize);
171
+ }
172
+
173
+ template <typename T>
174
+ SK_ALWAYS_INLINE size_t check_size_bytes_too_big(size_t size) {
175
+ const size_t kMaxSize = std::numeric_limits<size_t>::max() / sizeof(T);
176
+ if (size > kMaxSize) {
177
+ #if defined(SK_DEBUG)
178
+ sk_print_size_too_big(size, kMaxSize);
179
+ #else
180
+ SkUNREACHABLE;
181
+ #endif
182
+ }
183
+ return size;
184
+ }
185
+
186
+ #endif // SkAssert_DEFINED
@@ -17,18 +17,6 @@
17
17
  # define SK_ATTRIBUTE(attr)
18
18
  #endif
19
19
 
20
- #if !defined(SK_UNUSED)
21
- # if !defined(__clang__) && defined(_MSC_VER)
22
- # define SK_UNUSED __pragma(warning(suppress:4189))
23
- # else
24
- # define SK_UNUSED SK_ATTRIBUTE(unused)
25
- # endif
26
- #endif
27
-
28
- #if !defined(SK_WARN_UNUSED_RESULT)
29
- #define SK_WARN_UNUSED_RESULT SK_ATTRIBUTE(warn_unused_result)
30
- #endif
31
-
32
20
  /**
33
21
  * If your judgment is better than the compiler's (i.e. you've profiled it),
34
22
  * you can use SK_ALWAYS_INLINE to force inlining. E.g.
@@ -36,9 +36,6 @@
36
36
  #if !defined(SK_RESTRICT)
37
37
  #define SK_RESTRICT __restrict
38
38
  #endif
39
- #if !defined(SK_WARN_UNUSED_RESULT)
40
- #define SK_WARN_UNUSED_RESULT
41
- #endif
42
39
  #endif
43
40
 
44
41
  #if !defined(SK_RESTRICT)