Skip to content

Commit c877a5f

Browse files
kotlarmilosCopilot
andcommitted
Address review feedback: align with Android inner-loop PR
* Consolidate maui_scenarios_ios_innerloop.proj into maui_scenarios_ios.proj gated on $(_IsInnerLoop) derived from $(RunKind), matching the Android consolidation. Updates sdk-perf-jobs.yml inner-loop entries to reference the consolidated proj. * Drop the 23 "if false # [TEMP] Disabled for iOS inner loop CI validation" wrappers from eng/pipelines/sdk-perf-jobs.yml. Restores the existing private + scheduled SDK perf matrix that was inadvertently disabled. * Rename iOSInnerLoopParser to IOSInnerLoopParser (and MetricType enum member) to match PascalCase used by sibling parsers; update const.py metric mapping accordingly. * Revert unrelated PERFLAB_BUILDTIMESTAMP fallback change in Reporter.cs. * Drop the local-only run-local.sh script (not used by CI). * Make post.py cleanup best-effort: never sys.exit(1), to match Android. * Remove unused 'import hashlib' in shared/runner.py. * ioshelper._resolve_mlaunch: pick the iOS SDK pack by parsed version key instead of lexicographic sort so 26.10 ranks above 26.9. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 6b2a901 commit c877a5f

11 files changed

Lines changed: 526 additions & 912 deletions

File tree

eng/performance/maui_scenarios_ios.proj

Lines changed: 57 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -2,45 +2,53 @@
22
<Import Project="Scenarios.Common.props" />
33

44
<PropertyGroup>
5-
<IncludeXHarnessCli>true</IncludeXHarnessCli>
5+
<_IsInnerLoop Condition="'$(RunKind)' == 'maui_scenarios_ios_innerloop'">true</_IsInnerLoop>
6+
<IncludeXHarnessCli Condition="'$(_IsInnerLoop)' != 'true'">true</IncludeXHarnessCli>
67
</PropertyGroup>
78

8-
<PropertyGroup>
9+
<PropertyGroup Condition="'$(_IsInnerLoop)' != 'true'">
910
<AfterPreparePayloadWorkItemCommand>$(Python) post.py</AfterPreparePayloadWorkItemCommand>
1011
<PreparePayloadOutDirectoryName>scenarios_out</PreparePayloadOutDirectoryName>
1112
<PreparePayloadWorkItemBaseDirectory Condition="'$(TargetsWindows)' == 'true'">$(CorrelationPayloadDirectory)$(PreparePayloadOutDirectoryName)\</PreparePayloadWorkItemBaseDirectory>
1213
<PreparePayloadWorkItemBaseDirectory Condition="'$(TargetsWindows)' != 'true'">$(CorrelationPayloadDirectory)$(PreparePayloadOutDirectoryName)/</PreparePayloadWorkItemBaseDirectory>
13-
14+
1415
<_MSBuildArgs Condition="'$(RuntimeFlavor)' == 'mono'">/p:UseMonoRuntime=true</_MSBuildArgs>
1516
<_MSBuildArgs Condition="'$(RuntimeFlavor)' == 'coreclr'">/p:UseMonoRuntime=false</_MSBuildArgs>
1617

17-
<!-- Mono FullAOT and CoreCLR R2R are considered as default configurations, so no need for explicit properties -->
18-
19-
<!-- We have to set the following two variables until https://github.com/dotnet/runtime/pull/124604 flows to us -->
18+
<!-- We have to set the following two variables until https://github.com/dotnet/runtime/pull/124604 flows to us -->
2019
<_MSBuildArgs Condition="'$(RuntimeFlavor)' == 'coreclr'">$(_MSBuildArgs);/p:PublishReadyToRunStripDebugInfo=false;/p:PublishReadyToRunStripInliningInfo=false</_MSBuildArgs>
2120

22-
<!-- CoreCLR Interpreter -->
2321
<_MSBuildArgs Condition="'$(RuntimeFlavor)' == 'coreclr' and '$(CodegenType)' == 'Interpreter'">$(_MSBuildArgs);/p:PublishReadyToRun=false</_MSBuildArgs>
24-
<!-- CoreCLR NativeAOT -->
2522
<_MSBuildArgs Condition="'$(RuntimeFlavor)' == 'coreclr' and '$(CodegenType)' == 'NativeAOT'">$(_MSBuildArgs);/p:PublishAot=true;/p:PublishAotUsingRuntimePack=true</_MSBuildArgs>
23+
</PropertyGroup>
2624

25+
<PropertyGroup Condition="'$(_IsInnerLoop)' == 'true'">
26+
<_MSBuildArgs Condition="'$(RuntimeFlavor)' == 'mono'">/p:UseMonoRuntime=true</_MSBuildArgs>
27+
<_MSBuildArgs Condition="'$(RuntimeFlavor)' == 'coreclr'">/p:UseMonoRuntime=false</_MSBuildArgs>
28+
<iOSRid Condition="'$(iOSRid)' == ''">iossimulator-x64</iOSRid>
29+
<_MSBuildArgs>$(_MSBuildArgs) /p:RuntimeIdentifier=$(iOSRid)</_MSBuildArgs>
30+
<_MSBuildArgs Condition="'$(iOSRid)' == 'ios-arm64'">$(_MSBuildArgs) /p:EnableCodeSigning=false</_MSBuildArgs>
31+
<_MSBuildArgs>$(_MSBuildArgs) /p:MtouchLink=None</_MSBuildArgs>
32+
<RunConfigsString>$(RuntimeFlavor)_Default</RunConfigsString>
33+
<InnerLoopIterations Condition="'$(InnerLoopIterations)' == ''">3</InnerLoopIterations>
34+
<_MacEnvVars>export DOTNET_ROOT=$HELIX_CORRELATION_PAYLOAD/dotnet;export DOTNET_CLI_TELEMETRY_OPTOUT=1;export DOTNET_MULTILEVEL_LOOKUP=0;export NUGET_PACKAGES=$HELIX_WORKITEM_ROOT/.packages;export PATH=$HELIX_CORRELATION_PAYLOAD/dotnet:$PATH</_MacEnvVars>
2735
</PropertyGroup>
2836

2937
<Target Name="RemoveDotnetFromCorrelationStaging" BeforeTargets="BeforeTest">
3038
<Message Text="Removing Dotnet Packs from Correlation Staging" Importance="high" />
3139
<RemoveDir Directories="$(CorrelationPayloadDirectory)dotnet/packs" />
32-
<!-- Remove scenario build intermediates to reduce payload size (published output is in scenarios_out/) -->
33-
<RemoveDir Directories="@(MAUIiOSScenario -> '%(PayloadDirectory)/app/obj')" />
34-
<RemoveDir Directories="@(MAUIiOSScenario -> '%(PayloadDirectory)/app/bin')" />
40+
<RemoveDir Condition="'$(_IsInnerLoop)' != 'true'" Directories="@(MAUIiOSScenario -> '%(PayloadDirectory)/app/obj')" />
41+
<RemoveDir Condition="'$(_IsInnerLoop)' != 'true'" Directories="@(MAUIiOSScenario -> '%(PayloadDirectory)/app/bin')" />
3542
</Target>
3643

3744
<ItemDefinitionGroup>
3845
<HelixWorkItem>
39-
<Timeout>00:30</Timeout>
46+
<Timeout Condition="'$(_IsInnerLoop)' != 'true'">00:30</Timeout>
47+
<Timeout Condition="'$(_IsInnerLoop)' == 'true'">02:30</Timeout>
4048
</HelixWorkItem>
4149
</ItemDefinitionGroup>
4250

43-
<ItemGroup>
51+
<ItemGroup Condition="'$(_IsInnerLoop)' != 'true'">
4452
<MAUIiOSScenario Include=".NET iOS Default Template">
4553
<ScenarioDirectoryName>netios</ScenarioDirectoryName>
4654
<PayloadDirectory>$(ScenariosDir)%(ScenarioDirectoryName)</PayloadDirectory>
@@ -67,15 +75,15 @@
6775
</MAUIiOSScenario>
6876
</ItemGroup>
6977

70-
<ItemGroup>
78+
<ItemGroup Condition="'$(_IsInnerLoop)' != 'true'">
7179
<PreparePayloadWorkItem Include="@(MAUIiOSScenario)">
7280
<!-- Select the highest installed versioned Xcode bundle and avoid runner-image symlink aliases as they do not work with iOS SDK -->
7381
<Command>XCODE_PATH=`find /Applications -maxdepth 1 -type d -name 'Xcode_*.app' | sort -t_ -k2 -V | tail -1` &amp;&amp; echo &quot;Selected Xcode: $XCODE_PATH&quot; &amp;&amp; sudo xcode-select -s &quot;$XCODE_PATH&quot; &amp;&amp; $(Python) pre.py publish -f $(PERFLAB_Framework)-ios --self-contained -c $(BuildConfig) -r ios-arm64 --msbuild=&quot;$(_MSBuildArgs)&quot; --binlog $(PreparePayloadWorkItemBaseDirectory)%(PreparePayloadWorkItem.ScenarioDirectoryName)/%(PreparePayloadWorkItem.ScenarioDirectoryName).binlog -o $(PreparePayloadWorkItemBaseDirectory)%(PreparePayloadWorkItem.ScenarioDirectoryName) &amp;&amp; rm -rf app/obj app/bin &amp;&amp; cd ../ &amp;&amp; zip -r %(PreparePayloadWorkItem.ScenarioDirectoryName).zip %(PreparePayloadWorkItem.ScenarioDirectoryName)</Command>
7482
<WorkingDirectory>%(PreparePayloadWorkItem.PayloadDirectory)</WorkingDirectory>
7583
</PreparePayloadWorkItem>
7684
</ItemGroup>
7785

78-
<ItemGroup>
86+
<ItemGroup Condition="'$(_IsInnerLoop)' != 'true'">
7987
<HelixWorkItem Include="@(MAUIiOSScenario -> 'SOD - %(Identity) IPA Size')">
8088
<PreCommands>cp -r $HELIX_CORRELATION_PAYLOAD/$(PreparePayloadOutDirectoryName)/%(HelixWorkItem.ScenarioDirectoryName) $HELIX_WORKITEM_ROOT/pub</PreCommands>
8189
<Command>$(Python) test.py sod --scenario-name &quot;%(Identity)&quot; $(ScenarioArgs)</Command>
@@ -124,7 +132,7 @@
124132
<![CDATA[
125133
# PreCommands
126134
export XHARNESSPATH=$XHARNESS_CLI_PATH
127-
135+
128136
cp -v $HELIX_CORRELATION_PAYLOAD/$(PreparePayloadOutDirectoryName)/mauiios/MauiiOSDefault.ipa $HELIX_WORKITEM_ROOT/mauiios/MauiiOSDefault.zip
129137
mkdir $HELIX_WORKITEM_ROOT/mauiios/pub
130138
cp -v $HELIX_CORRELATION_PAYLOAD/$(PreparePayloadOutDirectoryName)/mauiios/versions.json $HELIX_WORKITEM_ROOT/mauiios/pub/versions.json
@@ -152,7 +160,7 @@
152160
<![CDATA[
153161
# PreCommands
154162
export XHARNESSPATH=$XHARNESS_CLI_PATH
155-
163+
156164
cp -v $HELIX_CORRELATION_PAYLOAD/$(PreparePayloadOutDirectoryName)/mauisamplecontentios/MauiSampleContentiOSDefault.ipa $HELIX_WORKITEM_ROOT/mauisamplecontentios/MauiSampleContentiOSDefault.zip
157165
mkdir $HELIX_WORKITEM_ROOT/mauisamplecontentios/pub
158166
cp -v $HELIX_CORRELATION_PAYLOAD/$(PreparePayloadOutDirectoryName)/mauisamplecontentios/versions.json $HELIX_WORKITEM_ROOT/mauisamplecontentios/pub/versions.json
@@ -172,44 +180,41 @@
172180
]]>
173181
</CustomCommands>
174182
</XHarnessAppBundleToTest>
175-
<!-- Now also disabled for normal mono runs. (Reenable for mono and native aot once fixed). Tracking issue: https://github.com/dotnet/performance/issues/3148 -->
176-
<!-- <XHarnessAppBundleToTest Condition="'$(RuntimeFlavor)' == 'mono'" Include="Device Startup - iOS Maui Blazor Default Template">
177-
<AppBundlePath>$(ScenariosDir)mauiblazorios.zip</AppBundlePath>
178-
<WorkItemTimeout>00:15:00</WorkItemTimeout>
179-
<TestTarget>ios-device</TestTarget>
180-
<CustomCommands>
181-
<![CDATA[
182-
# PreCommands
183-
export XHARNESSPATH=$XHARNESS_CLI_PATH
184-
185-
cp -v $HELIX_CORRELATION_PAYLOAD/$(PreparePayloadOutDirectoryName)/mauiblazorios/MauiBlazoriOSDefault.ipa $HELIX_WORKITEM_ROOT/mauiblazorios/MauiBlazoriOSDefault.zip
186-
mkdir $HELIX_WORKITEM_ROOT/mauiblazorios/pub
187-
cp -v $HELIX_CORRELATION_PAYLOAD/$(PreparePayloadOutDirectoryName)/mauiblazorios/versions.json $HELIX_WORKITEM_ROOT/mauiblazorios/pub/versions.json
188-
unzip -d $HELIX_WORKITEM_ROOT/mauiblazorios $HELIX_WORKITEM_ROOT/mauiblazorios/MauiBlazoriOSDefault.zip
189-
mv $HELIX_WORKITEM_ROOT/mauiblazorios/Payload/MauiBlazoriOSDefault.app $HELIX_WORKITEM_ROOT/mauiblazorios/MauiBlazoriOSDefault.app
190-
cp -f embedded.mobileprovision $HELIX_WORKITEM_ROOT/mauiblazorios/MauiBlazoriOSDefault.app
191-
cd $HELIX_WORKITEM_ROOT/mauiblazorios
192-
sign MauiBlazoriOSDefault.app
193-
194-
# Testing commands
195-
$(Python) test.py devicestartup -1-device-type ios -1-package-path MauiBlazoriOSDefault.app -1-package-name net.dot.mauiblazortesting -1-scenario-name "%(Identity)" -1-use-fully-drawn-time -1-fully-drawn-magic-string __MAUI_Blazor_WebView_OnAfterRender__ -1-startup-iterations 5 $(ScenarioArgs)
196-
((result=$?))
197-
198-
# Post commands
199-
$(Python) post.py
200-
exit $result
201-
]]>
202-
</CustomCommands>
203-
</XHarnessAppBundleToTest> -->
204183
</ItemGroup>
205184

185+
<ItemGroup Condition="'$(_IsInnerLoop)' == 'true'">
186+
<MAUIiOSInnerLoopScenario Include="MAUI iOS Inner Loop">
187+
<ScenarioDirectoryName>mauiiosinnerloop</ScenarioDirectoryName>
188+
<PayloadDirectory>$(ScenariosDir)%(ScenarioDirectoryName)</PayloadDirectory>
189+
</MAUIiOSInnerLoopScenario>
190+
</ItemGroup>
191+
192+
<ItemGroup Condition="'$(_IsInnerLoop)' == 'true'">
193+
<PreparePayloadWorkItem Include="@(MAUIiOSInnerLoopScenario)">
194+
<Command>XCODE_PATH=`find /Applications -maxdepth 1 -type d -name 'Xcode_*.app' | sort -t_ -k2 -V | tail -1` &amp;&amp; echo &quot;Selected Xcode: $XCODE_PATH&quot; &amp;&amp; sudo xcode-select -s &quot;$XCODE_PATH&quot; &amp;&amp; $(Python) pre.py default -f $(PERFLAB_Framework)-ios</Command>
195+
<WorkingDirectory>%(PreparePayloadWorkItem.PayloadDirectory)</WorkingDirectory>
196+
</PreparePayloadWorkItem>
197+
</ItemGroup>
198+
199+
<ItemGroup Condition="'$(_IsInnerLoop)' == 'true' and '$(iOSRid)' != 'ios-arm64'">
200+
<HelixWorkItem Include="@(MAUIiOSInnerLoopScenario -> 'Inner Loop Simulator - %(Identity)')">
201+
<PreCommands>$(_MacEnvVars);export IOS_RID=$(iOSRid);$(Python) setup_helix.py $(PERFLAB_Framework)-ios &quot;$(_MSBuildArgs)&quot; || exit $?</PreCommands>
202+
<Command>$(Python) test.py iosinnerloop --csproj-path app/MauiiOSInnerLoop.csproj --edit-src &quot;src/MainPage.xaml.cs;src/MainPage.xaml&quot; --edit-dest &quot;app/Pages/MainPage.xaml.cs;app/Pages/MainPage.xaml&quot; --bundle-id com.companyname.mauiiosinnerloop -f $(PERFLAB_Framework)-ios -c Debug --msbuild-args &quot;$(_MSBuildArgs)&quot; --device-type simulator --inner-loop-iterations $(InnerLoopIterations) --scenario-name &quot;%(Identity)&quot; $(ScenarioArgs)</Command>
203+
<PostCommands>export IOS_RID=$(iOSRid);$(Python) post.py</PostCommands>
204+
<DownloadFilesFromResults>output.log</DownloadFilesFromResults>
205+
</HelixWorkItem>
206+
</ItemGroup>
207+
208+
<ItemGroup Condition="'$(_IsInnerLoop)' == 'true' and '$(iOSRid)' == 'ios-arm64'">
209+
<HelixWorkItem Include="@(MAUIiOSInnerLoopScenario -> 'Inner Loop Device - %(Identity)')">
210+
<PreCommands>$(_MacEnvVars);export IOS_RID=$(iOSRid);$(Python) setup_helix.py $(PERFLAB_Framework)-ios &quot;$(_MSBuildArgs)&quot; || exit $?</PreCommands>
211+
<Command>$(Python) test.py iosinnerloop --csproj-path app/MauiiOSInnerLoop.csproj --edit-src &quot;src/MainPage.xaml.cs;src/MainPage.xaml&quot; --edit-dest &quot;app/Pages/MainPage.xaml.cs;app/Pages/MainPage.xaml&quot; --bundle-id com.companyname.mauiiosinnerloop -f $(PERFLAB_Framework)-ios -c Debug --msbuild-args &quot;$(_MSBuildArgs)&quot; --device-type device --inner-loop-iterations $(InnerLoopIterations) --scenario-name &quot;%(Identity)&quot; $(ScenarioArgs)</Command>
212+
<PostCommands>export IOS_RID=$(iOSRid);$(Python) post.py</PostCommands>
213+
<DownloadFilesFromResults>output.log</DownloadFilesFromResults>
214+
</HelixWorkItem>
215+
</ItemGroup>
206216

207-
<!--
208-
This target is to work around the XHarness command that depend on scripts in ORIGPYPATH
209-
being run before we get to run our normal Post commands. AddXHarnessCLI is the XHarness
210-
Target so we just make sure we add this after that.
211-
-->
212-
<Target Name="ResetPYTHONPATHBeforeXHarnessCommand" AfterTargets="AddXHarnessCLI">
217+
<Target Name="ResetPYTHONPATHBeforeXHarnessCommand" AfterTargets="AddXHarnessCLI" Condition="'$(_IsInnerLoop)' != 'true'">
213218
<PropertyGroup>
214219
<HelixPostCommands>export PYTHONPATH=$ORIGPYPATH;$(HelixPostCommands)</HelixPostCommands>
215220
</PropertyGroup>

eng/performance/maui_scenarios_ios_innerloop.proj

Lines changed: 0 additions & 111 deletions
This file was deleted.

0 commit comments

Comments
 (0)