Skip to content

Commit

Permalink
[Mono.Android] Use C#9 Function Pointer backend for JNI
Browse files Browse the repository at this point in the history
Context: dotnet/java-interop@312fbf4

As per dotnet/java-interop@312fbf43:

> With a Release build, the Average Invocation time for
> JIFunctionPointersTiming takes 97% of the time as JIPinvokeTiming,
> i.e. is 3% faster.

Let's see if that's true *on Android*: use the C#9 Function Pointer
backend within `Java.Interop.dll`.
  • Loading branch information
jonpryor committed Jun 29, 2023
1 parent efa14e2 commit 9e305b5
Show file tree
Hide file tree
Showing 8 changed files with 4 additions and 2,254 deletions.
2 changes: 1 addition & 1 deletion src/Mono.Android/Mono.Android.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@
</PropertyGroup>

<ItemGroup>
<ProjectReference Include="..\..\external\Java.Interop\src\Java.Interop\Java.Interop.csproj" />
<ProjectReference Include="..\..\external\Java.Interop\src\Java.Interop\Java.Interop.csproj" AdditionalProperties="Standalone=True" />
<EmbeddedResource Include="ILLink/ILLink.LinkAttributes.xml">
<LogicalName>ILLink.LinkAttributes.xml</LogicalName>
</EmbeddedResource>
Expand Down
2 changes: 0 additions & 2 deletions src/monodroid/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -544,7 +544,6 @@ if(ANDROID AND ENABLE_NET)
list(APPEND XAMARIN_MONODROID_SOURCES
${SOURCES_DIR}/monovm-properties.cc
${SOURCES_DIR}/pinvoke-override-api.cc
${SOURCES_DIR}/java_interop_api.c
${JAVA_INTEROP_SRC_PATH}/java-interop-util.cc
)
else()
Expand All @@ -553,7 +552,6 @@ else()
)

set(XAMARIN_INTERNAL_API_SOURCES
${SOURCES_DIR}/java_interop_api.c
${SOURCES_DIR}/internal-pinvoke-api.cc
${JAVA_INTEROP_SRC_PATH}/java-interop-util.cc
)
Expand Down
188 changes: 0 additions & 188 deletions src/monodroid/jni/generate-pinvoke-tables.cc
Original file line number Diff line number Diff line change
Expand Up @@ -34,194 +34,6 @@ using namespace xamarin::android;
const std::vector<std::string> internal_pinvoke_names = {
"create_public_directory",
"java_interop_free",
"java_interop_jnienv_alloc_object",
"java_interop_jnienv_call_boolean_method",
"java_interop_jnienv_call_boolean_method_a",
"java_interop_jnienv_call_byte_method",
"java_interop_jnienv_call_byte_method_a",
"java_interop_jnienv_call_char_method",
"java_interop_jnienv_call_char_method_a",
"java_interop_jnienv_call_double_method",
"java_interop_jnienv_call_double_method_a",
"java_interop_jnienv_call_float_method",
"java_interop_jnienv_call_float_method_a",
"java_interop_jnienv_call_int_method",
"java_interop_jnienv_call_int_method_a",
"java_interop_jnienv_call_long_method",
"java_interop_jnienv_call_long_method_a",
"java_interop_jnienv_call_nonvirtual_boolean_method",
"java_interop_jnienv_call_nonvirtual_boolean_method_a",
"java_interop_jnienv_call_nonvirtual_byte_method",
"java_interop_jnienv_call_nonvirtual_byte_method_a",
"java_interop_jnienv_call_nonvirtual_char_method",
"java_interop_jnienv_call_nonvirtual_char_method_a",
"java_interop_jnienv_call_nonvirtual_double_method",
"java_interop_jnienv_call_nonvirtual_double_method_a",
"java_interop_jnienv_call_nonvirtual_float_method",
"java_interop_jnienv_call_nonvirtual_float_method_a",
"java_interop_jnienv_call_nonvirtual_int_method",
"java_interop_jnienv_call_nonvirtual_int_method_a",
"java_interop_jnienv_call_nonvirtual_long_method",
"java_interop_jnienv_call_nonvirtual_long_method_a",
"java_interop_jnienv_call_nonvirtual_object_method",
"java_interop_jnienv_call_nonvirtual_object_method_a",
"java_interop_jnienv_call_nonvirtual_short_method",
"java_interop_jnienv_call_nonvirtual_short_method_a",
"java_interop_jnienv_call_nonvirtual_void_method",
"java_interop_jnienv_call_nonvirtual_void_method_a",
"java_interop_jnienv_call_object_method",
"java_interop_jnienv_call_object_method_a",
"java_interop_jnienv_call_short_method",
"java_interop_jnienv_call_short_method_a",
"java_interop_jnienv_call_static_boolean_method",
"java_interop_jnienv_call_static_boolean_method_a",
"java_interop_jnienv_call_static_byte_method",
"java_interop_jnienv_call_static_byte_method_a",
"java_interop_jnienv_call_static_char_method",
"java_interop_jnienv_call_static_char_method_a",
"java_interop_jnienv_call_static_double_method",
"java_interop_jnienv_call_static_double_method_a",
"java_interop_jnienv_call_static_float_method",
"java_interop_jnienv_call_static_float_method_a",
"java_interop_jnienv_call_static_int_method",
"java_interop_jnienv_call_static_int_method_a",
"java_interop_jnienv_call_static_long_method",
"java_interop_jnienv_call_static_long_method_a",
"java_interop_jnienv_call_static_object_method",
"java_interop_jnienv_call_static_object_method_a",
"java_interop_jnienv_call_static_short_method",
"java_interop_jnienv_call_static_short_method_a",
"java_interop_jnienv_call_static_void_method",
"java_interop_jnienv_call_static_void_method_a",
"java_interop_jnienv_call_void_method",
"java_interop_jnienv_call_void_method_a",
"java_interop_jnienv_define_class",
"java_interop_jnienv_delete_global_ref",
"java_interop_jnienv_delete_local_ref",
"java_interop_jnienv_delete_weak_global_ref",
"java_interop_jnienv_ensure_local_capacity",
"java_interop_jnienv_exception_check",
"java_interop_jnienv_exception_clear",
"java_interop_jnienv_exception_describe",
"java_interop_jnienv_exception_occurred",
"java_interop_jnienv_fatal_error",
"java_interop_jnienv_find_class",
"java_interop_jnienv_get_array_length",
"java_interop_jnienv_get_boolean_array_elements",
"java_interop_jnienv_get_boolean_array_region",
"java_interop_jnienv_get_boolean_field",
"java_interop_jnienv_get_byte_array_elements",
"java_interop_jnienv_get_byte_array_region",
"java_interop_jnienv_get_byte_field",
"java_interop_jnienv_get_char_array_elements",
"java_interop_jnienv_get_char_array_region",
"java_interop_jnienv_get_char_field",
"java_interop_jnienv_get_direct_buffer_address",
"java_interop_jnienv_get_direct_buffer_capacity",
"java_interop_jnienv_get_double_array_elements",
"java_interop_jnienv_get_double_array_region",
"java_interop_jnienv_get_double_field",
"java_interop_jnienv_get_field_id",
"java_interop_jnienv_get_float_array_elements",
"java_interop_jnienv_get_float_array_region",
"java_interop_jnienv_get_float_field",
"java_interop_jnienv_get_int_array_elements",
"java_interop_jnienv_get_int_array_region",
"java_interop_jnienv_get_int_field",
"java_interop_jnienv_get_java_vm",
"java_interop_jnienv_get_long_array_elements",
"java_interop_jnienv_get_long_array_region",
"java_interop_jnienv_get_long_field",
"java_interop_jnienv_get_method_id",
"java_interop_jnienv_get_object_array_element",
"java_interop_jnienv_get_object_class",
"java_interop_jnienv_get_object_field",
"java_interop_jnienv_get_object_ref_type",
"java_interop_jnienv_get_primitive_array_critical",
"java_interop_jnienv_get_short_array_elements",
"java_interop_jnienv_get_short_array_region",
"java_interop_jnienv_get_short_field",
"java_interop_jnienv_get_static_boolean_field",
"java_interop_jnienv_get_static_byte_field",
"java_interop_jnienv_get_static_char_field",
"java_interop_jnienv_get_static_double_field",
"java_interop_jnienv_get_static_field_id",
"java_interop_jnienv_get_static_float_field",
"java_interop_jnienv_get_static_int_field",
"java_interop_jnienv_get_static_long_field",
"java_interop_jnienv_get_static_method_id",
"java_interop_jnienv_get_static_object_field",
"java_interop_jnienv_get_static_short_field",
"java_interop_jnienv_get_string_chars",
"java_interop_jnienv_get_string_length",
"java_interop_jnienv_get_superclass",
"java_interop_jnienv_get_version",
"java_interop_jnienv_is_assignable_from",
"java_interop_jnienv_is_instance_of",
"java_interop_jnienv_is_same_object",
"java_interop_jnienv_monitor_enter",
"java_interop_jnienv_monitor_exit",
"java_interop_jnienv_new_boolean_array",
"java_interop_jnienv_new_byte_array",
"java_interop_jnienv_new_char_array",
"java_interop_jnienv_new_direct_byte_buffer",
"java_interop_jnienv_new_double_array",
"java_interop_jnienv_new_float_array",
"java_interop_jnienv_new_global_ref",
"java_interop_jnienv_new_int_array",
"java_interop_jnienv_new_local_ref",
"java_interop_jnienv_new_long_array",
"java_interop_jnienv_new_object",
"java_interop_jnienv_new_object_a",
"java_interop_jnienv_new_object_array",
"java_interop_jnienv_new_short_array",
"java_interop_jnienv_new_string",
"java_interop_jnienv_new_weak_global_ref",
"java_interop_jnienv_pop_local_frame",
"java_interop_jnienv_push_local_frame",
"java_interop_jnienv_register_natives",
"java_interop_jnienv_release_boolean_array_elements",
"java_interop_jnienv_release_byte_array_elements",
"java_interop_jnienv_release_char_array_elements",
"java_interop_jnienv_release_double_array_elements",
"java_interop_jnienv_release_float_array_elements",
"java_interop_jnienv_release_int_array_elements",
"java_interop_jnienv_release_long_array_elements",
"java_interop_jnienv_release_primitive_array_critical",
"java_interop_jnienv_release_short_array_elements",
"java_interop_jnienv_release_string_chars",
"java_interop_jnienv_set_boolean_array_region",
"java_interop_jnienv_set_boolean_field",
"java_interop_jnienv_set_byte_array_region",
"java_interop_jnienv_set_byte_field",
"java_interop_jnienv_set_char_array_region",
"java_interop_jnienv_set_char_field",
"java_interop_jnienv_set_double_array_region",
"java_interop_jnienv_set_double_field",
"java_interop_jnienv_set_float_array_region",
"java_interop_jnienv_set_float_field",
"java_interop_jnienv_set_int_array_region",
"java_interop_jnienv_set_int_field",
"java_interop_jnienv_set_long_array_region",
"java_interop_jnienv_set_long_field",
"java_interop_jnienv_set_object_array_element",
"java_interop_jnienv_set_object_field",
"java_interop_jnienv_set_short_array_region",
"java_interop_jnienv_set_short_field",
"java_interop_jnienv_set_static_boolean_field",
"java_interop_jnienv_set_static_byte_field",
"java_interop_jnienv_set_static_char_field",
"java_interop_jnienv_set_static_double_field",
"java_interop_jnienv_set_static_float_field",
"java_interop_jnienv_set_static_int_field",
"java_interop_jnienv_set_static_long_field",
"java_interop_jnienv_set_static_object_field",
"java_interop_jnienv_set_static_short_field",
"java_interop_jnienv_throw",
"java_interop_jnienv_throw_new",
"java_interop_jnienv_to_reflected_field",
"java_interop_jnienv_to_reflected_method",
"java_interop_jnienv_unregister_natives",
"java_interop_strdup",
"monodroid_clear_gdb_wait",
"_monodroid_counters_dump",
Expand Down
Loading

0 comments on commit 9e305b5

Please sign in to comment.