Most of the reported Mediatek issues are API 29/30, maybe up to 31. By
34 it should work, and the mokey device we have works fine with Vulkan
and runs on CI. This is necessary to allow MediaTek devices to use HCPP
without us having to write a new rendering surface abstraction for GL.
This does _not_ enable PowerVR, which is still denylisted in the vulkan
backend.
Currently we reset the entire descriptor pool(s) each frame.
We can actually reuse the allocated descriptor sets, as that is safe to
do as soon as the cmd buffer that references them has been submitted
(AFAIK). This provides a minor speed up for a large amount of small
drawing ops, but not much beyond that.
Using MSAA w/ depth stencil requires extra work on the GPU to track
multiple samples and clear the depth/stencil textures.
See also:
https://docs.qualcomm.com/bundle/publicresource/topics/80-78185-2/best_practices.html
Its unclear _how_ much this matters, but adreno recommends minimizing
bin count and as such minimizing msaa samples. Well, we can fully
minimize it by not enabling it. Removing depth stencil was also
considered in the past, this should be removed as it requires us to
clear, which isn't free.
Its likely this won't have a huge performance impact, but seems like a
good best practice.
Fixes https://github.com/flutter/flutter/issues/163421
If we restore to the onscreen but need to generate mips (because its a
toImage call) then we could miss the mip map generation. This will
primarily happen on Android emulators as they do not support framebuffer
fetch.
There are currently a large amount of crashes coming from older devices
that we don't have good test coverage for. For now, lets remove the
fallback to ImpellerGLES on old devices and instead use SkiaGLES, which
we know from experience works on these older devices.
Fixes https://github.com/flutter/flutter/issues/157753
Even when a `uiaccessibilityelement` is marked as
`accessibilityRespondsToUserInteraction`, if it's spatially far away
enough from its parent's `accessibilityFrame`, a VoiceControl label will
not be created for it. In this PR, I set the parent
`SemanticObjectContainer`'s `accessibilityFrame` so it is the minimum
rect that will cover all it's children.
## 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 the aiks context isn't initialized, we will create one on the fly
which can actually crash on the GLES backend. Add a check if the context
is already initialized and cancel precaching of the shader which
triggers this crash. The precache is only a performance improvement and
is not critical for usability.
Fixes https://github.com/flutter/flutter/issues/164757
Also use the name "gen_snapshot" when building for Android targets
instead of appending a target architecture to the filename.
This allows flutter_tools to find the universal gen_snapshot binary when
using a locally built engine. Previously the tools would search
directories like "clang_x64" and find build outputs that may not match
the host architecture.
Moving the universal gen_snapshot binary to a separate directory avoids
conflicts with Dart's gen_snapshot binary, which is placed at the root
of the target output directory.
Required for multi-window.
On windows the `LifecycleManager` currently sends the lifecycle event as
soon as windows message is processed. This however causes problems when
changing focus between application windows.
When switching focus from HWND1 to HWND2, HWND1 first gets unfocused,
followed by HWND2 getting focused. After HWND1 gets unfocused,
`LifecycleManager` immediately notifies the framework that the
application is inactive, which is wrong as the application never went
into inactive state, followed by subsequent call to put the application
in resumed state when HWND2 is focused. Because this happens very
quickly, sometimes focus manager gets into inconsistent state.
To resolve this `LifecycleManager` should gather the all the changes
while window sends the messages and then notify the framework atomically
in next run loop turn.
This PR also simplifies the logic in `LifecycleManager` through which
the application state is derived from window states.
This PR removes engine forcing `resumed` lifecycle state at startup. I'm
not entirely sure what the point of this was - the state can and should
be determined solely from window states, this just seems to muddy the
state logic. Also it happens before the framework is even listening to
state changes.
The mutex in `WindowsLifecycleManager` is removed. Not sure why it was
there.
## 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
---------
Co-authored-by: Matthew Kosarek <matt.kosarek@canonical.com>
Co-authored-by: Harlen Batagelo <hbatagelo@gmail.com>
Co-authored-by: Loïc Sharma <737941+loic-sharma@users.noreply.github.com>