Split off of https://github.com/flutter/flutter/pull/168019/
Worst case allocation performance for dl is fairly bad as we end up
copying the data many more times than something like an STL vector
would. At the cost of more memory usage, we can improve the case where
the display list grows quite large.
Introduce an action that is triggered when there is a push to
CHANGELOG.md on the stable branch, signifying that a release was
conducted, then update CHANGELOG.md on master to reflect these changes.
Was causing the following warning on Git checkout:
```
warning: the following paths have collided (e.g. case-sensitive paths
on a case-insensitive filesystem) and only one from the same
colliding group is in the working tree:
'packages/flutter_tools/test/data/vscode/application/Resources/app/package.json'
'packages/flutter_tools/test/data/vscode/application/resources/app/package.json'
```
Reland https://github.com/flutter/flutter/pull/170686.
Closes: https://github.com/flutter/flutter/issues/168961.
Original PR in first commit. Fix in subsequent commit:
* Do process invocation of `flutter pub add` in a different way.
Fixes: `ProcessException: %1 is not a valid Win32 application`
Reproduced locally by changing
dev/devicelab/bin/tasks/native_assets_android.dart to
`DeviceOperatingSystem.windows` and verified the `flutter pub add` call
now succeeds.
(Also, moved the add integration test into the create test project to
avoid having multiple `flutter pub get`s.)
Third time is the charm.
Closes: https://github.com/flutter/flutter/issues/170682
We have emulators available on the Linux host, so switch the Android
device lab tests for native assets over to the emulator.
We don't seem to have emulators on Windows or MacOS hosts. (If we do,
they are not used in `ci.yaml`.)
We want at least one physical device test for Android with native
assets. And we want to cover all host OSes (not everything works the
same everywhere). So keep the physical device tests for the MacOS and
Windows hosts.
Should we wait with landing this until
https://github.com/flutter/flutter/issues/170529 is resolved?
<!-- start_original_pr_link -->
Reverts: flutter/flutter#170686
<!-- end_original_pr_link -->
<!-- start_initiating_author -->
Initiated by: matanlurey
<!-- end_initiating_author -->
<!-- start_revert_reason -->
Reason for reverting: Broke [`Windows_mokey
native_assets_android`](https://ci.chromium.org/ui/p/flutter/builders/prod/Windows_mokey%20native_assets_android/2518/overview)
again.
<!-- end_revert_reason -->
<!-- start_original_pr_author -->
Original PR Author: dcharkes
<!-- end_original_pr_author -->
<!-- start_reviewers -->
Reviewed By: {bkonyi, matanlurey}
<!-- end_reviewers -->
<!-- start_revert_body -->
This change reverts the following previous change:
Reland https://github.com/flutter/flutter/pull/170374
Original PR in first commit. Fixes in subsequent commits:
* `flutter` is not on the `PATH` in the device lab, use `_flutterBin`
(consistent with the rest of the test).
Fixes `flutter` not found.
* `flutter test integration_test` now does not build assets for the host
anymore. `flutter test` builds assets for the host. The `TestCommand` is
now special-case to check for `_isIntegrationTest`.
Fixes `clang++` not found. (It's the compiler for Linux, but we are
running integration tests on an Android device.)
Tests pass locally with:
```
$ cd /Users/dacoharkes/src/flutter/flutter/dev/devicelab && dart bin/test_runner.dart test -t native_assets_android
```
Note:
* The device lab tests are not run on presubmit until
https://github.com/flutter/flutter/issues/170682 is addressed.
* The emulator tests are not run at all atm:
https://github.com/flutter/flutter/issues/170529.
<!-- end_revert_body -->
Co-authored-by: auto-submit[bot] <flutter-engprod-team@google.com>
This change updates the default `selectionHeightStyle` and
`selectionWidthStyle` for `EditableText` to more closely match the
behavior on native platforms.
```dart
/// The default value for [selectionHeightStyle].
///
/// On web platforms, this defaults to [ui.BoxHeightStyle.max].
///
/// On native platforms, this defaults to [ui.BoxHeightStyle.includeLineSpacingMiddle] for all
/// platforms.
static ui.BoxHeightStyle get defaultSelectionHeightStyle {
if (kIsWeb) {
return ui.BoxHeightStyle.max;
}
switch (defaultTargetPlatform) {
case TargetPlatform.android:
case TargetPlatform.fuchsia:
case TargetPlatform.iOS:
case TargetPlatform.linux:
case TargetPlatform.macOS:
case TargetPlatform.windows:
return ui.BoxHeightStyle.includeLineSpacingMiddle;
}
}
/// The default value for [selectionWidthStyle].
///
/// On web platforms, this defaults to [ui.BoxWidthStyle.max] for Apple platforms and
/// [ui.BoxWidthStyle.tight] for all others.
///
/// On non-web platforms, this defaults to [ui.BoxWidthStyle.max] for all
/// platforms.
static ui.BoxWidthStyle get defaultSelectionWidthStyle {
if (kIsWeb) {
if (defaultTargetPlatform == TargetPlatform.iOS || WebBrowserDetection.browserIsSafari) {
return ui.BoxWidthStyle.max;
}
return ui.BoxWidthStyle.tight;
}
switch (defaultTargetPlatform) {
case TargetPlatform.android:
case TargetPlatform.fuchsia:
case TargetPlatform.iOS:
case TargetPlatform.linux:
case TargetPlatform.macOS:
case TargetPlatform.windows:
return ui.BoxWidthStyle.max;
}
}
```
## Native Selection Style Behavior
### Android Native Behavior
| Component Type | UI Framework / Component | Image |
|---|---|---|
| **Static Text** | Android TextView | <img height="400"
alt="native_android_static_textview"
src="https://github.com/user-attachments/assets/34da885c-c3d8-4ecc-baf5-65cd32850aa7"
/> |
| **Static Text** | Jetpack Compose Text | <img height="400"
alt="native_android_static_compose"
src="https://github.com/user-attachments/assets/ef916e8d-3627-4394-b5a1-aa59989ba826"
/> |
| **Static Text** | Chrome (Web) "p element" | <img height="400"
alt="android_chrome_web"
src="https://github.com/user-attachments/assets/b6537871-5d07-470b-bdee-ae0d222b2404"
/> |
| **Text Field** | Android EditText | <img height="400"
alt="native_android_textfield_edittext"
src="https://github.com/user-attachments/assets/ef91c6c3-eed0-4cf5-8b6f-182ecf8ce60b"
/> |
| **Text Field** | Jetpack Compose TextField | <img height="400"
alt="native_android_textfield_compose"
src="https://github.com/user-attachments/assets/891c28ba-66f7-4923-a1d3-839cad3b039c"
/> |
### iOS Native Behavior
| Component Type | UI Framework / Component | Image |
|---|---|---|
| **Text Field** | Native SwiftUI TextEditor | <img height="400"
alt="native_ios_texteditor"
src="https://github.com/user-attachments/assets/b99adb30-8cb3-454e-aa56-41f3cfadeeed"
/> |
| **Text Field** | Native SwiftUI TextField | <img height="400"
alt="native_ios_textfield"
src="https://github.com/user-attachments/assets/0544419b-b9a7-4641-930b-9a123f9a7720"
/> |
| **Static Text** | Safari (Web) "p element" | <img height="400"
alt="mobile_safari_web"
src="https://github.com/user-attachments/assets/6934ed80-4712-4000-bff0-4d5d2833abbe"
/> |
### macOS Native Behavior
| Component Type | UI Framework / Component | Image |
|---|---|---|
| **Static Text** | Native SwiftUI Text | <img height="400"
alt="native_macos_static_text"
src="https://github.com/user-attachments/assets/becf7690-878e-4cf1-b9d7-49725d58fd42"
/> |
| **Static Text** | Chrome (Web) "p element" | <img height="400"
alt="chrome_web"
src="https://github.com/user-attachments/assets/bf38e1c0-7bd6-42b7-8230-71b8365ac1d7"
/> |
| **Static Text** | Firefox (Web) "p element" | <img height="400"
alt="firefox_web"
src="https://github.com/user-attachments/assets/54817628-690b-4243-8bb0-0d94afaf5013"
/> |
| **Static Text** | Safari (Web) "p element" | <img height="400"
alt="safari_web"
src="https://github.com/user-attachments/assets/08ae8a6e-8ea5-4cc5-84f8-49c5f759e910"
/> |
| **Text Field** | Native SwiftUI TextEditor | <img height="400"
alt="native_macos_texteditor"
src="https://github.com/user-attachments/assets/43995c72-acf5-4ef0-99d7-faa3940b16e7"
/> |
| **Text Field** | Native SwiftUI TextField | <img
alt="native_macos_textfield"
src="https://github.com/user-attachments/assets/d5606b23-dff0-47da-a1e8-b1c71047c426"
/> |
## Flutter Selection Style Behavior
### Flutter Before Behavior
This was the behavior on all platforms before this change.
| Component Type | Behavior | Image |
|---|---|---|
| **Text Field** | Flutter TextField | <img height="400"
alt="flutter_before_text_field"
src="https://github.com/user-attachments/assets/014bfc9d-0bbe-49ee-9230-9da80addc675"
/> |
| **Static Text** | Flutter SelectableText | <img height="400"
alt="flutter_before_selectabletext"
src="https://github.com/user-attachments/assets/251956c6-4d7d-4d3e-802a-33718f30cbf3"
/> |
### Flutter Chrome After Behavior
This is the behavior on all chrome web after this change.
| Component Type | Behavior | Image |
|---|---|---|
| **Static Text** | Flutter SelectableText in Chrome | <img height="400"
alt="flutter_after_chrome_selectabletext"
src="https://github.com/user-attachments/assets/167ee998-c9c4-4367-ab77-149514fb2b15"
/> |
| **Text Field** | Flutter TextField in Chrome | <img height="400"
alt="flutter_after_chrome_textfield"
src="https://github.com/user-attachments/assets/76b123df-c818-4304-afb8-7034506e2031"
/> |
### Flutter Safari After Behavior
This is the behavior on Safari after this change. (all iOS browsers, and
Safari on macOS).
| Component Type | Behavior | Image |
|---|---|---|
| **Text Field** | Flutter TextField in Safari | <img height="400"
alt="flutter_after_safari_textfield"
src="https://github.com/user-attachments/assets/c37e80cf-d89a-43aa-baff-f32e94f39b56"
/> |
| **Static Text** | Flutter SelectableText in Safari | <img height="400"
alt="flutter_after_safari_selectabletext"
src="https://github.com/user-attachments/assets/c1a11d76-afb9-4265-af54-e20e183839e1"
/> |
### Flutter Native After Behavior
This is the behavior on native platforms after this change.
| Component Type | Behavior | Image |
|---|---|---|
| **Static Text** | Flutter SelectableText on Native platforms | <img
height="400" alt="flutter_after_native_selectabletext"
src="https://github.com/user-attachments/assets/5506eb4c-13ed-4c04-b680-9d097f20b159"
/> |
| **Text Field** | Flutter TextField on Native platforms | <img
height="400" alt="flutter_after_native_textfield"
src="https://github.com/user-attachments/assets/e65bba53-34d3-480c-9293-d597b587fe70"
/> |
Fixes#68675
## Pre-launch Checklist
- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [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.
---------
Co-authored-by: Renzo Olivares <roliv@google.com>
Reland https://github.com/flutter/flutter/pull/170374
Original PR in first commit. Fixes in subsequent commits:
* `flutter` is not on the `PATH` in the device lab, use `_flutterBin`
(consistent with the rest of the test).
Fixes `flutter` not found.
* `flutter test integration_test` now does not build assets for the host
anymore. `flutter test` builds assets for the host. The `TestCommand` is
now special-case to check for `_isIntegrationTest`.
Fixes `clang++` not found. (It's the compiler for Linux, but we are
running integration tests on an Android device.)
Tests pass locally with:
```
$ cd /Users/dacoharkes/src/flutter/flutter/dev/devicelab && dart bin/test_runner.dart test -t native_assets_android
```
Note:
* The device lab tests are not run on presubmit until
https://github.com/flutter/flutter/issues/170682 is addressed.
* The emulator tests are not run at all atm:
https://github.com/flutter/flutter/issues/170529.
This PR is an attempt to reland
https://github.com/flutter/flutter/pull/168996
There were some issues that cropped up in the `web_long_running_test`
shards. However, it turns out that these tests don't actually run in
presubmit on any PR that has any engine changes, which is not ideal. I
modified the long running tests to run in presubmit, but this had issues
because apparently a big chunk of these integration tests actually are
trying to download canvaskit from CDN. I changed almost all of the tests
to use local canvaskit (which should make them more reliable and
hermetic). There is one test whose job is to actually test the CDN
itself, and I am leaving that disabled in presubmit for PRs that have
engine changes (since the engine artifacts won't be uploaded to CDN yet)
but the rest of them are all running and passing now.
Also, I fixed the underlying issue that was exposed by the long running
tests, which is that the CanvasKit path clipping stuff in the layer
visitor needs to be aware of LazyPath.
When drawing a full screen filter effect in an intermediate render
target, MSAA doesn't provide any AA benefit as it only anti aliases the
edges of geometry.
When running on the web-server device hot reload option will default to
disabled when `-d web-server` is also passed.
This is temporary until the app can start correctly with hot reload
enabled.
Issue: https://github.com/dart-lang/sdk/issues/60289
Possible fix for https://github.com/flutter/flutter/issues/169574
It looks like the timeouts seem to be specific to downloading scripts.
Specifically, after a certain point, we no longer download any scripts.
Lowering the number of max concurrent requests seems to avoid Chrome
timing out.
This does a refactor as well to make sure we're piping FileSystem,
Logger, and Platform into devfs_web.dart instead of relying on globals
every time. This also fixes a test issue where we were always passing
`isWindows: false` in some test cases instead of checking for the value.
## Pre-launch Checklist
- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [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.
This PR adds a new test that verifies that the value param is only used
on initial build and when resetting the field.
Test for
https://github.com/flutter/flutter/pull/170050#issuecomment-2965486000
## Pre-launch Checklist
- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [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.
---------
Co-authored-by: Bruno Leroux <bruno.leroux@gmail.com>
<!-- start_original_pr_link -->
Reverts: flutter/flutter#170374
<!-- end_original_pr_link -->
<!-- start_initiating_author -->
Initiated by: jtmcdole
<!-- end_initiating_author -->
<!-- start_revert_reason -->
Reason for reverting: "Consistently failed across all 3 executions"
<!-- end_revert_reason -->
<!-- start_original_pr_author -->
Original PR Author: dcharkes
<!-- end_original_pr_author -->
<!-- start_reviewers -->
Reviewed By: {vashworth, bkonyi}
<!-- end_reviewers -->
<!-- start_revert_body -->
This change reverts the following previous change:
Closes: https://github.com/flutter/flutter/issues/168961
This PR ensures the build hooks of `dev_dependencies` are run on
`flutter test integration_test`.
`flutter test` already builds dev dependencies. However,
`package:integration_test` is using `flutter assemble` which should not
have dev dependencies included (`flutter build` should not bundle dev
deps).
~~So, this PR adds a build define that's threaded through from `flutter
test` to `flutter assemble`. It's threaded through gradle and xcode via
`BuildInfo` and subsequently read in tool backend where it is added as
an `Environment` define. Finally it is read in the `Target` that builds
the native assets.~~
~~One quirk is `flutter run test integration_test -d flutter-tester`.
(No idea why someone would run that, but it works.) This doesn't spin up
Gradle or XCode. So the environment is set directly.~~
Edit: We use the simpler `kBuildMode` to decide whether to include the
native assets for dev dependencies.
## Testing
* The desktop OSes and `flutter-tester` are tested in
`packages/flutter_tools/test/integration.shard/isolated/native_assets_test.dart`.
* iOS simulator, device, and Android device are tested in the device
lab.
* (All tests were added to existing tests, hopefully these don't start
timing out.)
## Pre-launch Checklist
- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [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].
<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[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
<!-- end_revert_body -->
Co-authored-by: auto-submit[bot] <flutter-engprod-team@google.com>
Just a few remaining references to Skia types like SkScalar and
SkSize/Rect. After this most of Impeller is Skia-free except for areas
that deal with fonts, images, and the `toolkit/interop` and
`typographer` directories.