Skip to content

Conversation

@jonathanpeppers
Copy link
Member

@jonathanpeppers jonathanpeppers commented Sep 7, 2018

Fixes: http://work.devdiv.io/667174

Context: dotnet/java-interop@893562c
Context: dotnet/java-interop@659711c
Context: dotnet/java-interop@b873e81...9b390bc

Bumped to java.interop/d15-9/9b390bc

Build lib\xamarin.android\xbuild-frameworks\MonoAndroid\v1.0\Java.Interop.dll
as a MonoAndroid-profile assembly instead of as a PCL assembly.
This decreases the assemblies referenced in a "Hello World"
Xamarin.Android project dramatically; this:

Adding assembly reference for Java.Interop, Version=0.1.0.0, Culture=neutral, PublicKeyToken=84e04ff9cfb79065, recursively...
    Adding assembly reference for System.Runtime, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, recursively...
    Adding assembly reference for System.ComponentModel.Composition, Version=2.0.5.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, recursively...
    Adding assembly reference for System.Diagnostics.Debug, Version=4.0.10.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, recursively...
    Adding assembly reference for System.Threading, Version=4.0.10.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, recursively...
    Adding assembly reference for System.Collections, Version=4.0.10.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, recursively...
    Adding assembly reference for System.Collections.Concurrent, Version=4.0.10.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, recursively...
    Adding assembly reference for System.Reflection, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, recursively...
    Adding assembly reference for System.Linq.Expressions, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, recursively...
    Adding assembly reference for System.Reflection.Primitives, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, recursively...
    Adding assembly reference for System.Dynamic.Runtime, Version=4.0.10.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, recursively...
    Adding assembly reference for System.ObjectModel, Version=4.0.10.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, recursively...
    Adding assembly reference for System.Linq, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, recursively...
    Adding assembly reference for System.Runtime.InteropServices, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, recursively...
    Adding assembly reference for System.Runtime.Extensions, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, recursively...
    Adding assembly reference for System.Reflection.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, recursively...
Adding assembly reference for Mono.Android, Version=0.0.0.0, Culture=neutral, PublicKeyToken=84e04ff9cfb79065, recursively...

now becomes:

Adding assembly reference for Java.Interop, Version=0.1.0.0, Culture=neutral, PublicKeyToken=84e04ff9cfb79065, recursively...
Adding assembly reference for Mono.Android, Version=0.0.0.0, Culture=neutral, PublicKeyToken=84e04ff9cfb79065, recursively...

Because fewer assemblies need to be resolved, the Rebuild target
times improve by 30%-50% for the "Hello World" app:

  • Debug + PCL: 8.424s
  • Debug + not PCL: 4.258s (~50% faster!)
  • Release + PCL: 13.651s
  • Release + not PCL: 9.487s (~30% faster!)

The lib\xamarin.android\xbuild\Xamarin\Android\Java.Interop.dll
copy used by Xamarin.Android.Build.Tasks.dll remains unchanged, as
it is referenced by Xamarin.Android.Build.Tasks.csproj.

@jonathanpeppers jonathanpeppers changed the title [Mono.Android] build and reference non-PCL Java.Interop (#2105) [Mono.Android] build and reference non-PCL Java.Interop Sep 7, 2018
jonpryor pushed a commit to dotnet/java-interop that referenced this pull request Sep 10, 2018
Context: dotnet/android#2157

We believe that we need commit 80b4f4e -- which removes the
`XAIntegrationDebug` and `XAIntegrationRelease` configurations --
applied to xamarin/Java.Interop:d15-9 so that
xamarin/xamarin-android:d15-9 will actually build.
@jonathanpeppers jonathanpeppers force-pushed the java.interop-not-pcl-15.9 branch from 3578d75 to 7d790c6 Compare September 10, 2018 15:21
@jonathanpeppers
Copy link
Member Author

jonathanpeppers commented Sep 10, 2018

APK tests failed:

"/Users/builder/jenkins/workspace/xamarin-android-pr-builder/xamarin-android/build-tools/scripts/RunTests.targets" (RunAllTests target) (1) ->
"/Users/builder/jenkins/workspace/xamarin-android-pr-builder/xamarin-android/build-tools/scripts/RunTests.targets" (RunApkTests target) (1:4) ->
"/Users/builder/jenkins/workspace/xamarin-android-pr-builder/xamarin-android/tests/RunApkTests.targets" (default target) (4) ->
(RenameApkTestCases target) -> 
  /Users/builder/jenkins/workspace/xamarin-android-pr-builder/xamarin-android/build-tools/scripts/TestApks.targets(245,5): error : Could not find file "/Users/builder/jenkins/workspace/xamarin-android-pr-builder/xamarin-android/bin/TestDebug/TestResult-Xamarin.Android.Bcl_Tests.xunit.xml" [/Users/builder/jenkins/workspace/xamarin-android-pr-builder/xamarin-android/tests/RunApkTests.targets]

    97 Warning(s)
    2 Error(s)

But I'm not seeing that previous error where javac was blank, it looks right now:

Task "Exec" (TaskId:321)
  Task Parameter:Command="/Library/Java/JavaVirtualMachines/jdk1.8.0_91.jdk/Contents/Home/bin/javac" -source 1.5 -target 1.6 -d "obj/Debug/ji-classes" java/com/xamarin/java_interop/internal/JavaProxyObject.java java/com/xamarin/java_interop/internal/JavaProxyThrowable.java java/com/xamarin/java_interop/GCUserPeerable.java java/com/xamarin/java_interop/ManagedPeer.java (TaskId:321)
  "/Library/Java/JavaVirtualMachines/jdk1.8.0_91.jdk/Contents/Home/bin/javac" -source 1.5 -target 1.6 -d "obj/Debug/ji-classes" java/com/xamarin/java_interop/internal/JavaProxyObject.java java/com/xamarin/java_interop/internal/JavaProxyThrowable.java java/com/xamarin/java_interop/GCUserPeerable.java java/com/xamarin/java_interop/ManagedPeer.java (TaskId:321)
EXEC : warning : [options] bootstrap class path not set in conjunction with -source 1.5 [/Users/builder/jenkins/workspace/xamarin-android-pr-builder/xamarin-android/external/Java.Interop/src/Java.Interop/Java.Interop.csproj]
EXEC : warning : [options] source value 1.5 is obsolete and will be removed in a future release [/Users/builder/jenkins/workspace/xamarin-android-pr-builder/xamarin-android/external/Java.Interop/src/Java.Interop/Java.Interop.csproj]
EXEC : warning : [options] To suppress warnings about obsolete options, use -Xlint:-options. [/Users/builder/jenkins/workspace/xamarin-android-pr-builder/xamarin-android/external/Java.Interop/src/Java.Interop/Java.Interop.csproj]
  3 warnings (TaskId:321)

@jonpryor
Copy link
Contributor

@jonathanpeppers: The file can't be found because the source file doesn't exist because the unit test process crashed:

Task "RunInstrumentationTests" (TaskId:116)
  ...
  Task Parameter:NUnit2TestResultsFile=/Users/builder/jenkins/workspace/xamarin-android-pr-builder/xamarin-android/tests/../bin/TestDebug/TestResult-Xamarin.Android.Bcl_Tests.xunit.xml (TaskId:116)
...
  /Users/builder/android-toolchain/sdk/platform-tools/adb -s emulator-5570  shell am instrument  -w "Xamarin.Android.Bcl_Tests/xamarin.android.bcltests.XUnitInstrumentation"  (TaskId:116)
  INSTRUMENTATION_RESULT: shortMsg=Process crashed. (TaskId:116)
  INSTRUMENTATION_CODE: 0 (TaskId:116)

Ouch.

Worse, there's no particular reason for the crash:

  V/Mono    ( 2716): Found assembly remapping for mscorlib and was for the same version 2.0.5.0 (TaskId:124)
  I/art     ( 2716): Explicit concurrent mark sweep GC freed 10335(694KB) AllocSpace objects, 0(0B) LOS objects, 81% free, 236KB/1260KB, paused 902us total 8.118ms (TaskId:124)
  W/libprocessgroup( 1478): failed to open /acct/uid_10054/pid_2716/cgroup.procs: No such file or directory (TaskId:124)
  I/ActivityManager( 1478): Process Xamarin.Android.Bcl_Tests (pid 2716) has died (TaskId:124)
  W/ActivityManager( 1478): Crash of app Xamarin.Android.Bcl_Tests running instrumentation ComponentInfo{Xamarin.Android.Bcl_Tests/xamarin.android.bcltests.XUnitInstrumentation} (TaskId:124)
  D/AndroidRuntime( 2704): Shutting down VM (TaskId:124)
  I/ActivityManager( 1478): Force stopping Xamarin.Android.Bcl_Tests appid=10054 user=0: finished inst (TaskId:124)
  W/libprocessgroup( 1478): failed to open /acct/uid_10033/pid_2139/cgroup.procs: No such file or directory (TaskId:124)
  I/ActivityManager( 1478): Process com.android.music (pid 2139) has died (TaskId:124)

I believe that this is in part why we have commit 7c51a91 / PR #2119, in the hopes that a newer emulator would at least provide more information about why things are crashing...

@jonathanpeppers
Copy link
Member Author

Yeah, these XUnit tests worked fine for me locally...

Here is the start of the test results from bin/TestDebug/TestResult-Xamarin.Android.Bcl_Tests.xunit.xml:

<?xml version="1.0" encoding="utf-8"?>
<test-results name="Test results" errors="0" inconclusive="0" ignored="0" invalid="0" not-run="0" date="2018-09-10" time="22:01:22" total="39333" failures="0" skipped="2">
  <environment os-version="unknown" platform="unknown" cwd="unknown" machine-name="unknown" user="unknown" user-domain="unknown" nunit-version="xUnit.net 2.3.1.3858" clr-version="32-bit .NET Standard [collection-per-class, non-parallel]"></environment>
  <culture-info current-culture="unknown" current-uiculture="unknown" />
  <test-suite type="Assemblies" name="xUnit.net Tests" executed="True" success="True" result="Success" time="219.55300000000003">

So I clicked Restart on Jenkins, hoping it is green in the morning!

@jonpryor
Copy link
Contributor

Same thing happened with the rebuild:

$ curl -o x-3975.txt 'https://jenkins.mono-project.com/job/xamarin-android-pr-builder/3975/consoleText'
$ grep shortMsg=Process x-3975.txt 
  INSTRUMENTATION_RESULT: shortMsg=Process crashed. (TaskId:116)

Oddly, this time I don't see any adb logcat output...perhaps because it timed out?

Task "RunInstrumentationTests" (TaskId:116)
  ...
  Task Parameter:Component=Xamarin.Android.Bcl_Tests/xamarin.android.bcltests.XUnitInstrumentation (TaskId:116)
  ...
  /Users/builder/android-toolchain/sdk/platform-tools/adb -s emulator-5570  shell am instrument  -w "Xamarin.Android.Bcl_Tests/xamarin.android.bcltests.XUnitInstrumentation"  (TaskId:116)
  INSTRUMENTATION_RESULT: shortMsg=Process crashed. (TaskId:116)
  INSTRUMENTATION_CODE: 0 (TaskId:116)
/Users/builder/jenkins/workspace/xamarin-android-pr-builder/xamarin-android/build-tools/scripts/TestApks.targets(180,5): warning MSB5002: Terminating the task executable "adb" because it did not finish within the specified limit of 1800000 milliseconds. [/Users/builder/jenkins/workspace
/xamarin-android-pr-builder/xamarin-android/tests/RunApkTests.targets]
/Users/builder/jenkins/workspace/xamarin-android-pr-builder/xamarin-android/build-tools/scripts/TestApks.targets(180,5): error : Could not find NUnit2 results file after running component `Xamarin.Android.Bcl_Tests/xamarin.android.bcltests.XUnitInstrumentation`: no `nunit2-results-path`
 bundle value found in command output! [/Users/builder/jenkins/workspace/xamarin-android-pr-builder/xamarin-android/tests/RunApkTests.targets]

jonpryor added a commit that referenced this pull request Sep 11, 2018
Context: #2157

Merge commit; cherry-picks the following commits from master:

  * d01e4ce (PR #2087):
    Revert "[mono-sdks] Use for android toolchain"
  * 7c51a91 (PR #2119):
    [tests] Update emulator to the latest version, switch to API 28

We're hoping that the emulator update will make unit test execution
more reliable; see also PR #2157, which often has a crash when
running some unit tests.
Fixes: http://work.devdiv.io/667174

Context: dotnet/java-interop@893562c
Context: dotnet/java-interop@659711c
Context: dotnet/java-interop@b873e81...9b390bc

Bumped to java.interop/d15-9/9b390bc

Build `lib\xamarin.android\xbuild-frameworks\MonoAndroid\v1.0\Java.Interop.dll`
as a `MonoAndroid`-profile assembly instead of as a PCL assembly.
This decreases the assemblies referenced in a "Hello World"
Xamarin.Android project dramatically; this:

	Adding assembly reference for Java.Interop, Version=0.1.0.0, Culture=neutral, PublicKeyToken=84e04ff9cfb79065, recursively...
	    Adding assembly reference for System.Runtime, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, recursively...
	    Adding assembly reference for System.ComponentModel.Composition, Version=2.0.5.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, recursively...
	    Adding assembly reference for System.Diagnostics.Debug, Version=4.0.10.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, recursively...
	    Adding assembly reference for System.Threading, Version=4.0.10.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, recursively...
	    Adding assembly reference for System.Collections, Version=4.0.10.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, recursively...
	    Adding assembly reference for System.Collections.Concurrent, Version=4.0.10.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, recursively...
	    Adding assembly reference for System.Reflection, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, recursively...
	    Adding assembly reference for System.Linq.Expressions, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, recursively...
	    Adding assembly reference for System.Reflection.Primitives, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, recursively...
	    Adding assembly reference for System.Dynamic.Runtime, Version=4.0.10.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, recursively...
	    Adding assembly reference for System.ObjectModel, Version=4.0.10.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, recursively...
	    Adding assembly reference for System.Linq, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, recursively...
	    Adding assembly reference for System.Runtime.InteropServices, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, recursively...
	    Adding assembly reference for System.Runtime.Extensions, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, recursively...
	    Adding assembly reference for System.Reflection.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, recursively...
	Adding assembly reference for Mono.Android, Version=0.0.0.0, Culture=neutral, PublicKeyToken=84e04ff9cfb79065, recursively...

now becomes:

	Adding assembly reference for Java.Interop, Version=0.1.0.0, Culture=neutral, PublicKeyToken=84e04ff9cfb79065, recursively...
	Adding assembly reference for Mono.Android, Version=0.0.0.0, Culture=neutral, PublicKeyToken=84e04ff9cfb79065, recursively...

Because fewer assemblies need to be resolved, the `Rebuild` target
times improve by 30%-50% for the "Hello World" app:

  - `Debug` + PCL:            8.424s
  - `Debug` + *not* PCL:      4.258s (~50% faster!)
  - `Release` + PCL:         13.651s
  - `Release` + *not* PCL:    9.487s (~30% faster!)

The `lib\xamarin.android\xbuild\Xamarin\Android\Java.Interop.dll`
copy used by `Xamarin.Android.Build.Tasks.dll` remains unchanged, as
it is referenced by `Xamarin.Android.Build.Tasks.csproj`.
@jonathanpeppers jonathanpeppers force-pushed the java.interop-not-pcl-15.9 branch from 7d790c6 to 688f24e Compare September 11, 2018 19:16
@jonpryor jonpryor merged commit d123144 into dotnet:d15-9 Sep 12, 2018
@github-actions github-actions bot locked and limited conversation to collaborators Feb 2, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants