Skip to content

Clean up 'not disposed' memory leaks in FF, phase 3. #141198

@polina-c

Description

@polina-c

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:

  1. 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 with if (true).
  2. If you create an issue or PR for cleanups, cc @polina-c
  3. Update everybody on your plans by commenting on this issue, so that we do not duplicate effort.
  4. If your PR stops ignoring leaks for some tests, trigger leak verifying bots for your PR: find them in code by _leak_tracking and temporarily comment out bringup: true.
  5. Ping me on GitHub or twitter (PolinaCC) if a PR is waiting for something more than one business day
  6. 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:

  1. 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 its test stdout and search for contains leaks:.

    b. Known not-investigated leaky test
    Search for [leaks-to-clean] in flutter/test

    c. Not assigned known issue
    Assign the issue to yourself.

  2. Investigate the leak.

    if there 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):

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:

  1. Copy link to the issue
  2. Search for the copied link in Flutter source code. You will find number of TODOs marked [leaks-to-clean].
  3. Remove the opting out line, one of the TODOs
  4. Run the test with the TODO, or, if it is global TODO, run all tests, with added --dart-define LEAK_TRACKING=true
  5. See the failure.

References

Issues: all, open, known leaks.
PRs: all, open.

Discord

Metadata

Metadata

Assignees

Labels

P1High-priority issues at the top of the work lista: leak trackingIssues and PRs related to memory leaks detected by leak_trackerc: new featureNothing broken; request for a new capability

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions