Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: flutter/flutter
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: dc2a8703e12b
Choose a base ref
...
head repository: flutter/flutter
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: f7b66f3e7b4d
Choose a head ref
  • 12 commits
  • 31 files changed
  • 11 contributors

Commits on Jul 10, 2026

  1. Update Depdencies Used By flutter_engine_group_performance (#189229)

    I raised the warn and error version in this PR:
    #189109. The dependencies used by
    `flutter_engine_group_performance` were not updated as a part of that
    PR. I missed that update earlier, and I'm guessing that
    `flutter_engine_group_performance` is post-submit test.
    
    Fixes #189228 
    
    ## Pre-launch Checklist
    
    - [x] I read the [Contributor Guide] and followed the process outlined
    there for submitting PRs.
    - [x] I read the [AI contribution guidelines] and understand my
    responsibilities, or I am not using AI tools.
    - [x] I read the [Tree Hygiene] wiki page, which explains my
    responsibilities.
    - [x] I read and followed the [Flutter Style Guide], including [Features
    we expect every widget to implement].
    - [x] I signed the [CLA].
    - [x] I listed at least one issue that this PR fixes in the description
    above.
    - [x] I updated/added relevant documentation (doc comments with `///`).
    - [x] I added new tests to check the change I am making, or this PR is
    [test-exempt].
    - [x] I followed the [breaking change policy] and added [Data Driven
    Fixes] where supported.
    - [x] All existing and new tests are passing.
    
    If you need help, consider asking for advice on the #hackers-new channel
    on [Discord].
    
    If this change needs to override an active code freeze, provide a
    comment explaining why. The code freeze workflow can be overridden by
    code reviewers. See pinned issues for any active code freezes with
    guidance.
    
    **Note**: The Flutter team is currently trialing the use of [Gemini Code
    Assist for
    GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code).
    Comments from the `gemini-code-assist` bot should not be taken as
    authoritative feedback from the Flutter team. If you find its comments
    useful you can update your code accordingly, but if you are unsure or
    disagree with the feedback, please feel free to wait for a Flutter team
    member's review for guidance on which automated comments should be
    addressed.
    
    <!-- Links -->
    [Contributor Guide]:
    https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
    [AI contribution guidelines]:
    https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines
    [Tree Hygiene]:
    https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
    [test-exempt]:
    https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
    [Flutter Style Guide]:
    https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
    [Features we expect every widget to implement]:
    https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
    [CLA]: https://cla.developers.google.com/
    [flutter/tests]: https://github.com/flutter/tests
    [breaking change policy]:
    https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
    [Discord]:
    https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
    [Data Driven Fixes]:
    https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
    jesswrd authored Jul 10, 2026
    Configuration menu
    Copy the full SHA
    1d5bcf3 View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    2144227 View commit details
    Browse the repository at this point in the history
  3. Configuration menu
    Copy the full SHA
    97b6bac View commit details
    Browse the repository at this point in the history
  4. [web] Repair RenderCanvas CSS size drift (#188797)

    ## What changed
    
    This PR makes the stock `RenderCanvas` path repair stale inline canvas
    CSS size even when the backing-store size and DPR have not changed.
    
    Changes:
    
    - Factor the expected logical canvas CSS size into a helper.
    - Check actual `style.width` / `style.height` before the same-size early
    return.
    - Re-apply backing-store / DPR CSS size when the inline style is stale.
    - Add regression coverage for `1206 x 2142 @ DPR 3`, repairing
    `0.333333px` back to `402 x 714px`.
    
    ## Why
    
    #188723 tracks a Safari/WebKit Skwasm case where the
    canvas backing store can be valid while the visible CSS/display rect
    remains collapsed around `0.328125 x 0.328125px`.
    
    The existing stock `RenderCanvas` code repairs CSS size on physical-size
    changes and DPR changes, but not when only the inline CSS value is
    stale. This PR makes that same-size path self-heal.
    
    ## Scope
    
    This does not enable Skwasm by default, change WebKit policy, depend on
    the multi-surface rasterizer, or by itself close all Safari/WebKit
    default-policy gates.
    
    ## Validation
    
    - `dart format`: passed.
    - `git diff --check`: passed.
    - Targeted `felt` browser test in the #188797 checkout: passed locally.
    - Command: `DART_SUPPRESS_ANALYTICS=true HOME=/private/tmp
    DART_SDK_DIR=/private/tmp/flutter-mobile-safari-skwasm-canvas-css-size-fix-upstream-worktree/engine/src/flutter/third_party/dart/tools/sdks/dart-sdk
    ./dev/felt test --gcs-prod --browser chrome --compiler dart2js
    --renderer canvaskit --fail-early
    test/engine/compositing/render_canvas_test.dart`
    - Result: `chrome-dart2js-canvaskit-engine`, `3/3`, `All tests passed!`.
    - Fresh `engine/src/out/wasm_release/flutter_web_sdk` build from the
    #188797 worktree: passed locally.
    - `dev/benchmarks/macrobenchmarks` built as web wasm/profile using the
    local `wasm_release` SDK: passed locally.
    - Guardrail: preserved SDK/app build logs and generated bundle were
    checked for `FLUTTER_WEB_SKWASM_FORCE_MULTI_SURFACE_RASTERIZER`; the
    string was absent.
    - Simulator MobileSafari, Skwasm, `variant=none`, no forced CSS sizing,
    `bench_card_infinite_scroll`: `probe-complete`, `errors: []`, loaded
    `skwasm_heavy`, `main.dart.mjs`, and `main.dart.wasm`,
    `crossOriginIsolated=true`, canvas backing `1206 x 2142`,
    CSS/display/style `402 x 714` / `402px x 714px`.
    - Physical iPhone MobileSafari, Skwasm, `variant=none`, no forced CSS
    sizing, `bench_card_infinite_scroll`: `all-benchmarks-complete`,
    `errors: []`, loaded `skwasm_heavy`, `main.dart.mjs`, and
    `main.dart.wasm`, canvas backing `1206 x 2142`, CSS/display/style `402 x
    714` / `402px x 714px`.
    - Physical iPhone MobileSafari, Skwasm, `variant=none`, no forced CSS
    sizing, `bench_simple_lazy_text_scroll`: `all-benchmarks-complete`,
    `errors: []`, loaded `skwasm_heavy`, `main.dart.mjs`, and
    `main.dart.wasm`, canvas backing `1206 x 2142`, CSS/display/style `402 x
    714` / `402px x 714px`.
    
    Physical iPhone page telemetry reported `crossOriginIsolated=false` even
    though the harness served isolation headers. Skwasm still loaded through
    the WebKit allowlist, so this is local physical
    geometry/benchmark-completion evidence, not a cross-origin-isolation
    pass.
    
    Related issue: #188723.
    Broader Safari/WebKit Wasm/Skwasm tracking: #178893.
    
    ---------
    
    Co-authored-by: Harry Terkelsen <[email protected]>
    MarlonJD and harryterkelsen authored Jul 10, 2026
    Configuration menu
    Copy the full SHA
    8303fed View commit details
    Browse the repository at this point in the history
  5. Adds a missing await to a FutureOr (#189198)

    This merely adds a missing `await` to a `FutureOr` for a new `linter`
    change tracked at:
    
    - dart-lang/sdk#59105
    
    Since the surrounding was already `async`, I don't expect any tests to
    break.
    
    ## Pre-launch Checklist
    
    - [x] I read the [Contributor Guide] and followed the process outlined
    there for submitting PRs.
    - [x] I read the [AI contribution guidelines] and understand my
    responsibilities, or I am not using AI tools.
    - [x] I read the [Tree Hygiene] wiki page, which explains my
    responsibilities.
    - [x] I read and followed the [Flutter Style Guide], including [Features
    we expect every widget to implement].
    - [x] I signed the [CLA].
    - [x] I listed at least one issue that this PR fixes in the description
    above.
    - [ ] I updated/added relevant documentation (doc comments with `///`).
    - [x] I added new tests to check the change I am making, or this PR is
    [test-exempt].
    - [x] I followed the [breaking change policy] and added [Data Driven
    Fixes] where supported.
    - [x] All existing and new tests are passing.
    
    If you need help, consider asking for advice on the #hackers-new channel
    on [Discord].
    
    If this change needs to override an active code freeze, provide a
    comment explaining why. The code freeze workflow can be overridden by
    code reviewers. See pinned issues for any active code freezes with
    guidance.
    
    **Note**: The Flutter team is currently trialing the use of [Gemini Code
    Assist for
    GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code).
    Comments from the `gemini-code-assist` bot should not be taken as
    authoritative feedback from the Flutter team. If you find its comments
    useful you can update your code accordingly, but if you are unsure or
    disagree with the feedback, please feel free to wait for a Flutter team
    member's review for guidance on which automated comments should be
    addressed.
    
    <!-- Links -->
    [Contributor Guide]:
    https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
    [AI contribution guidelines]:
    https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines
    [Tree Hygiene]:
    https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
    [test-exempt]:
    https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
    [Flutter Style Guide]:
    https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
    [Features we expect every widget to implement]:
    https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
    [CLA]: https://cla.developers.google.com/
    [flutter/tests]: https://github.com/flutter/tests
    [breaking change policy]:
    https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
    [Discord]:
    https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
    [Data Driven Fixes]:
    https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
    FMorschel authored Jul 10, 2026
    Configuration menu
    Copy the full SHA
    8062c0e View commit details
    Browse the repository at this point in the history
  6. Configuration menu
    Copy the full SHA
    f9628e3 View commit details
    Browse the repository at this point in the history
  7. Configuration menu
    Copy the full SHA
    a6ad4b0 View commit details
    Browse the repository at this point in the history
  8. Assert TextStyle height is not NaN (#186617)

    Fixes #175248
    
    Prevents `TextStyle(height: double.nan)` and `getParagraphStyle(height:
    double.nan)` from passing NaN line heights down to dart:ui in debug
    mode. This produces a clear assertion before platform-specific text
    layout failures.
    
    Tests:
    - `./bin/dart format --output=none --set-exit-if-changed
    packages/flutter/lib/src/painting/text_style.dart
    packages/flutter/test/painting/text_style_test.dart`
    - `./bin/flutter test
    packages/flutter/test/painting/text_style_test.dart`
    - `./bin/flutter analyze
    packages/flutter/lib/src/painting/text_style.dart
    packages/flutter/test/painting/text_style_test.dart`
    - `git diff --check`
    mvincentong authored Jul 10, 2026
    Configuration menu
    Copy the full SHA
    bc6a4c8 View commit details
    Browse the repository at this point in the history
  9. [Impeller] Recycle HostBuffer arena entries only after GPU completion (

    …#188965)
    
    Fixes #184091.
    
    HostBuffer reuses each arena entry kHostBufferArenaSize (4) resets after
    it was written, assuming no more than 4 frames are ever in flight.
    Nothing enforces that assumption. On macOS the embedder applies no frame
    backpressure, so GPU-heavy workloads run the pipeline deeper than the
    arena and per-frame uniform and vertex data is overwritten while the GPU
    is still reading it, corrupting rendering.
    
    This makes reuse completion-aware. Each backend context records command
    buffer submissions and completions in a monotonic watermark, and
    HostBuffer::Reset retires entries whose GPU work has not yet completed
    (keeping their buffers alive until it has) and starts them over with
    fresh allocations. Deep pipelines now cost transient memory instead of
    correctness, and the memory drains back once the GPU catches up.
    
    Metal tracks completion via command buffer completed handlers and Vulkan
    via the fence waiter. GLES tracks at reactor consumption granularity,
    since GL synchronizes buffer reuse implicitly and provides no equivalent
    completion signal there.
    
    Before fix (repro:
    #184091 (comment)):
    
    
    https://github.com/user-attachments/assets/ef49ab50-8273-4571-a759-bf4d8285a372
    
    After fix:
    
    
    https://github.com/user-attachments/assets/450eadf4-6165-47bb-83df-68a51c274e65
    
    ## Pre-launch Checklist
    
    - [x] I read the [Contributor Guide] and followed the process outlined
    there for submitting PRs.
    - [x] I read the [AI contribution guidelines] and understand my
    responsibilities, or I am not using AI tools.
    - [x] I read the [Tree Hygiene] wiki page, which explains my
    responsibilities.
    - [x] I read and followed the [Flutter Style Guide], including [Features
    we expect every widget to implement].
    - [x] I signed the [CLA].
    - [x] I listed at least one issue that this PR fixes in the description
    above.
    - [x] I updated/added relevant documentation (doc comments with `///`).
    - [x] I added new tests to check the change I am making, or this PR is
    [test-exempt].
    - [x] I followed the [breaking change policy] and added [Data Driven
    Fixes] where supported.
    - [x] All existing and new tests are passing.
    
    <!-- Links -->
    [Contributor Guide]:
    https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
    [AI contribution guidelines]:
    https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines
    [Tree Hygiene]:
    https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
    [test-exempt]:
    https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
    [Flutter Style Guide]:
    https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
    [Features we expect every widget to implement]:
    https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
    [CLA]: https://cla.developers.google.com/
    [breaking change policy]:
    https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
    [Data Driven Fixes]:
    https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
    bdero authored Jul 10, 2026
    Configuration menu
    Copy the full SHA
    1db664b View commit details
    Browse the repository at this point in the history
  10. [web] Preserve text field focus across tab switches (#188738)

    Fixes #178109
    
    **Problem**
    
    On Flutter Web, a focused `TextFormField` loses focus after switching to
    another browser tab and returning. The browser blurs the hidden text
    input before reporting the page as hidden, so the engine closes the text
    input connection too early.
    
    **Fix**
    
    Defer closing the text input connection when the document has lost focus
    and `relatedTarget` is null. If the page becomes hidden, keep the
    connection alive so focus can recover on tab resume. If the page stays
    visible, close as before to preserve window and iframe blur behavior.
    The delayed callback also skips closing if the document quickly regains
    focus.
    
    **Demo**
    
    | Before | After |
    |---|---|
    | https://flutter-demo-45-before.web.app |
    https://flutter-demo-45-after.web.app |
    
    Steps: focus the text field, type text, switch to another browser tab,
    then return. Before: `Focused` becomes `no`. After: `Focused` returns to
    `yes`.
    flutter-zl authored Jul 10, 2026
    Configuration menu
    Copy the full SHA
    6a01720 View commit details
    Browse the repository at this point in the history
  11. Fix broken listener code in WindowScope (#189208)

    ## What's new?
    WindowScope is an InheritedModel that is rebuilt with the same
    controller instance whenever the controller notifies its listeners. Its
    updateShouldNotify and updateShouldNotifyDependent compared the live
    controller's values against oldWidget.controller's values, but since the
    controller is the same object across rebuilds, those comparisons were
    always false and dependents never rebuilt.
    
    Capture a snapshot of each aspect value in the WindowScope constructor
    so the old and new widgets hold independent values that can be compared
    to detect which aspects changed. The per-aspect value computations are
    extracted into static helpers shared with the *Of accessors.
    
    ## Pre-launch Checklist
    
    - [x] I read the [Contributor Guide] and followed the process outlined
    there for submitting PRs.
    - [x] I read the [AI contribution guidelines] and understand my
    responsibilities, or I am not using AI tools.
    - [x] I read the [Tree Hygiene] wiki page, which explains my
    responsibilities.
    - [x] I read and followed the [Flutter Style Guide], including [Features
    we expect every widget to implement].
    - [x] I signed the [CLA].
    - [x] I listed at least one issue that this PR fixes in the description
    above.
    - [x] I updated/added relevant documentation (doc comments with `///`).
    - [x] I added new tests to check the change I am making, or this PR is
    [test-exempt].
    - [x] I followed the [breaking change policy] and added [Data Driven
    Fixes] where supported.
    - [x] All existing and new tests are passing.
    mattkae authored Jul 10, 2026
    Configuration menu
    Copy the full SHA
    fec28c6 View commit details
    Browse the repository at this point in the history
  12. [iOS][test] Fix VSyncClient display link deallocation test on iOS 27 (#…

    …188627)
    
    Follow-up to #187164, which fixed a retain cycle where `CADisplayLink`
    was directly targeting `VSyncClient` by introducing `VSyncClientRelay`
    as a weak-proxy target. The accompanying test verified the fix by
    checking both `weakClient == nil` (no retain cycle) and `weakDisplayLink
    == nil` (display link fully released) after deallocation. The test
    passes on iOS 18 and 26 but fails reproducibly on iOS 27. This PR
    renames and adjusts the test to reflect what it actually verifies: the
    absence of a retain cycle, not iOS-internal display server cleanup
    timing.
    
    ## Investigation
    
    On iOS 27, `weakClient == nil` passes: `VSyncClient` is correctly
    released. However `weakDisplayLink` remains non-nil indefinitely,
    causing the test to time out.
    
    `_CADisplayLinkAssertion` is a `QuartzCore`-internal object. It is
    created when `CADisplayLink` is added to a run loop and registered with
    the display server. On iOS 26 and earlier, this assertion is released
    synchronously when `link.invalidate()` is called. On iOS 27, the
    assertion persists: its release appears to be deferred to an internal
    display server event that never fires for a link that was never
    unpaused.
    
    ## Approaches ruled out
    
    - `remove + invalidate on task runner thread` (original) -> PERMANENT
    HOLD
    - `remove + invalidate on main run loop` -> PERMANENT HOLD
    - `isPaused = false + remove + invalidate in same synchronous block` ->
    PERMANENT HOLD
    
    The display server is out-of-process. No synchronous call sequence from
    the app side is sufficient to force it to release
    `_CADisplayLinkAssertion` for a link that was never activated.
    
    ## Fix
    
    The `weakDisplayLink` assertion was testing iOS-internal display server
    cleanup timing rather than the retain cycle the test was designed to
    catch. Since `VSyncClient` itself is correctly released (`weakClient ==
    nil`) on all iOS versions, there is no leak in Flutter's object graph.
    
    The test is renamed to `testDeallocatesAfterRegistrationCompletes` and
    the `weakDisplayLink` check is removed. The `weakClient` assertion is
    retained and continues to verify the no-retain-cycle invariant.
    
    ## Test Results
    | --- | --- | --- |
    | iOS | Before | Now |
    | 18.6 | Pass | Pass |
    | 26.0 | Pass | Pass |
    | 26.0.1 | Pass | Pass |
    | 26.1 | Pass | Pass |
    | 27.0 | Fail | Pass |
    
    ## Pre-launch Checklist
    
    - [x] I read the [Contributor Guide] and followed the process outlined
    there for submitting PRs.
    - [x] I read the [AI contribution guidelines] and understand my
    responsibilities, or I am not using AI tools.
    - [x] I read the [Tree Hygiene] wiki page, which explains my
    responsibilities.
    - [x] I read and followed the [Flutter Style Guide], including [Features
    we expect every widget to implement].
    - [x] I signed the [CLA].
    - [x] I listed at least one issue that this PR fixes in the description
    above.
    - [x] I updated/added relevant documentation (doc comments with `///`).
    - [x] I added new tests to check the change I am making, or this PR is
    [test-exempt].
    - [ ] I followed the [breaking change policy] and added [Data Driven
    Fixes] where supported.
    - [x] All existing and new tests are passing.
    
    If you need help, consider asking for advice on the #hackers-new channel
    on [Discord].
    
    If this change needs to override an active code freeze, provide a
    comment explaining why. The code freeze workflow can be overridden by
    code reviewers. See pinned issues for any active code freezes with
    guidance.
    
    **Note**: The Flutter team is currently trialing the use of [Gemini Code
    Assist for
    GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code).
    Comments from the `gemini-code-assist` bot should not be taken as
    authoritative feedback from the Flutter team. If you find its comments
    useful you can update your code accordingly, but if you are unsure or
    disagree with the feedback, please feel free to wait for a Flutter team
    member's review for guidance on which automated comments should be
    addressed.
    
    <!-- Links -->
    [Contributor Guide]:
    https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
    [AI contribution guidelines]:
    https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines
    [Tree Hygiene]:
    https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
    [test-exempt]:
    https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
    [Flutter Style Guide]:
    https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
    [Features we expect every widget to implement]:
    https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
    [CLA]: https://cla.developers.google.com/
    [flutter/tests]: https://github.com/flutter/tests
    [breaking change policy]:
    https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
    [Discord]:
    https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
    [Data Driven Fixes]:
    https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
    
    ---------
    
    Co-authored-by: Chris Bracken <[email protected]>
    Akhrameev and cbracken authored Jul 10, 2026
    Configuration menu
    Copy the full SHA
    f7b66f3 View commit details
    Browse the repository at this point in the history
Loading