Skip to content

Measure only mobile package files in SOD jobs#5266

Open
matouskozak wants to merge 2 commits into
mainfrom
matouskozak-measure-mobile-package-files
Open

Measure only mobile package files in SOD jobs#5266
matouskozak wants to merge 2 commits into
mainfrom
matouskozak-measure-mobile-package-files

Conversation

@matouskozak

@matouskozak matouskozak commented Jul 24, 2026

Copy link
Copy Markdown
Member

Summary

  • stage only the signed APK/IPA and versions.json for mobile package-size SOD work items
  • extract only Payload from the IPA so iOS extracted size measures the installed app bundle
  • exclude binlogs, dSYMs, mapping files, unsigned APKs, and resource-designer assemblies from app-size metrics

Related: #5265

Metric changes

APK Size / IPA Size now report exactly one file — the distributable package.

Extracted Size now reports only package contents. On iOS this also drops Apple's top-level Symbols directory, which the .NET iOS SDK adds to the IPA via _CreateIpaSymbols for crash symbolication but which is not part of the installed app. It accounted for 40–72% of the previous iOS extracted totals, so expect a one-time step down in that series. Android extracts APK contents only and is unaffected by that scoping.

This aligns with how the MAUI performance investigation repo measures app size: signed APK bytes on Android, .app bundle on iOS.

Validation

  • xmllint --noout eng/performance/maui_scenarios_android.proj eng/performance/maui_scenarios_ios.proj
  • git diff --check
  • verified locally against a real archive that unzip -d <dir> <ipa> 'Payload/*' extracts the app bundle and excludes Symbols
  • internal perf build 3030421 covered the staging change
    • all four Android Galaxy SOD-bearing jobs and all four iOS jobs succeeded
    • all 31 APK/IPA metrics reported exactly one file
    • Android package bytes matched the signed APK from the main comparison build exactly; iOS package drift was at most 546 bytes (0.0021%)
    • the only failed mobile job was an unrelated Pixel NoAnimation startup job, where SOD is disabled
  • internal perf build 3032474 covered the iOS extraction scoping
    • all 16 iOS SOD work items exited 0; every extracted-size result contains zero non-Payload files
    • all 16 extracted totals match the Payload-only subset of build 3030421 byte-for-byte, confirming only Symbols was dropped
    • the NativeAOT iOS job is marked failed because its Helix wait step hung for two hours after all 16 work items had already finished successfully, then hit the job timeout; this is a Helix polling issue unrelated to this change

Review

Reviewed independently with Claude Sonnet 5, Claude Opus 4.8, and Gemini 3.6 Flash; no high-confidence issues found.

Stage only the signed APK or IPA and version metadata for mobile SizeOnDisk work items so publish sidecars do not inflate package or extracted-size metrics.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 9cde6db4-052e-4355-a252-05b45b2e624e
Copilot AI review requested due to automatic review settings July 24, 2026 13:13

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates MAUI mobile SizeOnDisk (SOD) Helix work items so that app-size metrics measure only the actual package artifacts (signed APK/IPA) plus versions.json, instead of recursively measuring an entire publish directory that may contain unrelated build outputs.

Changes:

  • Android SOD work items now stage only the signed APK and versions.json into pub (instead of copying the whole scenario directory).
  • iOS SOD work items now stage only the IPA and versions.json into pub, and unpack only the staged IPA for extracted-size measurements.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.

File Description
eng/performance/maui_scenarios_ios.proj Restricts iOS SOD staging to the IPA + versions.json, and unpacks only the staged IPA for extracted-size measurement.
eng/performance/maui_scenarios_android.proj Restricts Android SOD staging to the APK + versions.json, and unpacks only the staged APK for extracted-size measurement.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Extract just Payload from the IPA so the extracted-size metric reports installed app content instead of also counting Apple's Symbols directory, which contributed 40-72% of the previous totals.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 9cde6db4-052e-4355-a252-05b45b2e624e
Copilot AI review requested due to automatic review settings July 27, 2026 13:41

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 2 out of 2 changed files in this pull request and generated no new comments.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants