yaakovschectman
e2908808b6
Add callback to Embedder API to respond to new channel listeners, and use for Windows lifecycle ( flutter/engine#44827 )
...
Supplant the temporary solution
https://github.com/flutter/engine/pull/44238 with a more elegant
solution with am embedder API callback. The windows engine provides a
callback that enables graceful exit and app lifecycle when the platform
and lifecycle channels are listened to, respectively.
https://github.com/flutter/flutter/issues/131616
## 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 Hixie said 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 `///`).
- [ ] 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
[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
---------
Co-authored-by: Chris Bracken <chris@bracken.jp>
2023-08-29 16:12:35 -04:00
LongCatIsLooong
649a1e181c
Reland "Implementing TextScaler for nonlinear text scaling ( #42062 )" ( flutter/engine#44907 )
...
The original PR crashes because of a JNI signature mismatch (`(FJ)F` -> `(FI)F`). Update the signature in a415da5619
[C++, Objective-C, Java style guides]: https://github.com/flutter/engine/blob/main/CONTRIBUTING.md#style
2023-08-21 23:16:10 +00:00
Jonah Williams
6f3b341232
Revert "Implementing TextScaler for nonlinear text scaling" ( flutter/engine#44882 )
...
Reverts flutter/engine#42062
Failing due to:
>>>>>>>> 08-18 15:59:41.350 3439 3484 E flutter :
[ERROR:flutter/shell/platform/android/platform_view_android_jni_impl.cc(902)]
Could not locate FlutterJNI#getScaledFontSize method
>>>>>>>> 08-18 15:59:41.350 3439 3484 F flutter :
[FATAL:flutter/shell/platform/android/library_loader.cc(26)] Check
failed: result.
2023-08-20 14:10:13 -07:00
LongCatIsLooong
7d07749fdd
Implementing TextScaler for nonlinear text scaling ( flutter/engine#42062 )
...
`platformTextScaler` doesn't need to be per window, assuming the SP -> DiP mapping is always the same on the same device (unless the user changes the preference), and does not depend on the display device's pixel density (it's confirmed).
Design doc: https://docs.google.com/document/d/1-DlElw3zWRDlqoc9z4YfkU9PbBwRTnc7NhLM97ljGwk/edit#
[C++, Objective-C, Java style guides]: https://github.com/flutter/engine/blob/main/CONTRIBUTING.md#style
2023-08-18 22:22:16 +00:00
Tong Mu
177a6128c1
Basic view management for engine classes ( flutter/engine#42991 )
...
_This PR is part of the multiview engine project. For a complete roadmap, see [this doc](https://docs.google.com/document/d/10APhzRDR7XqjWdbYWpFfKur7DPiz_HvSKNcLvcyA9vg/edit?resourcekey=0-DfGcg4-XWRMMZF__C1nmcA )._
------
This PR adds view management to all engine classes that need it. View management here basically means `AddView` and `RemoveView` methods, and most importantly, how to handle the implicit view.
The implicit view is a special view that's handled differently than all the other "regular views", since it keeps the behavior of the current single view of Flutter. Detailed introduction can be found in `Settings.implicit_view_enabled`.
The following two graphs show the difference between initializing with/without the implicit view and creating regular views.
<img width="879" alt="image" src="https://github.com/flutter/engine/assets/1596656/31244685-d9d3-4c9a-9a9e-6e8540a5711e ">
<img width="864" alt="image" src="https://github.com/flutter/engine/assets/1596656/e2dd4b8c-57e3-428d-8547-834fb270052b ">
<img width="860" alt="image" src="https://github.com/flutter/engine/assets/1596656/58dae687-8c17-434e-ae24-a48c2d8fa5fa ">
[C++, Objective-C, Java style guides]: https://github.com/flutter/engine/blob/main/CONTRIBUTING.md#style
2023-08-17 20:06:25 +00:00
Tong Mu
489f9c3d01
Make updating window metrics multi-view ( flutter/engine#43366 )
...
This PR adds multi-view support to various methods that updates the window metrics by adding a `view_id` parameter.
[C++, Objective-C, Java style guides]: https://github.com/flutter/engine/blob/main/CONTRIBUTING.md#style
2023-07-08 05:54:16 +00:00
Tong Mu
9cd4338940
Rename default views to implicit views ( flutter/engine#43364 )
...
This PR renames a number of internal variables from "default view ID" to
"implicit view ID", as we have pretty much settled on naming this
mechanism. Some docs are also fixed accordingly.
## 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].
<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/wiki/Tree-hygiene#overview
[Tree Hygiene]: https://github.com/flutter/flutter/wiki/Tree-hygiene
[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
2023-07-07 20:44:37 -07:00
Dan Field
ea5131772d
Add a Display API to dart:ui that reports the physical size, DPR, and refresh rate of the main display ( flutter/engine#41685 )
...
Fixes https://github.com/flutter/flutter/issues/123307 - for Android, iOS, and Web, for the main display only (https://github.com/flutter/flutter/issues/125938 tracks supporting multiple displays, https://github.com/flutter/flutter/issues/125939 for desktop).
Desktop will need to be implemented for this, but given priority for a couple of our customers targetting foldable devices on Android I'm inclined to get this in before desktop can be finished.
The main concern for this right now is that on some Android foldable devices, setting a preferred orientation will cause letterboxing and the `MediaQuery` will _never_ get the full screen size when unfolded. This causes apps to think the screen is smaller than it is, as they've mainly been using `MediaQueryData.size` to figure this out. Android's recommendation is to not set a preferred orientation, and if you must to use the new method introduced in `ViewUtil.java` to calculate the maximal window size.
2023-05-06 18:28:22 +00:00
Tong Mu
05036058d7
Remove single window assumption from SceneBuilder ( flutter/engine#41559 )
...
This PR fixes https://github.com/flutter/flutter/issues/112202 . `Scene`
is no longer tied to views, but receives method arguments for view
properties, clearing the path to multiview Flutter.
`Scene` no longer creates a `LayerTree` on construction, but only part
of the config. When a output method is called (`toImage`, `toImageSync`,
or `takeLayerTree`), the `LayerTree` is constructed on the spot. In this
way, all `LayerTree`s return to being `unique_ptr`s instead of
`shared_ptr`s, reverting part of
https://github.com/flutter/engine/pull/35608 . And `Scene` no longer
needs to disfunction after one `takeLayerTree`, since the layer tree
config is never really taken away.
A `device_pixel_ratio` is now added to the parameter list of `Engine::Render` and `Animator::Render`.
## 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.
- [ ] 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.
- [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
[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
2023-05-05 11:25:55 -07:00
Loïc Sharma
b786d923f5
Remove single view assumption from pointer events ( flutter/engine#41602 )
...
This change removes the assumption that that all pointer events go to the view ID `0`. This change also adds a test for pointer events.
Part of: https://github.com/flutter/flutter/issues/112205
## Background
All pointer events are sent to [`PlatformDispatcher.onPointerDataPacket`](https://api.flutter.dev/flutter/dart-ui/PlatformDispatcher/onPointerDataPacket.html ). In the future, a `viewId` property will be added [`PointerData`](https://api.flutter.dev/flutter/dart-ui/PointerData-class.html ), which the framework (specifically, `GestureBinding`) will use to route the event to the proper view. This `viewId` property's value will be set by the embedders.
[C++, Objective-C, Java style guides]: https://github.com/flutter/engine/blob/main/CONTRIBUTING.md#style
2023-04-29 03:47:10 +00:00
luckysmg
418c28e09a
Add trace event when updating ViewportMetrics ( flutter/engine#41024 )
...
Add trace event when updating ViewportMetrics
2023-04-10 16:17:08 +00:00
Greg Spencer
28a810a5b2
Rename setters for lifecycle state ( flutter/engine#40462 )
...
Rename setters for lifecycle state
2023-03-20 21:16:21 +00:00
Loïc Sharma
a9e12287f6
[dart:ui] Introduce PlatformDispatcher.implicitView ( flutter/engine#39553 )
...
This introduces `PlatformDispatcher.implicitView`, a low-level primitive for the framework's bootstrapping. Most code, including the framework after bootstrapping, will use `View.of(context)` instead of this new API. This new primitive will let us deprecate the `window` global.
Goals:
1. **Enable multi-window**. The `PlatformDispatcher.implicitView` is nullable. If `null`, the app must create a window to get a view it can draw into.
2. **Backwards compatibility**. For "single window" apps, `PlatformDispatcher.instance.implicitView` should behave as similar to `window` as possible.
1. The `PlatformDispatcher.instance.implicitView.viewId` should be `0`.
1. The `PlatformDispatcher.instance.implicitView` must be available synchronously at root isolate startup. This allows the framework to determine if it can make single window assumptions at startup.
2. The `PlatformDispatcher.instance.implicitView` reference must not change after startup: if it is null at startup, it must always be null; if it is non-null at startup, it must always be non-null. If "single window" app enters headless mode, the implicit view must remain non-null.
In the future, the embedder will control whether an implicit view is created: mobile & legacy desktop apps will have an implicit view, multi-window desktop apps won't have an implicit view. This requires updating the engine's embedder API and is out-of-scope for this change. For now, all apps will have an implicit view.
Part of https://github.com/flutter/flutter/issues/120306
2023-02-16 16:32:14 -08:00
Chris Bracken
dc3033d922
Clarify semantics action dispatch id parameter ( flutter/engine#38356 )
...
Previously the embedder API documented this as an action ID, but it's
actually the semantics node ID. This fixes the docs and renames the
parameter to clarify its purpose.
This callback is registered in the framework render bindings:
9102f2fe0b/packages/flutter/lib/src/rendering/binding.dart (L43)
Handled by `_handleSemanticsAction`:
9102f2fe0b/packages/flutter/lib/src/rendering/binding.dart (L360-L366)
Which invokes `SemanticsOwner.performAction`, where the node is looked up by ID:
9102f2fe0b/packages/flutter/lib/src/semantics/semantics.dart (L3258-L3277)
2022-12-16 13:40:48 -08:00
Dan Field
020577edbb
Make NotifyIdle reject close and past deadlines. ( flutter/engine#37737 )
...
This patch also eliminates some extraneous tracing that is happening
every frame. It is possible to get the same trace calls by enabling
the API stream if needed.
Also refactors the NotifyIdle callsites to just always work in
TimeDeltas rather than converting back and forth between them and
TimePoints, which I think reads more clearly.
2022-11-18 18:17:53 +00:00
Siva
7296b2b66d
Add call to Dart_NotifyDestroyed when the flutter view is destroyed. ( flutter/engine#37539 )
...
* Add calls to Dart_NotifyDestroyed when the flutter view is destroyed.
* Add unit test case.
* Format.
* Ensure the destroy task runs.
* Address code review comments.
2022-11-17 13:11:21 -08:00
Kaushik Iska
ca224262c5
Do not call Dart_NotifyIdle when in Dart_PerformanceMode_Latency ( flutter/engine#37499 )
2022-11-10 21:28:38 -05:00
gaaclarke
cb4c9f4727
Clang-tidy: made verbose print out commands and fixed quoting problem for warnings as errors ( flutter/engine#37015 )
2022-10-26 08:19:12 +00:00
Dan Field
181a1728f1
Always use fml::TaskRunnerAffineWeakPtr for SnapshotDelegate ( flutter/engine#36772 )
2022-10-14 18:09:29 -07:00
Jonah Williams
aadc2d3094
Add ImmutableBuffer.fromFilePath ( flutter/engine#36623 )
2022-10-05 22:18:03 +00:00
gaaclarke
e41c775200
Removed instances of unnecessary values ( flutter/engine#36221 )
2022-09-26 21:28:04 +00:00
Dan Field
63e8e223aa
[Impeller] toImageSync for Impeller ( flutter/engine#36365 )
2022-09-23 20:31:03 +00:00
gaaclarke
42c469183e
Started handling messages from background isolates for iOS ( flutter/engine#35174 )
2022-09-08 00:03:27 +00:00
ColdPaleLight
e1fe7327b1
Use the correct 'SnapshotDelegate' in 'RuntimeController::Spawn' ( flutter/engine#34523 )
2022-07-13 01:09:04 +00:00
Jonah Williams
8aef5df7b1
Add support for loading asset directly from ImmutableBuffer ( flutter/engine#32999 )
2022-05-10 19:39:04 -07:00
Dan Field
9e46531319
Remove redundant trace events ( flutter/engine#32812 )
2022-04-21 13:28:03 -07:00
gaaclarke
eb45cf1c9d
Fixed image generator registry usage with spawn. ( flutter/engine#31622 )
2022-03-17 13:10:11 -07:00
ColdPaleLight
b64598bef6
Refactor type of deadline in the method NotifyIdle to fml::TimePoint ( flutter/engine#30737 )
2022-01-19 17:25:09 -08:00
eggfly
6b1d2dcdbc
Share the io_manager between parent and spawn engine ( flutter/engine#29915 )
2021-12-01 10:34:01 -08:00
eggfly
d18f5c8223
Reset viewport_metrics when spawn new Engine ( flutter/engine#29876 )
...
Co-authored-by: zsunkun <zsunkun@163.com>
2021-11-24 09:49:08 -08:00
ColdPaleLight
9ecd4c1899
Make FlutterEngineGroup support dart entrypoint args ( flutter/engine#29096 )
2021-11-18 18:08:03 -08:00
Tong Mu
5183c56533
[Embedder] Send key data through message channel ( flutter/engine#29795 )
...
This PR changes how embedder API's SendKeyData sends ui.KeyData to the framework. The packets are now sent over the existing platform messenger, reusing the entirety of its code path and functionalities while keeping the embedder API unchanged
2021-11-18 17:53:28 -08:00
Dan Field
f1dae7ad34
Delay default font manager to run concurrently with isolate setup ( flutter/engine#29291 )
...
* Delay default font manager to run concurrently with isolate setup
* test
2021-10-21 16:20:32 -07:00
Jonah Williams
ccae44ffd0
Surface frame number identifier through window ( flutter/engine#26785 )
2021-06-28 10:16:01 -07:00
Dan Field
3bc015dc10
Remove tech debt related to image disposal and layer GC ( flutter/engine#26870 )
...
* remove tech debt
* Fix test
2021-06-25 15:33:08 -07:00
Brandon DeRosier
a83c8ab61d
Refactor: Group together externally-managed UIDartState. ( flutter/engine#26247 )
...
Group together externally-managed UIDartState.
It's a frequent pattern to enable access to shell resources from the
framework via UIDartState. These handles are passed through several
other objects, where they lay mostly dormant. This refactor just aims
to ease maintenance of this state.
UIDartState is essentially just an easy to extend bus for dropping
off the shell kids in UIDartState, with constructors/operators that
remove the need for providing a full initializer lists in unittests.
2021-05-20 18:01:53 -07:00
Brandon DeRosier
b9982cdec7
Add image generator registry ( flutter/engine#25987 )
...
Add image generator protocol and priority registry.
The protocol supports multi-frame images as well as optional
subpixel/downsampled decoding.
2021-05-17 12:12:46 -07:00
gaaclarke
4d98fd9744
Switch PlatformMessages to hold data in Mappings ( flutter/engine#25867 )
2021-05-13 10:28:25 -07:00
gaaclarke
1734ce7f8a
Moved PlatformMessage's to unique_ptrs ( flutter/engine#25860 )
2021-05-06 20:19:01 -07:00
Chris Bracken
13cf185e1c
Correct setup-related typos ( flutter/engine#24846 )
...
Corrects uses of setup as a verb to 'set up', leaves noun/noun-phrase
forms of setup as 'setup'. Also settles on 'teardown' as opposed to
tear-down for consistency across the codebase.
A few other minor comment/wording corrections.
2021-03-08 17:31:10 -08:00
gaaclarke
9f222fa212
Fixed plumbing of the spawning isolate for Shell::Spawn. ( flutter/engine#24112 )
2021-02-01 15:32:15 -08:00
Tong Mu
ee1cc9f5ab
Hardware keyboard: Web, embedder, and dart:ui ( flutter/engine#23466 )
2021-01-28 17:19:02 -08:00
Dan Field
e778949043
Reland path vol tracker ( flutter/engine#23840 )
...
This time making sure to deref the native object on GC.
2021-01-21 16:03:43 -08:00
Dan Field
cb57183325
revert path volatility tracker ( flutter/engine#23822 )
2021-01-21 08:34:02 -08:00
gaaclarke
dbc486213c
Plumbing refactor to allow the usage of Dart_CreateIsolateInGroup ( flutter/engine#23549 )
...
Did the plumbing refactor that allows us to call Dart_CreateIsolateInGroup when applicable.
2021-01-12 16:43:12 -08:00
Dan Field
dedf9bd1af
Reland path volatility tracker, disabling it if deterministic rendering is requested ( flutter/engine#23226 )
...
* Reland path volatility tracker (#23063 )" (#23220 )
This reverts commit b56fc25561417f96e17dacab375e66f474a54c94.
* allow disabling based on whether deterministic rendering is needed
2020-12-22 08:25:20 -08:00
Dan Field
b56fc25561
Revert "Reland path volatility tracker ( #23063 )" ( flutter/engine#23220 )
...
This reverts commit 77c7096efb0b1392acc9793c386561a3c36012ba.
2020-12-21 13:53:18 -08:00
Dan Field
77c7096efb
Reland path volatility tracker ( flutter/engine#23063 )
...
* Revert "Revert "Set SkPath::setIsVolatile based on whether the path survives at least two frames (#22620 )" (#23044 )"
This reverts commit feda80cb42f99e2588a9a6b9ab3dd1f812d0f45b.
* Fix tracing
2020-12-14 17:21:55 -08:00
Dan Field
feda80cb42
Revert "Set SkPath::setIsVolatile based on whether the path survives at least two frames ( #22620 )" ( flutter/engine#23044 )
...
This reverts commit 2d52a3c87c97660a050e4bf5559091d0cec262f3.
2020-12-11 15:39:24 -08:00
Dan Field
2d52a3c87c
Set SkPath::setIsVolatile based on whether the path survives at least two frames ( flutter/engine#22620 )
...
This patch defaults the volatility bit on SkPaths to false, and then flips it to true if the path survives at least two frames.
2020-12-10 13:57:23 -08:00