Fixes https://github.com/flutter/flutter/issues/161283
When generating mipmaps, as soon as we hit a dimension (x,y) of 1, stop
generating mipmaps. This is done by changing the mip computation to use
min instead of max - but also adds a short circuit too.
## Description
This PR fixes a crash on Android related to specific keyboard events.
It is very similar to http://github.com/flutter/engine/issues/35924
which was related to down events. This PR fixes the similar logic
related to repeat events.
## Related Issue
Fixes [Flutter 3.29 Fatal crash with
java.lang.AssertionError](https://github.com/flutter/flutter/issues/164626)
## Tests
Adds 1 test.
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.