From ac3fb6aca38ecccf153d1811c6f04997ee4bbb3c Mon Sep 17 00:00:00 2001 From: William Candillon Date: Sat, 1 Feb 2025 17:45:03 +0100 Subject: [PATCH] =?UTF-8?q?fix(=F0=9F=96=BC=EF=B8=8F):=20remove=20uncessar?= =?UTF-8?q?y=20JSI=20calls?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/paper/ios/Podfile.lock | 6 +++--- packages/skia/cpp/api/recorder/JsiRecorder.h | 12 ++++++++---- packages/skia/src/skia/types/Recorder.ts | 3 ++- packages/skia/src/sksg/Container.ts | 7 +------ 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/apps/paper/ios/Podfile.lock b/apps/paper/ios/Podfile.lock index 0dbbb30b3a..04614dd926 100644 --- a/apps/paper/ios/Podfile.lock +++ b/apps/paper/ios/Podfile.lock @@ -1283,7 +1283,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - react-native-wgpu (0.1.20): + - react-native-wgpu (0.1.19): - DoubleConversion - glog - hermes-engine @@ -1957,9 +1957,9 @@ SPEC CHECKSUMS: React-Mapbuffer: 1c08607305558666fd16678b85ef135e455d5c96 React-microtasksnativemodule: 87b8de96f937faefece8afd2cb3a518321b2ef99 react-native-safe-area-context: ab8f4a3d8180913bd78ae75dd599c94cce3d5e9a - react-native-skia: abdd2ba5abed61445a25d9461b0a87bc08c50f64 + react-native-skia: 30bdfaf0c7d9c38a715f29f36102ba3e60ff3329 react-native-slider: 97ce0bd921f40de79cead9754546d5e4e7ba44f8 - react-native-wgpu: efaa8c7c3ae15b346d887d13cca2fe72ed5ea105 + react-native-wgpu: 8d0437a304318e0e3d6ccbfed2a39880f8eae4dd React-nativeconfig: 57781b79e11d5af7573e6f77cbf1143b71802a6d React-NativeModulesApple: 7ff2e2cfb2e5fa5bdedcecf28ce37e696c6ef1e1 React-perflogger: 8a360ccf603de6ddbe9ff8f54383146d26e6c936 diff --git a/packages/skia/cpp/api/recorder/JsiRecorder.h b/packages/skia/cpp/api/recorder/JsiRecorder.h index 64af675ee3..36b1a21753 100644 --- a/packages/skia/cpp/api/recorder/JsiRecorder.h +++ b/packages/skia/cpp/api/recorder/JsiRecorder.h @@ -50,11 +50,15 @@ class JsiRecorder : public JsiSkWrappingSharedPtrHostObject { } JSI_HOST_FUNCTION(play) { - auto jsiCanvas = - arguments[0].asObject(runtime).asHostObject(runtime); - DrawingCtx ctx(jsiCanvas->getCanvas()); + SkPictureRecorder pictureRecorder; + SkISize size = SkISize::Make(2'000'000, 2'000'000); + SkRect rect = SkRect::Make(size); + auto canvas = pictureRecorder.beginRecording(rect, nullptr); + DrawingCtx ctx(canvas); getObject()->play(&ctx); - return jsi::Value::undefined(); + auto picture = pictureRecorder.finishRecordingAsPicture(); + return jsi::Object::createFromHostObject( + runtime, std::make_shared(getContext(), picture)); } JSI_HOST_FUNCTION(applyUpdates) { diff --git a/packages/skia/src/skia/types/Recorder.ts b/packages/skia/src/skia/types/Recorder.ts index ab36db2af2..0d886500a8 100644 --- a/packages/skia/src/skia/types/Recorder.ts +++ b/packages/skia/src/skia/types/Recorder.ts @@ -30,6 +30,7 @@ import type { import type { AnimatedProps } from "../../renderer/processors/Animations/Animations"; import type { SkCanvas } from "./Canvas"; +import type { SkPicture } from "./Picture"; export interface BaseRecorder { saveGroup(): void; @@ -86,6 +87,6 @@ export interface BaseRecorder { } export interface JsiRecorder extends BaseRecorder { - play(canvas: SkCanvas): void; + play(): SkPicture; applyUpdates(variables: SharedValue[]): void; } diff --git a/packages/skia/src/sksg/Container.ts b/packages/skia/src/sksg/Container.ts index 11acdd0893..ff13ab3435 100644 --- a/packages/skia/src/sksg/Container.ts +++ b/packages/skia/src/sksg/Container.ts @@ -36,17 +36,12 @@ const nativeDrawOnscreen = ( ) => { "worklet"; - const rec = Skia.PictureRecorder(); - const canvas = rec.beginRecording(); //const start = performance.now(); - recorder.play(canvas); - const picture = rec.finishRecordingAsPicture(); + const picture = recorder.play(); //const end = performance.now(); //console.log("Recording time: ", end - start); SkiaViewApi.setJsiProperty(nativeId, "picture", picture); - rec.dispose(); - picture.dispose(); }; export abstract class Container {