Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

[macOS, multiwindow] Compositor gets FlutterView lazily #36392

Merged
merged 22 commits into from
Nov 3, 2022

Conversation

dkwingsmt
Copy link
Contributor

@dkwingsmt dkwingsmt commented Sep 23, 2022

This PR changes macos/FlutterCompositor so that instead of getting FlutterViewController* at construction, it gets a callback that provides the FlutterView* lazily.

Part of the multiwindow project (design doc): This is a necessary step for multi-window because FlutterCompositor is constructed at engine initialization, while there can be multiple views or view controllers added after initialization.

Existing tests are adapted. No tests are added.

Pre-launch Checklist

  • I read the Contributor Guide and followed the process outlined there for submitting PRs.
  • I read the Tree Hygiene wiki page, which explains my responsibilities.
  • I read and followed the Flutter Style Guide and the C++, Objective-C, Java style guides.
  • I listed at least one issue that this PR fixes in the description above.
  • I added new tests to check the change I am making or feature I am adding, or Hixie said the PR is test-exempt. See testing the engine for instructions on
    writing and running engine tests.
  • I updated/added relevant documentation (doc comments with ///).
  • I signed the CLA.
  • All existing and new tests are passing.

If you need help, consider asking for advice on the #hackers-new channel on Discord.

@dkwingsmt dkwingsmt requested a review from gw280 September 29, 2022 01:13
@gw280 gw280 removed their request for review September 29, 2022 18:40
@zanderso
Copy link
Member

From PR triage: @dkwingsmt is this ready for another review pass from @stuartmorgan?

@dkwingsmt
Copy link
Contributor Author

@zanderso @.stuartmorgan said he did not know enough to review this PR. Can you help me find someone to review it?

@iskakaushik
Copy link
Contributor

I'm trying to understand how this would get used in the multi-window context, can you provide a brief sketch of how you would end up wiring the get view callback when there are multiple views at play?

@dkwingsmt
Copy link
Contributor Author

dkwingsmt commented Sep 30, 2022

Sure!

How will the compositor get view controllers in the future?

  • The macos/FlutterEngine currently stores a single viewController, but in the future it will store a map of view controllers, which maps from surface IDs to view controllers (every view controller will have a unique ID).
  • The view controller currently uses a fake ID 0 to call the callbacks, but in the future it will receive correct IDs.

Both changes (among others) are described in the design doc. It's still in progress, but contains sufficient information for this PR. https://docs.google.com/document/d/1U_ciMTHJgDrnw8kIo9sGKhiKFOycWRmz1yVVI_osCXg/edit

The core takeaway is that, in a multi-window world,

  • A view controller corresponds to a view, therefore there will be multiple view controllers (and they can be added after the app starts).
  • The Compositor class is a singleton.

Therefore the compositor must be able to handle additional views, instead of just the one from the constructor. It must either have a method of addViewController, or have a callback to get view controllers lazily.

@dkwingsmt dkwingsmt requested a review from iskakaushik October 3, 2022 18:30
engine-flutter-autoroll added a commit to engine-flutter-autoroll/flutter that referenced this pull request Nov 3, 2022
engine-flutter-autoroll added a commit to engine-flutter-autoroll/flutter that referenced this pull request Nov 3, 2022
engine-flutter-autoroll added a commit to engine-flutter-autoroll/flutter that referenced this pull request Nov 3, 2022
engine-flutter-autoroll added a commit to engine-flutter-autoroll/flutter that referenced this pull request Nov 3, 2022
engine-flutter-autoroll added a commit to engine-flutter-autoroll/flutter that referenced this pull request Nov 3, 2022
engine-flutter-autoroll added a commit to engine-flutter-autoroll/flutter that referenced this pull request Nov 3, 2022
engine-flutter-autoroll added a commit to engine-flutter-autoroll/flutter that referenced this pull request Nov 3, 2022
engine-flutter-autoroll added a commit to engine-flutter-autoroll/flutter that referenced this pull request Nov 3, 2022
engine-flutter-autoroll added a commit to engine-flutter-autoroll/flutter that referenced this pull request Nov 3, 2022
engine-flutter-autoroll added a commit to engine-flutter-autoroll/flutter that referenced this pull request Nov 3, 2022
engine-flutter-autoroll added a commit to engine-flutter-autoroll/flutter that referenced this pull request Nov 3, 2022
engine-flutter-autoroll added a commit to engine-flutter-autoroll/flutter that referenced this pull request Nov 3, 2022
GaryQian pushed a commit to flutter/flutter that referenced this pull request Nov 3, 2022
…114640)

* 27972e7d5 [fuchsia] mouse-input test (flutter/engine#37221)

* 491032cfc Update docs to mention felt build --host (flutter/engine#37224)

* 51089422d [macOS, multiwindow] Compositor gets FlutterView lazily (flutter/engine#36392)

* 2e89bce45 Enter a scope before calling Dart APIs in ThrowIfUIOperationsProhibited (flutter/engine#37226)

* 7843ae80c [Impeller] Correct the ordering of filters in 'Paint::WithFilters' (flutter/engine#37239)

* 2cbe38be0 Produce both ddc and dart2js platform files. (flutter/engine#37162)

* 2e3bc8052 Apply internal cl for C++20 prep (flutter/engine#37266)

* c183e7701 Roll Dart SDK from 883ab3f70e3d to 94ac8f6cc756 (1 revision) (flutter/engine#37267)

* d21f34673 Roll Fuchsia Mac SDK from BPxzJkBzD8R9GFg1n... to 8OZH-l7aK1-73Hyrf... (flutter/engine#37270)

* edbba9108 Roll Fuchsia Linux SDK from 9P-WnaDSnineZtFz0... to np4MU3wmDOuhlg6CR... (flutter/engine#37269)

* c7b2230e9 [Impeller] Wire-up AndroidSurfaceImpellerVulkan (flutter/engine#37249)

* 73c588119 [Impeller] dont call SPIRV_CROSS_THROW in SkSL backend (flutter/engine#37273)

* 893f5cd30 Roll Skia from f41fa8bffd58 to 78927395bf5c (20 revisions) (flutter/engine#37275)

* 2a7f3d0c1 Roll Skia from 78927395bf5c to fe751b616832 (1 revision) (flutter/engine#37276)

* fbe98c079 Roll Dart SDK from 94ac8f6cc756 to 8e089c61be58 (2 revisions) (flutter/engine#37277)

* 95b9b5d83 [Impeller] Add blit command to copy texture to buffer (flutter/engine#37198)

* 50c0fbc39 Roll Dart SDK from 8e089c61be58 to 866f5cfad18a (1 revision) (flutter/engine#37278)

* 138acebc6 Roll Skia from fe751b616832 to fdfa00287cff (1 revision) (flutter/engine#37279)

* 224b4013f Roll Fuchsia Mac SDK from 8OZH-l7aK1-73Hyrf... to mOXbRSWGSdWRXIefR... (flutter/engine#37282)

* 74f021922 Announce alerts through SemanticsService on Windows (flutter/engine#37173)

* a828fbb4a Roll Dart SDK from 866f5cfad18a to 433f075a852b (1 revision) (flutter/engine#37284)

* 49165f1b0 Roll Fuchsia Linux SDK from np4MU3wmDOuhlg6CR... to -0Xq1c-TncmWBWzqg... (flutter/engine#37285)

* d06616ecf Roll Skia from fdfa00287cff to cf3fa752a958 (2 revisions) (flutter/engine#37288)

* 0b79b5c3f Roll Skia from cf3fa752a958 to af0582c7b223 (5 revisions) (flutter/engine#37290)

* 66b244d9f [Impeller] validate calls to texture in SkSL (flutter/engine#37289)
schwa423 pushed a commit to schwa423/engine that referenced this pull request Nov 16, 2022
shogohida pushed a commit to shogohida/flutter that referenced this pull request Dec 7, 2022
…lutter#114640)

* 27972e7d5 [fuchsia] mouse-input test (flutter/engine#37221)

* 491032cfc Update docs to mention felt build --host (flutter/engine#37224)

* 51089422d [macOS, multiwindow] Compositor gets FlutterView lazily (flutter/engine#36392)

* 2e89bce45 Enter a scope before calling Dart APIs in ThrowIfUIOperationsProhibited (flutter/engine#37226)

* 7843ae80c [Impeller] Correct the ordering of filters in 'Paint::WithFilters' (flutter/engine#37239)

* 2cbe38be0 Produce both ddc and dart2js platform files. (flutter/engine#37162)

* 2e3bc8052 Apply internal cl for C++20 prep (flutter/engine#37266)

* c183e7701 Roll Dart SDK from 883ab3f70e3d to 94ac8f6cc756 (1 revision) (flutter/engine#37267)

* d21f34673 Roll Fuchsia Mac SDK from BPxzJkBzD8R9GFg1n... to 8OZH-l7aK1-73Hyrf... (flutter/engine#37270)

* edbba9108 Roll Fuchsia Linux SDK from 9P-WnaDSnineZtFz0... to np4MU3wmDOuhlg6CR... (flutter/engine#37269)

* c7b2230e9 [Impeller] Wire-up AndroidSurfaceImpellerVulkan (flutter/engine#37249)

* 73c588119 [Impeller] dont call SPIRV_CROSS_THROW in SkSL backend (flutter/engine#37273)

* 893f5cd30 Roll Skia from f41fa8bffd58 to 78927395bf5c (20 revisions) (flutter/engine#37275)

* 2a7f3d0c1 Roll Skia from 78927395bf5c to fe751b616832 (1 revision) (flutter/engine#37276)

* fbe98c079 Roll Dart SDK from 94ac8f6cc756 to 8e089c61be58 (2 revisions) (flutter/engine#37277)

* 95b9b5d83 [Impeller] Add blit command to copy texture to buffer (flutter/engine#37198)

* 50c0fbc39 Roll Dart SDK from 8e089c61be58 to 866f5cfad18a (1 revision) (flutter/engine#37278)

* 138acebc6 Roll Skia from fe751b616832 to fdfa00287cff (1 revision) (flutter/engine#37279)

* 224b4013f Roll Fuchsia Mac SDK from 8OZH-l7aK1-73Hyrf... to mOXbRSWGSdWRXIefR... (flutter/engine#37282)

* 74f021922 Announce alerts through SemanticsService on Windows (flutter/engine#37173)

* a828fbb4a Roll Dart SDK from 866f5cfad18a to 433f075a852b (1 revision) (flutter/engine#37284)

* 49165f1b0 Roll Fuchsia Linux SDK from np4MU3wmDOuhlg6CR... to -0Xq1c-TncmWBWzqg... (flutter/engine#37285)

* d06616ecf Roll Skia from fdfa00287cff to cf3fa752a958 (2 revisions) (flutter/engine#37288)

* 0b79b5c3f Roll Skia from cf3fa752a958 to af0582c7b223 (5 revisions) (flutter/engine#37290)

* 66b244d9f [Impeller] validate calls to texture in SkSL (flutter/engine#37289)
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
autosubmit Merge PR when tree becomes green via auto submit App platform-macos
Projects
Status: Done
Development

Successfully merging this pull request may close these issues.

7 participants