Skip to content

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

Closed

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

Activity

  1. self-assigned this
    on Jan 9, 2024
  2. added
    a: leak trackingIssues and PRs related to memory leaks detected by leak_tracker
    c: new featureNothing broken; request for a new capability
    on Jan 9, 2024
  3. polina-c commented on Jan 11, 2024

    @polina-c
    ContributorAuthor
  4. added
    P1High-priority issues at the top of the work list
    on Jan 11, 2024
  5. polina-c commented on Jan 12, 2024

    @polina-c
    ContributorAuthor

    Working to:

    • - cleanup failures on flutter dashboard
    • - instrument ImageInfo
    • - update documentation for leak tracker
    • - fix performance issue
  6. ksokolovskyi commented on Jan 12, 2024

    @ksokolovskyi
    Contributor

    @polina-c ScrollDragController, SelectionOverlay, TextSelectionOverlay, and SnapshotPainter are already instrumented, could you please add checkmarks for them?

  7. polina-c commented on Jan 12, 2024

    @polina-c
    ContributorAuthor

    @polina-c ScrollDragController, SelectionOverlay, TextSelectionOverlay, and SnapshotPainter are already instrumented, could you please add checkmarks for them?

    @ksokolovskyi
    Done. Thank you.

  8. polina-c commented on Jan 25, 2024

    @polina-c
    ContributorAuthor

    Progress check: ~50 laking tests or test files.

  9. polina-c commented on Jan 30, 2024

    @polina-c
    ContributorAuthor

    Tagged remaining leaks with [leaks-to-clean].
    There are 38.

  10. polina-c commented on Feb 28, 2024

    @polina-c
    ContributorAuthor

    CurvedAnimation is leaking a lot. I need to recount leaks after this instrumentation :)

  11. polina-c commented on Mar 10, 2024

    @polina-c
    ContributorAuthor

    To repro a 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.
  12. polina-c commented on May 1, 2024

    @polina-c
    ContributorAuthor

    See remaining leaks of CurvedAnimation here.

  13. ismailcaakir commented on Jun 2, 2024

    @ismailcaakir
  14. polina-c commented on Jun 3, 2024

    @polina-c
    Author
  15. github-actions commented on Mar 4, 2025

    @github-actions

    This thread has been automatically locked since there has not been any recent activity after it was closed. If you are still experiencing a similar issue, please open a new bug, including the output of flutter doctor -v and a minimal reproduction of the issue.

  16. locked as resolved and limited conversation to collaborators on Mar 4, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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