Skip to content

Commit 180dd52

Browse files
authored
[Mono.Android] Use C#9 Function Pointer backend for JNI (#8234)
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. Additionally, using C#9 Function Pointers means we can get rid of all of the `java_interop_jnienv_*()` functions, which shrinks `libmonodroid.so` by ~55KB for each ABI. This also means that `Java.Interop.dll` can be used as-is on Windows and macOS, providing a way to get a usable `Java.Interop.dll` without needing to build the xamarin/Java.Interop repo. (Though it's unlikely to be *that* useful without a `Java.Runtime.Environment.dll` to actually bootstrap things…)
1 parent ae4f229 commit 180dd52

File tree

10 files changed

+69
-2318
lines changed

10 files changed

+69
-2318
lines changed

external/Java.Interop.override.props

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
<PropertyGroup>
44
<XamarinAndroidToolsDirectory>$(MSBuildThisFileDirectory)xamarin-android-tools</XamarinAndroidToolsDirectory>
5+
<Standalone>True</Standalone>
56
</PropertyGroup>
67

78
</Project>

src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Base/BuildReleaseArm64SimpleDotNet.apkdesc

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -8,58 +8,58 @@
88
"Size": 1024
99
},
1010
"assemblies/Java.Interop.dll": {
11-
"Size": 58895
11+
"Size": 61886
1212
},
1313
"assemblies/Mono.Android.dll": {
14-
"Size": 88112
14+
"Size": 88044
1515
},
1616
"assemblies/Mono.Android.Runtime.dll": {
17-
"Size": 5575
17+
"Size": 5509
1818
},
1919
"assemblies/rc.bin": {
20-
"Size": 1302
20+
"Size": 1395
2121
},
2222
"assemblies/System.Console.dll": {
23-
"Size": 6418
23+
"Size": 6400
2424
},
2525
"assemblies/System.Linq.dll": {
26-
"Size": 9212
26+
"Size": 9199
2727
},
2828
"assemblies/System.Private.CoreLib.dll": {
29-
"Size": 548643
29+
"Size": 550507
3030
},
3131
"assemblies/System.Runtime.dll": {
32-
"Size": 2633
32+
"Size": 2621
3333
},
3434
"assemblies/System.Runtime.InteropServices.dll": {
35-
"Size": 3733
35+
"Size": 3858
3636
},
3737
"assemblies/UnnamedProject.dll": {
38-
"Size": 2931
38+
"Size": 2933
3939
},
4040
"classes.dex": {
4141
"Size": 377064
4242
},
4343
"lib/arm64-v8a/libmono-component-marshal-ilgen.so": {
44-
"Size": 97096
44+
"Size": 97080
4545
},
4646
"lib/arm64-v8a/libmonodroid.so": {
47-
"Size": 381088
47+
"Size": 325320
4848
},
4949
"lib/arm64-v8a/libmonosgen-2.0.so": {
50-
"Size": 3184096
50+
"Size": 3189360
5151
},
5252
"lib/arm64-v8a/libSystem.IO.Compression.Native.so": {
5353
"Size": 723560
5454
},
5555
"lib/arm64-v8a/libSystem.Native.so": {
56-
"Size": 93856
56+
"Size": 93920
5757
},
5858
"lib/arm64-v8a/libSystem.Security.Cryptography.Native.Android.so": {
5959
"Size": 154904
6060
},
6161
"lib/arm64-v8a/libxamarin-app.so": {
62-
"Size": 11608
62+
"Size": 11576
6363
},
6464
"META-INF/BNDLTOOL.RSA": {
6565
"Size": 1213
@@ -95,5 +95,5 @@
9595
"Size": 1904
9696
}
9797
},
98-
"PackageSize": 2787658
98+
"PackageSize": 2783562
9999
}

src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Base/BuildReleaseArm64XFormsDotNet.apkdesc

Lines changed: 49 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -5,136 +5,136 @@
55
"Size": 3572
66
},
77
"assemblies/_Microsoft.Android.Resource.Designer.dll": {
8-
"Size": 2102
8+
"Size": 2101
99
},
1010
"assemblies/FormsViewGroup.dll": {
1111
"Size": 7112
1212
},
1313
"assemblies/Java.Interop.dll": {
14-
"Size": 66808
14+
"Size": 70026
1515
},
1616
"assemblies/Mono.Android.dll": {
17-
"Size": 469914
17+
"Size": 469836
1818
},
1919
"assemblies/Mono.Android.Runtime.dll": {
20-
"Size": 5575
20+
"Size": 5509
2121
},
2222
"assemblies/mscorlib.dll": {
23-
"Size": 3870
23+
"Size": 3859
2424
},
2525
"assemblies/netstandard.dll": {
26-
"Size": 5585
26+
"Size": 5575
2727
},
2828
"assemblies/rc.bin": {
29-
"Size": 1302
29+
"Size": 1395
3030
},
3131
"assemblies/System.Collections.Concurrent.dll": {
32-
"Size": 11524
32+
"Size": 11508
3333
},
3434
"assemblies/System.Collections.dll": {
35-
"Size": 15415
35+
"Size": 15408
3636
},
3737
"assemblies/System.Collections.NonGeneric.dll": {
38-
"Size": 7461
38+
"Size": 7451
3939
},
4040
"assemblies/System.ComponentModel.dll": {
41-
"Size": 1946
41+
"Size": 1935
4242
},
4343
"assemblies/System.ComponentModel.Primitives.dll": {
44-
"Size": 2560
44+
"Size": 2549
4545
},
4646
"assemblies/System.ComponentModel.TypeConverter.dll": {
47-
"Size": 6044
47+
"Size": 6031
4848
},
4949
"assemblies/System.Console.dll": {
50-
"Size": 6588
50+
"Size": 6572
5151
},
5252
"assemblies/System.Core.dll": {
53-
"Size": 1996
53+
"Size": 1984
5454
},
5555
"assemblies/System.Diagnostics.DiagnosticSource.dll": {
56-
"Size": 12529
56+
"Size": 12520
5757
},
5858
"assemblies/System.Diagnostics.TraceSource.dll": {
59-
"Size": 6562
59+
"Size": 6548
6060
},
6161
"assemblies/System.dll": {
62-
"Size": 2350
62+
"Size": 2341
6363
},
6464
"assemblies/System.Drawing.dll": {
65-
"Size": 1944
65+
"Size": 1934
6666
},
6767
"assemblies/System.Drawing.Primitives.dll": {
68-
"Size": 11987
68+
"Size": 11971
6969
},
7070
"assemblies/System.IO.Compression.Brotli.dll": {
71-
"Size": 11196
71+
"Size": 11188
7272
},
7373
"assemblies/System.IO.Compression.dll": {
74-
"Size": 15877
74+
"Size": 15864
7575
},
7676
"assemblies/System.IO.IsolatedStorage.dll": {
77-
"Size": 9887
77+
"Size": 9869
7878
},
7979
"assemblies/System.Linq.dll": {
80-
"Size": 19570
80+
"Size": 19560
8181
},
8282
"assemblies/System.Linq.Expressions.dll": {
83-
"Size": 164694
83+
"Size": 164682
8484
},
8585
"assemblies/System.Net.Http.dll": {
86-
"Size": 69096
86+
"Size": 69544
8787
},
8888
"assemblies/System.Net.Primitives.dll": {
89-
"Size": 22443
89+
"Size": 22431
9090
},
9191
"assemblies/System.Net.Requests.dll": {
92-
"Size": 3609
92+
"Size": 3599
9393
},
9494
"assemblies/System.ObjectModel.dll": {
95-
"Size": 8124
95+
"Size": 8113
9696
},
9797
"assemblies/System.Private.CoreLib.dll": {
98-
"Size": 843541
98+
"Size": 845111
9999
},
100100
"assemblies/System.Private.DataContractSerialization.dll": {
101-
"Size": 192912
101+
"Size": 192906
102102
},
103103
"assemblies/System.Private.Uri.dll": {
104-
"Size": 43487
104+
"Size": 43477
105105
},
106106
"assemblies/System.Private.Xml.dll": {
107-
"Size": 215780
107+
"Size": 215983
108108
},
109109
"assemblies/System.Private.Xml.Linq.dll": {
110-
"Size": 16647
110+
"Size": 16636
111111
},
112112
"assemblies/System.Runtime.dll": {
113-
"Size": 2759
113+
"Size": 2748
114114
},
115115
"assemblies/System.Runtime.InteropServices.dll": {
116-
"Size": 3733
116+
"Size": 3858
117117
},
118118
"assemblies/System.Runtime.Serialization.dll": {
119-
"Size": 1872
119+
"Size": 1861
120120
},
121121
"assemblies/System.Runtime.Serialization.Formatters.dll": {
122-
"Size": 2490
122+
"Size": 2480
123123
},
124124
"assemblies/System.Runtime.Serialization.Primitives.dll": {
125-
"Size": 3769
125+
"Size": 3758
126126
},
127127
"assemblies/System.Security.Cryptography.dll": {
128-
"Size": 8111
128+
"Size": 8099
129129
},
130130
"assemblies/System.Text.RegularExpressions.dll": {
131-
"Size": 158602
131+
"Size": 158865
132132
},
133133
"assemblies/System.Xml.dll": {
134-
"Size": 1765
134+
"Size": 1752
135135
},
136136
"assemblies/System.Xml.Linq.dll": {
137-
"Size": 1782
137+
"Size": 1771
138138
},
139139
"assemblies/UnnamedProject.dll": {
140140
"Size": 4987
@@ -209,25 +209,25 @@
209209
"Size": 3514720
210210
},
211211
"lib/arm64-v8a/libmono-component-marshal-ilgen.so": {
212-
"Size": 97096
212+
"Size": 97080
213213
},
214214
"lib/arm64-v8a/libmonodroid.so": {
215-
"Size": 381088
215+
"Size": 325320
216216
},
217217
"lib/arm64-v8a/libmonosgen-2.0.so": {
218-
"Size": 3184096
218+
"Size": 3189360
219219
},
220220
"lib/arm64-v8a/libSystem.IO.Compression.Native.so": {
221221
"Size": 723560
222222
},
223223
"lib/arm64-v8a/libSystem.Native.so": {
224-
"Size": 93856
224+
"Size": 93920
225225
},
226226
"lib/arm64-v8a/libSystem.Security.Cryptography.Native.Android.so": {
227227
"Size": 154904
228228
},
229229
"lib/arm64-v8a/libxamarin-app.so": {
230-
"Size": 102800
230+
"Size": 102752
231231
},
232232
"META-INF/android.support.design_material.version": {
233233
"Size": 12
@@ -1916,5 +1916,5 @@
19161916
"Size": 325240
19171917
}
19181918
},
1919-
"PackageSize": 7982094
1919+
"PackageSize": 7977998
19201920
}

src/monodroid/CMakeLists.txt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -544,7 +544,6 @@ if(ANDROID AND ENABLE_NET)
544544
list(APPEND XAMARIN_MONODROID_SOURCES
545545
${SOURCES_DIR}/monovm-properties.cc
546546
${SOURCES_DIR}/pinvoke-override-api.cc
547-
${SOURCES_DIR}/java_interop_api.c
548547
${JAVA_INTEROP_SRC_PATH}/java-interop-util.cc
549548
)
550549
else()
@@ -553,7 +552,6 @@ else()
553552
)
554553

555554
set(XAMARIN_INTERNAL_API_SOURCES
556-
${SOURCES_DIR}/java_interop_api.c
557555
${SOURCES_DIR}/internal-pinvoke-api.cc
558556
${JAVA_INTEROP_SRC_PATH}/java-interop-util.cc
559557
)

0 commit comments

Comments
 (0)