This pull request is created by [automatic cherry pick workflow](https://github.com/flutter/flutter/blob/main/docs/releases/Flutter-Cherrypick-Process.md#automatically-creates-a-cherry-pick-request)
Please fill in the form below, and a flutter domain expert will evaluate this cherry pick request.
### Issue Link:
What is the link to the issue this cherry-pick is addressing?
Part of https://github.com/flutter/flutter/issues/148887.
### Changelog Description:
Explain this cherry pick in one line that is accessible to most Flutter developers. See [best practices](https://github.com/flutter/flutter/blob/main/docs/releases/Hotfix-Documentation-Best-Practices.md) for examples
Configuration changes to run test on macOS 14 for Flutter's CI.
### Impact Description:
What is the impact (ex. visual jank on Samsung phones, app crash, cannot ship an iOS app)? Does it impact development (ex. flutter doctor crashes when Android Studio is installed), or the shipping production app (the app crashes on launch)
Impacts what type of bot the test runs on for releases.
### Workaround:
Is there a workaround for this issue?
N/A
### Risk:
What is the risk level of this cherry-pick?
### Test Coverage:
Are you confident that your fix is well-tested by automated tests?
### Validation Steps:
What are the steps to validate that this fix works?
N/A
⚠️ This targets branch `flutter-3.29-candidate.0` for the Flutter beta.
Cherrypicks https://github.com/flutter/flutter/pull/161846 to `flutter-3.29-candidate.0`.
**Impacted Users**: Users that use macOS Sequoia and haven't turned on Local Network permissions for their IDE or terminal app. See: https://github.com/flutter/flutter/issues/150131
**Impact Description**: Without this improved error message, `flutter run` outputs this error: `SocketException: Send failed, OS Error: No route to host, errno = 65`.
**Workaround**: Turn on Local Network permissions for your IDE or terminal app. However, it's difficult for customers to discover this from the error message.
**Risk**: This change could regress the tool's Dart VM discovery.
**Test Coverage**: Yes added tests
**Validation Steps**: In System Settings > Privacy & Security > Local Network, toggle off Visual Studio Code. In VS Code, run a Flutter app on a physical device.
CupertinoSheetRoute is a new widget added in 3.29 as a part of #157568. #161696fixes#161623, which was an issue where you could not put scrollable content in the sheet, which is expected behavior. CupertinoSheetRoute has been a highly requested widget so is expected to get a lot of use.
Impacted users: anyone using the CupertinoSheetRoute with scrollable content, which should be a common use case.
Impact description: not being able to scroll within the sheet would create a very bad first impression and leave the sheet unusable for a lot of apps.
Workaround: None.
Risk: This is a brand new widget, so none.
Test Coverage (Are you confident that your fix is well-tested by automated tests?): Yes, the fix has regression tests.
Validation Steps (What are the steps to validate that this fix works?): Create a CupertinoSheetRoute with scrollable content that expands past the size of the sheet. #161623 has a code sample.
Fixes https://github.com/flutter/flutter/issues/162379
The IPConicalGradient function requires full float 32 precision, though this depends on the exact gpu behavior. To be safe, increase the general precision in all of these shaders.
Fixes https://github.com/flutter/flutter/issues/162128
Zero dimensioned rectangle blurs were causing the setup code to generate NaN values. This condition could also happen for some very thin or short rectangles so rather than just rule out zero-dimensioned rectangles, the uniforms are checked for NaN values and the operation is skipped in those cases.
Fixes https://github.com/flutter/flutter/issues/161262
Sometimes we end up with clip replay entities that have clip depth values substantially below the current depth. I suspect this is due to either mismatched save/restore or a bug in our code. Update: this isn't a bug/bug but its definitely a bug. We can have multiple clips per save, but the restore will remove at most one from the record/replay.
If a clip has a depth value that is less than the current clip depth, it cannot by definition impact anything that draws after it.
Fixes https://github.com/flutter/flutter/issues/161861
Resetting a command pool is not sufficient to reclaim memory. Contrary to what you would expect, it appears that just resetting the pool, even if the cmd buffers are reclaimed, never frees any memory unless this flag is provided.
The existing technique of offsetting a smaller texture is very vunerable to bugs in the renderer. Rather than this approach, we can allocate a new offscreen that is full sized and then blit a smaller region. To reduce the allocation costs, we can also set up a transients cache which will reuse this texture. In total, this should be more performant than the existing partial repaint (due to lack of continual re-allocation) at the cost of higher peak memory usage.
Fixes https://github.com/flutter/flutter/issues/140877 Fixes https://github.com/flutter/flutter/issues/160588 Fixes https://github.com/flutter/flutter/issues/156113
When processing the metadata for a struct with an array, incorporate the padding into the layout. Previously we would register a vec3[n] array as being 4*n bytes (including the padding), but when uploading this would result in us writing data into the padding and then leave the rest uninitialized. now we correctly insert a padding element between 3 byte elements.
Fixes https://github.com/flutter/flutter/issues/161645
If we have disabled mipmap generation on a platform due to GPU driver bugs, make sure that all sampling options used declare that only the base mip level should be read. Otherwise we can end up sampling from unpopulated mip levels.
Fixes https://github.com/flutter/flutter/issues/161209
testing on a 540 and everything seems to work now that we have the Adreno specific workarounds added to the renderer. Its possible there are some bugs that only exist on the early 600s but I guess we'll find out.
Fixes https://github.com/flutter/flutter/issues/161374
When we round out the texture size for a saveLayer, also round out the coverage so that the drawing origin is correct. Otherwise we may actually cut off the top left edge of rendering.
Almost all remaining blackscreen or rendering bugs/crashes are PowerVR hardware. Based on common knowledge that several large engines prevent PowerVR completely, we'll also block PowerVR until we have time to accumulate the necessary workarounds.
Do I need to run this script too?
```
# When updating the Dart revision, ensure that all entries that are
# dependencies of Dart are also updated to match the entries in the
# Dart SDK's DEPS file for that revision of Dart. The DEPS file for
# Dart is: https://github.com/dart-lang/sdk/blob/main/DEPS
# You can use //tools/dart/create_updated_flutter_deps.py to produce
# updated revision list of existing dependencies.
```
Fixes SkRSXform task in https://github.com/flutter/flutter/issues/161456
Removes (nearly) all uses of Skia SkRSXform object from DisplayList and
replaces it with a new Impeller RSTransform geometry object.
There are remaining uses in:
- Skia adapter code which needs to convert them back to SkRSXform when
using the Skia backend
- dl_rendering_tests which is waiting for a major conversion effort
- ?Fuchsia? code has an SkCanvas spy adapter used in its embedder code
(not DisplayList related)
- web_ui/skwasm
## Description
This PR fixes DropdownMenu arrow icon position when
`InputDecoration.isCollapsed` is set to true and
`InputDecoration.suffixConstraints` is set to a smaller value than the
min interactive height.
It makes it possible to use collapsed `DropdownMenu` such as:

_____
Before this PR and https://github.com/flutter/flutter/pull/153089,
`InputDecoration.isCollapsed` had no impact on the `DropdownMenu` height
and there was no solution to reduce the height because its minimum
height is enforced by the `IconButton` (arrow down or up) which is part
of the `DropdownMenu`.
Since https://github.com/flutter/flutter/pull/153089, the height can be
reduce with `InputDecoration.suffixIconConstraints` but it results in
the icon being misaligned:

After this PR:
When `InputDecoration.suffixIconConstraints` is used the icon is
correctly aligned:

<details><summary>Code sample</summary>
```dart
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return const MaterialApp(
title: 'Flutter Demo',
home: MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title});
final String title;
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
return const Scaffold(
body: Center(
child: Center(
child: DropdownMenu<String>(
dropdownMenuEntries: [
DropdownMenuEntry(label: 'Item 1', value: '1'),
DropdownMenuEntry(label: 'Item 2', value: '2'),
],
inputDecorationTheme: InputDecorationTheme(
contentPadding: EdgeInsets.fromLTRB(5, 0, 5, 0),
isCollapsed: true,
// Usable since https://github.com/flutter/flutter/pull/153089.
suffixIconConstraints: BoxConstraints(minHeight: 24, maxHeight: 24),
filled: true,
),
),
),
),
);
}
}
```
</details>
## Related Issue
Fixes [DropdownMenu inputDecoration isCollapsed property does not reduce
vertical spacing](https://github.com/flutter/flutter/issues/138691)
## Tests
Adds 2 tests.
The goal here is to have a great standalone `android_engine_test` suite
that [replaces
`scenario_app/android`](https://github.com/flutter/flutter/pull/160992).
No test is _functionally_ changed in this PR, but overview of changes:
- Finished renaming the suite `android_engine_tests` instead of
`flutter_driver_android`
- Added instructions and an environment variable for local generation of
golden-files (`UPDATE_GOLDENS=1`)
- Added explanations of the individual tests, where they live, and how
to run them locally
- Added a hybrid-composition (HC, not TLHC, which is already tested)
test
- Renamed "other_smiley" to "surface_texture_smiley" (and renamed the
original to "surface_producer_smiley")
- Removed unnecessary ".android" suffix (we will not run this on
anything but Android)
- Added a `tool/deflake.dart` to run a test suite 10x (or custom) times
locally to try and determine flakiness
After this PR, I'll add flags to let you control variants and name the
screenshots accordingly, i.e.:
- API v34 or v35
- OpenGLES or Vulkan (will require an `AndroidManifest.xml` edit during
the test instrumentation)
Now that we have a monorepo we can vastly simplify the engine's
`analysis_options.yaml` file: It can just import the general rule set
(instead of recreating it) and then we can apply the engine-specific
rules on top of it. This also makes it easier to tell where the engine
rule set differs from the general one.
No more `# DIFFERENT FROM FLUTTER/FLUTTER` comments. 🥳
Depends on https://github.com/flutter/flutter/pull/161560, which has to
be submitted first.
Accomplishes the `AccumulationRect and MatrixClipTracker` task in
https://github.com/flutter/flutter/issues/161456
Remove legacy Skia geometry APIs from the DisplayList utils classes
(accumulation rect and matrix/clip state tracker) as well as the small
number of remaining uses of them (mostly from their own unit tests).
Fixes for a variety of speculative fixes for AHB swapchain issues.
Details TBD while some tests run...
1. Even If the SurfaceControl API is supported, there is no guarantee
that we can import the AHB as there may be a mismatch in the required
memory properties and what is available. Add a validity check to the
texture pool and bail from the swapchain if any are invalid.
2. Rather than submitting a dummy cmd buffer that does a layout
transition, use the final command buffer signal semaphore.
3. Import the render ready semaphore and use it to block the onscreen
command buffer.
This is the last time we have to do this because in
https://github.com/flutter/flutter/pull/161554 I am refactoring the
engine's analysis_options.yaml to just import the one from the root of
the repository. When that lands, lints only have to be enabled in one
place to apply across framework and engine.
Before we can do that we have to do one last sync to make sure the
engine code base is ready. This PR implements that last sync and fixing
all lints that came up.