Add a cli flag for toggling HCPP use, and enable it#182516
Conversation
…g' into finally_working_flag
There was a problem hiding this comment.
Code Review
This pull request introduces a new command-line flag, --enable-surface-control, to allow toggling the Hybrid Composition Platform Views (HCPP) feature on Android. The changes correctly plumb this flag from the Flutter tool down to the engine. A new integration test is also added, which effectively verifies that legacy platform view creation calls are upgraded to HCPP when the flag is enabled by checking logcat output.
My review found one area for improvement for the sake of consistency. In FlutterShellArgs.java, the default value for the new flag's intent extra is true, which is inconsistent with other similar flags like enable-impeller that default to false. I've suggested aligning this for better predictability.
| void addEnableSurfaceControlFlag({required bool verboseHelp}) { | ||
| argParser.addFlag( | ||
| 'enable-surface-control', | ||
| hide: !verboseHelp, |
There was a problem hiding this comment.
The flag name and its help text are meaningless to 99% of Flutter developers
There was a problem hiding this comment.
very fair, am planning to rename it in an immediate follow up pr
|
|
||
| // Test HCPP Platform Views on Vulkan. | ||
| if (impellerBackend == ImpellerBackend.vulkan) { | ||
| // Run upgrade_legacy_pv_types first, as it is testing the flag and not the manifest |
There was a problem hiding this comment.
nit can you put the full path here and explain why it matters that the test is testing the flag and not the manifest. It took me a bit to understand what upgrade_legacy_pv_types was referring to.
There was a problem hiding this comment.
I would prefer not to add the full path, as there is no enforcement that it is correct. Someone might reasonably move the file up or down subdirectories, and the comment will become incorrect. Notably this is not true about the name in my opinion, because of the proximity of this comment to the check right below
| // directory. | ||
| if (!file.path.contains('hcpp')) { | ||
| // directory, except for upgrade_legacy_pv_types which we already ran. | ||
| if (!file.path.contains('hcpp') || file.path.contains('upgrade_legacy_pv_types')) { |
There was a problem hiding this comment.
I think having the string helps with understandability but what do you think about having a list of runFirstTests and for now having it contain one item. I think it would make the callsite code easier to understand then the explanation for why a test needs to be run first can go adjacent to its entry in the list.
| import 'package:flutter_driver/flutter_driver.dart'; | ||
| import 'package:test/test.dart'; | ||
|
|
||
| /// Smoke test: verifies that when HCPP is enabled, all three |
| 'Expected 0 legacy creations, ' | ||
| 'got $legacyCount. Logcat:\n$logcat', | ||
| ); | ||
| }, timeout: Timeout.none); |
There was a problem hiding this comment.
Is timeout none correct here?
There was a problem hiding this comment.
Yeah, it's also the timeout used for all the other hcpp tests. It's only a per test timeout, so the target will still fail if it reaches the ci timeout
|
autosubmit label was removed for flutter/flutter/182516, because - The status or check suite Linux analyzer_benchmark has failed. Please fix the issues identified (or deflake) before re-applying this label. |
1. Adds the flag (`--enable-surface-control`) 2. Adds a driver test which tests that we can upgrade all 3 of the create calls (HC, TLHC w VD fallback, TLHC w HC fallback) 3. Respects its use in create call Does not yet rename it, will do that in a follow up as it's logically independent. --------- Co-authored-by: Gray Mackall <[email protected]>
Roll Flutter from b31548feb941 to 1141b2bdce66 (56 revisions) flutter/flutter@b31548f...1141b2b 2026-02-27 [email protected] flutter#182361 Fix delegate copy on plugins init (flutter/flutter#182362) 2026-02-27 [email protected] Roll Dart SDK from 8b036b3e63cb to 1cdb7dfd913e (1 revision) (flutter/flutter#183004) 2026-02-27 [email protected] Manual roll Dart SDK to 3.12.0-192.0.dev (flutter/flutter#182883) 2026-02-27 [email protected] Roll Skia from e2062707b0c0 to ed220c490eea (1 revision) (flutter/flutter#182992) 2026-02-27 [email protected] Roll Skia from e5aa1ab5c59c to e2062707b0c0 (3 revisions) (flutter/flutter#182989) 2026-02-27 [email protected] Linux build hooks: Read compiler config from CMakeCache.txt (flutter/flutter#181004) 2026-02-27 [email protected] Roll ICU from a86a32e67b8d to 7971660ba630 (3 revisions) (flutter/flutter#182986) 2026-02-27 [email protected] Roll Skia from 49c2de95384e to e5aa1ab5c59c (2 revisions) (flutter/flutter#182980) 2026-02-27 [email protected] [Impeller] Remove shared rendering data from TextFrame (flutter/flutter#182886) 2026-02-27 [email protected] Add fl_view_new_sized_to_content() (flutter/flutter#182924) 2026-02-27 [email protected] [Shortcuts] Improve focus node debug labels (flutter/flutter#181834) 2026-02-27 [email protected] Add a cli flag for toggling HCPP use, and enable it (flutter/flutter#182516) 2026-02-27 [email protected] `SizedBox.square()` (flutter/flutter#182731) 2026-02-27 [email protected] [web] Fix stack corruption in Skwasm and harden withStackScope API (flutter/flutter#182912) 2026-02-26 [email protected] Roll zlib to 7eda07b1e067 (flutter/flutter#182692) 2026-02-26 [email protected] [ CI ] Don't crash analysis when ktlint isn't on PATH (flutter/flutter#181854) 2026-02-26 [email protected] Add calls to await `flutterDriver.waitUntilFirstFrameRasterized()` for all `android_engine_test` screenshot tests (flutter/flutter#182961) 2026-02-26 [email protected] Roll Skia from f44d7db68805 to 49c2de95384e (30 revisions) (flutter/flutter#182957) 2026-02-26 [email protected] Support sending window constraints in metrics events (flutter/flutter#182921) 2026-02-26 [email protected] Reland: remove material in context_menu_controller_test, icon_test, list_wheel_scroll_view_test, media_query_test, platform_menu_bar_test (flutter/flutter#182891) 2026-02-26 [email protected] Remove some instances of useMaterial3: true (flutter/flutter#182944) 2026-02-26 [email protected] [Impeller] Use bilinear filtering for non-uniform scaled text (flutter/flutter#182224) 2026-02-26 [email protected] Add a ResidentCompilerFactory to create ResidentCompiler instances. (flutter/flutter#182930) 2026-02-26 [email protected] Add a getter in run.dart to access use-application-binary flag. (flutter/flutter#182931) 2026-02-26 [email protected] [web] Roll Firefox to 148 (flutter/flutter#182859) 2026-02-26 [email protected] Roll Packages from acd9adb to e1d0169 (8 revisions) (flutter/flutter#182946) 2026-02-26 [email protected] Roll Fuchsia Linux SDK from XI0Ax7fbtYE4XKYAQ... to G1GwOdVt5bM7GjMSY... (flutter/flutter#182942) 2026-02-26 [email protected] Add test for WindowPositioner.toString (flutter/flutter#182906) 2026-02-26 [email protected] Remove unused function prototype (flutter/flutter#182915) 2026-02-26 [email protected] Resolve inconsistency with SchedulerBinding.scheduleTask usage recomm… (flutter/flutter#182531) 2026-02-26 [email protected] Fix false positives for hit test misses in flutter_test (flutter/flutter#180856) 2026-02-26 [email protected] Replace an instance of flutter/engine with flutter/flutter (flutter/flutter#182655) 2026-02-26 [email protected] Use null-aware elements in widgets/routes.dart (flutter/flutter#181242) 2026-02-26 [email protected] Fix typos in method names across multiple files (flutter/flutter#182584) 2026-02-26 [email protected] Fix RawAutocomplete crash when options are hidden (flutter/flutter#182785) 2026-02-26 [email protected] Describe implications of tree-status and Google Testing for PRs (flutter/flutter#182916) 2026-02-26 [email protected] Make sure that a StretchingOverscrollIndicator doesn't crash when it … (flutter/flutter#182499) 2026-02-26 [email protected] framework: Use a super-parameter in several missed cases (flutter/flutter#182580) 2026-02-25 [email protected] `WidgetStatesConstraint` as a mixin (flutter/flutter#181704) 2026-02-25 [email protected] Paint the paragraph as a single image (flutter/flutter#181206) 2026-02-25 [email protected] Remove `ExtendSelectionByPageIntent` (flutter/flutter#182642) 2026-02-25 [email protected] feat: add few required properties to test widgets app (flutter/flutter#182805) 2026-02-25 [email protected] Updates MenuAnchor to respect software keyboard (flutter/flutter#180975) 2026-02-25 [email protected] Roll ImGui to v1.92.6-docking (flutter/flutter#182799) 2026-02-25 [email protected] Roll GoogleTest to e9907112b472 (flutter/flutter#182795) 2026-02-25 [email protected] Make positionInlineChildren assert much clearer (flutter/flutter#182093) ...
1. Adds the flag (`--enable-surface-control`) 2. Adds a driver test which tests that we can upgrade all 3 of the create calls (HC, TLHC w VD fallback, TLHC w HC fallback) 3. Respects its use in create call Does not yet rename it, will do that in a follow up as it's logically independent. --------- Co-authored-by: Gray Mackall <[email protected]>
…r#11137) Roll Flutter from b31548feb941 to 1141b2bdce66 (56 revisions) flutter/flutter@b31548f...1141b2b 2026-02-27 [email protected] flutter#182361 Fix delegate copy on plugins init (flutter/flutter#182362) 2026-02-27 [email protected] Roll Dart SDK from 8b036b3e63cb to 1cdb7dfd913e (1 revision) (flutter/flutter#183004) 2026-02-27 [email protected] Manual roll Dart SDK to 3.12.0-192.0.dev (flutter/flutter#182883) 2026-02-27 [email protected] Roll Skia from e2062707b0c0 to ed220c490eea (1 revision) (flutter/flutter#182992) 2026-02-27 [email protected] Roll Skia from e5aa1ab5c59c to e2062707b0c0 (3 revisions) (flutter/flutter#182989) 2026-02-27 [email protected] Linux build hooks: Read compiler config from CMakeCache.txt (flutter/flutter#181004) 2026-02-27 [email protected] Roll ICU from a86a32e67b8d to 7971660ba630 (3 revisions) (flutter/flutter#182986) 2026-02-27 [email protected] Roll Skia from 49c2de95384e to e5aa1ab5c59c (2 revisions) (flutter/flutter#182980) 2026-02-27 [email protected] [Impeller] Remove shared rendering data from TextFrame (flutter/flutter#182886) 2026-02-27 [email protected] Add fl_view_new_sized_to_content() (flutter/flutter#182924) 2026-02-27 [email protected] [Shortcuts] Improve focus node debug labels (flutter/flutter#181834) 2026-02-27 [email protected] Add a cli flag for toggling HCPP use, and enable it (flutter/flutter#182516) 2026-02-27 [email protected] `SizedBox.square()` (flutter/flutter#182731) 2026-02-27 [email protected] [web] Fix stack corruption in Skwasm and harden withStackScope API (flutter/flutter#182912) 2026-02-26 [email protected] Roll zlib to 7eda07b1e067 (flutter/flutter#182692) 2026-02-26 [email protected] [ CI ] Don't crash analysis when ktlint isn't on PATH (flutter/flutter#181854) 2026-02-26 [email protected] Add calls to await `flutterDriver.waitUntilFirstFrameRasterized()` for all `android_engine_test` screenshot tests (flutter/flutter#182961) 2026-02-26 [email protected] Roll Skia from f44d7db68805 to 49c2de95384e (30 revisions) (flutter/flutter#182957) 2026-02-26 [email protected] Support sending window constraints in metrics events (flutter/flutter#182921) 2026-02-26 [email protected] Reland: remove material in context_menu_controller_test, icon_test, list_wheel_scroll_view_test, media_query_test, platform_menu_bar_test (flutter/flutter#182891) 2026-02-26 [email protected] Remove some instances of useMaterial3: true (flutter/flutter#182944) 2026-02-26 [email protected] [Impeller] Use bilinear filtering for non-uniform scaled text (flutter/flutter#182224) 2026-02-26 [email protected] Add a ResidentCompilerFactory to create ResidentCompiler instances. (flutter/flutter#182930) 2026-02-26 [email protected] Add a getter in run.dart to access use-application-binary flag. (flutter/flutter#182931) 2026-02-26 [email protected] [web] Roll Firefox to 148 (flutter/flutter#182859) 2026-02-26 [email protected] Roll Packages from acd9adb to e1d0169 (8 revisions) (flutter/flutter#182946) 2026-02-26 [email protected] Roll Fuchsia Linux SDK from XI0Ax7fbtYE4XKYAQ... to G1GwOdVt5bM7GjMSY... (flutter/flutter#182942) 2026-02-26 [email protected] Add test for WindowPositioner.toString (flutter/flutter#182906) 2026-02-26 [email protected] Remove unused function prototype (flutter/flutter#182915) 2026-02-26 [email protected] Resolve inconsistency with SchedulerBinding.scheduleTask usage recomm… (flutter/flutter#182531) 2026-02-26 [email protected] Fix false positives for hit test misses in flutter_test (flutter/flutter#180856) 2026-02-26 [email protected] Replace an instance of flutter/engine with flutter/flutter (flutter/flutter#182655) 2026-02-26 [email protected] Use null-aware elements in widgets/routes.dart (flutter/flutter#181242) 2026-02-26 [email protected] Fix typos in method names across multiple files (flutter/flutter#182584) 2026-02-26 [email protected] Fix RawAutocomplete crash when options are hidden (flutter/flutter#182785) 2026-02-26 [email protected] Describe implications of tree-status and Google Testing for PRs (flutter/flutter#182916) 2026-02-26 [email protected] Make sure that a StretchingOverscrollIndicator doesn't crash when it … (flutter/flutter#182499) 2026-02-26 [email protected] framework: Use a super-parameter in several missed cases (flutter/flutter#182580) 2026-02-25 [email protected] `WidgetStatesConstraint` as a mixin (flutter/flutter#181704) 2026-02-25 [email protected] Paint the paragraph as a single image (flutter/flutter#181206) 2026-02-25 [email protected] Remove `ExtendSelectionByPageIntent` (flutter/flutter#182642) 2026-02-25 [email protected] feat: add few required properties to test widgets app (flutter/flutter#182805) 2026-02-25 [email protected] Updates MenuAnchor to respect software keyboard (flutter/flutter#180975) 2026-02-25 [email protected] Roll ImGui to v1.92.6-docking (flutter/flutter#182799) 2026-02-25 [email protected] Roll GoogleTest to e9907112b472 (flutter/flutter#182795) 2026-02-25 [email protected] Make positionInlineChildren assert much clearer (flutter/flutter#182093) ...
1. Adds the flag (`--enable-surface-control`) 2. Adds a driver test which tests that we can upgrade all 3 of the create calls (HC, TLHC w VD fallback, TLHC w HC fallback) 3. Respects its use in create call Does not yet rename it, will do that in a follow up as it's logically independent. --------- Co-authored-by: Gray Mackall <[email protected]>
--enable-surface-control)Does not yet rename it, will do that in a follow up as it's logically independent.