Repository navigation
iOS: Extract FlutterPlatformViewsController platform-thread state to Obj-C - #196142
Conversation
|
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 |
There was a problem hiding this comment.
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.
fd95997 to
737759f
Compare
…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
737759f to
3b3ff73
Compare
|
autosubmit label was removed for flutter/flutter/196142, because - This pull request has the |
|
Test exemption: Refactor covered by existing tests. |
|
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. |
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
When
FlutterPlatformViewsControllerwas 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 writeself.platformViews[viewId].This migrates state that is only ever touched on the platform thread from C++ container types to Obj-C containers:
_platformViewsbecomes anNSMutableDictionaryof a newFlutterPlatformViewDataclass, replacing thePlatformViewDatastruct._viewsToDisposebecomes anNSMutableSet._previousCompositionOrderbecomes anNSMutableArray, so the testing accessor returns a copy rather than boxing on each call.This also updates
computeViewsToDisposeto return anNSArrayinstead of astd::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-assistbot 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.