Pivot, recorded and compared.
Microsoft’s Pivot control was recorded, measured, and compared with the Flutter implementation. The results show a closer match—not an indistinguishable renderer.
- Reference
- WP8.1 emulator
- OS build
- 8.10.12358.0
- Evidence
- 57 native trials
- Hardware
- Lumia pending
Watch the comparison
Native is on the left; Flutter is on the right. Each MP4 already contains both panels on the same recorded input timeline, so one play action starts both views. Flutter frames come from the widget tree, not a redrawn native video.
The videos are encoded at 30 fps. Missing native capture time is represented by holding the last captured frame; frames are not interpolated or stretched to force agreement.
What changed
| Observed behavior | Flutter change |
|---|---|
| Headers use native spacing and cyclic order. | WpPivotView lays out headers from measured widths and reference coordinates. |
| A drag moves the current page without continuously exposing its neighbor. | Header and body travel are controlled separately instead of by a stock PageView. |
| Selection commits on release with distinct outgoing and incoming phases. | The transition moves the old page out before bringing the selected page in. |
| A skipped header rearranges before sliding into place. | The selected header becomes the anchor before a one-slot transition. |
| The threshold-crossing sample is consumed before body travel. | Gesture tracking follows the delivered-sample sequence found in the logs and images. |
The original WpPivot header-only API remains available. The full view is an explicit migration and preserves page state, controller selection, keyboard navigation, and reduced motion.
Measured result
Three pilot inputs compare the retained 2.0 baseline with the revised candidate. Position MAE is mean absolute error in the 480 × 800 reference image.
| Pilot | Moving-page MAE | Different visible pages |
|---|---|---|
| Header tap | 313.0 → 32.2 px | 22 → 0 of 28 |
| Committed drag | 158.6 → 4.7 px | 23 → 1 of 46 |
| Previous wrap | 305.3 → 16.1 px | 27 → 0 of 36 |
Supported
- Original PNGs and image tracking support layout and coarse-motion comparison.
- The candidate matches the selection sequence in 21 fresh trials and 21 earlier core trials.
- Nine later header and title gesture trials bring the archive to 57 native trials and 3,830 PNGs.
Not proven
- Emulator evidence does not validate Lumia hardware behavior.
- Capture timing does not establish display latency or a universal flick threshold.
- Font and rasterizer differences remain visible.
Runtime
The release web build replayed four scenarios with one warm-up and three measured repetitions. All 12 measured trials selected the expected page.
| Engine measurement | Median | 95th percentile | Maximum |
|---|---|---|---|
| Build work | 3.00ms | 5.20ms | 11.60ms |
| Raster work / submission | 0.40ms | 0.80ms | 24.00ms |
| Total frame span | 3.70ms | 6.10ms | 28.70ms |
| Post-selection frame interval | 16.60ms | 17.30ms | 29.30ms |
These numbers support smooth animation on the measured host. They do not measure physical display presentation, native browser touch input, Windows Flutter, mobile performance, or Lumia hardware.
Evidence
The archives include original frames, input traces, manifests, comparisons, metrics, source snapshots, and SHA-256 inventories. Unsuccessful trials and superseded prototypes remain labeled and available.
Next checks
Wider gesture sampling, mobile runtime measurement, and a separately labeled Lumia cross-check remain open work.