-
Notifications
You must be signed in to change notification settings - Fork 29.7k
Fix to Linux_pixel_7pro integration_ui_keyboard_resize test flakiness #162308
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
Fix to Linux_pixel_7pro integration_ui_keyboard_resize test flakiness #162308
Conversation
|
This pull request has been changed to a draft. The currently pending flutter-gold status will not be able to resolve until a new commit is pushed or the change is marked ready for review again. For more guidance, visit Writing a golden file test for Reviewers: Read the Tree Hygiene page and make sure this patch meets those guidelines before LGTMing. |
…not ready to recieve it yet (161300)
…tterDriverExtension is called (161300)
|
@bkonyi Would be awesome if you would have time to take a look / try this. While it fully doesn't fix the whole issue, based on the local evidence, it is a partial fix and would reduce the flakiness. |
Thanks for looking into this and being patient! @matanlurey, you have more experience with driver/integration tests than I do. Would you mind taking a look as well? |
| for (int i = 0; i < 6; ++i) { | ||
| await Future<void>.delayed(const Duration(seconds: 1)); | ||
| for (int i = 0; i < 20; ++i) { | ||
| await driver.tap(defaultTextField); |
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.
Needing up to 20 taps for this to work... that seems like a bug we're hiding in this test.
Can you clarify why we need to tap this multiple times?
Is it possible we need something like waitForTappable instead?
/cc @jonahwilliams
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.
Thanks for the feedback!
Is it possible we need something like waitForTappable instead?
- The
waitForTappableis a good idea indeed. I did some local tests with this, but it didn't make any difference. See Linux_pixel_7pro integration_ui_keyboard_resize is 2.17% flaky #161300 (comment) - I also tried some additional things - see Linux_pixel_7pro integration_ui_keyboard_resize is 2.17% flaky #161300 (comment)
Needing up to 20 taps for this to work... that seems like a bug we're hiding in this test.
Can you clarify why we need to tap this multiple times?
Can't explain it. I agree, this looks like a bug.
My first guess would be that it is a bug in FlutterDriver and/or how it interacts with Android's InputManager in the case of enableTextEntryEmulation: false.
Or possibly some issue in how FlutterView and InputManager interact, but in that case I would expect to see bug reports from production also. As opening an app and clicking on a TextField and expecting a keyboard to open is a very common use case.
As I propose in #161300 (comment), I think it would make sense to make a separate bug report for this specific bug description. Otherwise, it is somewhat obfuscated in #161300
The goal of making this PR is a temporary workaround to reduce the flakiness until the bug can be found and addressed. It seems it has been an issue for some time: #141301.
But if you feel this is premature and the workaround creates more confusion than it helps, then I propose we close this PR and try out some more strategies.
Speaking of that - as I can reproduce this locally quite easily, then if anyone has any suggestions I should try - let me know.
One observation: this also behaves slightly differently depending on the Android version and/or speed of the device. For me, the faster the device / newer the Android version, the more the setup of the test fails (for me locally).
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.
My first guess would be that it is a bug in FlutterDriver and/or how it interacts with Android's InputManager in the case of
enableTextEntryEmulation: false.
In driver mode, you mean. Yeah that is possible, I have not dug into the code here (yet).
Or possibly some issue in how FlutterView and InputManager interact, but in that case I would expect to see bug reports from production also. As opening an app and clicking on a TextField and expecting a keyboard to open is a very common use case.
Also possible. I am going to add @justinmc to this PR, and see if he has insight (works on text input).
The goal of making this PR is a temporary workaround to reduce the flakiness until the bug can be found and addressed.
It's just not clear to me this does resolve any flakiness, at least locally I can still fairly easily run into:
00:07 +0 -1: end-to-end test Ensure keyboard dismissal resizes the view to original size [E]
Expected: true
Actual: <false>It is possible the polling changes you made make it a bit less likely to occur, but tapping multiple times doesn't change focus, and only changing focus is supposed to open the keyboard. I ran out of time today to look in more detail, but you could please try adding some logging (even locally) and tell how often a for-loop retry causes the test to pass where it would otherwise fail?
Something like:
int retries = 0;
// ...
if (double.parse(heightWithKeyboardShown) < double.parse(startHeight)) {
if (retries > 0) {
print('>>> $retries retries were used to make this PASS.');
}
heightTextDidShrink = true;
break;
} else {
retries++;
}... and let me know if you see this hit significantly? I'll try to come back to this tomorrow.
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.
Good idea!
I added the logging in a separate branch my fork
I ran 100 iterations, using 2 different Android devices and OS'es to execute the test from. I disabled automatic retries, so the stats is about actually running 100 test iterations (with no failures).
hyperfine -r 10 --style=full 'dart bin/test_runner.dart test -t integration_ui_keyboard_resize >> log.txt'
Results as follows.
MacBook Pro M1 + Pixel 8 Pro API 36
- 15x "No retries were used to make this PASS."
- 85x "1 retries were used to make this PASS."
- 0x "2 retries were used to make this PASS."
ThinkPad X1 Extreme Gen 4i Windows 11 Pro + Pixel 8 Pro API 36
- 94x "No retries were used to make this PASS."
- 6x "1 retries were used to make this PASS."
- 0x "2 retries were used to make this PASS."
MacBook Pro M1 + Samsung Galaxy Tab S3 API 28
- 0x "No retries were used to make this PASS."
- 88x "1 retries were used to make this PASS."
- 12x "2 retries were used to make this PASS."
ThinkPad X1 Extreme Gen 4i Windows 11 Pro + Samsung Galaxy Tab S3 API 28
- 0x "No retries were used to make this PASS."
- 99x "1 retries were used to make this PASS."
- 1x "2 were used to make this PASS."
Note that tests were about 15 seconds slower per test on average when executed from the ThinkPad vs the Macbook.
It is possible the polling changes you made make it a bit less likely to occur, but tapping multiple times doesn't change focus, and only changing focus is supposed to open the keyboard.
Good point!
Based on this video https://drive.google.com/file/d/1dQmIPs7mCVjxocCvWB9KSfsaSiB7_Tyh/view?usp=sharing of a failure I was able to capture it looks to me the TextFlied gets the focus, just InputManager refuses to open the keyboard (fails on 4th attempt at the end). As this log line warns:
W/InputMethodManager(19804): Ignoring showSoftInput() as view=io.flutter.embedding.android.FlutterView{16610da VFE...... .F....ID 0,0-1008,2244 #1} is not served.
Also tried to add a second TextField to the test app (with a separate FocusNode etc) and tap on the second TextField if opening the keyboard doesn't work with the first one - same results.
It fails with both. At both times, complains about the same instance of a FlutterView.
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.
During today's call with John and Ergo we generated some more ideas to try out here to collect more info:
- Try an infinite loop to wait for the keyboard - does it pass then? Or never passes sometimes?
- Add an initial delay at the test - does it affect it? Will it pass better then?
- Any additional verbose info/logs we can activate (from FlutterDriver, etc) to better understand the process/communication between the threads there?
I'll run these also tomorrow or day after tomorrow at the latest
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.
@matanlurey @justinmc
Comparing the logs from the infinite loop test.
I see the following pattern here - the keyboard can only be opened after the D/InsetsController(...): hide(ime(), fromIme=false) appears in the log.
...
<-Test starts->
.. end-to-end test Ensure keyboard dismissal resizes the view to original size ..
<- All attempts to open the keyboard fail in this period ->
D/InsetsController(...): hide(ime(), fromIme=false)
<- All attempts to open the keyboard succeed now ->
I/ImeTracker(...): com.yourcompany.integration_ui:...: onCancelled at PHASE_CLIENT_ALREADY_HIDDEN
I/ImeTracker(...): com.yourcompany.integration_ui:...: onRequestShow at ORIGIN_CLIENT reason SHOW_SOFT_INPUT fromUser false
D/InsetsController(12023): show(ime(), fromIme=false)
<- Keyboard opens somewhere here .. ->
D/InsetsController(12023): Setting requestedVisibleTypes to -1 (was -9)
D/InputConnectionAdaptor(12023): The input method toggled cursor monitoring on
...
Looking a the timing,
- In the tests with no retries or 1 retry the
D/InsetsController(...): hide(ime(), fromIme=false)takes ~ 1 second to appear from start of the test - In the test with 54 retries it takes 21 seconds to appear
The D/InsetsController(...): hide(ime(), fromIme=false) log seems to be coming from https://cs.android.com/android/platform/superproject/main/+/main:frameworks/base/core/java/android/view/InsetsController.java;l=1208
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.
I re-ran the 2000/2000 test with the same hardware and infinite loop setup. The results are surprisingly similar.
One new learning - if Google Assistant / Gemini accidentally triggers on the device while testing, then the test is unable to proceed until the user manually dismisses the assistant sheet (this is the 3279 retries).
The 54x iteration is curious and strange because it matches the first test 1:1.
Results (MacBook Pro M1 + Pixel 8 Pro API 36) - SUCCEEDED at 2000/2000
992x 1 retries were used to make this PASS.
1x 3279 retries were used to make this PASS.
1x 54 retries were used to make this PASS.
174x No retries were used to make this PASS.
Sadly, I do not have the Pixel 7 Pro device. But I'll try with an older Pixel (Pixel 3) and with the Pixel 7 Pro emulator. As the 2000 iteration tests take about 10h to run it will take some time.
I have not yet had the time to look into more when the D/InsetsController(...): hide(ime(), fromIme=false) exactly triggers in the Android Activity lifecycle and why it affects our test in this way. Any hints here are welcome.
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.
Unable to reproduce longer retry loops on Pixel 3 API 31:
1893x 1 retries were used to make this PASS.
107x No retries were used to make this PASS.
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.
Tried 2000 iterations with 0 fails on Pixel 7 Pro emulator API 35 - nothing interesting.
1610x 1 retries were used to make this PASS.
1x 2 retries were used to make this PASS.
389x No retries were used to make this PASS
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.
Thank you for all the work here.
matanlurey
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.
Thanks for jumping on this. The concept of the change I'm satisfied with, but I'm not convinced the implementation is correct or good - it appears to either be hiding bugs, or I misunderstand what is going on.
|
@justinmc @harri35 is one of our contractors and is working on deflaking some tests, which is awesome. They are trying to deflake/fix cd dev/integration_tests/ui
flutter run lib/keyboard_resize.dart... but fails a reasonable % of the time when run as a test: flutter drive lib/keyboard_resize.dartDo you happen to know any oddities, with or without driver, and the keyboard not opening on focus? I can sync with you later today or tomorrow AM, but could use your input (pun not intended). |
|
@matanlurey (cc: @bkonyi @justinmc) Following a review with @ergosarapu regarding the persistent flakiness of the 1. Making a pragmatic fix to the test by increasing the timeout to remove (or significantly reduce) flakiness We recommend increasing the timeout value for the keyboard-opening polling within the test. This is a pragmatic short-term solution to restore test functionality.
2. Spitting investigation of the failure of keyboard opening to a dedicated issue We create a separate, dedicated issue to investigate the root cause of the inconsistent keyboard opening. This way, the test is functional again, and we can continue the investigation in a dedicated and prioritized issue. |
matanlurey
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 to help deflake with the added TODOs/issues filed for follow-up.
|
@matanlurey I filed an issue for further investigation: #163606 |
flutter/flutter@2578d97...321fbc0 2025-03-06 [email protected] Roll Skia from fefecd49e03a to ccd8cc23aa94 (1 revision) (flutter/flutter#164712) 2025-03-06 [email protected] [web] Detect scrollable semantics nodes more reliably (flutter/flutter#164491) 2025-03-06 [email protected] [windows] wire the focus request and the focus events through the Windows platform (flutter/flutter#164296) 2025-03-06 [email protected] Roll Skia from 02897747c7d5 to fefecd49e03a (1 revision) (flutter/flutter#164701) 2025-03-06 [email protected] Roll Skia from e315b0ab7c84 to 02897747c7d5 (1 revision) (flutter/flutter#164677) 2025-03-06 [email protected] Roll Skia from 0c3880f94970 to e315b0ab7c84 (1 revision) (flutter/flutter#164669) 2025-03-06 [email protected] [Impeller] use device private on non-iOS devices. (flutter/flutter#164601) 2025-03-05 [email protected] Roll Skia from 43294a662fd0 to 0c3880f94970 (1 revision) (flutter/flutter#164661) 2025-03-05 [email protected] Add a workflow (only triggered from rest events) for hasing experiment (flutter/flutter#164657) 2025-03-05 [email protected] Roll Skia from 4cf9f0b77d41 to 43294a662fd0 (4 revisions) (flutter/flutter#164649) 2025-03-05 [email protected] Adds animateToItem to the CarouselController (flutter/flutter#162694) 2025-03-05 [email protected] Cleanup content context (flutter/flutter#164229) 2025-03-05 [email protected] Fix: Update CupertinoSheetRoute transition rounded corner (flutter/flutter#163700) 2025-03-05 [email protected] [Impeller] fix macOS managed memory. (flutter/flutter#164635) 2025-03-05 [email protected] [skwasm] Clear font collection cache when font is loaded manually. (flutter/flutter#164588) 2025-03-05 [email protected] Fix race condition causing crash when interacting with an animating scrollable (flutter/flutter#164392) 2025-03-05 [email protected] Use dwds 24.3.6 and pass uri for the reload scripts path to FrontendServerDdcLibraryBundleProvider (flutter/flutter#164582) 2025-03-05 [email protected] Roll Packages from 9e4684e to abba683 (8 revisions) (flutter/flutter#164630) 2025-03-05 [email protected] Roll Skia from 7e4323f72c9d to 4cf9f0b77d41 (1 revision) (flutter/flutter#164622) 2025-03-05 [email protected] Fix to Linux_pixel_7pro integration_ui_keyboard_resize test flakiness (flutter/flutter#162308) 2025-03-05 [email protected] Roll Skia from 03a3f653d64e to 7e4323f72c9d (1 revision) (flutter/flutter#164599) 2025-03-05 [email protected] Implement `clipPath` Mutator for hcpp (flutter/flutter#164525) 2025-03-05 98614782+auto-submit[bot]@users.noreply.github.com Reverts "[Impeller] use DeviceLocal textures for gifs on non-iOS devices. (#164573)" (flutter/flutter#164600) 2025-03-05 [email protected] [macos] prefer integrated GPU. (flutter/flutter#164569) 2025-03-05 [email protected] Enforce minSdk constraint for Android Flutter (flutter/flutter#164251) 2025-03-05 [email protected] Add `clipRSuperellipse`, and use them for dialogs (flutter/flutter#161111) 2025-03-05 [email protected] Roll Skia from 46705a22edc3 to 03a3f653d64e (1 revision) (flutter/flutter#164590) 2025-03-05 [email protected] when resetting FlutterPlatformViewsController, clear out some additional internal state to prevent it from carrying over across a Hot Restart (flutter/flutter#164456) 2025-03-05 [email protected] Roll Fuchsia Linux SDK from Rt6pxGFLVAJHduM0V... to fhm5z889sA5T1AQao... (flutter/flutter#164583) 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. To file a bug in Packages: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
flutter/flutter@2578d97...321fbc0 2025-03-06 [email protected] Roll Skia from fefecd49e03a to ccd8cc23aa94 (1 revision) (flutter/flutter#164712) 2025-03-06 [email protected] [web] Detect scrollable semantics nodes more reliably (flutter/flutter#164491) 2025-03-06 [email protected] [windows] wire the focus request and the focus events through the Windows platform (flutter/flutter#164296) 2025-03-06 [email protected] Roll Skia from 02897747c7d5 to fefecd49e03a (1 revision) (flutter/flutter#164701) 2025-03-06 [email protected] Roll Skia from e315b0ab7c84 to 02897747c7d5 (1 revision) (flutter/flutter#164677) 2025-03-06 [email protected] Roll Skia from 0c3880f94970 to e315b0ab7c84 (1 revision) (flutter/flutter#164669) 2025-03-06 [email protected] [Impeller] use device private on non-iOS devices. (flutter/flutter#164601) 2025-03-05 [email protected] Roll Skia from 43294a662fd0 to 0c3880f94970 (1 revision) (flutter/flutter#164661) 2025-03-05 [email protected] Add a workflow (only triggered from rest events) for hasing experiment (flutter/flutter#164657) 2025-03-05 [email protected] Roll Skia from 4cf9f0b77d41 to 43294a662fd0 (4 revisions) (flutter/flutter#164649) 2025-03-05 [email protected] Adds animateToItem to the CarouselController (flutter/flutter#162694) 2025-03-05 [email protected] Cleanup content context (flutter/flutter#164229) 2025-03-05 [email protected] Fix: Update CupertinoSheetRoute transition rounded corner (flutter/flutter#163700) 2025-03-05 [email protected] [Impeller] fix macOS managed memory. (flutter/flutter#164635) 2025-03-05 [email protected] [skwasm] Clear font collection cache when font is loaded manually. (flutter/flutter#164588) 2025-03-05 [email protected] Fix race condition causing crash when interacting with an animating scrollable (flutter/flutter#164392) 2025-03-05 [email protected] Use dwds 24.3.6 and pass uri for the reload scripts path to FrontendServerDdcLibraryBundleProvider (flutter/flutter#164582) 2025-03-05 [email protected] Roll Packages from 9e4684e to abba683 (8 revisions) (flutter/flutter#164630) 2025-03-05 [email protected] Roll Skia from 7e4323f72c9d to 4cf9f0b77d41 (1 revision) (flutter/flutter#164622) 2025-03-05 [email protected] Fix to Linux_pixel_7pro integration_ui_keyboard_resize test flakiness (flutter/flutter#162308) 2025-03-05 [email protected] Roll Skia from 03a3f653d64e to 7e4323f72c9d (1 revision) (flutter/flutter#164599) 2025-03-05 [email protected] Implement `clipPath` Mutator for hcpp (flutter/flutter#164525) 2025-03-05 98614782+auto-submit[bot]@users.noreply.github.com Reverts "[Impeller] use DeviceLocal textures for gifs on non-iOS devices. (#164573)" (flutter/flutter#164600) 2025-03-05 [email protected] [macos] prefer integrated GPU. (flutter/flutter#164569) 2025-03-05 [email protected] Enforce minSdk constraint for Android Flutter (flutter/flutter#164251) 2025-03-05 [email protected] Add `clipRSuperellipse`, and use them for dialogs (flutter/flutter#161111) 2025-03-05 [email protected] Roll Skia from 46705a22edc3 to 03a3f653d64e (1 revision) (flutter/flutter#164590) 2025-03-05 [email protected] when resetting FlutterPlatformViewsController, clear out some additional internal state to prevent it from carrying over across a Hot Restart (flutter/flutter#164456) 2025-03-05 [email protected] Roll Fuchsia Linux SDK from Rt6pxGFLVAJHduM0V... to fhm5z889sA5T1AQao... (flutter/flutter#164583) 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. To file a bug in Packages: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
flutter/flutter@2578d97...321fbc0 2025-03-06 [email protected] Roll Skia from fefecd49e03a to ccd8cc23aa94 (1 revision) (flutter/flutter#164712) 2025-03-06 [email protected] [web] Detect scrollable semantics nodes more reliably (flutter/flutter#164491) 2025-03-06 [email protected] [windows] wire the focus request and the focus events through the Windows platform (flutter/flutter#164296) 2025-03-06 [email protected] Roll Skia from 02897747c7d5 to fefecd49e03a (1 revision) (flutter/flutter#164701) 2025-03-06 [email protected] Roll Skia from e315b0ab7c84 to 02897747c7d5 (1 revision) (flutter/flutter#164677) 2025-03-06 [email protected] Roll Skia from 0c3880f94970 to e315b0ab7c84 (1 revision) (flutter/flutter#164669) 2025-03-06 [email protected] [Impeller] use device private on non-iOS devices. (flutter/flutter#164601) 2025-03-05 [email protected] Roll Skia from 43294a662fd0 to 0c3880f94970 (1 revision) (flutter/flutter#164661) 2025-03-05 [email protected] Add a workflow (only triggered from rest events) for hasing experiment (flutter/flutter#164657) 2025-03-05 [email protected] Roll Skia from 4cf9f0b77d41 to 43294a662fd0 (4 revisions) (flutter/flutter#164649) 2025-03-05 [email protected] Adds animateToItem to the CarouselController (flutter/flutter#162694) 2025-03-05 [email protected] Cleanup content context (flutter/flutter#164229) 2025-03-05 [email protected] Fix: Update CupertinoSheetRoute transition rounded corner (flutter/flutter#163700) 2025-03-05 [email protected] [Impeller] fix macOS managed memory. (flutter/flutter#164635) 2025-03-05 [email protected] [skwasm] Clear font collection cache when font is loaded manually. (flutter/flutter#164588) 2025-03-05 [email protected] Fix race condition causing crash when interacting with an animating scrollable (flutter/flutter#164392) 2025-03-05 [email protected] Use dwds 24.3.6 and pass uri for the reload scripts path to FrontendServerDdcLibraryBundleProvider (flutter/flutter#164582) 2025-03-05 [email protected] Roll Packages from 9e4684e to abba683 (8 revisions) (flutter/flutter#164630) 2025-03-05 [email protected] Roll Skia from 7e4323f72c9d to 4cf9f0b77d41 (1 revision) (flutter/flutter#164622) 2025-03-05 [email protected] Fix to Linux_pixel_7pro integration_ui_keyboard_resize test flakiness (flutter/flutter#162308) 2025-03-05 [email protected] Roll Skia from 03a3f653d64e to 7e4323f72c9d (1 revision) (flutter/flutter#164599) 2025-03-05 [email protected] Implement `clipPath` Mutator for hcpp (flutter/flutter#164525) 2025-03-05 98614782+auto-submit[bot]@users.noreply.github.com Reverts "[Impeller] use DeviceLocal textures for gifs on non-iOS devices. (#164573)" (flutter/flutter#164600) 2025-03-05 [email protected] [macos] prefer integrated GPU. (flutter/flutter#164569) 2025-03-05 [email protected] Enforce minSdk constraint for Android Flutter (flutter/flutter#164251) 2025-03-05 [email protected] Add `clipRSuperellipse`, and use them for dialogs (flutter/flutter#161111) 2025-03-05 [email protected] Roll Skia from 46705a22edc3 to 03a3f653d64e (1 revision) (flutter/flutter#164590) 2025-03-05 [email protected] when resetting FlutterPlatformViewsController, clear out some additional internal state to prevent it from carrying over across a Hot Restart (flutter/flutter#164456) 2025-03-05 [email protected] Roll Fuchsia Linux SDK from Rt6pxGFLVAJHduM0V... to fhm5z889sA5T1AQao... (flutter/flutter#164583) 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. To file a bug in Packages: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
integration_ui_keyboard_resizeflakiness reductionThis PR addresses flakiness in the
integration_ui_keyboard_resizetest (issue #161300) and slightly improves its performance.Issue summary:
The
integration_ui_keyboard_resizetest occasionally fails because the device keyboard does not reliably open at the start of the test. This PR mitigates one cause of this flakiness, though other potential underlying issues may still exist. See #161300 for a detailed investigation.Changes and rationale:
Improved keyboard detection logic (flakiness reduction):
await driver.tap(defaultTextField);inside the loop that checks for layout changes. This ensures the test repeatedly attempts to open the keyboard while waiting for the expected layout shift, significantly improving reliability.enableTextEntryEmulationconfiguration improvement:keyboard_resize.dartapp is exclusively used for testing and requiresenableTextEntryEmulation: falsefor proper device keyboard interaction.enableTextEntryEmulation: falsedirectly within the app'senableFlutterDriverExtensionsetup. This simplifies the test setup, avoids cross-thread communication, and prevents the app from appearing broken when run independently (as manual text input wouldn't work otherwise).UI enhancements for manual testing:
SafeAreaandInputDecorationtokeyboard_resize.dart. This ensures theTextFieldis fully visible and usable during manual testing (it was previously obscured by the Android status bar). This improves the developer experience when debugging the app directly.Optimized polling for speed:
Further flakiness improvement discussion and ideas
See the discussion at #161300
Testing and reproduction:
To reproduce the original flakiness and verify the fix (reproducibility may vary based on setup; see #161300 (comment)):
await checkForRebootRequired();line influtter/dev/devicelab/lib/framework/framework.dart
Lines 240 to 243 in 9e273d5
static const int retryNumber = 0;influtter/dev/devicelab/lib/framework/cocoon.dart
Lines 56 to 57 in 9e273d5
hyperfine: This is a command-line benchmarking tool (e.g.,brew install hyperfineon macOS).hyperfineto run the test multiple times and capture the output:hyperfine -r 100 'dart bin/test_runner.dart test -t integration_ui_keyboard_resize > log.txt'