react-native-skia-webgpu-video 0.1.0-beta.3 → 0.1.0-beta.4

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 (65) hide show
  1. package/README.md +39 -32
  2. package/android/BUILD_VALIDATION.md +1 -1
  3. package/android/CMakeLists.txt +3 -2
  4. package/android/cpp/ExportHintSession.cpp +114 -0
  5. package/android/cpp/ExportHintSession.h +35 -0
  6. package/android/cpp/VideoEncoderHostObject.cpp +76 -101
  7. package/android/cpp/VideoEncoderHostObject.h +14 -9
  8. package/android/cpp/VideoFrame.cpp +3 -5
  9. package/android/cpp/cpp-adapter.cpp +7 -4
  10. package/android/src/main/java/com/azzapp/rnskv/GLFrameExtractor.java +3 -9
  11. package/android/src/main/java/com/azzapp/rnskv/VideoCompositionDecoder.java +8 -11
  12. package/android/src/main/java/com/azzapp/rnskv/VideoEncoder.java +68 -28
  13. package/docs/FRAME_PIXEL_FORMAT.md +1 -1
  14. package/docs/MIGRATION.md +1 -1
  15. package/docs/UPSTREAM_NOTES.md +15 -2
  16. package/lib/module/canvas.js +3 -5
  17. package/lib/module/canvas.js.map +1 -1
  18. package/lib/module/exportFrames.js +6 -8
  19. package/lib/module/exportFrames.js.map +1 -1
  20. package/lib/module/exportTarget.js +183 -40
  21. package/lib/module/exportTarget.js.map +1 -1
  22. package/lib/module/exportVideoComposition.js +53 -12
  23. package/lib/module/exportVideoComposition.js.map +1 -1
  24. package/lib/module/frameInterop.js +9 -12
  25. package/lib/module/frameInterop.js.map +1 -1
  26. package/lib/module/gpu.js +0 -2
  27. package/lib/module/gpu.js.map +1 -1
  28. package/lib/module/gpuDevice.js +12 -0
  29. package/lib/module/gpuDevice.js.map +1 -1
  30. package/lib/module/previewLifecycle.js +0 -1
  31. package/lib/module/previewLifecycle.js.map +1 -1
  32. package/lib/module/yuvBlit.js +28 -21
  33. package/lib/module/yuvBlit.js.map +1 -1
  34. package/lib/typescript/src/canvas.d.ts.map +1 -1
  35. package/lib/typescript/src/exportFrames.d.ts +3 -2
  36. package/lib/typescript/src/exportFrames.d.ts.map +1 -1
  37. package/lib/typescript/src/exportTarget.d.ts +53 -14
  38. package/lib/typescript/src/exportTarget.d.ts.map +1 -1
  39. package/lib/typescript/src/exportVideoComposition.d.ts +2 -1
  40. package/lib/typescript/src/exportVideoComposition.d.ts.map +1 -1
  41. package/lib/typescript/src/frameInterop.d.ts.map +1 -1
  42. package/lib/typescript/src/gpu.d.ts.map +1 -1
  43. package/lib/typescript/src/gpuDevice.d.ts +5 -1
  44. package/lib/typescript/src/gpuDevice.d.ts.map +1 -1
  45. package/lib/typescript/src/previewLifecycle.d.ts.map +1 -1
  46. package/lib/typescript/src/types.d.ts +10 -5
  47. package/lib/typescript/src/types.d.ts.map +1 -1
  48. package/lib/typescript/src/yuvBlit.d.ts +16 -14
  49. package/lib/typescript/src/yuvBlit.d.ts.map +1 -1
  50. package/package.json +6 -6
  51. package/patches/react-native-skia+3.7.4.patch +146 -0
  52. package/scripts/skia-canvas-patch.json +22 -258
  53. package/src/canvas.ts +3 -7
  54. package/src/exportFrames.ts +8 -9
  55. package/src/exportTarget.ts +217 -56
  56. package/src/exportVideoComposition.ts +87 -26
  57. package/src/frameInterop.ts +9 -11
  58. package/src/gpu.ts +0 -2
  59. package/src/gpuDevice.ts +26 -1
  60. package/src/previewLifecycle.ts +0 -1
  61. package/src/types.ts +10 -5
  62. package/src/yuvBlit.ts +43 -28
  63. package/android/cpp/EncoderTargets.cpp +0 -226
  64. package/android/cpp/EncoderTargets.h +0 -70
  65. package/patches/react-native-skia+3.7.1.patch +0 -502
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"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"}
@@ -13,11 +13,11 @@ export type YuvImport = {
13
13
  /** uv scale and offset last written to `uniforms`. */
14
14
  mapping: number[];
15
15
  };
16
- /** The corner of a decoder buffer's crop rectangle once the buffer is turned
17
- * clockwise for display: the blit takes its source origin in that turned
18
- * space. Throws unless the rectangle lies in the buffer and turns into the
19
- * frame's display size. */
20
- export declare const yuvFrameOrigin: (region: {
16
+ /** A decoder buffer's crop rectangle once the buffer is turned clockwise for
17
+ * display: the blit samples that upright region, and draws it at the size of
18
+ * its target, which a capped or explicit frame size makes smaller. Throws
19
+ * unless the rectangle lies in the buffer. */
20
+ export declare const yuvFrameRegion: (region: {
21
21
  x: number;
22
22
  y: number;
23
23
  width: number;
@@ -25,12 +25,11 @@ export declare const yuvFrameOrigin: (region: {
25
25
  }, rotation: number, buffer: {
26
26
  width: number;
27
27
  height: number;
28
- }, frame: {
29
- width: number;
30
- height: number;
31
28
  }) => {
32
29
  x: number;
33
30
  y: number;
31
+ width: number;
32
+ height: number;
34
33
  };
35
34
  /** Call only once the GPU work sampling the buffer has completed. */
36
35
  export declare const releaseYuvImport: (entry: YuvImport) => void;
@@ -38,15 +37,18 @@ export declare const releaseYuvImport: (entry: YuvImport) => void;
38
37
  * work sampling them has completed (a checked flush). */
39
38
  export declare const releaseYuvImports: (imports: Map<number, YuvImport[]>, producer?: number) => void;
40
39
  /**
41
- * Draws the upright `width`×`height` region at `origin` of a decoder buffer
42
- * into `target`, converting YUV to RGB; the buffer is imported on its first
43
- * frame. Submits the draw: the caller waits for it before releasing the
44
- * frame's lease or `source`, as after copyExternalImageToTexture.
40
+ * Draws the upright `region` of a decoder buffer (see yuvFrameRegion) into
41
+ * the whole of `target`, converting YUV to RGB and scaling it to the target's
42
+ * size; the buffer is imported on its first frame. Submits the draw: the
43
+ * caller waits for it before releasing the frame's lease or `source`, as
44
+ * after copyExternalImageToTexture.
45
45
  */
46
- export declare const blitYuvFrame: (device: GPUDevice, imports: Map<number, YuvImport[]>, producer: number, source: NativeVideoFrame, rotation: number, origin: {
46
+ export declare const blitYuvFrame: (device: GPUDevice, imports: Map<number, YuvImport[]>, producer: number, source: NativeVideoFrame, rotation: number, region: {
47
47
  x: number;
48
48
  y: number;
49
- }, width: number, height: number, target: GPUTexture) => void;
49
+ width: number;
50
+ height: number;
51
+ }, target: GPUTexture) => void;
50
52
  /**
51
53
  * iOS: draws a whole NV12 decoder buffer into `target`, converting YUV to RGB
52
54
  * with the buffer's YCbCr matrix and range, in its decoded orientation (the
@@ -1 +1 @@
1
- {"version":3,"file":"yuvBlit.d.ts","sourceRoot":"","sources":["../../../src/yuvBlit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,8BAA8B,EAC9B,gBAAgB,EACjB,MAAM,qBAAqB,CAAC;AAO7B;;4EAE4E;AAC5E,MAAM,MAAM,SAAS,GAAG;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,kEAAkE;IAClE,MAAM,EAAE,gBAAgB,CAAC;IACzB,OAAO,EAAE,8BAA8B,CAAC;IACxC,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,EAAE,YAAY,CAAC;IACxB,sDAAsD;IACtD,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC;AA8CF;;;2BAG2B;AAC3B,eAAO,MAAM,cAAc,GACzB,QAAQ;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAC/D,UAAU,MAAM,EAChB,QAAQ;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EACzC,OAAO;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,KACvC;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAyBxB,CAAC;AAyEF,qEAAqE;AACrE,eAAO,MAAM,gBAAgB,GAAI,OAAO,SAAS,KAAG,IAKnD,CAAC;AAEF;yDACyD;AACzD,eAAO,MAAM,iBAAiB,GAC5B,SAAS,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,EACjC,WAAW,MAAM,KAChB,IAUF,CAAC;AAoDF;;;;;GAKG;AACH,eAAO,MAAM,YAAY,GACvB,QAAQ,SAAS,EACjB,SAAS,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,EACjC,UAAU,MAAM,EAChB,QAAQ,gBAAgB,EACxB,UAAU,MAAM,EAChB,QAAQ;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,EAChC,OAAO,MAAM,EACb,QAAQ,MAAM,EACd,QAAQ,UAAU,KACjB,IAgEF,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,aAAa,GACxB,QAAQ,SAAS,EACjB,QAAQ,gBAAgB,EACxB,QAAQ,UAAU,KACjB,IAiDF,CAAC"}
1
+ {"version":3,"file":"yuvBlit.d.ts","sourceRoot":"","sources":["../../../src/yuvBlit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,8BAA8B,EAC9B,gBAAgB,EACjB,MAAM,qBAAqB,CAAC;AAO7B;;4EAE4E;AAC5E,MAAM,MAAM,SAAS,GAAG;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,kEAAkE;IAClE,MAAM,EAAE,gBAAgB,CAAC;IACzB,OAAO,EAAE,8BAA8B,CAAC;IACxC,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,EAAE,YAAY,CAAC;IACxB,sDAAsD;IACtD,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC;AA8CF;;;8CAG8C;AAC9C,eAAO,MAAM,cAAc,GACzB,QAAQ;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAC/D,UAAU,MAAM,EAChB,QAAQ;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,KACxC;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAsCvD,CAAC;AAyEF,qEAAqE;AACrE,eAAO,MAAM,gBAAgB,GAAI,OAAO,SAAS,KAAG,IAKnD,CAAC;AAEF;yDACyD;AACzD,eAAO,MAAM,iBAAiB,GAC5B,SAAS,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,EACjC,WAAW,MAAM,KAChB,IAUF,CAAC;AAoDF;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,GACvB,QAAQ,SAAS,EACjB,SAAS,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,EACjC,UAAU,MAAM,EAChB,QAAQ,gBAAgB,EACxB,UAAU,MAAM,EAChB,QAAQ;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAC/D,QAAQ,UAAU,KACjB,IAgEF,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,aAAa,GACxB,QAAQ,SAAS,EACjB,QAAQ,gBAAgB,EACxB,QAAQ,UAAU,KACjB,IAqDF,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-skia-webgpu-video",
3
- "version": "0.1.0-beta.3",
3
+ "version": "0.1.0-beta.4",
4
4
  "description": "Bounded video composition, playback and export for React Native Skia 3 / Graphite",
5
5
  "main": "./lib/module/index.js",
6
6
  "types": "./lib/typescript/src/index.d.ts",
@@ -40,7 +40,7 @@
40
40
  "!**/.*",
41
41
  "scripts/apply-skia-canvas-patch.mjs",
42
42
  "scripts/skia-canvas-patch.json",
43
- "patches/react-native-skia+3.7.1.patch",
43
+ "patches/react-native-skia+3.7.4.patch",
44
44
  "docs/UPSTREAM_NOTES.md",
45
45
  "!ios/tests",
46
46
  "!android/src/androidTest",
@@ -101,8 +101,8 @@
101
101
  "react-native": "0.86.2",
102
102
  "react-native-builder-bob": "^0.43.0",
103
103
  "react-native-reanimated": "4.5.3",
104
- "react-native-skia": "3.7.1",
105
- "react-native-webgpu": "0.17.0",
104
+ "react-native-skia": "3.7.4",
105
+ "react-native-webgpu": "0.19.0",
106
106
  "react-native-worklets": "0.11.3",
107
107
  "react-test-renderer": "19.2.3",
108
108
  "typescript": "^6.0.3"
@@ -111,8 +111,8 @@
111
111
  "react": ">=19",
112
112
  "react-native": ">=0.83 <0.87",
113
113
  "react-native-reanimated": "4.5.3",
114
- "react-native-skia": "3.7.1",
115
- "react-native-webgpu": "0.17.0",
114
+ "react-native-skia": "3.7.4",
115
+ "react-native-webgpu": "0.19.0",
116
116
  "react-native-worklets": "0.11.3"
117
117
  },
118
118
  "jest": {
@@ -0,0 +1,146 @@
1
+ --- a/node_modules/react-native-skia/cpp/rnskia/RNDawnContext.h
2
+ +++ b/node_modules/react-native-skia/cpp/rnskia/RNDawnContext.h
3
+ @@ -481,6 +481,40 @@
4
+ }
5
+ current->context->submit(syncToCpu);
6
+ return inserted;
7
+ + }
8
+ +
9
+ + // Checked only for surfaces that explicitly opt into this contract: like
10
+ + // submitRecording, but a recording that would not run throws instead of
11
+ + // being dropped. A valid empty Recording is accepted; Recorder::snap()
12
+ + // returns nullptr on failure.
13
+ + void submitRecordingChecked(
14
+ + skgpu::graphite::Recorder *recorder,
15
+ + skgpu::graphite::SyncToCpu syncToCpu = skgpu::graphite::SyncToCpu::kNo) {
16
+ + if (recorder == nullptr) {
17
+ + throw std::runtime_error(
18
+ + "Checked GPU submissions require a Graphite recorder");
19
+ + }
20
+ + auto recording = recorder->snap();
21
+ + if (recording == nullptr) {
22
+ + throw std::runtime_error("Cannot create checked Graphite recording");
23
+ + }
24
+ + std::lock_guard<std::mutex> lock(_mutex);
25
+ + auto *current = _current.load(std::memory_order_acquire);
26
+ + if (generationOf(recorder) != current->id ||
27
+ + current->lost.load(std::memory_order_acquire)) {
28
+ + throw std::runtime_error(
29
+ + "The GPU device was lost; a checked recording cannot run");
30
+ + }
31
+ + skgpu::graphite::InsertRecordingInfo info;
32
+ + info.fRecording = recording.get();
33
+ + auto status = current->context->insertRecording(info);
34
+ + if (!static_cast<bool>(status)) {
35
+ + throw std::runtime_error("Graphite rejected a checked recording: " +
36
+ + status.message());
37
+ + }
38
+ + if (!current->context->submit(syncToCpu)) {
39
+ + throw std::runtime_error("Graphite checked submission failed");
40
+ + }
41
+ }
42
+
43
+ /**
44
+ --- a/node_modules/react-native-skia/cpp/api/JsiSkSurface.h
45
+ +++ b/node_modules/react-native-skia/cpp/api/JsiSkSurface.h
46
+ @@ -52,6 +52,26 @@
47
+ }
48
+ }
49
+
50
+ + // Opt-in for consumers that release native buffers after GPU completion.
51
+ + // Other Skia surfaces preserve their existing flush/snapshot behavior.
52
+ + void enableCheckedSubmissions() {
53
+ + if (!getObject()->recorder()) {
54
+ + throw std::runtime_error(
55
+ + "Checked GPU submissions require a Graphite surface");
56
+ + }
57
+ + _checkedSubmissions = true;
58
+ + }
59
+ +
60
+ + void submitRecording(skgpu::graphite::Recorder *recorder,
61
+ + skgpu::graphite::SyncToCpu syncToCpu =
62
+ + skgpu::graphite::SyncToCpu::kNo) {
63
+ + if (_checkedSubmissions) {
64
+ + DawnContext::getInstance().submitRecordingChecked(recorder, syncToCpu);
65
+ + } else {
66
+ + DawnContext::getInstance().submitRecording(recorder, syncToCpu);
67
+ + }
68
+ + }
69
+ +
70
+ // TODO-API: Properties?
71
+ double width() { return static_cast<double>(getObject()->width()); }
72
+ double height() { return static_cast<double>(getObject()->height()); }
73
+ @@ -85,9 +105,8 @@
74
+ // only Graphite-backed surfaces need to snap and submit a recording. One
75
+ // made on a GPU device lost since submits nothing (see DawnContext).
76
+ if (auto *recorder = surface->recorder()) {
77
+ - DawnContext::getInstance().submitRecording(
78
+ - recorder, sync ? skgpu::graphite::SyncToCpu::kYes
79
+ - : skgpu::graphite::SyncToCpu::kNo);
80
+ + submitRecording(recorder, sync ? skgpu::graphite::SyncToCpu::kYes
81
+ + : skgpu::graphite::SyncToCpu::kNo);
82
+ }
83
+ }
84
+
85
+ @@ -120,10 +139,15 @@
86
+ } else {
87
+ image = surface->makeImageSnapshot();
88
+ }
89
+ + // A checked surface keeps the previously published image if snapshot
90
+ + // allocation failed.
91
+ + if (!image && _checkedSubmissions) {
92
+ + throw jsi::JSError(runtime, "Cannot allocate Skia surface snapshot");
93
+ + }
94
+ // A raster surface (e.g. Skia.Surface.Make) has no Graphite recorder; its
95
+ // snapshot is already a valid CPU image, so skip the recording submit.
96
+ if (auto *recorder = surface->recorder()) {
97
+ - DawnContext::getInstance().submitRecording(recorder);
98
+ + submitRecording(recorder);
99
+ }
100
+ if (count > 1 && arguments[1].isObject()) {
101
+ auto jsiImage = getJsiObject<JsiSkImage>(runtime, arguments[1]);
102
+ @@ -196,6 +220,8 @@
103
+ &JsiSkSurface::makeImageSnapshot);
104
+ installMethod(runtime, prototype, "asImage", &JsiSkSurface::asImage);
105
+ installMethod(runtime, prototype, "flush", &JsiSkSurface::flush);
106
+ + installMethod(runtime, prototype, "enableCheckedSubmissions",
107
+ + &JsiSkSurface::enableCheckedSubmissions);
108
+ }
109
+
110
+ protected:
111
+ @@ -222,6 +248,7 @@
112
+
113
+ std::shared_ptr<Dispatcher> _dispatcher;
114
+ std::shared_ptr<JsiSkCanvas> _canvas;
115
+ + bool _checkedSubmissions = false;
116
+ };
117
+
118
+ } // namespace RNSkia
119
+ --- a/node_modules/react-native-skia/cpp/api/JsiSkApi.h
120
+ +++ b/node_modules/react-native-skia/cpp/api/JsiSkApi.h
121
+ @@ -159,6 +159,16 @@
122
+ }
123
+ JSI_HOST_FUNCTION(Color) {
124
+ return JsiSkColor::createCtor()(runtime, thisValue, arguments, count);
125
+ + }
126
+ + // Private video-export cleanup. Only the calling thread's recorders are
127
+ + // trimmed; the shared Context cache and other threads' recorders are
128
+ + // untouched.
129
+ + JSI_HOST_FUNCTION(__rnskvTrimRecorderCache) {
130
+ + auto &context = DawnContext::getInstance();
131
+ + context.submitRecordingChecked(context.getRecorder(),
132
+ + skgpu::graphite::SyncToCpu::kYes);
133
+ + DawnContext::trimThreadRecorders(std::chrono::milliseconds(0), true);
134
+ + return jsi::Value::undefined();
135
+ }
136
+ JSI_HOST_FUNCTION(getNativeDevice) {
137
+ // Raw WGPUDevice pointer of the Graphite device, as a BigInt. Consumed by
138
+ @@ -264,6 +274,8 @@
139
+ }
140
+
141
+ static void definePrototype(jsi::Runtime &runtime, jsi::Object &prototype) {
142
+ + installHostMethod(runtime, prototype, "__rnskvTrimRecorderCache",
143
+ + &JsiSkApi::__rnskvTrimRecorderCache);
144
+ installHostMethod(runtime, prototype, "getNativeDevice",
145
+ &JsiSkApi::getNativeDevice);
146
+ installGetterWithRuntime(runtime, prototype, "gpu", &JsiSkApi::getGpu);
@@ -1,289 +1,53 @@
1
1
  {
2
- "version": "3.7.1",
2
+ "version": "3.7.4",
3
3
  "files": {
4
- "cpp/api/JsiSkCanvas.h": {
5
- "before": "91e6f97f34bef620740fabf7a6bb516c462a18daa72afb46ef5a84d1cd4f3158",
6
- "after": "3198bed18bbdad6e61b0ef0d42fbc01c4f1792955af33eb14080a5329de2ff4d",
7
- "edits": [
8
- {
9
- "before": "#include <memory>\n#include <string>\n",
10
- "after": "#include <memory>\n#include <stdexcept>\n#include <string>\n"
11
- },
12
- {
13
- "before": " void drawPaint(std::shared_ptr<SkPaint> paint) { _canvas->drawPaint(*paint); }\n",
14
- "after": " void drawPaint(std::shared_ptr<SkPaint> paint) { getCanvas()->drawPaint(*paint); }\n"
15
- },
16
- {
17
- "before": " _canvas->drawLine(x1, y1, x2, y2, *paint);\n",
18
- "after": " getCanvas()->drawLine(x1, y1, x2, y2, *paint);\n"
19
- },
20
- {
21
- "before": " _canvas->drawRect(*rect, *paint);\n",
22
- "after": " getCanvas()->drawRect(*rect, *paint);\n"
23
- },
24
- {
25
- "before": " _canvas->drawImage(image, x, y, SkSamplingOptions(), paint.get());\n",
26
- "after": " getCanvas()->drawImage(image, x, y, SkSamplingOptions(), paint.get());\n"
27
- },
28
- {
29
- "before": " _canvas->drawImageRect(image, *src, *dest, SkSamplingOptions(), paint.get(),\n",
30
- "after": " getCanvas()->drawImageRect(image, *src, *dest, SkSamplingOptions(), paint.get(),\n"
31
- },
32
- {
33
- "before": " _canvas->drawImage(image, x, y, SkSamplingOptions({B, C}), paint.get());\n",
34
- "after": " getCanvas()->drawImage(image, x, y, SkSamplingOptions({B, C}), paint.get());\n"
35
- },
36
- {
37
- "before": " _canvas->drawImage(image, x, y, SkSamplingOptions(fm, mm), paint.get());\n",
38
- "after": " getCanvas()->drawImage(image, x, y, SkSamplingOptions(fm, mm), paint.get());\n"
39
- },
40
- {
41
- "before": " _canvas->drawImageNine(image.get(), center->round(), *dest, fm,\n",
42
- "after": " getCanvas()->drawImageNine(image.get(), center->round(), *dest, fm,\n"
43
- },
44
- {
45
- "before": " _canvas->drawImageRect(image.get(), *src, *dest, SkSamplingOptions({B, C}),\n",
46
- "after": " getCanvas()->drawImageRect(image.get(), *src, *dest, SkSamplingOptions({B, C}),\n"
47
- },
48
- {
49
- "before": " _canvas->drawImageRect(image.get(), *src, *dest, {filter, mipmap},\n",
50
- "after": " getCanvas()->drawImageRect(image.get(), *src, *dest, {filter, mipmap},\n"
51
- },
52
- {
53
- "before": " _canvas->drawCircle(cx, cy, radius, *paint);\n",
54
- "after": " getCanvas()->drawCircle(cx, cy, radius, *paint);\n"
55
- },
56
- {
57
- "before": " _canvas->drawArc(*oval, startAngle, sweepAngle, useCenter, *paint);\n",
58
- "after": " getCanvas()->drawArc(*oval, startAngle, sweepAngle, useCenter, *paint);\n"
59
- },
60
- {
61
- "before": " _canvas->drawRRect(*rect, *paint);\n",
62
- "after": " getCanvas()->drawRRect(*rect, *paint);\n"
63
- },
64
- {
65
- "before": " _canvas->drawDRRect(*outer, *inner, *paint);\n",
66
- "after": " getCanvas()->drawDRRect(*outer, *inner, *paint);\n"
67
- },
68
- {
69
- "before": " _canvas->drawOval(*rect, *paint);\n",
70
- "after": " getCanvas()->drawOval(*rect, *paint);\n"
71
- },
72
- {
73
- "before": " void restoreToCount(double c) { _canvas->restoreToCount(c); }\n",
74
- "after": " void restoreToCount(double c) { getCanvas()->restoreToCount(c); }\n"
75
- },
76
- {
77
- "before": " int getSaveCount() { return static_cast<int>(_canvas->getSaveCount()); }\n",
78
- "after": " int getSaveCount() { return static_cast<int>(getCanvas()->getSaveCount()); }\n"
79
- },
80
- {
81
- "before": " _canvas->getTotalMatrix());\n",
82
- "after": " getCanvas()->getTotalMatrix());\n"
83
- },
84
- {
85
- "before": " _canvas->drawPoints(static_cast<SkCanvas::PointMode>(pointMode), p, *paint);\n",
86
- "after": " getCanvas()->drawPoints(static_cast<SkCanvas::PointMode>(pointMode), p, *paint);\n"
87
- },
88
- {
89
- "before": " _canvas->drawVertices(vertices, toBlendMode(blendMode), *paint);\n",
90
- "after": " getCanvas()->drawVertices(vertices, toBlendMode(blendMode), *paint);\n"
91
- },
92
- {
93
- "before": " _canvas->drawPatch(cubics.data(), colors.empty() ? nullptr : colors.data(),\n",
94
- "after": " getCanvas()->drawPatch(cubics.data(), colors.empty() ? nullptr : colors.data(),\n"
95
- },
96
- {
97
- "before": " _canvas->drawPath(path->snapshot(), *paint);\n",
98
- "after": " getCanvas()->drawPath(path->snapshot(), *paint);\n"
99
- },
100
- {
101
- "before": " _canvas->drawSimpleText(text, strlen(text), SkTextEncoding::kUTF8, x, y,\n",
102
- "after": " getCanvas()->drawSimpleText(text, strlen(text), SkTextEncoding::kUTF8, x, y,\n"
103
- },
104
- {
105
- "before": " _canvas->drawTextBlob(blob, x, y, *paint);\n",
106
- "after": " getCanvas()->drawTextBlob(blob, x, y, *paint);\n"
107
- },
108
- {
109
- "before": " _canvas->drawGlyphs(g, p, origin, *font, *paint);\n",
110
- "after": " getCanvas()->drawGlyphs(g, p, origin, *font, *paint);\n"
111
- },
112
- {
113
- "before": " auto canvasSize = _canvas->getBaseLayerSize();\n",
114
- "after": " auto canvasSize = getCanvas()->getBaseLayerSize();\n"
115
- },
116
- {
117
- "before": " svgdom->render(_canvas);\n",
118
- "after": " svgdom->render(getCanvas());\n"
119
- },
120
- {
121
- "before": " _canvas->clipPath(path->snapshot(), static_cast<SkClipOp>(op), doAntiAlias);\n",
122
- "after": " getCanvas()->clipPath(path->snapshot(), static_cast<SkClipOp>(op), doAntiAlias);\n"
123
- },
124
- {
125
- "before": " _canvas->clipRect(*rect, static_cast<SkClipOp>(op), doAntiAlias);\n",
126
- "after": " getCanvas()->clipRect(*rect, static_cast<SkClipOp>(op), doAntiAlias);\n"
127
- },
128
- {
129
- "before": " _canvas->clipRRect(*rrect, static_cast<SkClipOp>(op), doAntiAlias);\n",
130
- "after": " getCanvas()->clipRRect(*rrect, static_cast<SkClipOp>(op), doAntiAlias);\n"
131
- },
132
- {
133
- "before": " int save() { return _canvas->save(); }\n",
134
- "after": " int save() { return getCanvas()->save(); }\n"
135
- },
136
- {
137
- "before": " return jsi::Value(_canvas->saveLayer(SkCanvas::SaveLayerRec(\n",
138
- "after": " return jsi::Value(getCanvas()->saveLayer(SkCanvas::SaveLayerRec(\n"
139
- },
140
- {
141
- "before": " void restore() { _canvas->restore(); }\n",
142
- "after": " void restore() { getCanvas()->restore(); }\n"
143
- },
144
- {
145
- "before": " _canvas->rotate(degrees, rx, ry);\n",
146
- "after": " getCanvas()->rotate(degrees, rx, ry);\n"
147
- },
148
- {
149
- "before": " void translate(double dx, double dy) { _canvas->translate(dx, dy); }\n",
150
- "after": " void translate(double dx, double dy) { getCanvas()->translate(dx, dy); }\n"
151
- },
152
- {
153
- "before": " void scale(double sx, double sy) { _canvas->scale(sx, sy); }\n",
154
- "after": " void scale(double sx, double sy) { getCanvas()->scale(sx, sy); }\n"
155
- },
156
- {
157
- "before": " void skew(double sx, double sy) { _canvas->skew(sx, sy); }\n",
158
- "after": " void skew(double sx, double sy) { getCanvas()->skew(sx, sy); }\n"
159
- },
160
- {
161
- "before": " _canvas->drawColor(cl, toBlendMode(*mode));\n",
162
- "after": " getCanvas()->drawColor(cl, toBlendMode(*mode));\n"
163
- },
164
- {
165
- "before": " _canvas->drawColor(cl);\n",
166
- "after": " getCanvas()->drawColor(cl);\n"
167
- },
168
- {
169
- "before": " void clear(JsiColor cl) { _canvas->clear(cl); }\n",
170
- "after": " void clear(JsiColor cl) { getCanvas()->clear(cl); }\n"
171
- },
172
- {
173
- "before": " void concat(std::shared_ptr<SkMatrix> matrix) { _canvas->concat(*matrix); }\n",
174
- "after": " void concat(std::shared_ptr<SkMatrix> matrix) { getCanvas()->concat(*matrix); }\n"
175
- },
176
- {
177
- "before": " void drawPicture(sk_sp<SkPicture> picture) { _canvas->drawPicture(picture); }\n",
178
- "after": " void drawPicture(sk_sp<SkPicture> picture) { getCanvas()->drawPicture(picture); }\n"
179
- },
180
- {
181
- "before": " _canvas->drawAtlas(atlas.get(), x, t, c, blendMode, sampling, nullptr,\n",
182
- "after": " getCanvas()->drawAtlas(atlas.get(), x, t, c, blendMode, sampling, nullptr,\n"
183
- },
184
- {
185
- "before": " JSI_HOST_FUNCTION(readPixels) {\n auto srcX = static_cast<int>(arguments[0].asNumber());\n",
186
- "after": " JSI_HOST_FUNCTION(readPixels) {\n getCanvas(); // Validate before allocating a readback buffer.\n auto srcX = static_cast<int>(arguments[0].asNumber());\n"
187
- },
188
- {
189
- "before": " if (!_canvas->readPixels(*info, bfrPtr, bytesPerRow, srcX, srcY)) {\n",
190
- "after": " if (!getCanvas()->readPixels(*info, bfrPtr, bytesPerRow, srcX, srcY)) {\n"
191
- },
192
- {
193
- "before": " static void definePrototype(jsi::Runtime &runtime, jsi::Object &prototype) {\n installMethod(runtime, prototype, \"drawPaint\", &JsiSkCanvas::drawPaint);\n",
194
- "after": " static void definePrototype(jsi::Runtime &runtime, jsi::Object &prototype) {\n installMethod(runtime, prototype, \"dispose\", &JsiSkCanvas::dispose);\n installMethod(runtime, prototype, \"drawPaint\", &JsiSkCanvas::drawPaint);\n"
195
- },
196
- {
197
- "before": " SkCanvas *getCanvas() { return _canvas; }\n",
198
- "after": " SkCanvas *getCanvas() {\n if (!_canvas) throw std::runtime_error(\"Canvas has been disposed\");\n return _canvas;\n }\n // Release the owning surface deterministically. The caller must\n // submit/wait for its recording before disposal. Off the creating\n // thread, the surface is handed to that thread's dispatcher.\n void dispose() {\n _canvas = nullptr;\n if (_dispatcher) {\n _dispatcher->release(std::move(_surface));\n } else {\n _surface.reset();\n }\n }\n"
199
- },
200
- {
201
- "before": " SkCanvas *_canvas;\n",
202
- "after": " SkCanvas *_canvas = nullptr;\n"
203
- }
204
- ]
205
- },
206
- "src/skia/types/Canvas.ts": {
207
- "before": "224e207ad4e9e5bee1efd2e1fb07b61a2261b14f498314cb5657f3201bd99791",
208
- "after": "e0ca74f4c4ab9d3647a48751f3243d38f64d55fcb95af725be1b88eace052027",
209
- "edits": [
210
- {
211
- "before": "export interface SkCanvas {\n /**\n",
212
- "after": "export interface SkCanvas {\n /** Release the owning surface after flushing; idempotent. */\n dispose(): void;\n /**\n"
213
- }
214
- ]
215
- },
216
- "lib/typescript/src/skia/types/Canvas.d.ts": {
217
- "before": "7cc41d6183212cfd4f3d7d0065a7b360aabf98fae20565428e876f5da8c1bb15",
218
- "after": "972901e64599c40d54db73a49881323bca457e5b87c07c30a0016a5a89339d99",
4
+ "cpp/rnskia/RNDawnContext.h": {
5
+ "before": "7381d2c92b739deffa8429b72d66442b0a40655f3c66ce354bab81d2e058f874",
6
+ "after": "1846064f3db7eaca296a2f9c3c5fd45904300437cd79d1eeab771f63cf644e34",
219
7
  "edits": [
220
8
  {
221
- "before": "export interface SkCanvas {\n /**\n",
222
- "after": "export interface SkCanvas {\n /** Release the owning surface after flushing; idempotent. */\n dispose(): void;\n /**\n"
9
+ "before": " current->context->submit(syncToCpu);\n return inserted;\n }\n",
10
+ "after": " current->context->submit(syncToCpu);\n return inserted;\n }\n\n // Checked only for surfaces that explicitly opt into this contract: like\n // submitRecording, but a recording that would not run throws instead of\n // being dropped. A valid empty Recording is accepted; Recorder::snap()\n // returns nullptr on failure.\n void submitRecordingChecked(\n skgpu::graphite::Recorder *recorder,\n skgpu::graphite::SyncToCpu syncToCpu = skgpu::graphite::SyncToCpu::kNo) {\n if (recorder == nullptr) {\n throw std::runtime_error(\n \"Checked GPU submissions require a Graphite recorder\");\n }\n auto recording = recorder->snap();\n if (recording == nullptr) {\n throw std::runtime_error(\"Cannot create checked Graphite recording\");\n }\n std::lock_guard<std::mutex> lock(_mutex);\n auto *current = _current.load(std::memory_order_acquire);\n if (generationOf(recorder) != current->id ||\n current->lost.load(std::memory_order_acquire)) {\n throw std::runtime_error(\n \"The GPU device was lost; a checked recording cannot run\");\n }\n skgpu::graphite::InsertRecordingInfo info;\n info.fRecording = recording.get();\n auto status = current->context->insertRecording(info);\n if (!static_cast<bool>(status)) {\n throw std::runtime_error(\"Graphite rejected a checked recording: \" +\n status.message());\n }\n if (!current->context->submit(syncToCpu)) {\n throw std::runtime_error(\"Graphite checked submission failed\");\n }\n }\n"
223
11
  }
224
12
  ]
225
13
  },
226
14
  "cpp/api/JsiSkSurface.h": {
227
- "before": "de3226499673a8d731167a0feb299257628999ce5d4810217e962062f625302a",
228
- "after": "d78ce02da437cd1b8df03ecf8ac659b9d25c30018ff74733fb2e5185fc078bf2",
15
+ "before": "24797c709ae34c0082e6d0e5efc5a136d82ddc452f4a319ce22479f8303130cd",
16
+ "after": "4c8ab5d01676a1b8b8baed0cf67d4bbe8a8dc437eab124f629f6f1f5e07f6796",
229
17
  "edits": [
230
18
  {
231
- "before": "\n ~JsiSkSurface() override {\n",
232
- "after": "\n // Opt-in for consumers that release native buffers after GPU completion.\n // Other Skia surfaces preserve their existing flush/snapshot behavior.\n void enableCheckedSubmissions() {\n if (!getObject()->recorder()) {\n throw std::runtime_error(\"Checked GPU submissions require a Graphite surface\");\n }\n _checkedSubmissions = true;\n }\n\n void submitRecording(skgpu::graphite::Recording *recording,\n skgpu::graphite::SyncToCpu syncToCpu =\n skgpu::graphite::SyncToCpu::kNo) {\n if (_checkedSubmissions) {\n DawnContext::getInstance().submitRecordingChecked(recording, syncToCpu);\n } else {\n DawnContext::getInstance().submitRecording(recording, syncToCpu);\n }\n }\n\n ~JsiSkSurface() override {\n"
233
- },
234
- {
235
- "before": " DawnContext::getInstance().submitRecording(\n",
236
- "after": " submitRecording(\n"
19
+ "before": " // TODO-API: Properties?\n",
20
+ "after": " // Opt-in for consumers that release native buffers after GPU completion.\n // Other Skia surfaces preserve their existing flush/snapshot behavior.\n void enableCheckedSubmissions() {\n if (!getObject()->recorder()) {\n throw std::runtime_error(\n \"Checked GPU submissions require a Graphite surface\");\n }\n _checkedSubmissions = true;\n }\n\n void submitRecording(skgpu::graphite::Recorder *recorder,\n skgpu::graphite::SyncToCpu syncToCpu =\n skgpu::graphite::SyncToCpu::kNo) {\n if (_checkedSubmissions) {\n DawnContext::getInstance().submitRecordingChecked(recorder, syncToCpu);\n } else {\n DawnContext::getInstance().submitRecording(recorder, syncToCpu);\n }\n }\n\n // TODO-API: Properties?\n"
237
21
  },
238
22
  {
239
- "before": " }\n // A raster surface (e.g. Skia.Surface.Make) has no Graphite recorder; its\n",
240
- "after": " }\n // Preserve the previously published image if snapshot allocation failed.\n if (!image) {\n throw jsi::JSError(runtime, \"Cannot allocate Skia surface snapshot\");\n }\n // A raster surface (e.g. Skia.Surface.Make) has no Graphite recorder; its\n"
23
+ "before": " DawnContext::getInstance().submitRecording(\n recorder, sync ? skgpu::graphite::SyncToCpu::kYes\n : skgpu::graphite::SyncToCpu::kNo);\n",
24
+ "after": " submitRecording(recorder, sync ? skgpu::graphite::SyncToCpu::kYes\n : skgpu::graphite::SyncToCpu::kNo);\n"
241
25
  },
242
26
  {
243
- "before": " DawnContext::getInstance().submitRecording(recording.get());\n",
244
- "after": " submitRecording(recording.get());\n"
27
+ "before": " // A raster surface (e.g. Skia.Surface.Make) has no Graphite recorder; its\n // snapshot is already a valid CPU image, so skip the recording submit.\n if (auto *recorder = surface->recorder()) {\n DawnContext::getInstance().submitRecording(recorder);\n }\n",
28
+ "after": " // A checked surface keeps the previously published image if snapshot\n // allocation failed.\n if (!image && _checkedSubmissions) {\n throw jsi::JSError(runtime, \"Cannot allocate Skia surface snapshot\");\n }\n // A raster surface (e.g. Skia.Surface.Make) has no Graphite recorder; its\n // snapshot is already a valid CPU image, so skip the recording submit.\n if (auto *recorder = surface->recorder()) {\n submitRecording(recorder);\n }\n"
245
29
  },
246
30
  {
247
31
  "before": " installMethod(runtime, prototype, \"flush\", &JsiSkSurface::flush);\n }\n",
248
32
  "after": " installMethod(runtime, prototype, \"flush\", &JsiSkSurface::flush);\n installMethod(runtime, prototype, \"enableCheckedSubmissions\",\n &JsiSkSurface::enableCheckedSubmissions);\n }\n"
249
33
  },
250
34
  {
251
- "before": " std::shared_ptr<Dispatcher> _dispatcher;\n};\n",
252
- "after": " std::shared_ptr<Dispatcher> _dispatcher;\n bool _checkedSubmissions = false;\n};\n"
253
- }
254
- ]
255
- },
256
- "cpp/rnskia/RNDawnContext.h": {
257
- "before": "f1be623839d9716d1ae7ce9bc66a02055989c9b69acbfec49d607338f711d0e7",
258
- "after": "c0de4e4b37271a77a429c78e646c2e8a7172b6a46e713ff01f31e0782d05738a",
259
- "edits": [
260
- {
261
- "before": " fGraphiteContext->submit(syncToCpu);\n }\n",
262
- "after": " fGraphiteContext->submit(syncToCpu);\n }\n\n // Checked only for surfaces that explicitly opt into this contract. A valid\n // empty Recording is accepted; Recorder::snap() returns nullptr on failure.\n void submitRecordingChecked(\n skgpu::graphite::Recording *recording,\n skgpu::graphite::SyncToCpu syncToCpu = skgpu::graphite::SyncToCpu::kNo) {\n std::lock_guard<std::mutex> lock(_mutex);\n if (!recording) {\n throw std::runtime_error(\"Cannot create checked Graphite recording\");\n }\n skgpu::graphite::InsertRecordingInfo info;\n info.fRecording = recording;\n auto status = fGraphiteContext->insertRecording(info);\n if (!static_cast<bool>(status)) {\n throw std::runtime_error(\"Graphite rejected a checked recording: \" +\n status.message());\n }\n if (!fGraphiteContext->submit(syncToCpu)) {\n throw std::runtime_error(\"Graphite checked submission failed\");\n }\n }\n"
263
- }
264
- ]
265
- },
266
- "cpp/rnskia/RNImageProvider.h": {
267
- "before": "8b9a552bfcf088058eb06366ba78984b7e54d6ae0442633ecbc0cdd726205fc2",
268
- "after": "f6c329e5d43fcecfcecc95c8516df159e1bfb68582d27ce92b67facfcd84b4eb",
269
- "edits": [
270
- {
271
- "before": " static sk_sp<ImageProvider> Make() { return sk_ref_sp(new ImageProvider); }",
272
- "after": " static sk_sp<ImageProvider> Make() { return sk_make_sp<ImageProvider>(); }"
35
+ "before": " std::shared_ptr<JsiSkCanvas> _canvas;\n};\n",
36
+ "after": " std::shared_ptr<JsiSkCanvas> _canvas;\n bool _checkedSubmissions = false;\n};\n"
273
37
  }
274
38
  ]
275
39
  },
276
40
  "cpp/api/JsiSkApi.h": {
277
- "before": "9abd4dbaa14c13f3ce80a5c475b8ad51f08400fe6b2c119781032486ae72f7eb",
278
- "after": "e3e8358e0ecf91b4a0547cdd4467400b14d5d0963402692648d6d0635864a769",
41
+ "before": "72c8c6828c16ad9c764a749d5140f1a3536f83dd582dce65d6e7f42d88587a30",
42
+ "after": "9920a47ed26d4713b1f515f2acb54663ca47f44426d3110aed47f0193925ca49",
279
43
  "edits": [
280
44
  {
281
- "before": " JSI_HOST_FUNCTION(getNativeDevice) {",
282
- "after": " // Private video-export cleanup. Only the calling thread's Recorder cache\n // is trimmed; the shared Context cache and other Recorders are untouched.\n JSI_HOST_FUNCTION(__rnskvTrimRecorderCache) {\n auto &context = DawnContext::getInstance();\n auto *recorder = context.getRecorder();\n {\n auto recording = recorder->snap();\n context.submitRecordingChecked(recording.get(),\n skgpu::graphite::SyncToCpu::kYes);\n }\n recorder->freeGpuResources();\n return jsi::Value::undefined();\n }\n JSI_HOST_FUNCTION(getNativeDevice) {"
45
+ "before": " JSI_HOST_FUNCTION(getNativeDevice) {\n",
46
+ "after": " // Private video-export cleanup. Only the calling thread's recorders are\n // trimmed; the shared Context cache and other threads' recorders are\n // untouched.\n JSI_HOST_FUNCTION(__rnskvTrimRecorderCache) {\n auto &context = DawnContext::getInstance();\n context.submitRecordingChecked(context.getRecorder(),\n skgpu::graphite::SyncToCpu::kYes);\n DawnContext::trimThreadRecorders(std::chrono::milliseconds(0), true);\n return jsi::Value::undefined();\n }\n JSI_HOST_FUNCTION(getNativeDevice) {\n"
283
47
  },
284
48
  {
285
- "before": " static void definePrototype(jsi::Runtime &runtime, jsi::Object &prototype) {",
286
- "after": " static void definePrototype(jsi::Runtime &runtime, jsi::Object &prototype) {\n installHostMethod(runtime, prototype, \"__rnskvTrimRecorderCache\",\n &JsiSkApi::__rnskvTrimRecorderCache);"
49
+ "before": " static void definePrototype(jsi::Runtime &runtime, jsi::Object &prototype) {\n",
50
+ "after": " static void definePrototype(jsi::Runtime &runtime, jsi::Object &prototype) {\n installHostMethod(runtime, prototype, \"__rnskvTrimRecorderCache\",\n &JsiSkApi::__rnskvTrimRecorderCache);\n"
287
51
  }
288
52
  ]
289
53
  }
package/src/canvas.ts CHANGED
@@ -12,11 +12,7 @@ export const getVideoCanvas = (surface: SkSurface): SkCanvas => {
12
12
  );
13
13
  }
14
14
  checked.enableCheckedSubmissions();
15
- const canvas = surface.getCanvas();
16
- if (typeof canvas.dispose !== "function") {
17
- throw new Error(
18
- "Skia canvas lifecycle patch is missing from the native binary. Apply the patch and rebuild the native app.",
19
- );
20
- }
21
- return canvas;
15
+ // Owned by the surface: its dispose() detaches the canvas, and drawing on
16
+ // it throws from then on.
17
+ return surface.getCanvas();
22
18
  };