invokeBindingMethodFromNativeImpl function
void
invokeBindingMethodFromNativeImpl(
- int contextId,
- Pointer<
NativeBindingObject> nativeBindingObject, - Pointer<
NativeValue> returnValue, - Pointer<
NativeValue> nativeMethod, - int argc,
- Pointer<
NativeValue> argv,
Implementation
void invokeBindingMethodFromNativeImpl(int contextId, Pointer<NativeBindingObject> nativeBindingObject,
Pointer<NativeValue> returnValue, Pointer<NativeValue> nativeMethod, int argc, Pointer<NativeValue> argv) {
MercuryController controller = MercuryController.getControllerOfJSContextId(contextId)!;
dynamic method = fromNativeValue(controller.context, nativeMethod);
List<dynamic> values = List.generate(argc, (i) {
Pointer<NativeValue> nativeValue = argv.elementAt(i);
return fromNativeValue(controller.context, nativeValue);
});
BindingObject bindingObject = controller.context.getBindingObject(nativeBindingObject);
var result = null;
try {
// Method is binding call method operations from internal.
if (method is int) {
// Get and setter ops
result = bindingCallMethodDispatchTable[method](bindingObject, values);
} else {
BindingObject bindingObject = controller.context.getBindingObject(nativeBindingObject);
// invokeBindingMethod directly
Stopwatch? stopwatch;
if (isEnabledLog) {
stopwatch = Stopwatch()..start();
}
result = bindingObject._invokeBindingMethodSync(method, values);
if (isEnabledLog) {
print('$bindingObject invokeBindingMethod method: $method args: $values result: $result time: ${stopwatch!.elapsedMicroseconds}us');
}
}
} catch (e, stack) {
print('$e\n$stack');
} finally {
toNativeValue(returnValue, result, bindingObject);
}
}