-
Notifications
You must be signed in to change notification settings - Fork 29.7k
Description
Looking for volunteers to help with this!!! 🚀
Bigger issue: #134787
Goal
Clean up remaining memory leaks (~25) in order to switch to leak monitoring state.
Steps
In general:
- Leak tracking is disabled by default, but enabled just for three non-blocking windows bots. To enable leak tracking for tests locally, search for
if (isLeakTrackingEnabled()) {in the code and temporary replace it withif (true). - If you create an issue or PR for cleanups, cc @polina-c
- Update everybody on your plans by commenting on this issue, so that we do not duplicate effort.
- If your PR stops ignoring leaks for some tests, trigger leak verifying bots for your PR: find them in code by
_leak_trackingand temporarily comment outbringup: true. - Ping me on GitHub or twitter (PolinaCC) if a PR is waiting for something more than one business day
- If your PR or issue is closed, and you noticed I forgot to add label
a: leak tracking, remind me, please
Fix a memory leak:
-
Identify a leak from one of the sources:
a. flutter dashboard
Look for 3 windows icons on the top left with tooltip ending "leak_tracking".
If one of them have the last execution failing, open itstest stdoutand search forcontains leaks:.b. Known not-investigated leaky test
Search for[leaks-to-clean]in flutter/testc. Not assigned known issue
Assign the issue to yourself. -
Investigate the leak.
ifthere is a known issue for the leak and it is assigned
then:add/update TODO for the leak (see template below)
else:(fix the leak) or (create new issue and add the leak TODO to the test)
Or instrument a disposable (example):
- AnimationEagerListenerMixin - no need to instrument
- CurvedAnimation
- TrainHoppingAnimation: TrainHoppingAnimation should dispatch creation and disposal events. #141635
- ImageInfo: Instrument ImageInfo. #141411
- BoxPainter: BoxPainter should dispatch creation and disposal events. #141526
- ScrollDragController
- SelectionOverlay
- SnapshotPainter
- TextSelectionOverlay
Templates
Leak tracking opt-out TODO:
testWidgets('<test name>',
// TODO(< polina-c | your alias >): <explanation and link to issue> [leaks-to-clean]
experimentalLeakTesting: LeakTesting.settings.withIgnoredAll(),
(WidgetTester tester) async { ...
Leak tracking opt-in TODO (when tracking is opted out in flutter_test_config.dart or in the entire test file):
// TODO(polina-c): remove when fixed https://github.com/flutter/flutter/issues/145600 [leak-tracking-opt-in]
experimentalLeakTesting: LeakTesting.settings.withTracked(classes: <String>['CurvedAnimation']),
(WidgetTester tester) async { ...
Steps to repro (to be copied to issues):
To repro the leak:
- Copy link to the issue
- Search for the copied link in Flutter source code. You will find number of TODOs marked [leaks-to-clean].
- Remove the opting out line, one of the TODOs
- Run the test with the TODO, or, if it is global TODO, run all tests, with added --dart-define LEAK_TRACKING=true
- See the failure.
References
Issues: all, open, known leaks.
PRs: all, open.