Skip to content

iOS: Extract FlutterPlatformViewsController platform-thread state to Obj-C - #196142

Merged
cbracken merged 1 commit into
flutter:masterfrom
cbracken:extract-platform-thread-state
Nov 10, 2026
Merged

cbracken merged 1 commit into
flutter:masterfrom
cbracken:extract-platform-thread-state

Conversation

@cbracken

@cbracken cbracken commented Nov 6, 2026

Copy link
Copy Markdown
Member

When FlutterPlatformViewsController was ported from C++ to Obj-C, I moved its C++ container types as-is. These were exposed through accessors that return a reference to the underlying ivar so that callers could write self.platformViews[viewId].

This migrates state that is only ever touched on the platform thread from C++ container types to Obj-C containers:

  • _platformViews becomes an NSMutableDictionary of a new FlutterPlatformViewData class, replacing the PlatformViewData struct.
  • _viewsToDispose becomes an NSMutableSet.
  • _previousCompositionOrder becomes an NSMutableArray, so the testing accessor returns a copy rather than boxing on each call.

This also updates computeViewsToDispose to return an NSArray instead of a std::vector.

Containers accessed from the raster-thread (slices, composition params, composition order, visited views) are left as C++, since that state will eventually move to the C++ IOSExternalViewEmbedder class as part of the embedder API work.

This is a refactor with no changes to behaviour.

Issue: #185139
Issue: #112232

Pre-launch Checklist

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. 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.

@cbracken
cbracken requested a review from a team as a code owner November 6, 2026 22:49
@flutter-dashboard

Copy link
Copy Markdown

It looks like this pull request may not have tests. Please make sure to add tests or get an explicit test exemption before merging.

If you are not sure if you need tests, consider this rule of thumb: the purpose of a test is to make sure someone doesn't accidentally revert the fix. Ask yourself, is there anything in your PR that you feel it is important we not accidentally revert back to how it was before your fix?

Reviewers: Read the Tree Hygiene page and make sure this patch meets those guidelines before LGTMing. If both you and the PR author believe this PR qualifies for a test exemption, escalate to the tech lead for the changed area to review and apply the test-exempt label. All reviewers should feel empowered to ask for tests before escalating.

@github-actions github-actions Bot added platform-ios iOS applications specifically engine flutter/engine related. See also e: labels. team-ios Owned by iOS platform team labels Nov 6, 2026

@gemini-code-assist gemini-code-assist Bot 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.

Code Review

This pull request refactors FlutterPlatformViewsController by migrating platform view data structures from C++ collections and structs to Objective-C classes and collections, specifically introducing FlutterPlatformViewData and using NSMutableDictionary, NSMutableSet, and NSMutableArray. Feedback on the changes suggests updating a comment for viewsToDispose to accurately reflect that it is now only accessed on the platform thread, as the newly introduced NSMutableSet is not thread-safe.

@cbracken
cbracken force-pushed the extract-platform-thread-state branch 3 times, most recently from fd95997 to 737759f Compare November 6, 2026 23:08
…Obj-C

When `FlutterPlatformViewsController` was ported from C++ to Obj-C, I
moved its C++ container types as-is. These were exposed through
accessors that return a reference to the underlying ivar so that callers
could write `self.platformViews[viewId]`.

This migrates state that is only ever touched on the platform thread
from C++ container types to Obj-C containers:

* `_platformViews` becomes an `NSMutableDictionary` of a new
  `FlutterPlatformViewInfo` class, replacing the `PlatformViewData`
  struct.
* `_viewsToDispose` becomes an `NSMutableSet`.
* `_previousCompositionOrder` becomes an `NSMutableArray`, so the
  testing accessor returns a copy rather than boxing on each call.

This also updates `computeViewsToDispose` to return an `NSArray` instead
of a `std::vector`.

Containers accessed from the raster-thread (slices, composition params,
composition order, visited views) are left as C++, since that state will
eventually move to the C++ IOSExternalViewEmbedder class as part of the
embedder API work.

This is a refactor with no changes to behaviour.

Issue: flutter#185139
Issue: flutter#112232
@cbracken cbracken added the autosubmit Merge PR when tree becomes green via auto submit App label Nov 10, 2026
@auto-submit auto-submit Bot removed the autosubmit Merge PR when tree becomes green via auto submit App label Nov 10, 2026
@auto-submit

auto-submit Bot commented Nov 10, 2026

Copy link
Copy Markdown
Contributor

autosubmit label was removed for flutter/flutter/196142, because - This pull request has the missing-tests label and does not have the test-exempt label. Please add tests or obtain a test exemption from a tech lead before re-applying the autosubmit label.

@vashworth

Copy link
Copy Markdown
Contributor

Test exemption: Refactor covered by existing tests.

@vashworth vashworth added test-exempt Exempt from tests. Overrides `missing-tests` label autosubmit Merge PR when tree becomes green via auto submit App labels Nov 10, 2026
@cbracken
cbracken enabled auto-merge November 10, 2026 21:02
@auto-submit auto-submit Bot removed the autosubmit Merge PR when tree becomes green via auto submit App label Nov 10, 2026
@auto-submit

auto-submit Bot commented Nov 10, 2026

Copy link
Copy Markdown
Contributor

autosubmit label was removed for flutter/flutter/196142, because - The status or check suite Dashboard Checks has failed. Please fix the issues identified (or deflake) before re-applying this label.

@cbracken
cbracken added this pull request to the merge queue Nov 10, 2026
Merged via the queue into flutter:master with commit ad856f0 Nov 10, 2026
29 checks passed
@cbracken
cbracken deleted the extract-platform-thread-state branch November 10, 2026 23:41
auto-submit Bot pushed a commit to flutter/packages that referenced this pull request Nov 11, 2026
flutter/flutter@fffd8c2...b98afb5

2026-11-11 [email protected] Roll Dart SDK from 172cf8f121c0 to 8f15c4ca2d41 (1 revision) (flutter/flutter#196367)
2026-11-11 [email protected] Roll Skia from 657283e78115 to cc4c54f752ba (5 revisions) (flutter/flutter#196365)
2026-11-11 [email protected] Roll Skia from 2605c4a9761c to 657283e78115 (1 revision) (flutter/flutter#196358)
2026-11-11 [email protected] Roll Dart SDK from 890c6d15334c to 172cf8f121c0 (1 revision) (flutter/flutter#196352)
2026-11-11 [email protected] [flutter_tools] Migrate general.shard project, runner, and web tests off globals (flutter/flutter#196128)
2026-11-11 [email protected] [flutter_tools] Migrate test helpers and integration tests off globals (flutter/flutter#196124)
2026-11-11 [email protected] [web] Report skwasm WebGL context creation failure instead of hanging (flutter/flutter#193293)
2026-11-11 [email protected] [flutter_tools] Migrate commands.shard tests off globals (flutter/flutter#196139)
2026-11-11 [email protected] [devicelab] Fix memory benchmark tap synchronization and swipe flakes (flutter/flutter#194457)
2026-11-11 [email protected] Roll Skia from 06062e36d938 to 2605c4a9761c (2 revisions) (flutter/flutter#196350)
2026-11-11 [email protected] Do not wait again for a closed mock event stream in tear down (flutter/flutter#196110)
2026-11-11 [email protected] [gen_l10n] Add `use-explicit-plural-values` option (flutter/flutter#194816)
2026-11-11 [email protected] Roll Skia from 7bd33f8a3b70 to 06062e36d938 (2 revisions) (flutter/flutter#196340)
2026-11-11 [email protected] Skip redundant work in plugin_test_* (flutter/flutter#196258)
2026-11-10 [email protected] Drop test_timeout_secs from shards that no longer need it (flutter/flutter#196277)
2026-11-10 [email protected] Roll Dart SDK from 15c1699d3eeb to 890c6d15334c (1 revision) (flutter/flutter#196321)
2026-11-10 [email protected] iOS: Extract FlutterPlatformViewsController platform-thread state to Obj-C (flutter/flutter#196142)
2026-11-10 [email protected] Remove `Mac web_tool_tests` and take new subshard builders out of bringup (flutter/flutter#196276)
2026-11-10 [email protected] Roll Skia from 9c3d43d8a04b to 7bd33f8a3b70 (12 revisions) (flutter/flutter#196317)
2026-11-10 [email protected] Take customer_testing_devtools out of bringup (flutter/flutter#196239)
2026-11-10 [email protected] Roll ICU from a0ea93436c52 to b09986242cfb (1 revision) (flutter/flutter#196316)
2026-11-10 [email protected] [flutter_tools] Avoid unlinking native_assets.json and handle EXDEV (flutter/flutter#196134)
2026-11-10 [email protected] Remove old `Windows tool_integration_tests` builders and take the new shards out of bringup (flutter/flutter#196275)
2026-11-10 [email protected] [SwiftPM] Disable tests for when settings fail to compile (flutter/flutter#196310)
2026-11-10 [email protected] Roll Fuchsia Test Scripts from PXc5D7S_q6sIYpfFJ... to oEU515sDqSTvD8Spx... (flutter/flutter#196289)
2026-11-10 [email protected] Fix ime insets animation jump (flutter/flutter#191453)
2026-11-10 [email protected] Link to original PR in automatic cherry-pick PRs (flutter/flutter#196130)
2026-11-10 [email protected] Roll Packages from 565c657 to 08faf64 (9 revisions) (flutter/flutter#196296)
2026-11-10 [email protected] Roll Skia from b11315d0a096 to 9c3d43d8a04b (45 revisions) (flutter/flutter#196295)
2026-11-10 [email protected] Replace type-specific window widgets with a single Window widget (flutter/flutter#196002)
2026-11-10 [email protected] Roll Dart SDK from a2baae273bb2 to 15c1699d3eeb (2 revisions) (flutter/flutter#196294)

If this roll has caused a breakage, revert this CL and set the roller
to dry run mode using the controls here:
https://autoroll.skia.org/r/flutter-packages
Please CC [email protected],[email protected] on the revert to ensure that a human
is aware of the problem.

To file a bug in Packages: https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CICD Run CI/CD engine flutter/engine related. See also e: labels. missing-tests platform-ios iOS applications specifically team-ios Owned by iOS platform team test-exempt Exempt from tests. Overrides `missing-tests` label

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants