26 ffi_native_callbacks_[
name] = callback_ptr;
29Dart_NativeFunction TestDartNativeResolver::ResolveCallback(
30 const std::string&
name)
const {
31 auto found = native_callbacks_.find(
name);
32 if (found == native_callbacks_.end()) {
39void* TestDartNativeResolver::ResolveFfiCallback(
40 const std::string&
name)
const {
41 auto found = ffi_native_callbacks_.find(
name);
42 if (found == ffi_native_callbacks_.end()) {
49static std::map<Dart_IsolateGroup, std::weak_ptr<TestDartNativeResolver>>
52Dart_NativeFunction TestDartNativeResolver::DartNativeEntryResolverCallback(
53 Dart_Handle dart_name,
55 bool* auto_setup_scope) {
61 FML_LOG(ERROR) <<
"Could not resolve native method for :" <<
name;
65 if (
auto resolver = found->second.lock()) {
66 return resolver->ResolveCallback(
name);
71 FML_LOG(ERROR) <<
"Could not resolve native method for :" <<
name;
76 Dart_NativeFunction function) {
77 return reinterpret_cast<const uint8_t*
>(
"¯\\_(ツ)_/¯");
80void* TestDartNativeResolver::FfiNativeResolver(
const char*
name,
85 FML_LOG(ERROR) <<
"Could not resolve native method for :" <<
name;
89 if (
auto resolver = found->second.lock()) {
90 return resolver->ResolveFfiCallback(
name);
95 FML_LOG(ERROR) <<
"Could not resolve native method for :" <<
name;
100 FML_CHECK(!Dart_IsError(Dart_RootLibrary()));
101 auto result = Dart_SetNativeResolver(Dart_RootLibrary(),
102 DartNativeEntryResolverCallback,
105 <<
"Could not set native resolver in test.";
107 result = Dart_SetFfiNativeResolver(Dart_RootLibrary(), &FfiNativeResolver);
109 <<
"Could not set FFI native resolver in test.";
114 std::vector<Dart_IsolateGroup> isolates_with_dead_resolvers;
116 if (!entry.second.lock()) {
117 isolates_with_dead_resolvers.push_back(entry.first);
121 for (
const auto& dead_isolate : isolates_with_dead_resolvers) {
void AddFfiNativeCallback(const std::string &name, void *callback_ptr)
void SetNativeResolverForIsolate()
void AddNativeCallback(const std::string &name, Dart_NativeFunction callback)
~TestDartNativeResolver()
FlutterDesktopBinaryReply callback
#define FML_LOG(severity)
#define FML_CHECK(condition)
static std::mutex gIsolateResolversMutex
static std::map< Dart_IsolateGroup, std::weak_ptr< TestDartNativeResolver > > gIsolateResolvers
static const uint8_t * DartNativeEntrySymbolCallback(Dart_NativeFunction function)
DEF_SWITCHES_START aot vmservice shared library name
bool CheckAndHandleError(Dart_Handle handle)
std::string StdStringFromDart(Dart_Handle handle)