Skip to content

[0.84] Reduce e2e test flakiness#16045

Merged
vmoroz merged 7 commits intomicrosoft:0.84-stablefrom
vmoroz:PR/0.84-fix-e2e-test-flakiness
Apr 29, 2026
Merged

[0.84] Reduce e2e test flakiness#16045
vmoroz merged 7 commits intomicrosoft:0.84-stablefrom
vmoroz:PR/0.84-fix-e2e-test-flakiness

Conversation

@vmoroz
Copy link
Copy Markdown
Member

@vmoroz vmoroz commented Apr 23, 2026

Description

Type of Change

  • Bug fix (non-breaking change which fixes an issue)

Why

PR validation on 0.84-stable flakes intermittently on the E2E Fabric jobs
(PR (Tests E2E Test App Fabric X64Hermes) / X86Hermes), with no usable
debugging signal — when the step fails the artifacts contain no crash or hang
dump. Re-runs eventually go green without a code change, which masks any real
underlying regression.

This PR addresses the problem on three tracks:

  1. Make E2E failures debuggable — register Windows Error Reporting
    LocalDumps for the test app and node, capture full-memory dumps from
    surviving processes after a failed step, install an in-process unhandled-
    exception filter as the primary crash mechanism (hosted CI agents route WER
    through a corporate-server policy that silently ignores per-exe LocalDumps),
    and bundle matching PDBs and a debugging README into the
    Crash dumps - <job> artifact.

  2. Fix the two known flake families that produced no dump (because there was
    no crash to dump)
    :

    • HomeUIADump.test.ts ±1 px height drift on text-rendered
      SpriteVisuals — Composition snaps a near-half-integer DWrite text
      measurement to either side of the integer boundary on different commits.
      Hardened the dump path to take multiple stable readings, and cherry-picked
      PR Remove HomeUIA snapshots #15921 from main which removed the test entirely (low-coverage,
      high-churn).
    • searchBox helper timeout ("Unable to enter correct search text into
      test searchbox") in 8 component-test files plus
      RNTesterNavigation.ts. WinAppDriver's setValue falls back to
      synthesized keystrokes for custom RN TextInputs, which append
      rather than replace — so waitUntil retries make the state worse, not
      better. Clearing the field before each setValue plus a faster retry
      cadence resolves it.
  3. Make transient install-step failures self-heal
    midgard-yarn-strict occasionally exits with code 57005 (0xDEAD) right
    after [2/2] Fetching packages…, requiring a manual re-run that masks
    the underlying transient. Wire ADO's built-in
    retryCountOnTaskFailure: 2 on every install / init / lage step so a
    single transient retries automatically before failing the build.

What

Crash-dump collection mechanism (Phases A, B, D)

  • .ado/scripts/SetupLocalDumps.cmd — made idempotent (reg add /f),
    parameterized on dump folder, registers the exe in AeDebug\AutoExclusionList
    so WER wins over the JIT path.
  • .ado/templates/prepare-build-env.yml — new opt-in localDumpsExeNames
    array parameter (default [] → no-op for existing callers); iterates and
    registers each name with SetupLocalDumps.cmd. Also grants
    SYSTEM:(OI)(CI)F and Users:(OI)(CI)F ACLs on CrashDumpRootPath so the
    WER service (LocalSystem) and packaged apps can write dumps there.
  • .ado/jobs/e2e-test.yml:
    • Passes [RNTesterApp-Fabric, node] to prepare-build-env.yml.
    • On test failure: a Capture dumps of surviving test processes step runs
      procdump64 -ma against any still-alive RNTesterApp-Fabric / node,
      writing into $(CrashDumpRootPath)\hang\ (subfolder is required — files
      written at the root were observed to disappear during the post-failure
      Update snapshots step on hosted agents).
    • A Collect in-process and fallback crash dumps step copies any
      in-process minidumps from %ProgramData%\RNW-E2E-Dumps\ into
      $(CrashDumpRootPath)\in-process\, and scans common WER fallback
      locations into $(CrashDumpRootPath)\recovered\.
    • A Bundle symbols and README with crash dumps step copies all *.pdb
      from the test app's Release output into $(CrashDumpRootPath)\symbols\
      (mirroring the deploy tree) and writes a README.md at the artifact
      root with WinDbg instructions and _NT_SYMBOL_PATH wiring. Gated on
      actual .dmp / .mdmp files existing — $(CrashDumpRootPath) doubles
      as MSBUILDDEBUGPATH, so build-time MSBuild failure logs land there
      too without needing symbols bundled.
    • Two opt-in pipeline parameters, both defaulted false, for re-validating
      the crash and hang capture paths when an agent image change forces a
      re-check: simulateCrashForTesting and simulateHangForTesting. The
      crash path uses a sentinel file at %ProgramData%\rnw-e2e-simulate-crash.flag;
      the hang path uses an env var RNW_SIMULATE_HANG=1 that gates a new
      HangSimulationTest.test.ts.
  • packages/e2e-test-app-fabric/windows/RNTesterApp-Fabric/RNTesterApp-Fabric.cpp:
    • InstallInProcessCrashDumpWriter() — top-level SetUnhandledExceptionFilter
      that writes MiniDumpWithFullMemory | WithHandleData | WithThreadInfo | WithUnloadedModules | WithProcessThreadData to
      %ProgramData%\RNW-E2E-Dumps\RNTesterApp-Fabric-<timestamp>-<pid>.dmp,
      then returns EXCEPTION_CONTINUE_SEARCH so the process still terminates
      and any downstream handlers run.
    • MaybeSimulateCrashForTesting() — flag-file-gated null-pointer write for
      crash-path validation.
    • HangForTesting automation command — Posts Sleep(INFINITE) onto the UI
      dispatcher, jamming the UI thread on the next work item (realistic
      deadlock shape).
  • packages/e2e-test-app-fabric/test/HangSimulationTest.test.ts — opt-in
    test (auto-skips unless RNW_SIMULATE_HANG=1) that drives HangForTesting
    and lets the test step time out so the post-failure ProcDump capture path
    has a hung packaged-app process to dump.

Snapshot dump stabilization

  • RNTesterApp-Fabric.cppDumpVisualTree now takes up to 3 dumps with
    50 ms gaps and returns the first dump that matches its successor (i.e. two
    consecutive dumps stringify identically). Targets composition's per-commit
    rounding non-determinism on text-derived Visual::Size values (~24.5 → 24
    vs 25 across commits). No client / test / snapshot changes; ~100 ms added
    per dumpVisualTree call.
  • Cherry-picked [0.84] Remove HomeUIA snapshots (#15921) from main
    Andrew Coates' PR rationale: "The HomeUIA snapshots do not provide much
    useful test coverage, and cause a lot of churn on the test snapshots.
    Removing them to make snapshot changes less ignorable."
    Belt-and-suspenders
    with multi-dump.

searchBox helper flake

Same flake-prone pattern duplicated across 9 sites. Updated all of them with
a single fix:

  • Added await searchBox.clearValue(); before setValue() inside the poll
    callback. Without the clear, retries append to existing text and the
    getText() === input comparison never converges.
  • Bumped timeout: 5000 → 10000 and reduced interval: 1500 → 500 for more
    retries within a longer window.

Files: TextInputComponentTest.test.ts, AccessibilityTest.test.ts,
ButtonComponentTest.test.ts, FlatListComponentTest.test.ts (×2 helpers),
PointerButtonComponentTest.test.ts, SwitchComponentTest.test.ts,
TouchableComponentTest.test.ts, ViewComponentTest.test.ts,
RNTesterNavigation.ts (inline poll in goToExample).

Install / init / lage step retry

midgard-yarn-strict@1.2.4 is unmaintained (last published 2021) and its
bundled yraf only auto-retries on ECONNRESET / ESOCKETTIMEDOUT /
ETIMEDOUT / ENOTFOUND. Other transient failures — including a fetch
helper killed mid-flight (the observed mode, exit code 57005 / 0xDEAD) —
bypass that retry path entirely. PR build 630484 hit this on the
Strict yarn install @rnw-scripts/beachball-config step right after
[2/2] Fetching packages…; a manual re-run went green with no code change.

ADO supports retryCountOnTaskFailure: 2 at the step level. Added to every
step that fetches from the npm registry:

  • .ado/build-template.ymlStrict yarn install @rnw-scripts/beachball-config
    • Build prepare-release and beachball-config.
  • .ado/prepare-release-bot.ymlyarn install + Build prepare-release and dependencies.
  • .ado/templates/strict-yarn-install.yml,
    .ado/templates/yarn-install.yml (both ManagedImage and HostedImage
    branches).
  • .ado/templates/react-native-init-windows.ymlcreaternwapp.cmd and
    creaternwlib.cmd init steps (each runs ~6 npm/yarn fetches internally).

Cost when the install passes first try: zero. When it flakes: ADO retries
the step up to twice before failing the build, visible in the pipeline UI
as explicit retry attempts so genuine deterministic failures still surface
clearly within ~1 minute instead of being masked by a manual re-run cycle.

Screenshots

N/A — pipeline / native / test changes only.

Testing

The crash-dump mechanism was validated end-to-end via the two opt-in
simulation parameters before they were defaulted back to false:

  • Crash simulation (build 630442): simulateCrashForTesting=true
    MaybeSimulateCrashForTesting reads the sentinel flag and dereferences a
    null pointer at startup → InstallInProcessCrashDumpWriter's UEF writes
    full-memory .dmp files (~32 MB each) to
    %ProgramData%\RNW-E2E-Dumps\ → diagnostic step copies them into the
    artifact under in-process/.
  • Hang simulation (build 630470): simulateHangForTesting=true
    HangForTesting posts Sleep(INFINITE) onto the UI dispatcher → jest test
    step times out → post-failure ProcDump captures full-memory dumps of the
    still-alive packaged app (~250 MB each) under hang/. Confirmed dumps
    ride to the artifact intact for both X64Hermes and X86Hermes.

The snapshot fix is observed in build 630476 (latest re-run): HomeUIADump
passed and all 828 snapshots passed across the suite. The searchBox fix
is unvalidated by CI yet — the fix targets the failure mode of build 630476
(TextInput triggers onPressIn and updates state text → "Unable to enter
correct search text into test searchbox" at 5095 ms).

The crash-dump artifact format is documented inline in
$(CrashDumpRootPath)\README.md, written by the bundle step.

Changelog

Should this change be included in the release notes: no

This is internal CI / test infrastructure. No runtime impact for consumers
of react-native-windows. The only product-code change is the in-process
crash-dump writer in the E2E test app (RNTesterApp-Fabric), which is not
shipped.

Microsoft Reviewers: Open in CodeFlow

@vmoroz vmoroz requested review from a team as code owners April 23, 2026 22:12
@vmoroz vmoroz changed the base branch from main to 0.84-stable April 23, 2026 22:13
@github-actions
Copy link
Copy Markdown

github-actions Bot commented Apr 24, 2026

Performance Test Results

Branch: PR/0.84-fix-e2e-test-flakiness
Commit: 0998e028
Time: 2026-04-29T00:41:57.205Z
Tests: 161/161 passed

❌ Regressions Detected

ScrollView

Scenario Baseline Current Change Status
ScrollView children-500 19.67ms 52.87ms +84.2%

ScrollView children-500: Duration increased by 84.2% / +16.00ms (threshold: 10% & 10ms)

✅ Passed

150 scenario(s) across 27 suite(s) — no regressions

SectionList

Scenario Mean Median StdDev Renders vs Baseline
SectionList mount 5.90ms 5.00ms ±1.73ms 1 +0.0%
SectionList unmount 0.30ms 0.00ms ±0.48ms 0 +0.0%
SectionList rerender 13.10ms 13.00ms ±3.25ms 2 +23.8%
SectionList with-3-sections-15-items 6.20ms 6.00ms ±1.32ms 1 +9.1%
SectionList with-5-sections-50-items 7.80ms 6.50ms ±2.44ms 1 +8.3%
SectionList with-10-sections-200-items 6.10ms 5.00ms ±2.13ms 1 -9.1%
SectionList with-20-sections-200-items 6.40ms 5.50ms ±1.96ms 1 +10.0%
SectionList with-section-separator 1.80ms 2.00ms ±0.63ms 1 +0.0%
SectionList with-item-separator 2.30ms 2.00ms ±0.82ms 1 +0.0%
SectionList with-header-footer 2.40ms 2.00ms ±2.01ms 1 +0.0%
SectionList with-section-footer 2.70ms 3.00ms ±0.95ms 1 +50.0%
SectionList with-sticky-section-headers 1.70ms 1.00ms ±1.06ms 1 -50.0%
SectionList with-empty-list 0.90ms 0.50ms ±1.52ms 1 -50.0%
SectionList with-50-sections-1000-items 1.80ms 2.00ms ±0.63ms 1 +0.0%

FlatList

Scenario Mean Median StdDev Renders vs Baseline
FlatList mount 5.50ms 5.00ms ±1.72ms 1 +25.0%
FlatList unmount 0.10ms 0.00ms ±0.32ms 0 +0.0%
FlatList rerender 11.70ms 11.00ms ±2.54ms 2 +22.2%
FlatList with-10-items 5.20ms 5.00ms ±0.92ms 1 +25.0%
FlatList with-100-items 6.00ms 5.50ms ±2.11ms 1 +10.0%
FlatList with-500-items 5.50ms 5.00ms ±2.72ms 1 +25.0%
FlatList with-1000-items 5.40ms 5.50ms ±1.17ms 1 +37.5%
FlatList horizontal 4.80ms 4.50ms ±2.25ms 1 -10.0%
FlatList with-separator 1.90ms 2.00ms ±0.57ms 1 +0.0%
FlatList with-header-footer 2.50ms 2.00ms ±2.12ms 1 +0.0%
FlatList with-empty-list 0.30ms 0.00ms ±0.48ms 1 -100.0%
FlatList with-get-item-layout 3.10ms 3.00ms ±0.57ms 1 +200.0%
FlatList inverted 1.60ms 2.00ms ±0.52ms 1 +33.3%
FlatList with-num-columns 4.20ms 3.50ms ±2.53ms 1 +16.7%

TouchableOpacity

Scenario Mean Median StdDev Renders vs Baseline
TouchableOpacity mount 0.80ms 1.00ms ±0.42ms 1 +0.0%
TouchableOpacity unmount 0.20ms 0.00ms ±0.42ms 0 +0.0%
TouchableOpacity rerender 1.50ms 2.00ms ±0.71ms 2 +100.0%
TouchableOpacity custom-active-opacity 0.90ms 1.00ms ±0.32ms 1 +0.0%
TouchableOpacity disabled 0.50ms 0.50ms ±0.53ms 1 -50.0%
TouchableOpacity with-all-handlers 0.60ms 1.00ms ±0.52ms 1 +0.0%
TouchableOpacity with-hit-slop 1.60ms 1.00ms ±2.07ms 1 +0.0%
TouchableOpacity with-delay 0.80ms 1.00ms ±0.42ms 1 +0.0%
TouchableOpacity nested 1.70ms 2.00ms ±0.67ms 1 +100.0%
TouchableOpacity multiple-10 7.00ms 6.00ms ±2.80ms 1 +0.0%
TouchableOpacity multiple-50 30.60ms 30.00ms ±6.25ms 1 +3.4%
TouchableOpacity multiple-100 48.67ms 51.00ms ±10.75ms 1 +2.0%

TouchableHighlight

Scenario Mean Median StdDev Renders vs Baseline
TouchableHighlight mount 0.40ms 0.00ms ±0.52ms 1 -100.0%
TouchableHighlight unmount 0.00ms 0.00ms ±0.00ms 0 +0.0%
TouchableHighlight rerender 0.40ms 0.00ms ±0.52ms 2 -100.0%
TouchableHighlight custom-underlay-color 0.50ms 0.50ms ±0.53ms 1 +Infinity%
TouchableHighlight custom-active-opacity 0.40ms 0.00ms ±0.52ms 1 +0.0%
TouchableHighlight disabled 0.30ms 0.00ms ±0.48ms 1 +0.0%
TouchableHighlight with-all-handlers 0.40ms 0.00ms ±0.52ms 1 +0.0%
TouchableHighlight with-hit-slop 0.30ms 0.00ms ±0.48ms 1 +0.0%
TouchableHighlight nested-touchables 1.10ms 1.00ms ±0.32ms 1 +0.0%
TouchableHighlight multiple-touchables-10 2.90ms 3.00ms ±0.88ms 1 +0.0%
TouchableHighlight multiple-touchables-50 16.00ms 15.50ms ±3.27ms 1 +24.0%
TouchableHighlight multiple-touchables-100 29.30ms 29.00ms ±4.99ms 1 +28.9%

Pressable

Scenario Mean Median StdDev Renders vs Baseline
Pressable mount 0.30ms 0.00ms ±0.48ms 1 +0.0%
Pressable unmount 0.10ms 0.00ms ±0.32ms 0 +0.0%
Pressable rerender 0.40ms 0.00ms ±0.52ms 2 -100.0%
Pressable with-all-handlers 0.40ms 0.00ms ±0.52ms 1 +0.0%
Pressable with-style-function 0.30ms 0.00ms ±0.48ms 1 +0.0%
Pressable disabled 0.40ms 0.00ms ±0.52ms 1 +0.0%
Pressable with-hit-slop 0.30ms 0.00ms ±0.48ms 1 +0.0%
Pressable nested 0.70ms 1.00ms ±0.48ms 1 +0.0%
Pressable multiple-10 3.60ms 3.00ms ±1.06ms 1 +0.0%
Pressable multiple-50 17.93ms 18.00ms ±2.71ms 1 +28.6%
Pressable multiple-100 19.73ms 14.00ms ±11.42ms 1 +16.7%

Modal

Scenario Mean Median StdDev Renders vs Baseline
Modal mount 0.40ms 0.00ms ±0.52ms 1 +0.0%
Modal unmount 0.00ms 0.00ms ±0.00ms 0 +0.0%
Modal rerender 0.50ms 0.50ms ±0.53ms 2 +Infinity%
Modal slide-animation 0.30ms 0.00ms ±0.48ms 1 +0.0%
Modal fade-animation 0.40ms 0.00ms ±0.52ms 1 +0.0%
Modal transparent 0.40ms 0.00ms ±0.52ms 1 +0.0%
Modal with-callbacks 0.50ms 0.50ms ±0.53ms 1 +Infinity%
Modal rich-content 1.80ms 1.00ms ±1.55ms 1 -50.0%
Modal with-accessibility 0.30ms 0.00ms ±0.48ms 1 +0.0%

Image

Scenario Mean Median StdDev Renders vs Baseline
Image mount 0.20ms 0.00ms ±0.42ms 1 +0.0%
Image unmount 0.00ms 0.00ms ±0.00ms 0 +0.0%
Image rerender 0.20ms 0.00ms ±0.42ms 2 +0.0%
Image with-resize-mode 0.30ms 0.00ms ±0.48ms 1 +0.0%
Image with-border-radius 0.30ms 0.00ms ±0.48ms 1 +0.0%
Image with-tint-color 0.30ms 0.00ms ±0.48ms 1 +0.0%
Image with-blur-radius 0.20ms 0.00ms ±0.42ms 1 +0.0%
Image with-accessibility 0.20ms 0.00ms ±0.42ms 1 +0.0%
Image multiple-10 0.73ms 1.00ms ±0.59ms 1 +0.0%
Image multiple-50 4.33ms 4.00ms ±1.45ms 1 +33.3%
Image multiple-100 8.73ms 8.00ms ±2.22ms 1 +0.0%

ActivityIndicator

Scenario Mean Median StdDev Renders vs Baseline
ActivityIndicator mount 0.10ms 0.00ms ±0.32ms 1 +0.0%
ActivityIndicator unmount 0.10ms 0.00ms ±0.32ms 0 +0.0%
ActivityIndicator rerender 0.10ms 0.00ms ±0.32ms 2 +0.0%
ActivityIndicator size-large 0.20ms 0.00ms ±0.42ms 1 +0.0%
ActivityIndicator size-small 0.10ms 0.00ms ±0.32ms 1 +0.0%
ActivityIndicator with-color 0.10ms 0.00ms ±0.32ms 1 +0.0%
ActivityIndicator not-animating 0.20ms 0.00ms ±0.42ms 1 +0.0%
ActivityIndicator with-accessibility 0.20ms 0.00ms ±0.42ms 1 +0.0%
ActivityIndicator multiple-10 1.00ms 1.00ms ±0.00ms 1 +0.0%
ActivityIndicator multiple-50 4.07ms 4.00ms ±1.39ms 1 +0.0%
ActivityIndicator multiple-100 8.80ms 9.00ms ±1.47ms 1 +28.6%

Switch

Scenario Mean Median StdDev Renders vs Baseline
Switch mount 0.20ms 0.00ms ±0.42ms 1 +0.0%
Switch unmount 0.10ms 0.00ms ±0.32ms 0 +0.0%
Switch rerender 0.40ms 0.00ms ±0.52ms 2 -100.0%
Switch value-true 0.00ms 0.00ms ±0.00ms 1 +0.0%
Switch disabled 0.30ms 0.00ms ±0.48ms 1 +0.0%
Switch custom-colors 0.10ms 0.00ms ±0.32ms 1 +0.0%
Switch on-value-change 0.50ms 0.00ms ±1.27ms 1 +0.0%
Switch with-accessibility 0.30ms 0.00ms ±0.48ms 1 +0.0%
Switch multiple-10 1.67ms 2.00ms ±0.49ms 1 +0.0%
Switch multiple-50 10.93ms 10.00ms ±3.10ms 1 +11.1%
Switch multiple-100 21.40ms 20.00ms ±3.64ms 1 +25.0%

Button

Scenario Mean Median StdDev Renders vs Baseline
Button mount 0.60ms 1.00ms ±0.52ms 1 +0.0%
Button unmount 0.00ms 0.00ms ±0.00ms 0 +0.0%
Button rerender 0.90ms 1.00ms ±0.32ms 2 +0.0%
Button disabled 0.60ms 1.00ms ±0.52ms 1 +0.0%
Button with-color 0.60ms 1.00ms ±0.52ms 1 +100.0%
Button with-accessibility 0.60ms 1.00ms ±0.52ms 1 +0.0%
Button multiple-10 6.27ms 6.00ms ±1.28ms 1 +0.0%
Button multiple-50 22.53ms 26.00ms ±9.46ms 1 -3.7%
Button multiple-100 16.40ms 16.00ms ±2.38ms 1 -15.8%

TextInput

Scenario Mean Median StdDev Renders vs Baseline
TextInput mount 0.10ms 0.00ms ±0.32ms 1 +0.0%
TextInput unmount 0.00ms 0.00ms ±0.00ms 0 +0.0%
TextInput rerender 0.20ms 0.00ms ±0.42ms 2 +0.0%
TextInput multiline 0.10ms 0.00ms ±0.32ms 1 +0.0%
TextInput with-value 0.10ms 0.00ms ±0.32ms 1 +0.0%
TextInput styled 0.20ms 0.00ms ±0.42ms 1 +0.0%
TextInput multiple-100 8.27ms 8.00ms ±1.53ms 1 +14.3%

View

Scenario Mean Median StdDev Renders vs Baseline
View mount 0.10ms 0.00ms ±0.32ms 1 +0.0%
View unmount 0.10ms 0.00ms ±0.32ms 0 +0.0%
View rerender 0.00ms 0.00ms ±0.00ms 2 +0.0%
View nested-50 3.87ms 4.00ms ±1.51ms 1 +33.3%
View nested-100 8.13ms 8.00ms ±1.51ms 1 +14.3%
View shadow 0.10ms 0.00ms ±0.32ms 1 +0.0%
View border-radius 0.20ms 0.00ms ±0.42ms 1 +0.0%
View nested-500 17.07ms 10.00ms ±13.93ms 1 +0.0%

Text

Scenario Mean Median StdDev Renders vs Baseline
Text mount 0.20ms 0.00ms ±0.42ms 1 +0.0%
Text unmount 0.20ms 0.00ms ±0.42ms 0 +0.0%
Text rerender 0.00ms 0.00ms ±0.00ms 2 +0.0%
Text long-1000 0.20ms 0.00ms ±0.42ms 1 +0.0%
Text nested 0.40ms 0.00ms ±0.52ms 1 +0.0%
Text styled 0.10ms 0.00ms ±0.32ms 1 +0.0%
Text multiple-100 9.20ms 9.00ms ±1.93ms 1 +28.6%

SectionList.native-perf-test.ts

Scenario Mean Median StdDev Renders vs Baseline
SectionList native mount 6.64ms 6.27ms ±1.10ms 1 -3.7%

FlatList.native-perf-test.ts

Scenario Mean Median StdDev Renders vs Baseline
FlatList native mount 7.06ms 7.37ms ±0.82ms 1 -20.2%

TouchableHighlight.native-perf-test.ts

Scenario Mean Median StdDev Renders vs Baseline
TouchableHighlight native mount 1.97ms 2.02ms ±0.27ms 1 -3.3%

TouchableOpacity.native-perf-test.ts

Scenario Mean Median StdDev Renders vs Baseline
TouchableOpacity native mount 2.45ms 2.17ms ±0.51ms 1 -30.8%

Pressable.native-perf-test.ts

Scenario Mean Median StdDev Renders vs Baseline
Pressable native mount 2.01ms 1.84ms ±0.35ms 1 -26.8%

ScrollView.native-perf-test.ts

Scenario Mean Median StdDev Renders vs Baseline
ScrollView native mount 3.97ms 3.89ms ±0.37ms 1 -3.9%

ActivityIndicator.native-perf-test.ts

Scenario Mean Median StdDev Renders vs Baseline
ActivityIndicator native mount 1.98ms 1.87ms ±0.42ms 1 -24.6%

TextInput.native-perf-test.ts

Scenario Mean Median StdDev Renders vs Baseline
TextInput native mount 2.87ms 2.56ms ±0.69ms 1 -37.3%

Switch.native-perf-test.ts

Scenario Mean Median StdDev Renders vs Baseline
Switch native mount 1.77ms 1.70ms ±0.30ms 1 -1.8%

Button.native-perf-test.ts

Scenario Mean Median StdDev Renders vs Baseline
Button native mount 2.51ms 2.26ms ±0.70ms 1 -13.2%

Modal.native-perf-test.ts

Scenario Mean Median StdDev Renders vs Baseline
Modal native mount 1.25ms 1.26ms ±0.10ms 1 +3.2%

Image.native-perf-test.ts

Scenario Mean Median StdDev Renders vs Baseline
Image native mount 2.08ms 2.02ms ±0.27ms 1 -10.6%

View.native-perf-test.ts

Scenario Mean Median StdDev Renders vs Baseline
View native mount 1.58ms 1.40ms ±0.58ms 1 -1.8%

Text.native-perf-test.ts

Scenario Mean Median StdDev Renders vs Baseline
Text native mount 1.96ms 1.83ms ±0.53ms 1 +5.3%

@vmoroz vmoroz force-pushed the PR/0.84-fix-e2e-test-flakiness branch from 775e88c to cc789b7 Compare April 28, 2026 18:12
vmoroz and others added 5 commits April 28, 2026 13:16
The HomeUIA snapshots do not provide much useful test coverage, and
cause a lot of churn on the test snapshots. Removing them to make
snapshot changes less ignorable.

Resolves the ±1px height drift on Appearance / AppState tabs by
removing the test that flaked on it.

(cherry picked from commit 08ad79f)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@vmoroz vmoroz changed the title (DO NOT MERGE) [0.84] Fix e2e test flakiness [0.84] Reduce e2e test flakiness Apr 28, 2026
@vmoroz vmoroz enabled auto-merge (squash) April 28, 2026 23:15
@vmoroz vmoroz merged commit 32b3e2b into microsoft:0.84-stable Apr 29, 2026
38 of 39 checks passed
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