Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Blazor Hybrid iOS & Mac Catalyst Performance Profiling #68685

Merged
merged 28 commits into from
Jul 5, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
592dd14
[MAUI][Blazor][PERF] Add APK file usage for Android Maui Blazor SOD
TanayParikh Apr 19, 2022
82cc063
Update android_scenarios.proj
TanayParikh Apr 19, 2022
ef1b58a
Call ReportFullyDrawn
TanayParikh Apr 20, 2022
528f04c
Merge branch 'taparik/mauiBlazorAndroidAPK' of https://github.com/dot…
TanayParikh Apr 20, 2022
504e53f
Add --use-fully-drawn-time --fully-drawn-extra-delay
TanayParikh Apr 20, 2022
f1a7fdd
Add System.Console.WriteLine for non-android platforms
TanayParikh Apr 20, 2022
89f5745
Add 6 second delay
TanayParikh Apr 20, 2022
50e837c
Missing `;`
TanayParikh Apr 20, 2022
2b952b5
Add back Directory.Build.{props, targets}
TanayParikh Apr 21, 2022
3405567
Fixes based on CI 1729796
TanayParikh Apr 21, 2022
54fa30d
[REVERT THIS] Temporarily skip other jobs
TanayParikh Apr 20, 2022
6026cfd
Merge branch 'main' into taparik/mauiBlazorPerfValidationAndroid
TanayParikh Apr 26, 2022
65771a7
[MAUI][Blazor][PERF] Add IPA file usage for iOS/MacCatalyst Maui Blaz…
TanayParikh Apr 20, 2022
e20e1f3
Remove / restore nuget.config
TanayParikh Apr 28, 2022
bb58b64
Escape quotes
TanayParikh Apr 28, 2022
d07b1ee
Fix typo
TanayParikh Apr 28, 2022
d3149d4
Replicate changes from https://github.com/dotnet/runtime/pull/67670
TanayParikh Apr 28, 2022
5be410e
use-fully-drawn-time
TanayParikh Apr 29, 2022
12358b6
Use akoeplinger/performance
TanayParikh Apr 29, 2022
e0517d2
Fix misplaced quote character
akoeplinger May 2, 2022
ee7be61
Revert "Use akoeplinger/performance"
akoeplinger May 2, 2022
6130c88
Merge branch 'main' into taparik/mauiBlazorPerfValidationiOS
akoeplinger May 2, 2022
a0c98ba
Merge branch 'main' into taparik/mauiBlazorPerfValidationiOS
TanayParikh May 9, 2022
29730c7
Merge branch 'main' of github.com:dotnet/runtime into taparik/mauiBla…
TanayParikh May 11, 2022
dcb62e3
Merge branch 'main' into taparik/mauiBlazorPerfValidationiOS
TanayParikh Jun 28, 2022
b56636c
Add ` --startup-iterations 7`
TanayParikh Jun 29, 2022
93da17c
Revert "[REVERT THIS] Temporarily skip other jobs"
TanayParikh Jul 5, 2022
0d1ae06
Remove SOD Startup Iterations
TanayParikh Jul 5, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
77 changes: 76 additions & 1 deletion eng/pipelines/coreclr/templates/build-perf-maui-apps.yml
Original file line number Diff line number Diff line change
Expand Up @@ -236,7 +236,7 @@ steps:
var activity = MainActivity.Context as Activity;
activity.ReportFullyDrawn();
#else
System.Console.WriteLine("__MAUI_Blazor_WebView_OnAfterRender__");
System.Console.WriteLine(\"__MAUI_Blazor_WebView_OnAfterRender__\");
#endif
}
}
Expand All @@ -256,6 +256,40 @@ steps:
displayName: Build MAUI Blazor Android
workingDirectory: $(Build.SourcesDirectory)/MauiBlazorTesting

- script: |
chmod -R a+r .
# remove net6.0-maccatalyst to work around https://github.com/dotnet/sdk/issues/21877
cp MauiBlazorTesting.csproj MauiBlazorTesting.csproj.bak
sed -i'' -e 's/net6.0-ios;net6.0-maccatalyst/net6.0-ios/g' MauiBlazorTesting.csproj

# NuGet.config file cannot be in the build directory currently due to https://github.com/dotnet/aspnetcore/issues/41397
rm NuGet.config

../dotnet publish -bl:MauiBlazoriOS.binlog -f net6.0-ios --self-contained -r ios-arm64 -c Release /p:_RequireCodeSigning=false /p:ApplicationId=net.dot.mauiblazortesting
mv ./bin/Release/net6.0-ios/ios-arm64/publish/MauiBlazorTesting.ipa ./MauiBlazoriOSDefault.ipa

# Restore NuGet.config
cp $(Build.SourcesDirectory)/NuGet.config ./NuGet.config

cp MauiBlazorTesting.csproj.bak MauiBlazorTesting.csproj
displayName: Build MAUI Blazor iOS
workingDirectory: $(Build.SourcesDirectory)/MauiBlazorTesting

- script: |
chmod -R a+r .

# NuGet.config file cannot be in the build directory currently due to https://github.com/dotnet/aspnetcore/issues/41397
rm NuGet.config

../dotnet publish -bl:MauiBlazorMacCatalyst.binlog -f net6.0-maccatalyst -c Release

# Restore NuGet.config
cp $(Build.SourcesDirectory)/NuGet.config ./NuGet.config

mv ./bin/Release/net6.0-maccatalyst/maccatalyst-x64/MauiBlazorTesting.app ./MauiBlazorMacCatalystDefault.app
displayName: Build MAUI Blazor MacCatalyst
workingDirectory: $(Build.SourcesDirectory)/MauiBlazorTesting

- task: PublishBuildArtifacts@1
displayName: 'Publish MauiAndroid binlog'
condition: always()
Expand Down Expand Up @@ -284,6 +318,27 @@ steps:
pathtoPublish: $(Build.SourcesDirectory)/MauiTesting/MauiMacCatalyst.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 MauiBlazoriOS binlog'
condition: always()
inputs:
pathtoPublish: $(Build.SourcesDirectory)/MauiBlazorTesting/MauiBlazoriOS.binlog
artifactName: ${{ parameters.artifactName }}

- task: PublishBuildArtifacts@1
displayName: 'Publish MauiBlazorMacCatalyst binlog'
condition: always()
inputs:
pathtoPublish: $(Build.SourcesDirectory)/MauiBlazorTesting/MauiBlazorMacCatalyst.binlog
artifactName: ${{ parameters.artifactName }}

- task: PublishBuildArtifacts@1
displayName: 'Publish MauiiOSPodcast binlog'
condition: always()
Expand Down Expand Up @@ -331,6 +386,16 @@ steps:
archiveType: tar
tarCompression: gz

- template: /eng/pipelines/common/upload-artifact-step.yml
parameters:
rootFolder: $(Build.SourcesDirectory)/MauiBlazorTesting/MauiBlazoriOSDefault.ipa
includeRootFolder: true
displayName: Maui Blazor iOS IPA
artifactName: MauiBlazoriOSDefaultIPA
archiveExtension: '.tar.gz'
archiveType: tar
tarCompression: gz

- template: /eng/pipelines/common/upload-artifact-step.yml
parameters:
rootFolder: $(Build.SourcesDirectory)/dotnet-podcasts/src/Mobile/MauiiOSPodcast.ipa
Expand All @@ -351,6 +416,16 @@ steps:
archiveType: tar
tarCompression: gz

- template: /eng/pipelines/common/upload-artifact-step.yml
parameters:
rootFolder: $(Build.SourcesDirectory)/MauiBlazorTesting/MauiBlazorMacCatalystDefault.app
includeRootFolder: true
displayName: Maui Blazor MacCatalyst App
artifactName: MauiBlazorMacCatalystDefault
archiveExtension: '.tar.gz'
archiveType: tar
tarCompression: gz

- script: rm -r -f ./bin
workingDirectory: $(Build.SourcesDirectory)/MauiTesting
displayName: Clean MauiTesting bin directory
Expand Down
14 changes: 14 additions & 0 deletions eng/pipelines/coreclr/templates/perf-job.yml
Original file line number Diff line number Diff line change
Expand Up @@ -255,6 +255,20 @@ jobs:
artifactFileName: 'MauiiOSPodcastIPA.tar.gz'
artifactName: 'MauiiOSPodcastIPA'
displayName: 'Maui iOS Podcast IPA'
- template: /eng/pipelines/common/download-artifact-step.yml
parameters:
unpackFolder: $(Build.SourcesDirectory)/MauiBlazoriOSDefaultIPA
cleanUnpackFolder: false
artifactFileName: 'MauiBlazoriOSDefaultIPA.tar.gz'
artifactName: 'MauiBlazoriOSDefaultIPA'
displayName: 'Maui Blazor iOS IPA'
- template: /eng/pipelines/common/download-artifact-step.yml
parameters:
unpackFolder: $(Build.SourcesDirectory)/MauiBlazorMacCatalystDefault
cleanUnpackFolder: false
artifactFileName: 'MauiBlazorMacCatalystDefault.tar.gz'
artifactName: 'MauiBlazorMacCatalystDefault'
displayName: 'Maui Blazor MacCatalyst App'

# Create Core_Root
- script: $(Build.SourcesDirectory)/src/tests/build$(scriptExt) $(buildConfig) $(archType) generatelayoutonly $(librariesOverrideArg)
Expand Down
101 changes: 72 additions & 29 deletions eng/testing/performance/ios_scenarios.proj
Original file line number Diff line number Diff line change
Expand Up @@ -18,21 +18,21 @@
<LlvmPath>nollvm</LlvmPath>
<LlvmPath Condition="'$(iOSLlvmBuild)' == 'True'">llvm</LlvmPath>
</PropertyGroup>

<PropertyGroup Condition="'$(AGENT_OS)' == 'Windows_NT'">
<ScenarioDirectory>%HELIX_CORRELATION_PAYLOAD%\performance\src\scenarios\</ScenarioDirectory>

</PropertyGroup>
<PropertyGroup Condition="'$(AGENT_OS)' != 'Windows_NT'">
<ScenarioDirectory>$HELIX_CORRELATION_PAYLOAD/performance/src/scenarios/</ScenarioDirectory>
</PropertyGroup>

<ItemGroup>
<HelixWorkItem Include="SOD - iOS HelloWorld .app Size">
<PayloadDirectory>$(WorkItemDirectory)</PayloadDirectory>
<PreCommands>cd $(ScenarioDirectory)helloios;cp -rf $HELIX_CORRELATION_PAYLOAD/iosHelloWorld/$(LlvmPath) ./app;$(Python) pre.py --name app</PreCommands>
<Command>$(Python) test.py sod --scenario-name &quot;%(Identity)&quot;</Command>
<PostCommands>$(Python) post.py</PostCommands>
<PayloadDirectory>$(WorkItemDirectory)</PayloadDirectory>
<PreCommands>cd $(ScenarioDirectory)helloios;cp -rf $HELIX_CORRELATION_PAYLOAD/iosHelloWorld/$(LlvmPath) ./app;$(Python) pre.py --name app</PreCommands>
<Command>$(Python) test.py sod --scenario-name &quot;%(Identity)&quot;</Command>
<PostCommands>$(Python) post.py</PostCommands>
</HelixWorkItem>
<HelixWorkItem Include="SOD - iOS HelloWorld Mono Zip Size $(LlvmPath)">
<PayloadDirectory>$(WorkItemDirectory)</PayloadDirectory>
Expand Down Expand Up @@ -84,6 +84,24 @@
<Command>$(Python) test.py sod --scenario-name &quot;%(Identity)&quot;</Command>
<PostCommands>$(Python) post.py</PostCommands>
</HelixWorkItem>
<HelixWorkItem Include="SOD - Maui Blazor iOS IPA Size" Condition="'$(iOSLlvmBuild)' == 'False'">
<PayloadDirectory>$(WorkItemDirectory)</PayloadDirectory>
<PreCommands>cd $(ScenarioDirectory)mauiblazorios;cp $HELIX_CORRELATION_PAYLOAD/MauiBlazoriOSDefault.ipa .;$(Python) pre.py --name MauiBlazoriOSDefault.ipa</PreCommands>
<Command>$(Python) test.py sod --scenario-name &quot;%(Identity)&quot;</Command>
<PostCommands>$(Python) post.py</PostCommands>
</HelixWorkItem>
<HelixWorkItem Include="SOD - Maui Blazor iOS IPA Size Unzipped" Condition="'$(iOSLlvmBuild)' == 'False'">
<PayloadDirectory>$(WorkItemDirectory)</PayloadDirectory>
<PreCommands>cd $(ScenarioDirectory)mauiblazorios;cp $HELIX_CORRELATION_PAYLOAD/MauiBlazoriOSDefault.ipa .;$(Python) pre.py --unzip --name MauiBlazoriOSDefault.ipa</PreCommands>
<Command>$(Python) test.py sod --scenario-name &quot;%(Identity)&quot;</Command>
<PostCommands>$(Python) post.py</PostCommands>
</HelixWorkItem>
<HelixWorkItem Include="SOD - Maui Blazor MacCatalyst .app Size" Condition="'$(iOSLlvmBuild)' == 'False'">
<PayloadDirectory>$(WorkItemDirectory)</PayloadDirectory>
<PreCommands>cd $(ScenarioDirectory)mauiblazorios;cp -rf $HELIX_CORRELATION_PAYLOAD/MauiBlazorMacCatalystDefault ./app;$(Python) pre.py --name app</PreCommands>
<Command>$(Python) test.py sod --scenario-name &quot;%(Identity)&quot;</Command>
<PostCommands>$(Python) post.py</PostCommands>
</HelixWorkItem>
<HelixWorkItem Include="SOD - Maui iOS Podcast IPA Size" Condition="'$(iOSLlvmBuild)' == 'False'">
<PayloadDirectory>$(WorkItemDirectory)</PayloadDirectory>
<PreCommands>cd $(ScenarioDirectory)mauiios;cp $HELIX_CORRELATION_PAYLOAD/MauiiOSPodcast.ipa .;$(Python) pre.py --name MauiiOSPodcast.ipa</PreCommands>
Expand All @@ -96,38 +114,63 @@
<Command>$(Python) test.py sod --scenario-name &quot;%(Identity)&quot;</Command>
<PostCommands>$(Python) post.py</PostCommands>
</HelixWorkItem>
<XHarnessAppBundleToTest Include="Device Startup - iOS Maui Default" Condition="'$(iOSLlvmBuild)' == 'False'">
<AppBundlePath>$(WorkItemDirectory).zip</AppBundlePath>
<WorkItemTimeout>00:15:00</WorkItemTimeout>
<TestTarget>ios-device</TestTarget>
<CustomCommands>
<![CDATA[
<XHarnessAppBundleToTest Include="Device Startup - iOS Maui Default" Condition="'$(iOSLlvmBuild)' == 'False'">
<AppBundlePath>$(WorkItemDirectory).zip</AppBundlePath>
<WorkItemTimeout>00:15:00</WorkItemTimeout>
<TestTarget>ios-device</TestTarget>
<CustomCommands>
<![CDATA[
# PreCommands
export XHARNESSPATH=$XHARNESS_CLI_PATH

cp -r $HELIX_CORRELATION_PAYLOAD/MauiTesting.app $(ScenarioDirectory)mauiios/MauiTesting.app
cp -f embedded.mobileprovision $(ScenarioDirectory)mauiios/MauiTesting.app
cd $(ScenarioDirectory)mauiios
sign MauiTesting.app

$(Python) pre.py --name MauiTesting.app

# Testing commands
$(Python) test.py devicestartup --device-type ios --package-path MauiTesting.app --package-name net.dot.mauitesting --scenario-name "%(Identity)"
((result=$?))

# Post commands
$(Python) post.py
exit $result
]]>
</CustomCommands>
</XHarnessAppBundleToTest>
<XHarnessAppBundleToTest Include="Device Startup - iOS Maui Blazor Default" Condition="'$(iOSLlvmBuild)' == 'False'">
<AppBundlePath>$(WorkItemDirectory).zip</AppBundlePath>
<WorkItemTimeout>00:15:00</WorkItemTimeout>
<TestTarget>ios-device</TestTarget>
<CustomCommands>
<![CDATA[
# PreCommands
export XHARNESSPATH=$XHARNESS_CLI_PATH

cp -r $HELIX_CORRELATION_PAYLOAD/MauiTesting.app $(ScenarioDirectory)mauiios/MauiTesting.app
cp -f embedded.mobileprovision $(ScenarioDirectory)mauiios/MauiTesting.app
cd $(ScenarioDirectory)mauiios
sign MauiTesting.app
cp -r $HELIX_CORRELATION_PAYLOAD/MauiBlazorTesting.app $(ScenarioDirectory)mauiblazorios/MauiBlazorTesting.app
cp -f embedded.mobileprovision $(ScenarioDirectory)mauiblazorios/MauiBlazorTesting.app
cd $(ScenarioDirectory)mauiblazorios
sign MauiBlazorTesting.app

$(Python) pre.py --name MauiTesting.app
$(Python) pre.py --name MauiBlazorTesting.app

# Testing commands
$(Python) test.py devicestartup --device-type ios --package-path MauiTesting.app --package-name net.dot.mauitesting --scenario-name "%(Identity)"
((result=$?))

$(Python) test.py devicestartup --device-type ios --package-path MauiBlazorTesting.app --package-name net.dot.mauiblazortesting --scenario-name "%(Identity)" --use-fully-drawn-time --fully-drawn-magic-string __MAUI_Blazor_WebView_OnAfterRender__ --startup-iterations 7

# Post commands
$(Python) post.py
exit $result
]]>
</CustomCommands>
</XHarnessAppBundleToTest>
</CustomCommands>
</XHarnessAppBundleToTest>
<XHarnessAppBundleToTest Include="Device Startup - iOS Maui Podcast" Condition="'$(iOSLlvmBuild)' == 'False'">
<AppBundlePath>$(WorkItemDirectory).zip</AppBundlePath>
<WorkItemTimeout>00:15:00</WorkItemTimeout>
<TestTarget>ios-device</TestTarget>
<CustomCommands>
<![CDATA[
<AppBundlePath>$(WorkItemDirectory).zip</AppBundlePath>
<WorkItemTimeout>00:15:00</WorkItemTimeout>
<TestTarget>ios-device</TestTarget>
<CustomCommands>
<![CDATA[
# PreCommands
export XHARNESSPATH=$XHARNESS_CLI_PATH

Expand All @@ -146,8 +189,8 @@
$(Python) post.py
exit $result
]]>
</CustomCommands>
</XHarnessAppBundleToTest>
</CustomCommands>
</XHarnessAppBundleToTest>
</ItemGroup>
<!--
This target is to work around the XHarness command that depend on scripts in ORIGPYPATH
Expand Down
2 changes: 2 additions & 0 deletions eng/testing/performance/performance-setup.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,8 @@ if ($iOSMono) {
Copy-Item -path "$SourceDirectory\iosHelloWorld\nollvm" $PayloadDirectory\iosHelloWorld\nollvm -Recurse
Copy-Item -path "$SourceDirectory\MauiiOSDefaultIPA" $PayloadDirectory\MauiiOSDefaultIPA -Recurse
Copy-Item -path "$SourceDirectory\MauiMacCatalystDefault\MauiMacCatalystDefault.app" $PayloadDirectory\MauiMacCatalystDefault -Recurse
Copy-Item -path "$SourceDirectory\MauiBlazoriOSDefaultIPA" $PayloadDirectory\MauiBlazoriOSDefaultIPA -Recurse
Copy-Item -path "$SourceDirectory\MauiBlazorMacCatalystDefault\MauiBlazorMacCatalystDefault.app" $PayloadDirectory\MauiBlazorMacCatalystDefault -Recurse
Copy-Item -path "$SourceDirectory\MauiiOSPodcastIPA" $PayloadDirectory\MauiiOSPodcastIPA -Recurse
}

Expand Down
9 changes: 9 additions & 0 deletions eng/testing/performance/performance-setup.sh
Original file line number Diff line number Diff line change
Expand Up @@ -359,12 +359,21 @@ if [[ "$iosmono" == "true" ]]; then
mkdir -p $payload_directory/iosHelloWorld && cp -rv $source_directory/iosHelloWorld/nollvm $payload_directory/iosHelloWorld
mkdir -p $payload_directory/iosHelloWorldZip/nollvmzip && cp -rv $source_directory/iosHelloWorldZip/nollvmzip $payload_directory/iosHelloWorldZip
mkdir -p $payload_directory/MauiMacCatalystDefault && cp -rv $source_directory/MauiMacCatalystDefault/MauiMacCatalystDefault.app $payload_directory/MauiMacCatalystDefault
mkdir -p $payload_directory/MauiBlazorMacCatalystDefault && cp -rv $source_directory/MauiBlazorMacCatalystDefault/MauiBlazorMacCatalystDefault.app $payload_directory/MauiBlazorMacCatalystDefault
cp -v $source_directory/MauiiOSDefaultIPA/MauiiOSDefault.ipa $payload_directory/MauiiOSDefault.ipa
cp -v $source_directory/MauiBlazoriOSDefaultIPA/MauiBlazoriOSDefault.ipa $payload_directory/MauiBlazoriOSDefault.ipa
cp -v $source_directory/MauiiOSPodcastIPA/MauiiOSPodcast.ipa $payload_directory/MauiiOSPodcast.ipa

# Get the .app so we can resign in the xharness item
cp -v $source_directory/MauiiOSDefaultIPA/MauiiOSDefault.ipa $source_directory/MauiiOSDefaultIPA/MauiiOSDefault.zip
unzip -d $source_directory/MauiiOSDefaultIPA $source_directory/MauiiOSDefaultIPA/MauiiOSDefault.zip
mv $source_directory/MauiiOSDefaultIPA/Payload/MauiTesting.app $payload_directory/

# Get the .app so we can resign in the xharness item for Maui Blazor
cp -v $source_directory/MauiBlazoriOSDefaultIPA/MauiBlazoriOSDefault.ipa $source_directory/MauiBlazoriOSDefaultIPA/MauiBlazoriOSDefault.zip
unzip -d $source_directory/MauiBlazoriOSDefaultIPA $source_directory/MauiBlazoriOSDefaultIPA/MauiBlazoriOSDefault.zip
mv $source_directory/MauiBlazoriOSDefaultIPA/Payload/MauiBlazorTesting.app $payload_directory/

# Get the .app so we can resign in the xharness item for podcast
cp -v $source_directory/MauiiOSPodcastIPA/MauiiOSPodcast.ipa $source_directory/MauiiOSPodcastIPA/MauiiOSPodcast.zip
unzip -d $source_directory/MauiiOSPodcastIPA $source_directory/MauiiOSPodcastIPA/MauiiOSPodcast.zip
Expand Down