Skip to content

Commit a9cd217

Browse files
committed
fix(ffi): decode runtime objc signatures in direct backends
1 parent bd41da4 commit a9cd217

13 files changed

Lines changed: 741 additions & 75 deletions

File tree

NativeScript/ffi/hermes/jsi/NativeApiJsi.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ struct NativeApiJsiConfig {
2424
std::function<void(std::function<void()>)> nativeInvocationInvoker = nullptr;
2525
std::function<void(std::function<void()>)> nativeCallbackInvoker = nullptr;
2626
std::function<void(std::function<void()>)> jsThreadCallbackInvoker = nullptr;
27+
bool invokeCallbacksOnNativeCallerThread = false;
2728
bool installGlobalSymbols = false;
2829
};
2930

NativeScript/ffi/hermes/jsi/NativeApiJsiReactNative.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ inline NativeApiJsiConfig MakeReactNativeNativeApiJsiConfig(
6363
config.metadataPtr = metadataPtr;
6464
config.globalName = globalName;
6565
config.installGlobalSymbols = true;
66+
config.invokeCallbacksOnNativeCallerThread = true;
6667
config.scheduler = std::make_shared<ReactNativeCallInvokerScheduler>(
6768
std::move(jsInvoker), std::move(uiInvoker));
6869
return config;

NativeScript/ffi/shared/direct/NativeApiDirect.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ struct NativeApiDirectConfig {
2121
std::function<void(std::function<void()>)> nativeInvocationInvoker = nullptr;
2222
std::function<void(std::function<void()>)> nativeCallbackInvoker = nullptr;
2323
std::function<void(std::function<void()>)> jsThreadCallbackInvoker = nullptr;
24+
bool invokeCallbacksOnNativeCallerThread = false;
2425
bool installGlobalSymbols = false;
2526
};
2627

NativeScript/ffi/shared/jsi/NativeApiJsiBridge.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -430,7 +430,9 @@ class NativeApiJsiBridge {
430430
scheduler_(config.scheduler),
431431
nativeInvocationInvoker_(config.nativeInvocationInvoker),
432432
nativeCallbackInvoker_(config.nativeCallbackInvoker),
433-
jsThreadCallbackInvoker_(config.jsThreadCallbackInvoker) {
433+
jsThreadCallbackInvoker_(config.jsThreadCallbackInvoker),
434+
invokeCallbacksOnNativeCallerThread_(
435+
config.invokeCallbacksOnNativeCallerThread) {
434436
selfDl_ = dlopen(nullptr, RTLD_NOW);
435437
buildSymbolIndexes();
436438
}
@@ -696,6 +698,9 @@ class NativeApiJsiBridge {
696698
const {
697699
return jsThreadCallbackInvoker_;
698700
}
701+
bool invokeCallbacksOnNativeCallerThread() const {
702+
return invokeCallbacksOnNativeCallerThread_;
703+
}
699704
std::thread::id jsThreadId() const { return jsThreadId_; }
700705

701706
void retainJsiLifetime(std::shared_ptr<void> lifetime) {
@@ -1530,6 +1535,7 @@ class NativeApiJsiBridge {
15301535
std::function<void(std::function<void()>)> nativeInvocationInvoker_;
15311536
std::function<void(std::function<void()>)> nativeCallbackInvoker_;
15321537
std::function<void(std::function<void()>)> jsThreadCallbackInvoker_;
1538+
bool invokeCallbacksOnNativeCallerThread_ = false;
15331539
mutable std::unordered_map<MDSectionOffset, std::vector<NativeApiMember>>
15341540
membersByClassOffset_;
15351541
mutable std::unordered_map<MDSectionOffset, std::vector<NativeApiMember>>

0 commit comments

Comments
 (0)