-
Notifications
You must be signed in to change notification settings - Fork 29.7k
Started querying the app state for the gpu disabled sync switch #171785
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
…starting an engine without a view controller
|
This PR was tested manually with the following setup. The issue doesn't have reproduction code so I'm not sure this covers all cases: Steps:
I can't reproduce the original bug. I've tried variations where I lock the screen too as suggested in #166668 (comment) but I can't get it. According to #166668 (comment) the problem is non-deterministic though. import Flutter
import UIKit
import UserNotifications
import OSLog
@main
@objc class AppDelegate: FlutterAppDelegate, FlutterPluginRegistrant {
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
pluginRegistrant = self
UNUserNotificationCenter.current().delegate = self
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .badge, .sound]) { (granted, error) in
if granted {
print("Notification permission granted.")
} else {
print("Notification permission denied.")
}
}
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
override func applicationDidEnterBackground(_ application: UIApplication) {
let content = UNMutableNotificationContent()
content.title = "Counter App"
content.body = "You have been away for 10 seconds."
content.sound = UNNotificationSound.default
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 10, repeats: false)
let request = UNNotificationRequest(identifier: "backgroundNotification", content: content, trigger: trigger)
UNUserNotificationCenter.current().add(request) { (error) in
if let error = error {
print("Error scheduling notification: \(error)")
}
}
}
override func userNotificationCenter(_ center: UNUserNotificationCenter,
willPresent notification: UNNotification,
withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
completionHandler([.alert, .badge, .sound])
}
func register(with registry: any FlutterPluginRegistry) {
GeneratedPluginRegistrant.register(with: registry)
}
} |
| self.isGpuDisabled = self.viewController | ||
| ? self.viewController.stateIsBackground | ||
| : FlutterSharedApplication.application && | ||
| FlutterSharedApplication.application.applicationState == | ||
| UIApplicationStateBackground; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maintains existing behavior for app extensions.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In app extensions, the FlutterSharedApplication.application is unavailable and you have to use the Scene instead. Should this attempt to use the Scene if the application is unavailable?
flutter/engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterViewController.mm
Line 765 in 43657f3
| : [self isSceneStateMatching:UISceneActivationStateBackground]; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In app extensions, the
FlutterSharedApplication.applicationis unavailable and you have to use the Scene instead. Should this attempt to use the Scene if the application is unavailable?
It does check for the scene in self.viewController.stateIsBackground. So the question is really, "Can you have an app extension that is in a background state with an engine that doesn't have an associated view controller, which needs GPU access?" For that situation we can say for this PR that we do whatever we used to do, there is no change. I don't know if that situation is practical or possible. For example, I know memory requirements for app extensions is tight so you may not even be able to fit a second engine.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Here is a question: is there actually a code path to this code which sets viewController? I am trying to figure this out by looking at the code and I can't - I am starting to suspect it is always nil and can't be used at this point
e.g. ShareViewController calls [engine run] (which calls createShell) before it calls [self initWithEngine:...] which sets viewController.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Here is a question: is there actually a code path to this code which sets
viewController?
These API's are hard to reason about because they are public. Anyone could be doing anything with them (eg add-to-app). For the simple case of loading a FlutterViewController from a storyboard, it looks like the view controller will be nil:
flutter/engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterViewController.mm
Line 817 in 94265c5
| [self.engine setViewController:self]; |
The FlutterViewController can be created before the FlutterEngine (
flutter/engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterViewController.mm
Line 250 in 94265c5
| [self sharedSetupWithProject:nil initialRoute:nil]; |
What that means to me is that it's safest to construct the PR like this so we don't break any add-to-app cases and we have a workaround for people if it becomes problematic. For app extensions, I'm skeptical that app extensions can be initialized while an app is in the background. I think the more prudent thing is to keep the existing behavior for that.
|
I actually managed to reproduce this today, after struggling through different variations yesterday. The key here is that the app (at least on iOS26 which I have installed on both available to me iOS devices) even when started in background due to notification arriving seems to initially have GPU access but then looses it after some delay. So any tests which submit GPU work fast enough will actually succeed. Device log with some additional debug printing addedHere is the setup that eventually allowed me to reproduce it:
void main() {
sleep(const Duration(seconds: 1));
runApp(
Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
for (var i = 0; i <= 10; i++)
Image(image: AssetImage('assets/icon$i.png')),
],
),
),
);
}Once you have the app, you do the following:
That's it: if you have enough logging you will see in I have tested this code and it seems to do the trick. Now we correctly detect that we are running in background. |
vashworth
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
|
Is there a way to generate a notification for iOS through tooling and if so, should we add a test to the device lab to make sure we don't regress? |
I don't think we have a mechanism that can kill processes. In our reproduction we are using the app switcher to kill the process. |
…ter#171785) Started querying the app state for the gpu disabled sync switch when starting an engine without a view controller fixes flutter#166668 Testing: Integration test is not possible since it would require manipulation of the operating system and killing / restoring the app. Unit tests would require executing in the background or mocking out background detection which is pretty contrived and will complicate engine initialization. The simple cases will be covered with integration tests like the wide gamut devicelab tests which loads an image at startup and grabs a screenshot of it. ## 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 `///`). - [ ] 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
Roll Flutter from 43657f3baa17 to 35f197f1e5f5 (39 revisions) flutter/flutter@43657f3...35f197f 2025-07-12 [email protected] Roll Fuchsia Linux SDK from 8aoEy1hp2a9HI1pt-... to xQlbHCUI33kDvkew8... (flutter/flutter#172060) 2025-07-12 [email protected] Add RSuperellipse support to Web (global cache) (flutter/flutter#171489) 2025-07-12 [email protected] Fix grammar: Change 'A' to 'An' before IOSSystemContextMenuItemData (flutter/flutter#172019) 2025-07-11 [email protected] Manual roll Dart to b21dca1b89ff (flutter/flutter#172038) 2025-07-11 [email protected] Roll Skia from 2ea2ba09ef85 to 92354f64e37f (1 revision) (flutter/flutter#172039) 2025-07-11 [email protected] Fix CheckedPopupMenuItem semantics to use menuItemCheckbox role with checked state (flutter/flutter#171749) 2025-07-11 [email protected] adds gemini.md to `engine` and `licenses_cpp` (flutter/flutter#172022) 2025-07-11 [email protected] [Web] Implement disabling interactive selection (flutter/flutter#171935) 2025-07-11 [email protected] [tool] Make google3 have to override feature flags (flutter/flutter#171933) 2025-07-11 [email protected] License cpp 710 (flutter/flutter#171989) 2025-07-11 [email protected] add content description to tooltip-only nodes for android (flutter/flutter#171541) 2025-07-11 [email protected] [Web a11y]Update table cell to use LabelRepresentation.sizedSpan (flutter/flutter#172013) 2025-07-11 [email protected] [ Tool ] Enable `omit_obvious_*_types` and `specify_nonobvious_*_types` lints (flutter/flutter#172018) 2025-07-11 [email protected] Add SemanticsLabelBuilder for Accessible Label Concatenation (flutter/flutter#171683) 2025-07-11 [email protected] Run tests on either macOS 14 or 15 (flutter/flutter#171076) 2025-07-11 [email protected] Roll Skia from db1a5550c848 to 2ea2ba09ef85 (1 revision) (flutter/flutter#172017) 2025-07-11 [email protected] [Cupertino] Make some widgets no longer use RSuperellipse (flutter/flutter#171830) 2025-07-11 [email protected] Detach the resource context from the IO thread only if the shell's IO manager is no longer being used by any other spawned shells (flutter/flutter#171554) 2025-07-11 [email protected] Started querying the app state for the gpu disabled sync switch (flutter/flutter#171785) 2025-07-11 [email protected] License_cpp 7/02 (flutter/flutter#171558) 2025-07-11 [email protected] [web] Refactor clipboard. (flutter/flutter#171427) 2025-07-11 [email protected] Require 64-bit Windows (flutter/flutter#171925) 2025-07-11 [email protected] Run hot_reload_with_asset_web_test.dart on Mac/Windows (flutter/flutter#171280) 2025-07-11 [email protected] Roll Skia from da7e3eae7c2b to db1a5550c848 (2 revisions) (flutter/flutter#171999) 2025-07-11 [email protected] Roll Skia from 26571c3b1771 to da7e3eae7c2b (2 revisions) (flutter/flutter#171997) 2025-07-11 [email protected] Roll Skia from 34a40032ff0a to 26571c3b1771 (1 revision) (flutter/flutter#171995) 2025-07-11 [email protected] Roll Fuchsia Linux SDK from lO64ePNEGrGzs-MFC... to 8aoEy1hp2a9HI1pt-... (flutter/flutter#171993) 2025-07-10 [email protected] Remove redundant ThemeData(useMaterial3: true) from tests (flutter/flutter#171569) 2025-07-10 [email protected] [Android 16] Updated linux_android_emu to a 36 AVD in framework CI (flutter/flutter#169121) 2025-07-10 [email protected] [iOS] Add Live Text option to system context menu (flutter/flutter#170969) 2025-07-10 [email protected] Roll Skia from dc3da09ca905 to 34a40032ff0a (1 revision) (flutter/flutter#171982) 2025-07-10 [email protected] feat: Expose FocusNode of FocusTraversalGroup (flutter/flutter#171979) 2025-07-10 [email protected] `CupertinoDatePicker` and `CupertinoTimerPicker` new onChanged behavior (flutter/flutter#170793) 2025-07-10 [email protected] Manual roll Dart SDK from 8d69b07b9d9d to 07ea3aaaadf0 (32 revisions) (flutter/flutter#171969) 2025-07-10 [email protected] Style: Rename pageBuilder with builder in showCupertinoSheet (flutter/flutter#170625) 2025-07-10 [email protected] Roll Skia from bdb8bfcde7f3 to dc3da09ca905 (3 revisions) (flutter/flutter#171971) 2025-07-10 [email protected] Feat: Add foreground color for cupertino button (flutter/flutter#170898) 2025-07-10 [email protected] Roll Skia from 0fef076beec3 to bdb8bfcde7f3 (34 revisions) (flutter/flutter#171964) 2025-07-10 [email protected] Run stateless_stateful_hot_reload_web_test.dart on Mac/Windows (flutter/flutter#171283) If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/flutter-packages Please CC [email protected],[email protected] on the revert to ensure that a human is aware of the problem. ...
|
Regarding automatically testing this... We should be able to terminate the app via the debugger connection or via test automation e.g. XCUIApplication.terminate() - I don't think that's the hardest part. I think setting up notifications is probably more challenging infrastructurally (because it requires APN authentication, these secrets need to be stored somewhere). Maybe setting up using background tasks is more viable. |
…ter#171785) Started querying the app state for the gpu disabled sync switch when starting an engine without a view controller fixes flutter#166668 Testing: Integration test is not possible since it would require manipulation of the operating system and killing / restoring the app. Unit tests would require executing in the background or mocking out background detection which is pretty contrived and will complicate engine initialization. The simple cases will be covered with integration tests like the wide gamut devicelab tests which loads an image at startup and grabs a screenshot of it. ## 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 `///`). - [ ] 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
…ter#171785) Started querying the app state for the gpu disabled sync switch when starting an engine without a view controller fixes flutter#166668 Testing: Integration test is not possible since it would require manipulation of the operating system and killing / restoring the app. Unit tests would require executing in the background or mocking out background detection which is pretty contrived and will complicate engine initialization. The simple cases will be covered with integration tests like the wide gamut devicelab tests which loads an image at startup and grabs a screenshot of it. ## 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 `///`). - [ ] 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
My reproduction attempts used local notifications which doesn't require any authentication. Even if you did get them, how would you click on them to relaunch the app though and get a connection to the new process in order to grab the screenshot. |
|
I am not sure local notifications (those you click on) would do that - AFAIK they don't start the app in background, but in foreground. It is prerequisite for the reproduction that the app must be completely dead and it should start from scratch in background. I also think we can probably avoid screenshotting. Just kick off decoding of images into |
…ter#171785) Started querying the app state for the gpu disabled sync switch when starting an engine without a view controller fixes flutter#166668 Testing: Integration test is not possible since it would require manipulation of the operating system and killing / restoring the app. Unit tests would require executing in the background or mocking out background detection which is pretty contrived and will complicate engine initialization. The simple cases will be covered with integration tests like the wide gamut devicelab tests which loads an image at startup and grabs a screenshot of it. ## 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 `///`). - [ ] 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
…r#9602) Roll Flutter from 43657f3baa17 to 35f197f1e5f5 (39 revisions) flutter/flutter@43657f3...35f197f 2025-07-12 [email protected] Roll Fuchsia Linux SDK from 8aoEy1hp2a9HI1pt-... to xQlbHCUI33kDvkew8... (flutter/flutter#172060) 2025-07-12 [email protected] Add RSuperellipse support to Web (global cache) (flutter/flutter#171489) 2025-07-12 [email protected] Fix grammar: Change 'A' to 'An' before IOSSystemContextMenuItemData (flutter/flutter#172019) 2025-07-11 [email protected] Manual roll Dart to b21dca1b89ff (flutter/flutter#172038) 2025-07-11 [email protected] Roll Skia from 2ea2ba09ef85 to 92354f64e37f (1 revision) (flutter/flutter#172039) 2025-07-11 [email protected] Fix CheckedPopupMenuItem semantics to use menuItemCheckbox role with checked state (flutter/flutter#171749) 2025-07-11 [email protected] adds gemini.md to `engine` and `licenses_cpp` (flutter/flutter#172022) 2025-07-11 [email protected] [Web] Implement disabling interactive selection (flutter/flutter#171935) 2025-07-11 [email protected] [tool] Make google3 have to override feature flags (flutter/flutter#171933) 2025-07-11 [email protected] License cpp 710 (flutter/flutter#171989) 2025-07-11 [email protected] add content description to tooltip-only nodes for android (flutter/flutter#171541) 2025-07-11 [email protected] [Web a11y]Update table cell to use LabelRepresentation.sizedSpan (flutter/flutter#172013) 2025-07-11 [email protected] [ Tool ] Enable `omit_obvious_*_types` and `specify_nonobvious_*_types` lints (flutter/flutter#172018) 2025-07-11 [email protected] Add SemanticsLabelBuilder for Accessible Label Concatenation (flutter/flutter#171683) 2025-07-11 [email protected] Run tests on either macOS 14 or 15 (flutter/flutter#171076) 2025-07-11 [email protected] Roll Skia from db1a5550c848 to 2ea2ba09ef85 (1 revision) (flutter/flutter#172017) 2025-07-11 [email protected] [Cupertino] Make some widgets no longer use RSuperellipse (flutter/flutter#171830) 2025-07-11 [email protected] Detach the resource context from the IO thread only if the shell's IO manager is no longer being used by any other spawned shells (flutter/flutter#171554) 2025-07-11 [email protected] Started querying the app state for the gpu disabled sync switch (flutter/flutter#171785) 2025-07-11 [email protected] License_cpp 7/02 (flutter/flutter#171558) 2025-07-11 [email protected] [web] Refactor clipboard. (flutter/flutter#171427) 2025-07-11 [email protected] Require 64-bit Windows (flutter/flutter#171925) 2025-07-11 [email protected] Run hot_reload_with_asset_web_test.dart on Mac/Windows (flutter/flutter#171280) 2025-07-11 [email protected] Roll Skia from da7e3eae7c2b to db1a5550c848 (2 revisions) (flutter/flutter#171999) 2025-07-11 [email protected] Roll Skia from 26571c3b1771 to da7e3eae7c2b (2 revisions) (flutter/flutter#171997) 2025-07-11 [email protected] Roll Skia from 34a40032ff0a to 26571c3b1771 (1 revision) (flutter/flutter#171995) 2025-07-11 [email protected] Roll Fuchsia Linux SDK from lO64ePNEGrGzs-MFC... to 8aoEy1hp2a9HI1pt-... (flutter/flutter#171993) 2025-07-10 [email protected] Remove redundant ThemeData(useMaterial3: true) from tests (flutter/flutter#171569) 2025-07-10 [email protected] [Android 16] Updated linux_android_emu to a 36 AVD in framework CI (flutter/flutter#169121) 2025-07-10 [email protected] [iOS] Add Live Text option to system context menu (flutter/flutter#170969) 2025-07-10 [email protected] Roll Skia from dc3da09ca905 to 34a40032ff0a (1 revision) (flutter/flutter#171982) 2025-07-10 [email protected] feat: Expose FocusNode of FocusTraversalGroup (flutter/flutter#171979) 2025-07-10 [email protected] `CupertinoDatePicker` and `CupertinoTimerPicker` new onChanged behavior (flutter/flutter#170793) 2025-07-10 [email protected] Manual roll Dart SDK from 8d69b07b9d9d to 07ea3aaaadf0 (32 revisions) (flutter/flutter#171969) 2025-07-10 [email protected] Style: Rename pageBuilder with builder in showCupertinoSheet (flutter/flutter#170625) 2025-07-10 [email protected] Roll Skia from bdb8bfcde7f3 to dc3da09ca905 (3 revisions) (flutter/flutter#171971) 2025-07-10 [email protected] Feat: Add foreground color for cupertino button (flutter/flutter#170898) 2025-07-10 [email protected] Roll Skia from 0fef076beec3 to bdb8bfcde7f3 (34 revisions) (flutter/flutter#171964) 2025-07-10 [email protected] Run stateless_stateful_hot_reload_web_test.dart on Mac/Windows (flutter/flutter#171283) If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/flutter-packages Please CC [email protected],[email protected] on the revert to ensure that a human is aware of the problem. ...
…ter#171785) Started querying the app state for the gpu disabled sync switch when starting an engine without a view controller fixes flutter#166668 Testing: Integration test is not possible since it would require manipulation of the operating system and killing / restoring the app. Unit tests would require executing in the background or mocking out background detection which is pretty contrived and will complicate engine initialization. The simple cases will be covered with integration tests like the wide gamut devicelab tests which loads an image at startup and grabs a screenshot of it. ## 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 `///`). - [ ] 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
…ter#171785) Started querying the app state for the gpu disabled sync switch when starting an engine without a view controller fixes flutter#166668 Testing: Integration test is not possible since it would require manipulation of the operating system and killing / restoring the app. Unit tests would require executing in the background or mocking out background detection which is pretty contrived and will complicate engine initialization. The simple cases will be covered with integration tests like the wide gamut devicelab tests which loads an image at startup and grabs a screenshot of it. ## 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 `///`). - [ ] 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
…ter#171785) Started querying the app state for the gpu disabled sync switch when starting an engine without a view controller fixes flutter#166668 Testing: Integration test is not possible since it would require manipulation of the operating system and killing / restoring the app. Unit tests would require executing in the background or mocking out background detection which is pretty contrived and will complicate engine initialization. The simple cases will be covered with integration tests like the wide gamut devicelab tests which loads an image at startup and grabs a screenshot of it. ## 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 `///`). - [ ] 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
Started querying the app state for the gpu disabled sync switch when starting an engine without a view controller
fixes #166668
Testing: Integration test is not possible since it would require manipulation of the operating system and killing / restoring the app. Unit tests would require executing in the background or mocking out background detection which is pretty contrived and will complicate engine initialization. The simple cases will be covered with integration tests like the wide gamut devicelab tests which loads an image at startup and grabs a screenshot of it.
Pre-launch Checklist
///).If you need help, consider asking for advice on the #hackers-new channel on Discord.