flutter/packages/flutter_test
John McDole b755641559
Address frame policy benchmark flakes (#155130)
Recently the microbenchmarks were flakey, but from an older bug. Turns out, `LiveTestWidgetsFlutterBindingFramePolicy` is defaulted to `fadePointers` with this fun note:

> This can result in additional frames being pumped beyond those that
the test itself requests, which can cause differences in behavior

Both `text_intrinsic_bench` and `build_bench` use a similar pattern:
* Load stocks app
* Open the menu
* Switch to `benchmark` frame policy

What happens, rarely, is that
`LiveTestWidgetsFlutterBinding.pumpBenchmark()` will call (async) `handleBeginFrame` and `handleDrawFrame`. `handleDrawFrame` juggles a tri-state boolean (null, false, true). This boolean is only reset to `null` when handleDrawFrame is called back to back, say, from an extra frame that was scheduled.

1. Switch tri-state boolean to an enum, its easier to read
2. remove asserts that compile away in benchmarks (`--profile`)
3. use `Error.throwWithStackTrace` to keep stack traces.

I've been running this test on device lab hardware for hundreds of runs and have not hit a failure yet.

Fixes #150542
Fixes #150543 - throw stack!
2024-09-12 23:19:15 +00:00
..
lib Address frame policy benchmark flakes (#155130) 2024-09-12 23:19:15 +00:00
test Migrate Color.toString() test, improves equalsIgnoringHashCodes (#154934) 2024-09-11 17:34:58 +00:00
test_fixes Reland simulatedAccessibilityTraversal fix (#143527) 2024-02-15 21:37:40 +00:00
analysis_options.yaml Adds dart_fix support to flutter_test (#124347) 2023-04-11 21:09:07 +00:00
dart_test.yaml Randomize tests, exclude tests that fail with randomization. (#86793) 2021-07-26 23:40:49 -07:00
pubspec.yaml Upgrade leak tracker. (#154157) 2024-08-28 05:23:18 +00:00