mirror of
https://github.com/dart-lang/sdk
synced 2024-10-06 14:39:38 +00:00
da39a4abff
https://dart-review.googlesource.com/c/sdk/+/145591 introduced a try catch into FFI calls to call ExitHandleScope on the exception path. However, we only need this try-catch if we actually need to exit the handle scope on the exception path, which is not the case if we have no handles in the signature. So this CL makes the try catch optional. This speeds up ffi calls without handles (tested on JIT x64): FfiCall.Uint8x01(RunTime): 206.4801280066068 us. -> FfiCall.Uint8x01(RunTime): 203.7240782236708 us. Also adds a test that checks that an exception can still be propagated with Dart_PropagateError from native code when the FFI trampoline has no try catch. Change-Id: I9fac7078381c60fb8055b64fff29ea364fbc948f Cq-Include-Trybots: luci.dart.try:vm-ffi-android-debug-arm-try,vm-ffi-android-debug-arm64-try,app-kernel-linux-debug-x64-try,vm-kernel-linux-debug-ia32-try,vm-kernel-win-debug-x64-try,vm-kernel-win-debug-ia32-try,vm-kernel-precomp-linux-debug-x64-try,vm-dartkb-linux-release-x64-abi-try,vm-kernel-precomp-android-release-arm64-try,vm-kernel-asan-linux-release-x64-try,vm-kernel-msan-linux-release-x64-try,vm-kernel-precomp-msan-linux-release-x64-try,vm-kernel-linux-release-simarm-try,vm-kernel-linux-release-simarm64-try,vm-kernel-precomp-android-release-arm_x64-try,vm-kernel-precomp-obfuscate-linux-release-x64-try,dart-sdk-linux-try,analyzer-analysis-server-linux-try,analyzer-linux-release-try,front-end-linux-release-x64-try,vm-kernel-precomp-win-release-x64-try,vm-kernel-mac-debug-x64-try,vm-precomp-ffi-qemu-linux-release-arm-try,vm-kernel-nnbd-linux-debug-x64-try,analyzer-nnbd-linux-release-try,front-end-nnbd-linux-release-x64-try Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/151239 Commit-Queue: Daco Harkes <dacoharkes@google.com> Reviewed-by: Martin Kustermann <kustermann@google.com> Reviewed-by: Alexander Markov <alexmarkov@google.com> |
||
---|---|---|
.. | ||
aliasing_test.dart | ||
analysis_options.yaml | ||
callback_tests_utils.dart | ||
coordinate.dart | ||
coordinate_bare.dart | ||
data_not_asan_test.dart | ||
data_test.dart | ||
dylib_utils.dart | ||
extension_methods_test.dart | ||
external_typed_data_test.dart | ||
ffi.status | ||
ffi_test_helpers.dart | ||
function_callbacks_many_test.dart | ||
function_callbacks_test.dart | ||
function_callbacks_very_many_test.dart | ||
function_structs_test.dart | ||
function_test.dart | ||
function_very_many_test.dart | ||
hardfp_test.dart | ||
negative_function_test.dart | ||
prepare_flutter_bundle.dart | ||
regress_37254_test.dart | ||
regress_39044_test.dart | ||
regress_39063_test.dart | ||
regress_39885_test.dart | ||
regress_40537_test.dart | ||
sizeof_test.dart | ||
snapshot_test.dart | ||
stacktrace_regress_37910_test.dart | ||
structs_test.dart | ||
variance_function_test.dart | ||
very_large_struct.dart | ||
vmspecific_dynamic_library_test.dart | ||
vmspecific_enable_ffi_test.dart | ||
vmspecific_function_callbacks_exit_test.dart | ||
vmspecific_function_callbacks_negative_test.dart | ||
vmspecific_function_callbacks_test.dart | ||
vmspecific_function_gc_test.dart | ||
vmspecific_function_test.dart | ||
vmspecific_handle_dynamically_linked_test.dart | ||
vmspecific_handle_test.dart | ||
vmspecific_highmem_32bit_test.dart | ||
vmspecific_object_gc_test.dart | ||
vmspecific_regress_37100_test.dart | ||
vmspecific_regress_37511_callbacks_test.dart | ||
vmspecific_regress_37511_test.dart | ||
vmspecific_regress_37780_test.dart | ||
vmspecific_regress_38993_test.dart | ||
vmspecific_send_port_id_test.dart | ||
vmspecific_static_checks_test.dart | ||
vmspecific_variance_function_checks_test.dart |