diff --git a/eng/pipelines/coreclr/templates/build-perf-maui-apps.yml b/eng/pipelines/coreclr/templates/build-perf-maui-apps.yml
index 5ffe53952cd6dd..13646cf654d21c 100644
--- a/eng/pipelines/coreclr/templates/build-perf-maui-apps.yml
+++ b/eng/pipelines/coreclr/templates/build-perf-maui-apps.yml
@@ -30,7 +30,7 @@ steps:
# IntermediateArtifacts/MonoRuntimePacks/Shipping/Microsoft.NETCore.App.Runtime.Mono.ios-!(*.symbols).nupkg
# IntermediateArtifacts/MonoRuntimePacks/Shipping/Microsoft.NETCore.App.Runtime.Mono.iossimulator-!(*.symbols).nupkg
# IntermediateArtifacts/MonoRuntimePacks/Shipping/Microsoft.NETCore.App.Runtime.Mono.maccatalyst-!(*.symbols).nupkg
-
+
# # Other artifacts to include once they are being built
# # EX. IntermediateArtifacts/MonoRuntimePacks/Shipping/Microsoft.NETCore.App.Runtime.Mono.maccatalyst-*.nupkg
@@ -42,15 +42,15 @@ steps:
# cleanTargetFolder: false
# targetFolder: $(Build.SourcesDirectory)/MauiTesting/ArtifactPacks
# flattenFolders: true
-
+
#- script: |
# for file in *.nupkg
- # do
- # mv -v "$file" "${file%.nupkg}.zip"
+ # do
+ # mv -v "$file" "${file%.nupkg}.zip"
# done
# displayName: Change nupkgs to zips
# workingDirectory: $(Build.SourcesDirectory)/MauiTesting/ArtifactPacks
-
+
##Unzip the nuget packages to make the actual runtimes accessible
#- task: ExtractFiles@1
@@ -206,6 +206,50 @@ steps:
displayName: Build MAUI MacCatalyst
workingDirectory: $(Build.SourcesDirectory)/MauiTesting
+ - script: |
+ ./dotnet new maui-blazor -n MauiBlazorTesting
+ cd MauiBlazorTesting
+ cp $(Build.SourcesDirectory)/src/tests/Common/maui/MauiScenario.props ./Directory.Build.props
+ cp $(Build.SourcesDirectory)/src/tests/Common/maui/MauiScenario.targets ./Directory.Build.targets
+ cp $(Build.SourcesDirectory)/NuGet.config ./NuGet.config
+
+ echo -e "using Microsoft.AspNetCore.Components;
+ #if ANDROID
+ using Android.App;
+ #endif
+
+ namespace MauiBlazorTesting.Pages
+ {
+ public partial class Index
+ {
+ protected override void OnAfterRender(bool firstRender)
+ {
+ if (firstRender)
+ {
+ #if ANDROID
+ var activity = MainActivity.Context as Activity;
+ activity.ReportFullyDrawn();
+ #else
+ System.Console.WriteLine("__MAUI_Blazor_WebView_OnAfterRender__");
+ #endif
+ }
+ }
+ }
+ }" > Pages/Index.razor.cs
+
+ sed -i'' -e "s/{/{\npublic static Android.Content.Context Context { get; private set; }\npublic MainActivity() { Context = this; }/g" Platforms/Android/MainActivity.cs
+ displayName: Setup MAUI Blazor Hybrid Project
+ workingDirectory: $(Build.SourcesDirectory)
+
+ - script: |
+ chmod -R a+r .
+ # Restore is split out because of https://github.com/dotnet/sdk/issues/21877, can be removed with --no-restore once fixed
+ ../dotnet restore
+ ../dotnet publish -bl:MauiBlazorAndroid.binlog -f net6.0-android -c Release -r android-arm64 --no-restore --self-contained
+ mv ./bin/Release/net6.0-android/android-arm64/com.companyname.mauiblazortesting-Signed.apk ./MauiBlazorAndroidDefault.apk
+ displayName: Build MAUI Blazor Android
+ workingDirectory: $(Build.SourcesDirectory)/MauiBlazorTesting
+
- task: PublishBuildArtifacts@1
displayName: 'Publish MauiAndroid binlog'
condition: always()
@@ -213,6 +257,13 @@ steps:
pathtoPublish: $(Build.SourcesDirectory)/MauiTesting/MauiAndroid.binlog
artifactName: ${{ parameters.artifactName }}
+ - task: PublishBuildArtifacts@1
+ displayName: 'Publish MauiBlazorAndroid binlog'
+ condition: always()
+ inputs:
+ pathtoPublish: $(Build.SourcesDirectory)/MauiBlazorTesting/MauiBlazorAndroid.binlog
+ artifactName: ${{ parameters.artifactName }}
+
- task: PublishBuildArtifacts@1
displayName: 'Publish MauiiOS binlog'
condition: always()
@@ -244,6 +295,16 @@ steps:
archiveType: tar
tarCompression: gz
+ - template: /eng/pipelines/common/upload-artifact-step.yml
+ parameters:
+ rootFolder: $(Build.SourcesDirectory)/MauiBlazorTesting/MauiBlazorAndroidDefault.apk
+ includeRootFolder: true
+ displayName: Maui Blazor Android App
+ artifactName: MauiBlazorAndroidApp
+ archiveExtension: '.tar.gz'
+ archiveType: tar
+ tarCompression: gz
+
- template: /eng/pipelines/common/upload-artifact-step.yml
parameters:
rootFolder: $(Build.SourcesDirectory)/MauiTesting/MauiAndroidPodcast.apk
@@ -286,7 +347,12 @@ steps:
- script: rm -r -f ./bin
workingDirectory: $(Build.SourcesDirectory)/MauiTesting
- displayName: Clean bin directory
+ displayName: Clean MauiTesting bin directory
+ condition: succeededOrFailed()
+
+ - script: rm -r -f ./bin
+ workingDirectory: $(Build.SourcesDirectory)/MauiBlazorTesting
+ displayName: Clean MauiBlazorTesting bin directory
condition: succeededOrFailed()
- template: /eng/pipelines/common/upload-artifact-step.yml
diff --git a/eng/pipelines/coreclr/templates/perf-job.yml b/eng/pipelines/coreclr/templates/perf-job.yml
index 463c975f37d166..5c0ab4c16e210c 100644
--- a/eng/pipelines/coreclr/templates/perf-job.yml
+++ b/eng/pipelines/coreclr/templates/perf-job.yml
@@ -191,6 +191,13 @@ jobs:
artifactFileName: 'MauiAndroidPodcast.tar.gz'
artifactName: 'MauiAndroidPodcast'
displayName: 'Maui Android Podcast'
+ - template: /eng/pipelines/common/download-artifact-step.yml
+ parameters:
+ unpackFolder: $(Build.SourcesDirectory)
+ cleanUnpackFolder: false
+ artifactFileName: 'MauiBlazorAndroidApp.tar.gz'
+ artifactName: 'MauiBlazorAndroidApp'
+ displayName: 'Maui Blazor Android App'
# Download iOSMono tests and MauiiOS/MacCatalyst
diff --git a/eng/testing/performance/android_scenarios.proj b/eng/testing/performance/android_scenarios.proj
index c2fc486f5ec4cf..f01d7c17c26438 100644
--- a/eng/testing/performance/android_scenarios.proj
+++ b/eng/testing/performance/android_scenarios.proj
@@ -41,6 +41,12 @@
$(Python) test.py sod --scenario-name "%(Identity)"
$(Python) post.py
+
+ $(WorkItemDirectory)
+ cd $(ScenarioDirectory)mauiblazorandroid;copy %HELIX_CORRELATION_PAYLOAD%\MauiBlazorAndroidDefault.apk .; $(Python) pre.py --apk-name MauiBlazorAndroidDefault.apk
+ $(Python) test.py sod --scenario-name "%(Identity)"
+ $(Python) post.py
+
$(WorkItemDirectory)
cd $(ScenarioDirectory)mauiandroid;copy %HELIX_CORRELATION_PAYLOAD%\MauiAndroidPodcast.apk .; $(Python) pre.py --apk-name MauiAndroidPodcast.apk
@@ -53,6 +59,12 @@
$(Python) test.py sod --scenario-name "%(Identity)"
$(Python) post.py
+
+ $(WorkItemDirectory)
+ cd $(ScenarioDirectory)mauiblazorandroid;copy %HELIX_CORRELATION_PAYLOAD%\MauiBlazorAndroidDefault.apk .; $(Python) pre.py --unzip --apk-name MauiBlazorAndroidDefault.apk
+ $(Python) test.py sod --scenario-name "%(Identity)"
+ $(Python) post.py
+
$(WorkItemDirectory)
cd $(ScenarioDirectory)mauiandroid;copy %HELIX_CORRELATION_PAYLOAD%\MauiAndroidPodcast.apk .; $(Python) pre.py --unzip --apk-name MauiAndroidPodcast.apk
@@ -77,6 +89,12 @@
$(Python) test.py devicestartup --device-type android --package-path pub\MauiAndroidDefault.apk --package-name com.companyname.mauitesting --scenario-name "%(Identity)"
$(Python) post.py
+
+ $(WorkItemDirectory)
+ echo on;set XHARNESSPATH=$(XharnessPath);cd $(ScenarioDirectory)mauiblazorandroid;copy %HELIX_CORRELATION_PAYLOAD%\MauiBlazorAndroidDefault.apk .;$(Python) pre.py --apk-name MauiBlazorAndroidDefault.apk
+ $(Python) test.py devicestartup --device-type android --package-path pub\MauiBlazorAndroidDefault.apk --package-name com.companyname.mauiblazortesting --scenario-name "%(Identity)" --use-fully-drawn-time --fully-drawn-extra-delay 6
+ $(Python) post.py
+
$(WorkItemDirectory)
echo on;set XHARNESSPATH=$(XharnessPath);cd $(ScenarioDirectory)mauiandroid;copy %HELIX_CORRELATION_PAYLOAD%\MauiAndroidPodcast.apk .;$(Python) pre.py --apk-name MauiAndroidPodcast.apk
@@ -89,6 +107,12 @@
$(Python) test.py devicestartup --device-type android --package-path pub\MauiAndroidDefault.apk --package-name com.companyname.mauitesting --scenario-name "%(Identity)" --disable-animations
$(Python) post.py
+
+ $(WorkItemDirectory)
+ echo on;set XHARNESSPATH=$(XharnessPath);cd $(ScenarioDirectory)mauiblazorandroid;copy %HELIX_CORRELATION_PAYLOAD%\MauiBlazorAndroidDefault.apk .;$(Python) pre.py --apk-name MauiBlazorAndroidDefault.apk
+ $(Python) test.py devicestartup --device-type android --package-path pub\MauiBlazorAndroidDefault.apk --package-name com.companyname.mauiblazortesting --scenario-name "%(Identity)" --use-fully-drawn-time --fully-drawn-extra-delay 6 --disable-animations
+ $(Python) post.py
+
$(WorkItemDirectory)
echo on;set XHARNESSPATH=$(XharnessPath);cd $(ScenarioDirectory)mauiandroid;copy %HELIX_CORRELATION_PAYLOAD%\MauiAndroidPodcast.apk .;$(Python) pre.py --apk-name MauiAndroidPodcast.apk
diff --git a/eng/testing/performance/performance-setup.ps1 b/eng/testing/performance/performance-setup.ps1
index 689f8d549de01a..db5f64cce13055 100644
--- a/eng/testing/performance/performance-setup.ps1
+++ b/eng/testing/performance/performance-setup.ps1
@@ -156,8 +156,9 @@ if ($AndroidMono) {
mkdir $WorkItemDirectory
}
- Copy-Item -path "$SourceDirectory\androidHelloWorld\HelloAndroid.apk" $PayloadDirectory -Verbose
+ Copy-Item -path "$SourceDirectory\androidHelloWorld\HelloAndroid.apk" $PayloadDirectory -Verbose
Copy-Item -path "$SourceDirectory\MauiAndroidDefault.apk" $PayloadDirectory -Verbose
+ Copy-Item -path "$SourceDirectory\MauiBlazorAndroidDefault.apk" $PayloadDirectory -Verbose
Copy-Item -path "$SourceDirectory\MauiAndroidPodcast.apk" $PayloadDirectory -Verbose
$SetupArguments = $SetupArguments -replace $Architecture, 'arm64'
}