-
Loïc Sharma authored
## Background The Windows runner has a race at startup: 1. **Platform thread**: creates a hidden window 2. **Platform thread**: launches the Flutter engine 3. **UI/Raster threads**: renders the first frame 4. **Platform thread**: Registers a callback to show the window once the next frame has been rendered. Steps 3 and 4 happen in parallel and it is possible for step 3 to complete before step 4 starts. In this scenario, the next frame callback is never called and the window is never shown. As a result the `windows_startup_test`'s test, which [verifies that the "show window" callback is called](https://github.com/flutter/flutter/blob/1f09a8662dad3bb1959b24e9124e05e2b9dbff1d/dev/integration_tests/windows_startup_test/windows/runner/flutter_window.cpp#L60-L64), can flake if the first frame is rendered before the show window callback has been registered. ## Solution This change makes the runner schedule a frame after it registers the next frame callback. If step 3 hasn't completed yet, this no-ops as a frame is already scheduled. If step 3 has already completed, a new frame will be rendered, which will call the next frame callback and show the window. Part of https://github.com/flutter/flutter/issues/119415 See this thread for alternatives that were considered: https://github.com/flutter/engine/pull/42061#issuecomment-1550080722
Name |
Last commit
|
Last update |
---|---|---|
.. | ||
android | ||
ios | ||
lib | ||
linux | ||
macos | ||
test | ||
test_driver | ||
test_memory | ||
tool | ||
web | ||
windows | ||
.gitignore | ||
README.md | ||
analysis_options.yaml | ||
pubspec.yaml |