29484 Commits

Author SHA1 Message Date
Jim Graham
2a55c9edd8 [DisplayList] migrate DlColorFilter objects to new source layout (flutter/engine#56785)
A new source code/header structure was introduced when the DlColorSource and DlImageFilter objects were migrated to Impeller geometry classes. Even though the DlColorFilter objects did not depend on Skia geometry objects, they need to be updated to the new source layout for consistency.
2024-11-26 20:48:20 +00:00
skia-flutter-autoroll
e97a8c5786 Roll Dart SDK from ca02d403f1a8 to 72b594775c83 (1 revision) (flutter/engine#56819)
https://dart.googlesource.com/sdk.git/+log/ca02d403f1a8..72b594775c83

2024-11-26 dart-internal-merge@dart-ci-internal.iam.gserviceaccount.com Version 3.7.0-187.0.dev

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/dart-sdk-flutter-engine
Please CC dart-vm-team@google.com,zra@google.com on the revert to ensure that a human
is aware of the problem.

To file a bug in Flutter Engine: 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
2024-11-26 20:38:25 +00:00
Chris Bracken
52661e51c0 Revert "iOS: Migrate PlatformViewsController to Objective-C (#56790)" (flutter/engine#56817)
This is a combination of 3 reverts, required to get back to the revert that caused `ios_platform_view_tests` to start failing in the framework repo. In reverse chronological order, this reverts two trivial commits plus the non-trivial commit that likely caused the breakage:

* Revert "iOS: Eliminate global in platformviews controller (#56805)" This reverts commit cea4600caa7098fa7ec109d18b869db46cda726a.
* Revert "iOS: Delete FlutterPlatformViewsController.layerPoolSize (#56806)" This reverts commit 80fa8a590876e0d29055b9ddbfa8670c1f83759e.
* Revert "iOS: Migrate PlatformViewsController to Objective-C (#56790)" This reverts commit afd05afc406deb79fbe9c16684aeeeb19322b288.

[C++, Objective-C, Java style guides]: https://github.com/flutter/engine/blob/main/CONTRIBUTING.md#style
2024-11-26 19:52:13 +00:00
Chris Bracken
61d0019469 iOS: Rename FlutterPlatformViews_Internal.mm (flutter/engine#56816)
Objective-C files should be named to match their header, in this case, //flutter/shell/platform/darwin/ios/framework/Headers/FlutterPlatformViews.h.

When private API is required, we often create a header named FlutterFoo_Internal.h, but the implementation file is always just FlutterFoo.mm. This brings FlutterPlatformViews back into line with convention.

No test changes since this is just a file rename.

[C++, Objective-C, Java style guides]: https://github.com/flutter/engine/blob/main/CONTRIBUTING.md#style
2024-11-26 18:56:24 +00:00
Chris Bracken
cea4600caa iOS: Eliminate global in platformviews controller (flutter/engine#56805)
This is a minor refactoring that moves a global bool to a boolean ivar in FlutterPlatformViewsController. The purpose of this variable is simply to avoid the overhead of trying to create backdrop filters if we've ever failed to create one in the past.

Given that this class will only ever have the one instance created and held by per engine with the same duration, and that most apps only ever have one engine, the performance win will be identical for most apps. For the few add-to-app cases with multiple engines either at once or over the course of an app's lifetime, the costs associated with firing up an engine are already a far bigger hit than those being saved by this bool.

Also migrates from C++ style namespace { ... } to Obj-C style static functions. These are entirely equivalent as both restrict symbols to the current translation unit.

[C++, Objective-C, Java style guides]: https://github.com/flutter/engine/blob/main/CONTRIBUTING.md#style
2024-11-26 18:28:15 +00:00
skia-flutter-autoroll
3a2097395c Roll Dart SDK from bdb76c714009 to ca02d403f1a8 (1 revision) (flutter/engine#56809)
https://dart.googlesource.com/sdk.git/+log/bdb76c714009..ca02d403f1a8

2024-11-26 dart-internal-merge@dart-ci-internal.iam.gserviceaccount.com Version 3.7.0-186.0.dev

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/dart-sdk-flutter-engine
Please CC dart-vm-team@google.com,zra@google.com on the revert to ensure that a human
is aware of the problem.

To file a bug in Flutter Engine: 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
2024-11-26 10:00:05 +00:00
skia-flutter-autoroll
c8a762107c Roll Skia from b697dd1b03b2 to 8d9d892657a7 (1 revision) (flutter/engine#56808)
https://skia.googlesource.com/skia.git/+log/b697dd1b03b2..8d9d892657a7

2024-11-26 skia-autoroll@skia-public.iam.gserviceaccount.com Roll Skia Infra from f433991c6d8e to dbdf344026c9 (10 revisions)

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/skia-flutter-autoroll
Please CC aaclarke@google.com,brianosman@google.com,danieldilan@google.com on the revert to ensure that a human
is aware of the problem.

To file a bug in Skia: https://bugs.chromium.org/p/skia/issues/entry
To file a bug in Flutter: 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
2024-11-26 07:28:26 +00:00
Chris Bracken
80fa8a5908 iOS: Delete FlutterPlatformViewsController.layerPoolSize (flutter/engine#56806)
This field is unused in the codebase/tests.

[C++, Objective-C, Java style guides]: https://github.com/flutter/engine/blob/main/CONTRIBUTING.md#style
2024-11-26 05:23:09 +00:00
skia-flutter-autoroll
214afb3f08 Roll Dart SDK from 4b49546a1dfa to bdb76c714009 (1 revision) (flutter/engine#56803)
https://dart.googlesource.com/sdk.git/+log/4b49546a1dfa..bdb76c714009

2024-11-26 dart-internal-merge@dart-ci-internal.iam.gserviceaccount.com Version 3.7.0-185.0.dev

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/dart-sdk-flutter-engine
Please CC aaclarke@google.com,dart-vm-team@google.com on the revert to ensure that a human
is aware of the problem.

To file a bug in Flutter Engine: 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
2024-11-26 02:16:22 +00:00
Chris Bracken
afd05afc40 iOS: Migrate PlatformViewsController to Objective-C (flutter/engine#56790)
This migrates PlatformViewController from C++ to Objective-C. Generally, we try to keep the embedder interfaces and components written in Objective-C except for the few places where C++ interfaces are requried to interface with engine APIs such as Shell and PlatformView (e.g. the PlatformViewIOS subclass). Now that the implementation is Objective-C, the class and file are renamed to match Objective-C naming conventions.

This allows us to take advantage of ARC and weak references, which eliminates the need for std::shared_ptr, fml::WeakPtr etc. Further, this eliminates some particularly unintuitive behaviour wherein this class was owned via a std::shared_ptr held by FlutterEngine, and injected into many other classes (e.g. AccessibilityBridge) via a std::shared_ptr& reference -- such that only one instance of the std::shared_ptr actually ever existed, presumably to avoid std::shared_ptr refcounting overhead. Given that this overhead was only incurred a single time at engine initialisation, this seems like overkill. One might ask why it wasn't therefore held in a `std::unique_ptr` and a `std::unique_ptr&` reference passed around. Likely, this was because we wanted to take a `fml::WeakPtr` reference on it.

Regardless, none of this is necessary any longer now that we can inject `__weak FlutterPlatformViewsController*` instances to classes that use it.

To be clear, this patch makes no attempt whatsoever to simplify or clean up the interface or implementation of this class. This class ties together far too many concepts and is injected into far too many places, and we should break it up and simplify it. However, the goal of this patch was simply to port to an Objective-C interface that plays nicely with the rest of the iOS embedder. This does include a couple minor cleanups in `#include`/`#import` order and usage to match our style guide.

[C++, Objective-C, Java style guides]: https://github.com/flutter/engine/blob/main/CONTRIBUTING.md#style
2024-11-26 01:23:21 +00:00
gaaclarke
6d9cdb5750 Started caching HandleGLES's hash and made them immutable (flutter/engine#56800)
https://github.com/flutter/flutter/issues/159177
test exempt: no functional change, performance

[C++, Objective-C, Java style guides]: https://github.com/flutter/engine/blob/main/CONTRIBUTING.md#style
2024-11-26 01:09:25 +00:00
auto-submit[bot]
57b102520b Reverts "[iOS] Full keyboard access scrolling (#56606)" (flutter/engine#56802)
Reverts: flutter/engine#56606
Initiated by: LongCatIsLooong
Reason for reverting: https://github.com/flutter/flutter/issues/159456
Original PR Author: LongCatIsLooong

Reviewed By: {chunhtai, cbracken}

This change reverts the following previous change:
This PR adds basic FKA scrolling support: when the iOS focus (the focus state is maintained separately from the framework focus, see the previous PR) switches to an item in a scrollable container that is too close to the edge of the viewport, the container will scroll to make sure the next item is visible. 

Previous PR for context: https://github.com/flutter/engine/pull/55964

https://github.com/user-attachments/assets/84ae5153-f955-4d23-9901-ce942c0e98ac

### Why the UIScrollView subclass in the focus hierarchy

The iOS focus system does not provide an API that allows apps to notify it of focus highlight changes. So if we were to keep using the transforms sent by the framework as-is and not introducing any UIViews in the focus hierarchy, the focus highlight will be positioned at the wrong location after scrolling (via FKA or via framework). That does not seem to be part of the public API and the focus system seems to only know how to properly highlight focusable UIViews.

### Things that currently may not work

1. Nested scroll views (have not tried to verify) 

The `UIScrollView`s are always subviews of the `FlutterView`. If there are nested scrollables the focus system may not be able to properly determine the focus hierarchy (in theory the iOS focus system should never depend on `UIView.parentView` but I haven't tried to verify that).

2. If the next item is too far below the bottom of the screen and there is a tab bar with focusable items, the focus will be transferred to tab bar instead of the next item in the list

Video demo (as you can see the scrolling is really finicky):

https://github.com/user-attachments/assets/51c2bfe4-d7b3-4614-aa49-4256214f8978

I've tried doing the same thing using a `UITableView` with similar configurations but it seems to have the same problem. I'll try to dig a bit deeper into this and see if there's a workaround.

[C++, Objective-C, Java style guides]: https://github.com/flutter/engine/blob/main/CONTRIBUTING.md#style
2024-11-26 00:39:15 +00:00
skia-flutter-autoroll
569d30910b Roll Skia from 12c8bd6ac1d9 to c1c8ff84997c (14 revisions) (flutter/engine#56801)
https://skia.googlesource.com/skia.git/+log/12c8bd6ac1d9..c1c8ff84997c

2024-11-25 danieldilan@google.com Revert "Change window::DisplayParams to be immutable and passed by pointer"
2024-11-25 lukasza@chromium.org [rust png] Build / sources organization: Separate `decoder/` directory.
2024-11-25 skia-autoroll@skia-public.iam.gserviceaccount.com Roll vulkan-deps from 73e40f43c062 to 64698c1a35b2 (1 revision)
2024-11-25 kjlubick@google.com Change window::DisplayParams to be immutable and passed by pointer
2024-11-25 danieldilan@google.com Use SkSafe32 functions when adding/subtracting deltas.
2024-11-25 kjlubick@google.com Save 16 bytes on GrContextOptions allocations* by reordering fields
2024-11-25 skia-autoroll@skia-public.iam.gserviceaccount.com Roll skottie-base from e4021a6fc9aa to 52028e548417
2024-11-25 skia-autoroll@skia-public.iam.gserviceaccount.com Roll debugger-app-base from 931df19ec335 to 9e05eb5b9edb
2024-11-25 skia-autoroll@skia-public.iam.gserviceaccount.com Roll shaders-base from 99b73d05cdae to 7bdb025e3cbb
2024-11-25 skia-autoroll@skia-public.iam.gserviceaccount.com Roll jsfiddle-base from 034839b9814b to 99d4627f212e
2024-11-25 skia-autoroll@skia-public.iam.gserviceaccount.com Roll skottie-base from c0ad379b6c58 to e4021a6fc9aa
2024-11-25 kylechar@chromium.org Fix DefaultImageProvider::Make() leak
2024-11-25 kjlubick@google.com Make SkGlyph and GrDriverBugWorkarounds trivially destructible
2024-11-25 michaelludwig@google.com [graphite] Fix texture matrix for asyncReadPixelsYUV420

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/skia-flutter-autoroll
Please CC aaclarke@google.com,brianosman@google.com,danieldilan@google.com on the revert to ensure that a human
is aware of the problem.

To file a bug in Skia: https://bugs.chromium.org/p/skia/issues/entry
To file a bug in Flutter: 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
2024-11-26 00:38:57 +00:00
Jonah Williams
0d4c7dbe07 [Impeller] better handle allocation herustics of Android slide in page transition. (flutter/engine#56762)
For https://github.com/flutter/flutter/pull/158881

The new Android m3 page transition animates a saveLayer w/ opacity + slide in animation. See example video from linked PR:

https://github.com/user-attachments/assets/1382374a-4e0c-4a0e-9d70-948ce12e6298

On each frame, we intersect the coverage rect of this saveLayer contents with the screen rect, and shrink it to a partial rectangle. But this changes each frame, which forces us to re-allocate a large texture each frame, causing performance issues.

Why not ignore the cull rect entirely? We sometimes ignore the cull rect for the image filter layer for similar reasons, but from observation, the sizes of these saveLayer can be slightly larger than the screen for flutter gallery. Instead, I attempted to use the cull rect size to shrink the saveLayer by shifting the origin before intersecting.

I think this should be safe to do, as I believe it could only leave the coverage as larger than it would have been and not smaller.
2024-11-25 23:48:05 +00:00
Chris Bracken
a661e86e3f iOS: Eliminate logging of non-zero origin platformviews (flutter/engine#56796)
In flutter/engine#35501, handling was added to log a debug message to the console in the case where a platform view with a non-zero origin was identified.

Unfortunately:
* In unopt builds, the first thing we do in that block is to call FML_DCHECK asserting that the origin is zero, so we never actually emit the log statement.
* In opt builds, FML_DCHECK is a no-op, so users are unlikely to actually ever notice the crash.

The proper fix is to eliminate this restriction, but in the meantime, this eliminates this block entirely and leaves the TODO. We've had only two comments on that bug in the 2.5 years since it was added.

Issue: https://github.com/flutter/flutter/issues/109700

[C++, Objective-C, Java style guides]: https://github.com/flutter/engine/blob/main/CONTRIBUTING.md#style
2024-11-25 23:38:59 +00:00
gaaclarke
8ad87e8401 [impeller] gles: started storing the number of handle deletions to avoid reallocation (flutter/engine#56799)
I saw in profiles that we were spending a lot of time in
push_back_slow_path. Reserving + emplacing removes that.
test-except: no functional change, performance increase

## 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] and the [C++,
Objective-C, Java style guides].
- [x] I listed at least one issue that this PR fixes in the description
above.
- [x] I added new tests to check the change I am making or feature I am
adding, or the PR is [test-exempt]. See [testing the engine] for
instructions on writing and running engine tests.
- [x] I updated/added relevant documentation (doc comments with `///`).
- [x] I signed the [CLA].
- [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/wiki/Tree-hygiene#overview
[Tree Hygiene]: https://github.com/flutter/flutter/wiki/Tree-hygiene
[test-exempt]:
https://github.com/flutter/flutter/wiki/Tree-hygiene#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/wiki/Style-guide-for-Flutter-repo
[C++, Objective-C, Java style guides]:
https://github.com/flutter/engine/blob/main/CONTRIBUTING.md#style
[testing the engine]:
https://github.com/flutter/flutter/wiki/Testing-the-engine
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/wiki/Tree-hygiene#handling-breaking-changes
[Discord]: https://github.com/flutter/flutter/wiki/Chat
2024-11-25 15:35:33 -08:00
skia-flutter-autoroll
45f4ca57b7 Roll Fuchsia Linux SDK from 9o0fWa2xVhmxV6Mtn... to 50xtjbMWWrqay_7m_... (flutter/engine#56795)
If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/fuchsia-linux-sdk-flutter-engine
Please CC aaclarke@google.com,zra@google.com on the revert to ensure that a human
is aware of the problem.

To file a bug in Flutter: 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
2024-11-25 22:36:22 +00:00
skia-flutter-autoroll
ac1d299318 Roll Dart SDK from df716eaa6ed2 to 4b49546a1dfa (1 revision) (flutter/engine#56793)
https://dart.googlesource.com/sdk.git/+log/df716eaa6ed2..4b49546a1dfa

2024-11-25 dart-internal-merge@dart-ci-internal.iam.gserviceaccount.com Version 3.7.0-184.0.dev

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/dart-sdk-flutter-engine
Please CC aaclarke@google.com,dart-vm-team@google.com on the revert to ensure that a human
is aware of the problem.

To file a bug in Flutter Engine: 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
2024-11-25 21:59:28 +00:00
LongCatIsLooong
8a1d4c0a08 [iOS] Full keyboard access scrolling (flutter/engine#56606)
This PR adds basic FKA scrolling support: when the iOS focus (the focus state is maintained separately from the framework focus, see the previous PR) switches to an item in a scrollable container that is too close to the edge of the viewport, the container will scroll to make sure the next item is visible. 

Previous PR for context: https://github.com/flutter/engine/pull/55964

https://github.com/user-attachments/assets/84ae5153-f955-4d23-9901-ce942c0e98ac

### Why the UIScrollView subclass in the focus hierarchy

The iOS focus system does not provide an API that allows apps to notify it of focus highlight changes. So if we were to keep using the transforms sent by the framework as-is and not introducing any UIViews in the focus hierarchy, the focus highlight will be positioned at the wrong location after scrolling (via FKA or via framework). That does not seem to be part of the public API and the focus system seems to only know how to properly highlight focusable UIViews.

### Things that currently may not work

1. Nested scroll views (have not tried to verify) 

The `UIScrollView`s are always subviews of the `FlutterView`. If there are nested scrollables the focus system may not be able to properly determine the focus hierarchy (in theory the iOS focus system should never depend on `UIView.parentView` but I haven't tried to verify that).

2. If the next item is too far below the bottom of the screen and there is a tab bar with focusable items, the focus will be transferred to tab bar instead of the next item in the list

Video demo (as you can see the scrolling is really finicky):

https://github.com/user-attachments/assets/51c2bfe4-d7b3-4614-aa49-4256214f8978

I've tried doing the same thing using a `UITableView` with similar configurations but it seems to have the same problem. I'll try to dig a bit deeper into this and see if there's a workaround.

[C++, Objective-C, Java style guides]: https://github.com/flutter/engine/blob/main/CONTRIBUTING.md#style
2024-11-25 21:05:18 +00:00
Jonah Williams
448ac0100b [android] remove fml_check from surface_texture_external_texture (flutter/engine#56760)
We may fail to acquire a new image from the external image source. When this happens, don't crash the app.

Fixes https://github.com/flutter/flutter/issues/159324
2024-11-25 20:16:10 +00:00
gaaclarke
5cc52a6055 removed unused variable for skia initialization (flutter/engine#56791)
fixes https://github.com/flutter/flutter/issues/159433

test exempt: no functional change, removes unused code

[C++, Objective-C, Java style guides]: https://github.com/flutter/engine/blob/main/CONTRIBUTING.md#style
2024-11-25 19:52:31 +00:00
Gray Mackall
2aae286c8d Bump versions of agp and robolectric, and configure to use SDK 35 (flutter/engine#56732)
Bumps the version of AGP used in the IDE-support `build.gradle`, as well as the robolectric version in both the IDE-support `build.gradle` and test-runner-`build.gradle`. 

This is the current latest robolectric: https://github.com/robolectric/robolectric/releases/tag/robolectric-4.14.1.

Also 
1. configures robolectric to use API 35, and 
2. removes the use of a deprecated class which (from what I could tell) looked like it was just used for setup, and the test still passes without it.

[C++, Objective-C, Java style guides]: https://github.com/flutter/engine/blob/main/CONTRIBUTING.md#style
2024-11-25 18:24:05 +00:00
Jia Hao
a442db2c24 Add missing import for malloc (flutter/engine#56781)
Internal bug: b/380745221

The use of `malloc` in L70:

d48ceb1ba2/third_party/tonic/filesystem/filesystem/file.cc (L70)

Results in the following error, after an update to the internal toolchain. For some reason, this error only appears when targeting Linux.

```
tonic/filesystem/filesystem/file.cc:70:28: error: use of undeclared identifier 'malloc'
   70 |   uint8_t* ptr = (uint8_t*)malloc(file_size);
      |                            ^
1 error generated.
```

This PR fixes it by including the header file.

[C++, Objective-C, Java style guides]: https://github.com/flutter/engine/blob/main/CONTRIBUTING.md#style
2024-11-25 16:47:19 +00:00
skia-flutter-autoroll
cc39b54c2a Roll Skia from 01a3a55f1d54 to 7588789d8fc6 (2 revisions) (flutter/engine#56784)
https://skia.googlesource.com/skia.git/+log/01a3a55f1d54..7588789d8fc6

2024-11-25 skia-autoroll@skia-public.iam.gserviceaccount.com Roll Skia Infra from 808d8a5c3b87 to f433991c6d8e (5 revisions)
2024-11-25 skia-autoroll@skia-public.iam.gserviceaccount.com Roll Dawn from eef82f6f51a2 to d9e006bae4a7 (11 revisions)

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/skia-flutter-autoroll
Please CC aaclarke@google.com,brianosman@google.com,danieldilan@google.com on the revert to ensure that a human
is aware of the problem.

To file a bug in Skia: https://bugs.chromium.org/p/skia/issues/entry
To file a bug in Flutter: 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
2024-11-25 10:10:06 +00:00
Jason Simmons
d48ceb1ba2 Fix the mapping from exit response strings to the FlPlatformChannelExitResponse enum (flutter/engine#56769) 2024-11-25 14:02:28 +13:00
skia-flutter-autoroll
add1d4273a Roll Fuchsia Linux SDK from XOyk4KAUqAnkgC2WY... to 9o0fWa2xVhmxV6Mtn... (flutter/engine#56780)
If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/fuchsia-linux-sdk-flutter-engine
Please CC aaclarke@google.com,zra@google.com on the revert to ensure that a human
is aware of the problem.

To file a bug in Flutter: 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
2024-11-24 21:11:57 +00:00
gaaclarke
c1b6fd8c69 Replaces Resource's shared_ptr with unique_ptr (flutter/engine#56778)
A non-inconsequential amount of time is spent in ~shared_ptr for no reason in ~Resource

<img width="1057" alt="Screenshot 2024-11-23 at 3 22 11 PM" src="https://github.com/user-attachments/assets/fba73908-2e43-4908-8008-ddd78fd77831">

[C++, Objective-C, Java style guides]: https://github.com/flutter/engine/blob/main/CONTRIBUTING.md#style
2024-11-24 20:01:34 +00:00
gaaclarke
8fb4a66d39 Cleaned up BufferBindingsGLES::BindUniformBuffer (flutter/engine#56777)
* removes usages of auto
* adds a std::vector::reserve
* renames improperly named local variable

## 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] and the [C++,
Objective-C, Java style guides].
- [x] I listed at least one issue that this PR fixes in the description
above.
- [x] I added new tests to check the change I am making or feature I am
adding, or the PR is [test-exempt]. See [testing the engine] for
instructions on writing and running engine tests.
- [x] I updated/added relevant documentation (doc comments with `///`).
- [x] I signed the [CLA].
- [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/wiki/Tree-hygiene#overview
[Tree Hygiene]: https://github.com/flutter/flutter/wiki/Tree-hygiene
[test-exempt]:
https://github.com/flutter/flutter/wiki/Tree-hygiene#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/wiki/Style-guide-for-Flutter-repo
[C++, Objective-C, Java style guides]:
https://github.com/flutter/engine/blob/main/CONTRIBUTING.md#style
[testing the engine]:
https://github.com/flutter/flutter/wiki/Testing-the-engine
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/wiki/Tree-hygiene#handling-breaking-changes
[Discord]: https://github.com/flutter/flutter/wiki/Chat
2024-11-24 11:30:53 -08:00
skia-flutter-autoroll
948fdeee93 Roll Skia from ded8ab47ee69 to 01a3a55f1d54 (1 revision) (flutter/engine#56779)
https://skia.googlesource.com/skia.git/+log/ded8ab47ee69..01a3a55f1d54

2024-11-24 vigneshv@google.com Revert "Reland "SkCodec: Remove the sysprop guard for SkCrabbyAvifCodec""

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/skia-flutter-autoroll
Please CC aaclarke@google.com,brianosman@google.com,danieldilan@google.com on the revert to ensure that a human
is aware of the problem.

To file a bug in Skia: https://bugs.chromium.org/p/skia/issues/entry
To file a bug in Flutter: 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
2024-11-24 08:24:33 +00:00
gaaclarke
b23720bf68 Smaller reactor handle locks (flutter/engine#56768)
This reduces the amount of work that is happening inside the read/write
mutex for tracking handles in the Reactor.
1) Now gl cleanup calls happen outside of the write lock
1) Now setting gl debug texts are out of the write lock
1) Now creating objects with CreateHandle are out of the write lock

Jonah was seeing considerable time in the rwmutex, this should alleviate
some of that.


![setlabel](https://github.com/user-attachments/assets/6ebe247b-76f4-457f-b28b-70ddcd5615a8)

issue: https://github.com/flutter/flutter/issues/159177

tests: no functional change, just performance

## 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] and the [C++,
Objective-C, Java style guides].
- [x] I listed at least one issue that this PR fixes in the description
above.
- [x] I added new tests to check the change I am making or feature I am
adding, or the PR is [test-exempt]. See [testing the engine] for
instructions on writing and running engine tests.
- [x] I updated/added relevant documentation (doc comments with `///`).
- [x] I signed the [CLA].
- [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/wiki/Tree-hygiene#overview
[Tree Hygiene]: https://github.com/flutter/flutter/wiki/Tree-hygiene
[test-exempt]:
https://github.com/flutter/flutter/wiki/Tree-hygiene#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/wiki/Style-guide-for-Flutter-repo
[C++, Objective-C, Java style guides]:
https://github.com/flutter/engine/blob/main/CONTRIBUTING.md#style
[testing the engine]:
https://github.com/flutter/flutter/wiki/Testing-the-engine
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/wiki/Tree-hygiene#handling-breaking-changes
[Discord]: https://github.com/flutter/flutter/wiki/Chat
2024-11-23 14:14:52 -08:00
skia-flutter-autoroll
e0084fe36b Roll Fuchsia Linux SDK from D5CBHuB2c-v3Zai-c... to XOyk4KAUqAnkgC2WY... (flutter/engine#56775)
If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/fuchsia-linux-sdk-flutter-engine
Please CC aaclarke@google.com,zra@google.com on the revert to ensure that a human
is aware of the problem.

To file a bug in Flutter: 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
2024-11-23 19:59:35 +00:00
skia-flutter-autoroll
57af1fa4fc Roll Dart SDK from 202083b79ac5 to df716eaa6ed2 (1 revision) (flutter/engine#56773)
https://dart.googlesource.com/sdk.git/+log/202083b79ac5..df716eaa6ed2

2024-11-23 dart-internal-merge@dart-ci-internal.iam.gserviceaccount.com Version 3.7.0-183.0.dev

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/dart-sdk-flutter-engine
Please CC aaclarke@google.com,dart-vm-team@google.com on the revert to ensure that a human
is aware of the problem.

To file a bug in Flutter Engine: 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
2024-11-23 08:08:37 +00:00
skia-flutter-autoroll
95bfdadec6 Roll Dart SDK from eb01a0430f72 to 202083b79ac5 (1 revision) (flutter/engine#56772)
https://dart.googlesource.com/sdk.git/+log/eb01a0430f72..202083b79ac5

2024-11-23 dart-internal-merge@dart-ci-internal.iam.gserviceaccount.com Version 3.7.0-182.0.dev

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/dart-sdk-flutter-engine
Please CC aaclarke@google.com,dart-vm-team@google.com on the revert to ensure that a human
is aware of the problem.

To file a bug in Flutter Engine: 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
2024-11-23 03:58:30 +00:00
Chris Bracken
2c1d5bbc8a iOS: Fix typo in fluttterViewController (flutter/engine#56770)
Ran into this typo during a separate refactoring. Breaking it out to avoid an already large patch getting any bigger.

[C++, Objective-C, Java style guides]: https://github.com/flutter/engine/blob/main/CONTRIBUTING.md#style
2024-11-23 01:46:21 +00:00
skia-flutter-autoroll
f764f183dc Roll Skia from e7caf38140ce to c3d9596a93f8 (2 revisions) (flutter/engine#56765)
https://skia.googlesource.com/skia.git/+log/e7caf38140ce..c3d9596a93f8

2024-11-22 nscobie@google.com [graphite] Allow clients to configure active logging level
2024-11-22 skia-autoroll@skia-public.iam.gserviceaccount.com Roll skottie-base from a049ff55ff14 to c0ad379b6c58

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/skia-flutter-autoroll
Please CC aaclarke@google.com,brianosman@google.com,michaelludwig@google.com on the revert to ensure that a human
is aware of the problem.

To file a bug in Skia: https://bugs.chromium.org/p/skia/issues/entry
To file a bug in Flutter: 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
2024-11-22 23:57:27 +00:00
auto-submit[bot]
2805143dd5 Reverts "[engine] more consistently flush dart event loop, run vsync callback immediately (#56738)" (flutter/engine#56767)
Reverts: flutter/engine#56738
Initiated by: jonahwilliams
Reason for reverting: speculative revert for framework failures.
Original PR Author: jonahwilliams

Reviewed By: {jason-simmons}

This change reverts the following previous change:
Changes the following shell callbacks to flush the dart event loop:

* OnPlatformViewSetViewportMetrics
* OnPlatformViewDispatchPointerDataPacket
* OnPlatformViewDispatchPlatformMessage
* OnPlatformViewSetSemanticsEnabled
* OnPlatformViewSetAccessibilityFeatures

Using a new TaskRunner API RunNowAndFlushMessages. If the task runner can run tasks on the current thread, this will immediately invoke a callback and then post an empty task to the event loop to ensure dart listeners fire.

This also updates the vsync waiter to use RunNowOrPostTask, so that we start vsync events as early as possible.
2024-11-22 23:51:26 +00:00
skia-flutter-autoroll
3fca18a7a5 Roll Dart SDK from 8b65a7a628e2 to eb01a0430f72 (2 revisions) (flutter/engine#56764)
https://dart.googlesource.com/sdk.git/+log/8b65a7a628e2..eb01a0430f72

2024-11-22 dart-internal-merge@dart-ci-internal.iam.gserviceaccount.com Version 3.7.0-181.0.dev
2024-11-22 dart-internal-merge@dart-ci-internal.iam.gserviceaccount.com Version 3.7.0-180.0.dev

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/dart-sdk-flutter-engine
Please CC aaclarke@google.com,dart-vm-team@google.com on the revert to ensure that a human
is aware of the problem.

To file a bug in Flutter Engine: 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
2024-11-22 23:35:15 +00:00
Jonah Williams
8aabbdf368 [Impeller] delete Impeller sim opt out. (flutter/engine#56706)
Impeller only on simulators.
2024-11-22 21:10:00 +00:00
Jason Simmons
d6095e5be3 [Impeller] Ensure that SnapshotControllerImpeller has a rendering context before creating the snapshot (flutter/engine#56743)
The Skia snapshot controller will activate the delegate's surface render context on the current thread.  If the delegate has no surface, then it will use the snapshot surface producer to create a temporary surface.

The Impeller snapshot controller needs to do the same in order to support OpenGL/GLES scenarios where the thread does not currently have an EGL context.
2024-11-22 20:46:39 +00:00
Jim Graham
dee413e427 [DisplayList] migrate DlColorSource objects to Impeller geometry (flutter/engine#56735)
The DlColorSource code uses Skia geometry classes for its internal computations. This PR switches those implementations to use the Impeller geometry classes for consistency and 3rd party header file independence.
2024-11-22 20:30:21 +00:00
Chinmay Garde
219060790d [Impeller] libImpeller: Tinker on the README. (flutter/engine#56761)
Also adds references to the C++ wrapper and examples.
2024-11-22 20:26:14 +00:00
Jonah Williams
4a17eac8a1 [Impeller] dont create temp vec for discard. (flutter/engine#56759)
This can have at most 3 entries so just use an array to avoid heap allocation.
2024-11-22 20:26:11 +00:00
skia-flutter-autoroll
a8b975b315 Roll Fuchsia Linux SDK from zhFzwYCH-N_wasTnM... to D5CBHuB2c-v3Zai-c... (flutter/engine#56757)
If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/fuchsia-linux-sdk-flutter-engine
Please CC aaclarke@google.com,zra@google.com on the revert to ensure that a human
is aware of the problem.

To file a bug in Flutter: 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
2024-11-22 18:47:02 +00:00
skia-flutter-autoroll
cdaba7b7bc Roll Dart SDK from 141291fd570d to 8b65a7a628e2 (1 revision) (flutter/engine#56755)
https://dart.googlesource.com/sdk.git/+log/141291fd570d..8b65a7a628e2

2024-11-22 dart-internal-merge@dart-ci-internal.iam.gserviceaccount.com Version 3.7.0-179.0.dev

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/dart-sdk-flutter-engine
Please CC aaclarke@google.com,dart-vm-team@google.com on the revert to ensure that a human
is aware of the problem.

To file a bug in Flutter Engine: 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
2024-11-22 18:45:05 +00:00
Jonah Williams
7e786d8dc8 [Impeller] cache and reuse openGL framebuffer attachments. (flutter/engine#56746)
Creating and attaching textures/render buffers to a FBO is an expensive operation. Similar to how we cache vulkan framebuffers/render passes, we can cache the FBO object on the color0 texture to avoid extra state invalidation.

Part of https://github.com/flutter/flutter/issues/159177
2024-11-22 17:43:43 +00:00
skia-flutter-autoroll
d3a6012bfa Roll Skia from 700e685861c8 to e7caf38140ce (25 revisions) (flutter/engine#56756)
https://skia.googlesource.com/skia.git/+log/700e685861c8..e7caf38140ce

2024-11-22 jlavrova@google.com Reland "Making fontStyle and fixedPitch fields "virtual""
2024-11-22 skia-autoroll@skia-public.iam.gserviceaccount.com Roll ANGLE from 1f0ac74a7a93 to 10c2dc7a1b4b (14 revisions)
2024-11-22 skia-autoroll@skia-public.iam.gserviceaccount.com Roll vulkan-deps from fc122129fa28 to 6c717e914923 (5 revisions)
2024-11-22 skia-autoroll@skia-public.iam.gserviceaccount.com Roll Skia Infra from 2b2d3ae5900c to 808d8a5c3b87 (6 revisions)
2024-11-22 skia-autoroll@skia-public.iam.gserviceaccount.com Roll Dawn from d2ad5a36f4e6 to eef82f6f51a2 (16 revisions)
2024-11-21 jlavrova@google.com Revert "Making fontStyle and fixedPitch fields "virtual""
2024-11-21 jlavrova@google.com Making fontStyle and fixedPitch fields "virtual"
2024-11-21 skia-autoroll@skia-public.iam.gserviceaccount.com Manual roll vulkan-deps from 94069332c202 to fc122129fa28 (8 revisions)
2024-11-21 lukasza@chromium.org [rust png] Integrate `cICP` support into `SkPngRustCodec`.
2024-11-21 robertphillips@google.com [graphite] Remove deprecated Precompile API call
2024-11-21 robertphillips@google.com [graphite] Add more Test job suppressions for Dawn thread race
2024-11-21 skia-autoroll@skia-public.iam.gserviceaccount.com Roll ANGLE from 74f74b63df26 to 1f0ac74a7a93 (13 revisions)
2024-11-21 skia-autoroll@skia-public.iam.gserviceaccount.com Roll Skia Infra from 7fb17334e756 to 2b2d3ae5900c (7 revisions)
2024-11-21 skia-autoroll@skia-public.iam.gserviceaccount.com Roll Dawn from 839eadc23139 to d2ad5a36f4e6 (15 revisions)
2024-11-21 skia-autoroll@skia-public.iam.gserviceaccount.com Roll vulkan-deps from 3c7156644de7 to 94069332c202 (11 revisions)
2024-11-20 vigneshv@google.com Reland "SkCodec: Remove the sysprop guard for SkCrabbyAvifCodec"
2024-11-20 kjlubick@google.com Fix Vello build rules
2024-11-20 robertphillips@google.com [graphite] Add a more robust threaded Compile/Precompile test
2024-11-20 jvanverth@google.com Fix verylarge_picture on Adreno Vulkan.
2024-11-20 kjlubick@google.com Reland "add triangulated gradient effect"
2024-11-20 lokokung@google.com Uses newer APIs for device.PopErrorScope in DawnErrorChecker.
2024-11-20 danieldilan@google.com Clamp alpha in SkScan_AAAPath to int32_max to avoid integer overflow.
2024-11-20 skia-autoroll@skia-public.iam.gserviceaccount.com Roll ANGLE from 987cc0de1d4c to 74f74b63df26 (11 revisions)
2024-11-20 skia-autoroll@skia-public.iam.gserviceaccount.com Roll vulkan-deps from 867065ecbb6a to 3c7156644de7 (4 revisions)
2024-11-20 skia-autoroll@skia-public.iam.gserviceaccount.com Roll Skia Infra from b51256461a37 to 7fb17334e756 (10 revisions)

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/skia-flutter-autoroll
Please CC aaclarke@google.com,brianosman@google.com,michaelludwig@google.com on the revert to ensure that a human
is aware of the problem.

To file a bug in Skia: https://bugs.chromium.org/p/skia/issues/entry
To file a bug in Flutter: 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
2024-11-22 17:42:02 +00:00
skia-flutter-autoroll
4e88679b4f Roll Dart SDK from c1106f7e4cde to 141291fd570d (1 revision) (flutter/engine#56748)
https://dart.googlesource.com/sdk.git/+log/c1106f7e4cde..141291fd570d

2024-11-22 dart-internal-merge@dart-ci-internal.iam.gserviceaccount.com Version 3.7.0-178.0.dev

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/dart-sdk-flutter-engine
Please CC aaclarke@google.com,dart-vm-team@google.com on the revert to ensure that a human
is aware of the problem.

To file a bug in Flutter Engine: 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
2024-11-22 07:59:26 +00:00
Jonah Williams
602ab9846d [engine] more consistently flush dart event loop, run vsync callback immediately (flutter/engine#56738)
Changes the following shell callbacks to flush the dart event loop:

* OnPlatformViewSetViewportMetrics
* OnPlatformViewDispatchPointerDataPacket
* OnPlatformViewDispatchPlatformMessage
* OnPlatformViewSetSemanticsEnabled
* OnPlatformViewSetAccessibilityFeatures

Using a new TaskRunner API RunNowAndFlushMessages. If the task runner can run tasks on the current thread, this will immediately invoke a callback and then post an empty task to the event loop to ensure dart listeners fire.

This also updates the vsync waiter to use RunNowOrPostTask, so that we start vsync events as early as possible.
2024-11-22 07:47:17 +00:00
Chris Bracken
39db174656 Extract backend-specific code in ShellTestPlatformView (flutter/engine#56722)
Moves code specific to each graphics backend into the (existing) translation unit associated with that backend.

Previously, we could not include any Objective-C types in `shell_test_platform_view_metal.h`, since that file was included into `shell_test_platform_view.cc`, which is pure C++. To work around this, we had encapsulated Objective-C Metal types in a `DarwinContextMetal` struct hidden in the implementation file with a pointer to it forward-declared in the header.

We now use Metal types directly in the header, without the workarounds.

Issue: https://github.com/flutter/flutter/issues/158998
Issue: https://github.com/flutter/flutter/issues/137801

[C++, Objective-C, Java style guides]: https://github.com/flutter/engine/blob/main/CONTRIBUTING.md#style
2024-11-22 07:40:29 +00:00
Chris Bracken
5883c1a69b Eliminate ShellTestPlatformView::BackendType::kDefaultBackendType (flutter/engine#56744)
`kDefaultBackendType` is intended to make life easier for authors of tests, but in any switch statement where it's used (currently just a single location), we rely on ordering it first and `#ifdef`ing out all backends that aren't available.

Instead, we define a static function that returns the default that callers can invoke instead. This avoids relinace on case ordering and fallthrough.

In https://github.com/flutter/engine/pull/56722 we split backends out into separate translation units, and ideally should remove the `#ifdef`s, which means we can't rely on this trick anymore.

[C++, Objective-C, Java style guides]: https://github.com/flutter/engine/blob/main/CONTRIBUTING.md#style
2024-11-22 05:47:20 +00:00