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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy