@shopify/react-native-skia 2.3.7 → 2.3.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cpp/api/JsiNativeBuffer.h +4 -0
- package/cpp/api/JsiSkAnimatedImage.h +71 -1
- package/cpp/api/JsiSkAnimatedImageFactory.h +4 -0
- package/cpp/api/JsiSkApi.h +2 -0
- package/cpp/api/JsiSkCanvas.h +2 -0
- package/cpp/api/JsiSkColorFilter.h +2 -0
- package/cpp/api/JsiSkColorFilterFactory.h +4 -0
- package/cpp/api/JsiSkContourMeasure.h +2 -0
- package/cpp/api/JsiSkContourMeasureIter.h +4 -0
- package/cpp/api/JsiSkData.h +2 -0
- package/cpp/api/JsiSkDataFactory.h +2 -0
- package/cpp/api/JsiSkFont.h +2 -0
- package/cpp/api/JsiSkFontMgr.h +2 -0
- package/cpp/api/JsiSkFontMgrFactory.h +2 -0
- package/cpp/api/JsiSkFontStyle.h +2 -0
- package/cpp/api/JsiSkHostObjects.h +50 -0
- package/cpp/api/JsiSkImage.h +3 -1
- package/cpp/api/JsiSkImageFactory.h +2 -0
- package/cpp/api/JsiSkImageFilter.h +3 -1
- package/cpp/api/JsiSkImageFilterFactory.h +4 -0
- package/cpp/api/JsiSkImageInfo.h +2 -0
- package/cpp/api/JsiSkMaskFilter.h +2 -0
- package/cpp/api/JsiSkMaskFilterFactory.h +4 -0
- package/cpp/api/JsiSkMatrix.h +2 -0
- package/cpp/api/JsiSkPaint.h +2 -0
- package/cpp/api/JsiSkParagraph.h +3 -1
- package/cpp/api/JsiSkParagraphBuilder.h +3 -1
- package/cpp/api/JsiSkParagraphBuilderFactory.h +5 -1
- package/cpp/api/JsiSkPath.h +2 -0
- package/cpp/api/JsiSkPathEffect.h +2 -0
- package/cpp/api/JsiSkPathEffectFactory.h +4 -0
- package/cpp/api/JsiSkPathFactory.h +2 -0
- package/cpp/api/JsiSkPicture.h +2 -0
- package/cpp/api/JsiSkPictureFactory.h +10 -0
- package/cpp/api/JsiSkPictureRecorder.h +3 -3
- package/cpp/api/JsiSkPoint.h +2 -0
- package/cpp/api/JsiSkRRect.h +2 -0
- package/cpp/api/JsiSkRSXform.h +2 -0
- package/cpp/api/JsiSkRect.h +2 -0
- package/cpp/api/JsiSkRuntimeEffect.h +2 -0
- package/cpp/api/JsiSkRuntimeEffectFactory.h +4 -0
- package/cpp/api/JsiSkRuntimeShaderBuilder.h +4 -0
- package/cpp/api/JsiSkSVG.h +2 -0
- package/cpp/api/JsiSkSVGFactory.h +2 -0
- package/cpp/api/JsiSkShader.h +3 -1
- package/cpp/api/JsiSkShaderFactory.h +2 -0
- package/cpp/api/JsiSkSkottie.h +2 -0
- package/cpp/api/JsiSkSurface.h +50 -7
- package/cpp/api/JsiSkSurfaceFactory.h +2 -0
- package/cpp/api/JsiSkTextBlob.h +2 -0
- package/cpp/api/JsiSkTextBlobFactory.h +2 -0
- package/cpp/api/JsiSkTypeface.h +2 -0
- package/cpp/api/JsiSkTypefaceFactory.h +2 -0
- package/cpp/api/JsiSkTypefaceFontProvider.h +4 -0
- package/cpp/api/JsiSkTypefaceFontProviderFactory.h +4 -0
- package/cpp/api/JsiSkVertices.h +2 -0
- package/cpp/api/JsiSkiaContext.h +3 -1
- package/cpp/api/JsiSkottieFactory.h +2 -0
- package/cpp/api/JsiVideo.h +2 -0
- package/cpp/api/recorder/JsiRecorder.h +42 -7
- package/cpp/jsi/ViewProperty.h +32 -1
- package/lib/commonjs/skia/types/Picture/PictureFactory.d.ts +1 -1
- package/lib/commonjs/skia/types/Picture/PictureFactory.js.map +1 -1
- package/lib/commonjs/skia/types/Recorder.d.ts +2 -1
- package/lib/commonjs/skia/types/Recorder.js.map +1 -1
- package/lib/commonjs/sksg/Container.native.d.ts +4 -0
- package/lib/commonjs/sksg/Container.native.js +18 -6
- package/lib/commonjs/sksg/Container.native.js.map +1 -1
- package/lib/commonjs/sksg/Recorder/ReanimatedRecorder.d.ts +1 -0
- package/lib/commonjs/sksg/Recorder/ReanimatedRecorder.js +4 -0
- package/lib/commonjs/sksg/Recorder/ReanimatedRecorder.js.map +1 -1
- package/lib/module/skia/types/Picture/PictureFactory.d.ts +1 -1
- package/lib/module/skia/types/Picture/PictureFactory.js.map +1 -1
- package/lib/module/skia/types/Recorder.d.ts +2 -1
- package/lib/module/skia/types/Recorder.js.map +1 -1
- package/lib/module/sksg/Container.native.d.ts +4 -0
- package/lib/module/sksg/Container.native.js +18 -6
- package/lib/module/sksg/Container.native.js.map +1 -1
- package/lib/module/sksg/Recorder/ReanimatedRecorder.d.ts +1 -0
- package/lib/module/sksg/Recorder/ReanimatedRecorder.js +4 -0
- package/lib/module/sksg/Recorder/ReanimatedRecorder.js.map +1 -1
- package/lib/typescript/lib/commonjs/sksg/Container.native.d.ts +5 -0
- package/lib/typescript/lib/commonjs/sksg/Recorder/ReanimatedRecorder.d.ts +1 -0
- package/lib/typescript/lib/module/sksg/Container.native.d.ts +5 -0
- package/lib/typescript/lib/module/sksg/Recorder/ReanimatedRecorder.d.ts +1 -0
- package/lib/typescript/src/skia/types/Picture/PictureFactory.d.ts +1 -1
- package/lib/typescript/src/skia/types/Recorder.d.ts +2 -1
- package/lib/typescript/src/sksg/Container.native.d.ts +4 -0
- package/lib/typescript/src/sksg/Recorder/ReanimatedRecorder.d.ts +1 -0
- package/package.json +1 -1
- package/src/skia/types/Picture/PictureFactory.ts +1 -1
- package/src/skia/types/Recorder.ts +2 -1
- package/src/sksg/Container.native.ts +25 -7
- package/src/sksg/Recorder/ReanimatedRecorder.ts +5 -0
|
@@ -254,6 +254,8 @@ public:
|
|
|
254
254
|
|
|
255
255
|
size_t getMemoryPressure() const override { return 1024; }
|
|
256
256
|
|
|
257
|
+
std::string getObjectType() const override { return "JsiSkShaderFactory"; }
|
|
258
|
+
|
|
257
259
|
JSI_EXPORT_FUNCTIONS(JSI_EXPORT_FUNC(JsiSkShaderFactory, MakeLinearGradient),
|
|
258
260
|
JSI_EXPORT_FUNC(JsiSkShaderFactory, MakeRadialGradient),
|
|
259
261
|
JSI_EXPORT_FUNC(JsiSkShaderFactory, MakeSweepGradient),
|
package/cpp/api/JsiSkSkottie.h
CHANGED
package/cpp/api/JsiSkSurface.h
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
#pragma once
|
|
2
2
|
|
|
3
|
+
#include <algorithm>
|
|
4
|
+
#include <limits>
|
|
3
5
|
#include <memory>
|
|
4
6
|
#include <utility>
|
|
5
7
|
|
|
@@ -116,17 +118,58 @@ public:
|
|
|
116
118
|
|
|
117
119
|
size_t getMemoryPressure() const override {
|
|
118
120
|
auto surface = getObject();
|
|
119
|
-
if (!surface)
|
|
121
|
+
if (!surface) {
|
|
120
122
|
return 0;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
const auto safeAdd = [](size_t a, size_t b) {
|
|
126
|
+
if (std::numeric_limits<size_t>::max() - a < b) {
|
|
127
|
+
return std::numeric_limits<size_t>::max();
|
|
128
|
+
}
|
|
129
|
+
return a + b;
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
SkImageInfo info = surface->imageInfo();
|
|
133
|
+
size_t pixelBytes = info.computeMinByteSize();
|
|
134
|
+
if (pixelBytes == 0) {
|
|
135
|
+
auto width = std::max(info.width(), surface->width());
|
|
136
|
+
auto height = std::max(info.height(), surface->height());
|
|
137
|
+
int bytesPerPixel = info.bytesPerPixel();
|
|
138
|
+
if (bytesPerPixel <= 0) {
|
|
139
|
+
bytesPerPixel = 4;
|
|
140
|
+
}
|
|
141
|
+
if (width > 0 && height > 0) {
|
|
142
|
+
pixelBytes = static_cast<size_t>(width) * static_cast<size_t>(height) *
|
|
143
|
+
static_cast<size_t>(bytesPerPixel);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
if (pixelBytes == 0) {
|
|
148
|
+
return 0;
|
|
149
|
+
}
|
|
121
150
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
151
|
+
size_t estimated = pixelBytes;
|
|
152
|
+
|
|
153
|
+
auto canvas = surface->getCanvas();
|
|
154
|
+
const bool isGpuBacked =
|
|
155
|
+
surface->recordingContext() != nullptr || surface->recorder() != nullptr ||
|
|
156
|
+
(canvas && (canvas->recordingContext() != nullptr ||
|
|
157
|
+
canvas->recorder() != nullptr));
|
|
158
|
+
|
|
159
|
+
if (isGpuBacked) {
|
|
160
|
+
// Account for a resolved texture and depth/stencil attachments.
|
|
161
|
+
estimated = safeAdd(estimated, pixelBytes); // resolve/texture copy
|
|
162
|
+
estimated = safeAdd(estimated, pixelBytes / 2); // depth-stencil buffers
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
// Add a small overhead buffer for bookkeeping allocations.
|
|
166
|
+
estimated = safeAdd(estimated, 128 * 1024);
|
|
167
|
+
|
|
168
|
+
return estimated;
|
|
128
169
|
}
|
|
129
170
|
|
|
171
|
+
std::string getObjectType() const override { return "JsiSkSurface"; }
|
|
172
|
+
|
|
130
173
|
JSI_EXPORT_FUNCTIONS(JSI_EXPORT_FUNC(JsiSkSurface, width),
|
|
131
174
|
JSI_EXPORT_FUNC(JsiSkSurface, height),
|
|
132
175
|
JSI_EXPORT_FUNC(JsiSkSurface, getCanvas),
|
|
@@ -55,6 +55,8 @@ public:
|
|
|
55
55
|
|
|
56
56
|
size_t getMemoryPressure() const override { return 2048; }
|
|
57
57
|
|
|
58
|
+
std::string getObjectType() const override { return "JsiSkSurfaceFactory"; }
|
|
59
|
+
|
|
58
60
|
explicit JsiSkSurfaceFactory(std::shared_ptr<RNSkPlatformContext> context)
|
|
59
61
|
: JsiSkHostObject(std::move(context)) {}
|
|
60
62
|
};
|
package/cpp/api/JsiSkTextBlob.h
CHANGED
|
@@ -111,6 +111,8 @@ public:
|
|
|
111
111
|
|
|
112
112
|
size_t getMemoryPressure() const override { return 2048; }
|
|
113
113
|
|
|
114
|
+
std::string getObjectType() const override { return "JsiSkTextBlobFactory"; }
|
|
115
|
+
|
|
114
116
|
explicit JsiSkTextBlobFactory(std::shared_ptr<RNSkPlatformContext> context)
|
|
115
117
|
: JsiSkHostObject(std::move(context)) {}
|
|
116
118
|
};
|
package/cpp/api/JsiSkTypeface.h
CHANGED
|
@@ -27,6 +27,10 @@ public:
|
|
|
27
27
|
|
|
28
28
|
size_t getMemoryPressure() const override { return 2048; }
|
|
29
29
|
|
|
30
|
+
std::string getObjectType() const override {
|
|
31
|
+
return "JsiSkTypefaceFontProviderFactory";
|
|
32
|
+
}
|
|
33
|
+
|
|
30
34
|
explicit JsiSkTypefaceFontProviderFactory(
|
|
31
35
|
std::shared_ptr<RNSkPlatformContext> context)
|
|
32
36
|
: JsiSkHostObject(std::move(context)) {}
|
package/cpp/api/JsiSkVertices.h
CHANGED
|
@@ -47,6 +47,8 @@ public:
|
|
|
47
47
|
return vertices->approximateSize();
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
+
std::string getObjectType() const override { return "JsiSkVertices"; }
|
|
51
|
+
|
|
50
52
|
JSI_EXPORT_FUNCTIONS(JSI_EXPORT_FUNC(JsiSkVertices, bounds),
|
|
51
53
|
JSI_EXPORT_FUNC(JsiSkVertices, uniqueID),
|
|
52
54
|
JSI_EXPORT_FUNC(JsiSkVertices, dispose))
|
package/cpp/api/JsiSkiaContext.h
CHANGED
|
@@ -55,7 +55,9 @@ public:
|
|
|
55
55
|
std::shared_ptr<WindowContext> ctx)
|
|
56
56
|
: JsiSkWrappingSharedPtrHostObject(std::move(context), std::move(ctx)) {}
|
|
57
57
|
|
|
58
|
-
size_t getMemoryPressure() const override { return
|
|
58
|
+
size_t getMemoryPressure() const override { return 10 * 1024 * 1024; }
|
|
59
|
+
|
|
60
|
+
std::string getObjectType() const override { return "JsiSkiaContext"; }
|
|
59
61
|
|
|
60
62
|
/**
|
|
61
63
|
* Creates the function for construction a new instance of the SkFont
|
|
@@ -61,6 +61,8 @@ public:
|
|
|
61
61
|
|
|
62
62
|
size_t getMemoryPressure() const override { return 4096; }
|
|
63
63
|
|
|
64
|
+
std::string getObjectType() const override { return "JsiSkottieFactory"; }
|
|
65
|
+
|
|
64
66
|
explicit JsiSkottieFactory(std::shared_ptr<RNSkPlatformContext> context)
|
|
65
67
|
: JsiSkHostObject(std::move(context)) {}
|
|
66
68
|
};
|
package/cpp/api/JsiVideo.h
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
#include "JsiSkCanvas.h"
|
|
9
9
|
#include "JsiSkHostObjects.h"
|
|
10
|
+
#include "JsiSkPicture.h"
|
|
10
11
|
|
|
11
12
|
#include "DrawingCtx.h"
|
|
12
13
|
#include "RNRecorder.h"
|
|
@@ -53,17 +54,39 @@ public:
|
|
|
53
54
|
}
|
|
54
55
|
|
|
55
56
|
JSI_HOST_FUNCTION(play) {
|
|
57
|
+
// Check if a picture parameter was provided
|
|
58
|
+
if (count < 1 || arguments[0].isUndefined() || arguments[0].isNull()) {
|
|
59
|
+
throw jsi::JSError(runtime, "play() requires a Picture parameter");
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// Get the JsiSkPicture from the argument
|
|
63
|
+
auto pictureObject = arguments[0].asObject(runtime);
|
|
64
|
+
auto pictureHostObject = pictureObject.asHostObject<JsiSkPicture>(runtime);
|
|
65
|
+
if (!pictureHostObject) {
|
|
66
|
+
throw jsi::JSError(runtime, "Invalid Picture object provided to play()");
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// Create a new picture recorder to record into
|
|
56
70
|
SkPictureRecorder pictureRecorder;
|
|
57
71
|
SkISize size = SkISize::Make(2'000'000, 2'000'000);
|
|
58
72
|
SkRect rect = SkRect::Make(size);
|
|
59
73
|
auto canvas = pictureRecorder.beginRecording(rect, nullptr);
|
|
74
|
+
|
|
75
|
+
// Play the recorded commands into the canvas
|
|
60
76
|
DrawingCtx ctx(canvas);
|
|
61
77
|
getObject()->play(&ctx);
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
78
|
+
|
|
79
|
+
// Finish recording and get the new picture
|
|
80
|
+
auto newPicture = pictureRecorder.finishRecordingAsPicture();
|
|
81
|
+
|
|
82
|
+
// Update the existing JsiSkPicture object with the new SkPicture
|
|
83
|
+
// This reuses the existing JavaScript object instead of creating a new one
|
|
84
|
+
pictureHostObject->setObject(std::move(newPicture));
|
|
85
|
+
auto memoryPressure = pictureHostObject->getMemoryPressure();
|
|
86
|
+
pictureObject.setExternalMemoryPressure(runtime, memoryPressure);
|
|
87
|
+
|
|
88
|
+
// Return undefined since we're modifying the passed-in object
|
|
89
|
+
return jsi::Value::undefined();
|
|
67
90
|
}
|
|
68
91
|
|
|
69
92
|
JSI_HOST_FUNCTION(applyUpdates) {
|
|
@@ -271,6 +294,13 @@ public:
|
|
|
271
294
|
return jsi::Value::undefined();
|
|
272
295
|
}
|
|
273
296
|
|
|
297
|
+
JSI_HOST_FUNCTION(reset) {
|
|
298
|
+
auto newRecorder = std::make_shared<Recorder>();
|
|
299
|
+
newRecorder->_context = getContext();
|
|
300
|
+
setObject(newRecorder);
|
|
301
|
+
return jsi::Value::undefined();
|
|
302
|
+
}
|
|
303
|
+
|
|
274
304
|
EXPORT_JSI_API_TYPENAME(JsiRecorder, Recorder)
|
|
275
305
|
|
|
276
306
|
JSI_EXPORT_FUNCTIONS(JSI_EXPORT_FUNC(JsiRecorder, saveGroup),
|
|
@@ -314,9 +344,14 @@ public:
|
|
|
314
344
|
JSI_EXPORT_FUNC(JsiRecorder, drawAtlas),
|
|
315
345
|
JSI_EXPORT_FUNC(JsiRecorder, drawSkottie),
|
|
316
346
|
JSI_EXPORT_FUNC(JsiRecorder, play),
|
|
317
|
-
JSI_EXPORT_FUNC(JsiRecorder, applyUpdates)
|
|
347
|
+
JSI_EXPORT_FUNC(JsiRecorder, applyUpdates),
|
|
348
|
+
JSI_EXPORT_FUNC(JsiRecorder, reset))
|
|
349
|
+
|
|
350
|
+
// This has no basis in reality but since since these are private long-lived
|
|
351
|
+
// objects, we think it is more than fine.
|
|
352
|
+
size_t getMemoryPressure() const override { return 10 * 1024 * 1024; }
|
|
318
353
|
|
|
319
|
-
|
|
354
|
+
std::string getObjectType() const override { return "JsiRecorder"; }
|
|
320
355
|
|
|
321
356
|
static const jsi::HostFunctionType
|
|
322
357
|
createCtor(std::shared_ptr<RNSkPlatformContext> context) {
|
package/cpp/jsi/ViewProperty.h
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
#pragma once
|
|
2
2
|
|
|
3
|
+
#include <atomic>
|
|
3
4
|
#include <functional>
|
|
4
5
|
#include <jsi/jsi.h>
|
|
5
6
|
#include <memory>
|
|
@@ -7,10 +8,33 @@
|
|
|
7
8
|
#include <variant>
|
|
8
9
|
|
|
9
10
|
#include "JsiSkPicture.h"
|
|
11
|
+
#include "RuntimeLifecycleMonitor.h"
|
|
10
12
|
|
|
11
13
|
namespace RNJsi {
|
|
12
14
|
namespace jsi = facebook::jsi;
|
|
13
15
|
|
|
16
|
+
class RuntimeAwareRuntimeGuard : public RuntimeLifecycleListener {
|
|
17
|
+
public:
|
|
18
|
+
explicit RuntimeAwareRuntimeGuard(jsi::Runtime &runtime)
|
|
19
|
+
: _runtime(&runtime) {
|
|
20
|
+
RuntimeLifecycleMonitor::addListener(runtime, this);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
~RuntimeAwareRuntimeGuard() override {
|
|
24
|
+
auto runtime = _runtime.load();
|
|
25
|
+
if (runtime != nullptr) {
|
|
26
|
+
RuntimeLifecycleMonitor::removeListener(*runtime, this);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
void onRuntimeDestroyed(jsi::Runtime *) override { _runtime.store(nullptr); }
|
|
31
|
+
|
|
32
|
+
jsi::Runtime *getRuntime() const { return _runtime.load(); }
|
|
33
|
+
|
|
34
|
+
private:
|
|
35
|
+
std::atomic<jsi::Runtime *> _runtime;
|
|
36
|
+
};
|
|
37
|
+
|
|
14
38
|
class ViewProperty {
|
|
15
39
|
public:
|
|
16
40
|
ViewProperty(jsi::Runtime &runtime, const jsi::Value &value) {
|
|
@@ -31,8 +55,15 @@ public:
|
|
|
31
55
|
ViewProperty(jsi::Runtime &runtime, const jsi::Value &value,
|
|
32
56
|
PlatformContext platformContext, size_t nativeId) {
|
|
33
57
|
// Set the onSize callback with all the necessary context
|
|
58
|
+
auto runtimeGuard = std::make_shared<RuntimeAwareRuntimeGuard>(runtime);
|
|
34
59
|
_value = std::function<void(int, int)>(
|
|
35
|
-
[
|
|
60
|
+
[runtimeGuard, platformContext, nativeId](int width, int height) {
|
|
61
|
+
auto runtimePtr = runtimeGuard->getRuntime();
|
|
62
|
+
if (runtimePtr == nullptr) {
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
jsi::Runtime &runtime = *runtimePtr;
|
|
36
67
|
jsi::Object size(runtime);
|
|
37
68
|
auto pd = platformContext->getPixelDensity();
|
|
38
69
|
size.setProperty(runtime, "width", jsi::Value(width / pd));
|
|
@@ -4,5 +4,5 @@ export interface PictureFactory {
|
|
|
4
4
|
* Returns an SkPicture which has been serialized previously to the given bytes.
|
|
5
5
|
* @param bytes
|
|
6
6
|
*/
|
|
7
|
-
MakePicture(bytes: Uint8Array | ArrayBuffer): SkPicture | null;
|
|
7
|
+
MakePicture(bytes: Uint8Array | ArrayBuffer | null): SkPicture | null;
|
|
8
8
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["PictureFactory.ts"],"sourcesContent":["import type { SkPicture } from \"./Picture\";\n\nexport interface PictureFactory {\n /**\n * Returns an SkPicture which has been serialized previously to the given bytes.\n * @param bytes\n */\n MakePicture(bytes: Uint8Array | ArrayBuffer): SkPicture | null;\n}\n"],"mappings":"","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["PictureFactory.ts"],"sourcesContent":["import type { SkPicture } from \"./Picture\";\n\nexport interface PictureFactory {\n /**\n * Returns an SkPicture which has been serialized previously to the given bytes.\n * @param bytes\n */\n MakePicture(bytes: Uint8Array | ArrayBuffer | null): SkPicture | null;\n}\n"],"mappings":"","ignoreList":[]}
|
|
@@ -48,6 +48,7 @@ export interface BaseRecorder {
|
|
|
48
48
|
drawAtlas(props: AnimatedProps<AtlasProps>): void;
|
|
49
49
|
}
|
|
50
50
|
export interface JsiRecorder extends BaseRecorder {
|
|
51
|
-
play():
|
|
51
|
+
play(picture: SkPicture): void;
|
|
52
52
|
applyUpdates(variables: SharedValue<unknown>[]): void;
|
|
53
|
+
reset(): void;
|
|
53
54
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["Recorder.ts"],"sourcesContent":["import type { SharedValue } from \"react-native-reanimated\";\n\nimport type {\n TextProps,\n AtlasProps,\n BlurMaskFilterProps,\n BoxProps,\n BoxShadowProps,\n CircleProps,\n CTMProps,\n DiffRectProps,\n GlyphsProps,\n ImageProps,\n ImageSVGProps,\n LineProps,\n NodeType,\n OvalProps,\n PaintProps,\n ParagraphProps,\n PatchProps,\n PathProps,\n PictureProps,\n PointsProps,\n RectProps,\n RoundedRectProps,\n TextBlobProps,\n TextPathProps,\n VerticesProps,\n SkottieProps,\n} from \"../../dom/types\";\nimport type { AnimatedProps } from \"../../renderer/processors/Animations/Animations\";\n\nimport type { SkPicture } from \"./Picture\";\n\nexport interface BaseRecorder {\n saveGroup(): void;\n restoreGroup(): void;\n savePaint(props: AnimatedProps<PaintProps>, standalone: boolean): void;\n restorePaint(): void;\n restorePaintDeclaration(): void;\n materializePaint(): void;\n pushPathEffect(pathEffectType: NodeType, props: AnimatedProps<unknown>): void;\n pushImageFilter(\n imageFilterType: NodeType,\n props: AnimatedProps<unknown>\n ): void;\n pushColorFilter(\n colorFilterType: NodeType,\n props: AnimatedProps<unknown>\n ): void;\n pushShader(\n shaderType: NodeType,\n props: AnimatedProps<unknown>,\n children: number\n ): void;\n pushBlurMaskFilter(props: AnimatedProps<BlurMaskFilterProps>): void;\n composePathEffect(): void;\n composeColorFilter(): void;\n composeImageFilter(): void;\n saveCTM(props: AnimatedProps<CTMProps>): void;\n restoreCTM(): void;\n drawPaint(): void;\n saveLayer(): void;\n saveBackdropFilter(): void;\n drawBox(\n boxProps: AnimatedProps<BoxProps>,\n shadows: {\n props: BoxShadowProps;\n animatedProps?: Record<string, SharedValue<unknown>>;\n }[]\n ): void;\n drawImage(props: AnimatedProps<ImageProps>): void;\n drawCircle(props: AnimatedProps<CircleProps>): void;\n drawPoints(props: AnimatedProps<PointsProps>): void;\n drawPath(props: AnimatedProps<PathProps>): void;\n drawRect(props: AnimatedProps<RectProps>): void;\n drawRRect(props: AnimatedProps<RoundedRectProps>): void;\n drawOval(props: AnimatedProps<OvalProps>): void;\n drawLine(props: AnimatedProps<LineProps>): void;\n drawPatch(props: AnimatedProps<PatchProps>): void;\n drawVertices(props: AnimatedProps<VerticesProps>): void;\n drawDiffRect(props: AnimatedProps<DiffRectProps>): void;\n drawText(props: AnimatedProps<TextProps>): void;\n drawTextPath(props: AnimatedProps<TextPathProps>): void;\n drawTextBlob(props: AnimatedProps<TextBlobProps>): void;\n drawGlyphs(props: AnimatedProps<GlyphsProps>): void;\n drawPicture(props: AnimatedProps<PictureProps>): void;\n drawImageSVG(props: AnimatedProps<ImageSVGProps>): void;\n drawParagraph(props: AnimatedProps<ParagraphProps>): void;\n drawSkottie(props: AnimatedProps<SkottieProps>): void;\n drawAtlas(props: AnimatedProps<AtlasProps>): void;\n}\n\nexport interface JsiRecorder extends BaseRecorder {\n play():
|
|
1
|
+
{"version":3,"names":[],"sources":["Recorder.ts"],"sourcesContent":["import type { SharedValue } from \"react-native-reanimated\";\n\nimport type {\n TextProps,\n AtlasProps,\n BlurMaskFilterProps,\n BoxProps,\n BoxShadowProps,\n CircleProps,\n CTMProps,\n DiffRectProps,\n GlyphsProps,\n ImageProps,\n ImageSVGProps,\n LineProps,\n NodeType,\n OvalProps,\n PaintProps,\n ParagraphProps,\n PatchProps,\n PathProps,\n PictureProps,\n PointsProps,\n RectProps,\n RoundedRectProps,\n TextBlobProps,\n TextPathProps,\n VerticesProps,\n SkottieProps,\n} from \"../../dom/types\";\nimport type { AnimatedProps } from \"../../renderer/processors/Animations/Animations\";\n\nimport type { SkPicture } from \"./Picture\";\n\nexport interface BaseRecorder {\n saveGroup(): void;\n restoreGroup(): void;\n savePaint(props: AnimatedProps<PaintProps>, standalone: boolean): void;\n restorePaint(): void;\n restorePaintDeclaration(): void;\n materializePaint(): void;\n pushPathEffect(pathEffectType: NodeType, props: AnimatedProps<unknown>): void;\n pushImageFilter(\n imageFilterType: NodeType,\n props: AnimatedProps<unknown>\n ): void;\n pushColorFilter(\n colorFilterType: NodeType,\n props: AnimatedProps<unknown>\n ): void;\n pushShader(\n shaderType: NodeType,\n props: AnimatedProps<unknown>,\n children: number\n ): void;\n pushBlurMaskFilter(props: AnimatedProps<BlurMaskFilterProps>): void;\n composePathEffect(): void;\n composeColorFilter(): void;\n composeImageFilter(): void;\n saveCTM(props: AnimatedProps<CTMProps>): void;\n restoreCTM(): void;\n drawPaint(): void;\n saveLayer(): void;\n saveBackdropFilter(): void;\n drawBox(\n boxProps: AnimatedProps<BoxProps>,\n shadows: {\n props: BoxShadowProps;\n animatedProps?: Record<string, SharedValue<unknown>>;\n }[]\n ): void;\n drawImage(props: AnimatedProps<ImageProps>): void;\n drawCircle(props: AnimatedProps<CircleProps>): void;\n drawPoints(props: AnimatedProps<PointsProps>): void;\n drawPath(props: AnimatedProps<PathProps>): void;\n drawRect(props: AnimatedProps<RectProps>): void;\n drawRRect(props: AnimatedProps<RoundedRectProps>): void;\n drawOval(props: AnimatedProps<OvalProps>): void;\n drawLine(props: AnimatedProps<LineProps>): void;\n drawPatch(props: AnimatedProps<PatchProps>): void;\n drawVertices(props: AnimatedProps<VerticesProps>): void;\n drawDiffRect(props: AnimatedProps<DiffRectProps>): void;\n drawText(props: AnimatedProps<TextProps>): void;\n drawTextPath(props: AnimatedProps<TextPathProps>): void;\n drawTextBlob(props: AnimatedProps<TextBlobProps>): void;\n drawGlyphs(props: AnimatedProps<GlyphsProps>): void;\n drawPicture(props: AnimatedProps<PictureProps>): void;\n drawImageSVG(props: AnimatedProps<ImageSVGProps>): void;\n drawParagraph(props: AnimatedProps<ParagraphProps>): void;\n drawSkottie(props: AnimatedProps<SkottieProps>): void;\n drawAtlas(props: AnimatedProps<AtlasProps>): void;\n}\n\nexport interface JsiRecorder extends BaseRecorder {\n play(picture: SkPicture): void;\n applyUpdates(variables: SharedValue<unknown>[]): void;\n reset(): void;\n}\n"],"mappings":"","ignoreList":[]}
|
|
@@ -5,6 +5,10 @@ import "../views/api";
|
|
|
5
5
|
declare class NativeReanimatedContainer extends Container {
|
|
6
6
|
private nativeId;
|
|
7
7
|
private mapperId;
|
|
8
|
+
private picture;
|
|
9
|
+
private recorderA;
|
|
10
|
+
private recorderB;
|
|
11
|
+
private currentRecorder;
|
|
8
12
|
constructor(Skia: Skia, nativeId: number);
|
|
9
13
|
redraw(): void;
|
|
10
14
|
}
|
|
@@ -15,11 +15,11 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
|
|
|
15
15
|
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
16
16
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
17
17
|
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
18
|
-
const nativeDrawOnscreen = (nativeId, recorder) => {
|
|
18
|
+
const nativeDrawOnscreen = (nativeId, recorder, picture) => {
|
|
19
19
|
"worklet";
|
|
20
20
|
|
|
21
21
|
//const start = performance.now();
|
|
22
|
-
|
|
22
|
+
recorder.play(picture);
|
|
23
23
|
//const end = performance.now();
|
|
24
24
|
//console.log("Recording time: ", end - start);
|
|
25
25
|
SkiaViewApi.setJsiProperty(nativeId, "picture", picture);
|
|
@@ -29,6 +29,14 @@ class NativeReanimatedContainer extends _StaticContainer.Container {
|
|
|
29
29
|
super(Skia);
|
|
30
30
|
this.nativeId = nativeId;
|
|
31
31
|
_defineProperty(this, "mapperId", null);
|
|
32
|
+
_defineProperty(this, "picture", void 0);
|
|
33
|
+
_defineProperty(this, "recorderA", void 0);
|
|
34
|
+
_defineProperty(this, "recorderB", void 0);
|
|
35
|
+
_defineProperty(this, "currentRecorder", void 0);
|
|
36
|
+
this.recorderA = new _ReanimatedRecorder.ReanimatedRecorder(Skia);
|
|
37
|
+
this.recorderB = new _ReanimatedRecorder.ReanimatedRecorder(Skia);
|
|
38
|
+
this.currentRecorder = this.recorderA;
|
|
39
|
+
this.picture = Skia.Picture.MakePicture(null);
|
|
32
40
|
}
|
|
33
41
|
redraw() {
|
|
34
42
|
if (this.mapperId !== null) {
|
|
@@ -37,25 +45,29 @@ class NativeReanimatedContainer extends _StaticContainer.Container {
|
|
|
37
45
|
if (this.unmounted) {
|
|
38
46
|
return;
|
|
39
47
|
}
|
|
48
|
+
|
|
49
|
+
// Swap to the next recorder (double buffering)
|
|
50
|
+
const recorder = this.currentRecorder;
|
|
51
|
+
this.currentRecorder = this.currentRecorder === this.recorderA ? this.recorderB : this.recorderA;
|
|
40
52
|
const {
|
|
41
53
|
nativeId,
|
|
42
|
-
|
|
54
|
+
picture
|
|
43
55
|
} = this;
|
|
44
|
-
|
|
56
|
+
recorder.reset();
|
|
45
57
|
(0, _Visitor.visit)(recorder, this.root);
|
|
46
58
|
const sharedValues = recorder.getSharedValues();
|
|
47
59
|
const sharedRecorder = recorder.getRecorder();
|
|
48
60
|
_ReanimatedProxy.default.runOnUI(() => {
|
|
49
61
|
"worklet";
|
|
50
62
|
|
|
51
|
-
nativeDrawOnscreen(nativeId, sharedRecorder);
|
|
63
|
+
nativeDrawOnscreen(nativeId, sharedRecorder, picture);
|
|
52
64
|
})();
|
|
53
65
|
if (sharedValues.length > 0) {
|
|
54
66
|
this.mapperId = _ReanimatedProxy.default.startMapper(() => {
|
|
55
67
|
"worklet";
|
|
56
68
|
|
|
57
69
|
sharedRecorder.applyUpdates(sharedValues);
|
|
58
|
-
nativeDrawOnscreen(nativeId, sharedRecorder);
|
|
70
|
+
nativeDrawOnscreen(nativeId, sharedRecorder, picture);
|
|
59
71
|
}, sharedValues);
|
|
60
72
|
}
|
|
61
73
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_ReanimatedProxy","_interopRequireDefault","require","_renderHelpers","_ReanimatedRecorder","_StaticContainer","_Visitor","e","__esModule","default","_defineProperty","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","nativeDrawOnscreen","nativeId","recorder","picture","play","SkiaViewApi","setJsiProperty","NativeReanimatedContainer","Container","constructor","Skia","redraw","mapperId","Rea","stopMapper","unmounted","
|
|
1
|
+
{"version":3,"names":["_ReanimatedProxy","_interopRequireDefault","require","_renderHelpers","_ReanimatedRecorder","_StaticContainer","_Visitor","e","__esModule","default","_defineProperty","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","nativeDrawOnscreen","nativeId","recorder","picture","play","SkiaViewApi","setJsiProperty","NativeReanimatedContainer","Container","constructor","Skia","recorderA","ReanimatedRecorder","recorderB","currentRecorder","Picture","MakePicture","redraw","mapperId","Rea","stopMapper","unmounted","reset","visit","root","sharedValues","getSharedValues","sharedRecorder","getRecorder","runOnUI","length","startMapper","applyUpdates","createContainer","HAS_REANIMATED_3","StaticContainer","exports"],"sources":["Container.native.ts"],"sourcesContent":["import Rea from \"../external/reanimated/ReanimatedProxy\";\nimport type { Skia, SkPicture } from \"../skia/types\";\nimport { HAS_REANIMATED_3 } from \"../external/reanimated/renderHelpers\";\nimport type { JsiRecorder } from \"../skia/types/Recorder\";\n\nimport { ReanimatedRecorder } from \"./Recorder/ReanimatedRecorder\";\nimport { Container, StaticContainer } from \"./StaticContainer\";\nimport { visit } from \"./Recorder/Visitor\";\n\nimport \"../skia/NativeSetup\";\nimport \"../views/api\";\n\nconst nativeDrawOnscreen = (\n nativeId: number,\n recorder: JsiRecorder,\n picture: SkPicture\n) => {\n \"worklet\";\n\n //const start = performance.now();\n recorder.play(picture);\n //const end = performance.now();\n //console.log(\"Recording time: \", end - start);\n SkiaViewApi.setJsiProperty(nativeId, \"picture\", picture);\n};\n\nclass NativeReanimatedContainer extends Container {\n private mapperId: number | null = null;\n private picture: SkPicture;\n private recorderA: ReanimatedRecorder;\n private recorderB: ReanimatedRecorder;\n private currentRecorder: ReanimatedRecorder;\n\n constructor(\n Skia: Skia,\n private nativeId: number\n ) {\n super(Skia);\n this.recorderA = new ReanimatedRecorder(Skia);\n this.recorderB = new ReanimatedRecorder(Skia);\n this.currentRecorder = this.recorderA;\n this.picture = Skia.Picture.MakePicture(null)!;\n }\n\n redraw() {\n if (this.mapperId !== null) {\n Rea.stopMapper(this.mapperId);\n }\n if (this.unmounted) {\n return;\n }\n\n // Swap to the next recorder (double buffering)\n const recorder = this.currentRecorder;\n this.currentRecorder =\n this.currentRecorder === this.recorderA ? this.recorderB : this.recorderA;\n\n const { nativeId, picture } = this;\n recorder.reset();\n visit(recorder, this.root);\n const sharedValues = recorder.getSharedValues();\n const sharedRecorder = recorder.getRecorder();\n Rea.runOnUI(() => {\n \"worklet\";\n nativeDrawOnscreen(nativeId, sharedRecorder, picture);\n })();\n if (sharedValues.length > 0) {\n this.mapperId = Rea.startMapper(() => {\n \"worklet\";\n sharedRecorder.applyUpdates(sharedValues);\n nativeDrawOnscreen(nativeId, sharedRecorder, picture);\n }, sharedValues);\n }\n }\n}\n\nexport const createContainer = (Skia: Skia, nativeId: number) => {\n if (HAS_REANIMATED_3 && nativeId !== -1) {\n return new NativeReanimatedContainer(Skia, nativeId);\n } else {\n return new StaticContainer(Skia, nativeId);\n }\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -10,6 +10,7 @@ export declare class ReanimatedRecorder implements BaseRecorder {
|
|
|
10
10
|
private values;
|
|
11
11
|
private recorder;
|
|
12
12
|
constructor(Skia: Skia);
|
|
13
|
+
reset(): void;
|
|
13
14
|
private processAnimationValues;
|
|
14
15
|
getRecorder(): JsiRecorder;
|
|
15
16
|
getSharedValues(): SharedValue<unknown>[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_utils","require","_defineProperty","e","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","ReanimatedRecorder","constructor","Skia","Set","recorder","Recorder","processAnimationValues","props","values","forEach","isSharedValue","has","name","size","add","getRecorder","getSharedValues","Array","from","saveGroup","restoreGroup","savePaint","standalone","restorePaint","restorePaintDeclaration","materializePaint","pushPathEffect","pathEffectType","pushImageFilter","imageFilterType","pushColorFilter","colorFilterType","pushShader","shaderType","children","pushBlurMaskFilter","composePathEffect","composeColorFilter","composeImageFilter","saveCTM","restoreCTM","drawPaint","saveLayer","saveBackdropFilter","drawBox","boxProps","shadows","shadow","map","s","drawImage","drawCircle","drawPoints","drawPath","drawRect","drawRRect","drawOval","drawLine","drawPatch","drawVertices","drawDiffRect","drawText","drawTextPath","drawTextBlob","drawGlyphs","drawPicture","drawImageSVG","drawParagraph","drawAtlas","drawSkottie","exports"],"sources":["ReanimatedRecorder.ts"],"sourcesContent":["import type { SharedValue } from \"react-native-reanimated\";\n\nimport type { BaseRecorder, JsiRecorder, Skia } from \"../../skia/types\";\nimport type {\n PaintProps,\n NodeType,\n BlurMaskFilterProps,\n CTMProps,\n BoxProps,\n BoxShadowProps,\n ImageProps,\n CircleProps,\n PointsProps,\n PathProps,\n RectProps,\n RoundedRectProps,\n OvalProps,\n LineProps,\n PatchProps,\n VerticesProps,\n DiffRectProps,\n TextProps,\n TextPathProps,\n TextBlobProps,\n GlyphsProps,\n PictureProps,\n ImageSVGProps,\n ParagraphProps,\n AtlasProps,\n SkottieProps,\n} from \"../../dom/types\";\nimport type { AnimatedProps } from \"../../renderer\";\nimport { isSharedValue } from \"../utils\";\n\n/**\n * Currently the recorder only work if the GPU resources (e.g Images) are owned by the main thread.\n * It will crash otherwise on Ganesh (iOS/Android).\n */\nexport class ReanimatedRecorder implements BaseRecorder {\n private values = new Set<SharedValue<unknown>>();\n private recorder: JsiRecorder;\n\n constructor(Skia: Skia) {\n this.recorder = Skia.Recorder();\n }\n\n private processAnimationValues(props?: Record<string, unknown>) {\n if (!props) {\n return;\n }\n Object.values(props).forEach((value) => {\n if (isSharedValue(value) && !this.values.has(value)) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n value.name = `variable${this.values.size}`;\n this.values.add(value as SharedValue<unknown>);\n }\n });\n }\n\n getRecorder() {\n return this.recorder;\n }\n\n getSharedValues() {\n return Array.from(this.values);\n }\n\n saveGroup(): void {\n this.recorder.saveGroup();\n }\n\n restoreGroup(): void {\n this.recorder.restoreGroup();\n }\n\n savePaint(props: AnimatedProps<PaintProps>, standalone: boolean): void {\n this.processAnimationValues(props);\n this.recorder.savePaint(props, standalone);\n }\n\n restorePaint(): void {\n this.recorder.restorePaint();\n }\n\n restorePaintDeclaration(): void {\n this.recorder.restorePaintDeclaration();\n }\n\n materializePaint(): void {\n this.recorder.materializePaint();\n }\n\n pushPathEffect(\n pathEffectType: NodeType,\n props: AnimatedProps<unknown>\n ): void {\n this.processAnimationValues(props);\n this.recorder.pushPathEffect(pathEffectType, props);\n }\n\n pushImageFilter(\n imageFilterType: NodeType,\n props: AnimatedProps<unknown>\n ): void {\n this.processAnimationValues(props);\n this.recorder.pushImageFilter(imageFilterType, props);\n }\n\n pushColorFilter(\n colorFilterType: NodeType,\n props: AnimatedProps<unknown>\n ): void {\n this.processAnimationValues(props);\n this.recorder.pushColorFilter(colorFilterType, props);\n }\n\n pushShader(\n shaderType: NodeType,\n props: AnimatedProps<unknown>,\n children: number\n ): void {\n this.processAnimationValues(props);\n this.recorder.pushShader(shaderType, props, children);\n }\n\n pushBlurMaskFilter(props: AnimatedProps<BlurMaskFilterProps>): void {\n this.processAnimationValues(props);\n this.recorder.pushBlurMaskFilter(props);\n }\n\n composePathEffect(): void {\n this.recorder.composePathEffect();\n }\n\n composeColorFilter(): void {\n this.recorder.composeColorFilter();\n }\n\n composeImageFilter(): void {\n this.recorder.composeImageFilter();\n }\n\n saveCTM(props: AnimatedProps<CTMProps>): void {\n this.processAnimationValues(props);\n this.recorder.saveCTM(props);\n }\n\n restoreCTM(): void {\n this.recorder.restoreCTM();\n }\n\n drawPaint(): void {\n this.recorder.drawPaint();\n }\n\n saveLayer(): void {\n this.recorder.saveLayer();\n }\n\n saveBackdropFilter(): void {\n this.recorder.saveBackdropFilter();\n }\n\n drawBox(\n boxProps: AnimatedProps<BoxProps>,\n shadows: {\n props: BoxShadowProps;\n }[]\n ): void {\n this.processAnimationValues(boxProps);\n shadows.forEach((shadow) => {\n this.processAnimationValues(\n shadow.props as AnimatedProps<BoxShadowProps>\n );\n });\n this.recorder.drawBox(\n boxProps,\n // TODO: Fix this type BaseRecorder.drawBox()\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n shadows.map((s) => s.props)\n );\n }\n\n drawImage(props: AnimatedProps<ImageProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawImage(props);\n }\n\n drawCircle(props: AnimatedProps<CircleProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawCircle(props);\n }\n\n drawPoints(props: AnimatedProps<PointsProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawPoints(props);\n }\n\n drawPath(props: AnimatedProps<PathProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawPath(props);\n }\n\n drawRect(props: AnimatedProps<RectProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawRect(props);\n }\n\n drawRRect(props: AnimatedProps<RoundedRectProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawRRect(props);\n }\n\n drawOval(props: AnimatedProps<OvalProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawOval(props);\n }\n\n drawLine(props: AnimatedProps<LineProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawLine(props);\n }\n\n drawPatch(props: AnimatedProps<PatchProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawPatch(props);\n }\n\n drawVertices(props: AnimatedProps<VerticesProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawVertices(props);\n }\n\n drawDiffRect(props: AnimatedProps<DiffRectProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawDiffRect(props);\n }\n\n drawText(props: AnimatedProps<TextProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawText(props);\n }\n\n drawTextPath(props: AnimatedProps<TextPathProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawTextPath(props);\n }\n\n drawTextBlob(props: AnimatedProps<TextBlobProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawTextBlob(props);\n }\n\n drawGlyphs(props: AnimatedProps<GlyphsProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawGlyphs(props);\n }\n\n drawPicture(props: AnimatedProps<PictureProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawPicture(props);\n }\n\n drawImageSVG(props: AnimatedProps<ImageSVGProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawImageSVG(props);\n }\n\n drawParagraph(props: AnimatedProps<ParagraphProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawParagraph(props);\n }\n\n drawAtlas(props: AnimatedProps<AtlasProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawAtlas(props);\n }\n\n drawSkottie(props: AnimatedProps<SkottieProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawSkottie(props);\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_utils","require","_defineProperty","e","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","ReanimatedRecorder","constructor","Skia","Set","recorder","Recorder","reset","values","clear","processAnimationValues","props","forEach","isSharedValue","has","name","size","add","getRecorder","getSharedValues","Array","from","saveGroup","restoreGroup","savePaint","standalone","restorePaint","restorePaintDeclaration","materializePaint","pushPathEffect","pathEffectType","pushImageFilter","imageFilterType","pushColorFilter","colorFilterType","pushShader","shaderType","children","pushBlurMaskFilter","composePathEffect","composeColorFilter","composeImageFilter","saveCTM","restoreCTM","drawPaint","saveLayer","saveBackdropFilter","drawBox","boxProps","shadows","shadow","map","s","drawImage","drawCircle","drawPoints","drawPath","drawRect","drawRRect","drawOval","drawLine","drawPatch","drawVertices","drawDiffRect","drawText","drawTextPath","drawTextBlob","drawGlyphs","drawPicture","drawImageSVG","drawParagraph","drawAtlas","drawSkottie","exports"],"sources":["ReanimatedRecorder.ts"],"sourcesContent":["import type { SharedValue } from \"react-native-reanimated\";\n\nimport type { BaseRecorder, JsiRecorder, Skia } from \"../../skia/types\";\nimport type {\n PaintProps,\n NodeType,\n BlurMaskFilterProps,\n CTMProps,\n BoxProps,\n BoxShadowProps,\n ImageProps,\n CircleProps,\n PointsProps,\n PathProps,\n RectProps,\n RoundedRectProps,\n OvalProps,\n LineProps,\n PatchProps,\n VerticesProps,\n DiffRectProps,\n TextProps,\n TextPathProps,\n TextBlobProps,\n GlyphsProps,\n PictureProps,\n ImageSVGProps,\n ParagraphProps,\n AtlasProps,\n SkottieProps,\n} from \"../../dom/types\";\nimport type { AnimatedProps } from \"../../renderer\";\nimport { isSharedValue } from \"../utils\";\n\n/**\n * Currently the recorder only work if the GPU resources (e.g Images) are owned by the main thread.\n * It will crash otherwise on Ganesh (iOS/Android).\n */\nexport class ReanimatedRecorder implements BaseRecorder {\n private values = new Set<SharedValue<unknown>>();\n private recorder: JsiRecorder;\n\n constructor(Skia: Skia) {\n this.recorder = Skia.Recorder();\n }\n\n reset() {\n this.values.clear();\n this.recorder.reset();\n }\n\n private processAnimationValues(props?: Record<string, unknown>) {\n if (!props) {\n return;\n }\n Object.values(props).forEach((value) => {\n if (isSharedValue(value) && !this.values.has(value)) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n value.name = `variable${this.values.size}`;\n this.values.add(value as SharedValue<unknown>);\n }\n });\n }\n\n getRecorder() {\n return this.recorder;\n }\n\n getSharedValues() {\n return Array.from(this.values);\n }\n\n saveGroup(): void {\n this.recorder.saveGroup();\n }\n\n restoreGroup(): void {\n this.recorder.restoreGroup();\n }\n\n savePaint(props: AnimatedProps<PaintProps>, standalone: boolean): void {\n this.processAnimationValues(props);\n this.recorder.savePaint(props, standalone);\n }\n\n restorePaint(): void {\n this.recorder.restorePaint();\n }\n\n restorePaintDeclaration(): void {\n this.recorder.restorePaintDeclaration();\n }\n\n materializePaint(): void {\n this.recorder.materializePaint();\n }\n\n pushPathEffect(\n pathEffectType: NodeType,\n props: AnimatedProps<unknown>\n ): void {\n this.processAnimationValues(props);\n this.recorder.pushPathEffect(pathEffectType, props);\n }\n\n pushImageFilter(\n imageFilterType: NodeType,\n props: AnimatedProps<unknown>\n ): void {\n this.processAnimationValues(props);\n this.recorder.pushImageFilter(imageFilterType, props);\n }\n\n pushColorFilter(\n colorFilterType: NodeType,\n props: AnimatedProps<unknown>\n ): void {\n this.processAnimationValues(props);\n this.recorder.pushColorFilter(colorFilterType, props);\n }\n\n pushShader(\n shaderType: NodeType,\n props: AnimatedProps<unknown>,\n children: number\n ): void {\n this.processAnimationValues(props);\n this.recorder.pushShader(shaderType, props, children);\n }\n\n pushBlurMaskFilter(props: AnimatedProps<BlurMaskFilterProps>): void {\n this.processAnimationValues(props);\n this.recorder.pushBlurMaskFilter(props);\n }\n\n composePathEffect(): void {\n this.recorder.composePathEffect();\n }\n\n composeColorFilter(): void {\n this.recorder.composeColorFilter();\n }\n\n composeImageFilter(): void {\n this.recorder.composeImageFilter();\n }\n\n saveCTM(props: AnimatedProps<CTMProps>): void {\n this.processAnimationValues(props);\n this.recorder.saveCTM(props);\n }\n\n restoreCTM(): void {\n this.recorder.restoreCTM();\n }\n\n drawPaint(): void {\n this.recorder.drawPaint();\n }\n\n saveLayer(): void {\n this.recorder.saveLayer();\n }\n\n saveBackdropFilter(): void {\n this.recorder.saveBackdropFilter();\n }\n\n drawBox(\n boxProps: AnimatedProps<BoxProps>,\n shadows: {\n props: BoxShadowProps;\n }[]\n ): void {\n this.processAnimationValues(boxProps);\n shadows.forEach((shadow) => {\n this.processAnimationValues(\n shadow.props as AnimatedProps<BoxShadowProps>\n );\n });\n this.recorder.drawBox(\n boxProps,\n // TODO: Fix this type BaseRecorder.drawBox()\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n shadows.map((s) => s.props)\n );\n }\n\n drawImage(props: AnimatedProps<ImageProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawImage(props);\n }\n\n drawCircle(props: AnimatedProps<CircleProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawCircle(props);\n }\n\n drawPoints(props: AnimatedProps<PointsProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawPoints(props);\n }\n\n drawPath(props: AnimatedProps<PathProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawPath(props);\n }\n\n drawRect(props: AnimatedProps<RectProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawRect(props);\n }\n\n drawRRect(props: AnimatedProps<RoundedRectProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawRRect(props);\n }\n\n drawOval(props: AnimatedProps<OvalProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawOval(props);\n }\n\n drawLine(props: AnimatedProps<LineProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawLine(props);\n }\n\n drawPatch(props: AnimatedProps<PatchProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawPatch(props);\n }\n\n drawVertices(props: AnimatedProps<VerticesProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawVertices(props);\n }\n\n drawDiffRect(props: AnimatedProps<DiffRectProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawDiffRect(props);\n }\n\n drawText(props: AnimatedProps<TextProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawText(props);\n }\n\n drawTextPath(props: AnimatedProps<TextPathProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawTextPath(props);\n }\n\n drawTextBlob(props: AnimatedProps<TextBlobProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawTextBlob(props);\n }\n\n drawGlyphs(props: AnimatedProps<GlyphsProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawGlyphs(props);\n }\n\n drawPicture(props: AnimatedProps<PictureProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawPicture(props);\n }\n\n drawImageSVG(props: AnimatedProps<ImageSVGProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawImageSVG(props);\n }\n\n drawParagraph(props: AnimatedProps<ParagraphProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawParagraph(props);\n }\n\n drawAtlas(props: AnimatedProps<AtlasProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawAtlas(props);\n }\n\n drawSkottie(props: AnimatedProps<SkottieProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawSkottie(props);\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -4,5 +4,5 @@ export interface PictureFactory {
|
|
|
4
4
|
* Returns an SkPicture which has been serialized previously to the given bytes.
|
|
5
5
|
* @param bytes
|
|
6
6
|
*/
|
|
7
|
-
MakePicture(bytes: Uint8Array | ArrayBuffer): SkPicture | null;
|
|
7
|
+
MakePicture(bytes: Uint8Array | ArrayBuffer | null): SkPicture | null;
|
|
8
8
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["PictureFactory.ts"],"sourcesContent":["import type { SkPicture } from \"./Picture\";\n\nexport interface PictureFactory {\n /**\n * Returns an SkPicture which has been serialized previously to the given bytes.\n * @param bytes\n */\n MakePicture(bytes: Uint8Array | ArrayBuffer): SkPicture | null;\n}\n"],"mappings":"","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["PictureFactory.ts"],"sourcesContent":["import type { SkPicture } from \"./Picture\";\n\nexport interface PictureFactory {\n /**\n * Returns an SkPicture which has been serialized previously to the given bytes.\n * @param bytes\n */\n MakePicture(bytes: Uint8Array | ArrayBuffer | null): SkPicture | null;\n}\n"],"mappings":"","ignoreList":[]}
|
|
@@ -48,6 +48,7 @@ export interface BaseRecorder {
|
|
|
48
48
|
drawAtlas(props: AnimatedProps<AtlasProps>): void;
|
|
49
49
|
}
|
|
50
50
|
export interface JsiRecorder extends BaseRecorder {
|
|
51
|
-
play():
|
|
51
|
+
play(picture: SkPicture): void;
|
|
52
52
|
applyUpdates(variables: SharedValue<unknown>[]): void;
|
|
53
|
+
reset(): void;
|
|
53
54
|
}
|