68 lines
2.7 KiB
Markdown
68 lines
2.7 KiB
Markdown
# Leak tracking in Flutter Framework
|
|
|
|
## TL;DR;
|
|
|
|
To enable leak tracking locally pass `--dart-define LEAK_TRACKING=true` to `flutter test`.
|
|
|
|
See leak_tracker documentation for
|
|
[general leak troubleshooting](https://github.com/dart-lang/leak_tracker/blob/main/doc/leak_tracking/TROUBLESHOOT.md).
|
|
|
|
This page contains Flutter Framework specific information.
|
|
|
|
## Overview
|
|
|
|
Flutter Framework widget tests use [leak_tracker](https://github.com/dart-lang/leak_tracker/blob/main/doc/leak_tracking/
|
|
OVERVIEW.md) to detect leaks from objects that have not been disposed.
|
|
|
|
Test failures cause by leaks look like this:
|
|
|
|
```
|
|
Expected: leak free
|
|
Actual: <Instance of 'Leaks'>
|
|
Which: contains leaks:
|
|
# The text is generated by leak_tracker.
|
|
# For leak troubleshooting tips open:
|
|
# https://github.com/flutter/flutter/blob/main/docs/contributing/testing/Leak-tracking.md
|
|
notDisposed:
|
|
total: 1
|
|
objects:
|
|
FocusNode:
|
|
test: Align smoke test
|
|
identityHashCode: 82308154
|
|
```
|
|
|
|
## When is it ok to opt-out from leak tracking?
|
|
|
|
In general, leak tracking should be enabled, to verify that all
|
|
disposables are disposed.
|
|
If a tests is opted out, the reasons should be clearly explained
|
|
in the comments.
|
|
|
|
It is ok to opt out a test when the test
|
|
throws an exception and thus the code did not finalize properly.
|
|
|
|
While some exceptions should be finalized properly
|
|
and should not result in leaking objects,
|
|
the project to make sure disposables are disposed
|
|
in exceptional code paths was not prioritized yet.
|
|
See [issue #157470](https://github.com/flutter/flutter/issues/157470).
|
|
|
|
## Where leak tracking is configured?
|
|
|
|
Leak tracker is configured in [flutter_test_config.dart](https://github.com/flutter/flutter/blob/9441f8f6c806fb0a3b7d058a40b5e59c373e6055/packages/flutter/test/flutter_test_config.dart#L45).
|
|
|
|
See [leak_tracker documentation](https://github.com/dart-lang/leak_tracker/blob/main/doc/leak_tracking/TROUBLESHOOT.md)
|
|
on how to enable/disable leak tracking for individual tests and files.
|
|
|
|
## What are defaults?
|
|
|
|
Leak tracking is enabled on two test shards in Flutter's testing infrastructure:
|
|
|
|
- [Windows framework_tests_libraries_leak_tracking](https://github.com/flutter/flutter/blob/9441f8f6c806fb0a3b7d058a40b5e59c373e6055/.ci.yaml#L5553)
|
|
- [Windows framework_tests_widgets_leak_tracking](https://github.com/flutter/flutter/blob/9441f8f6c806fb0a3b7d058a40b5e59c373e6055/.ci.yaml#L5640C11-L5640C56)
|
|
|
|
For local testing, or for test shards configuration, to enable leak tracking for flutter tests, pass
|
|
`--dart-define LEAK_TRACKING=true` to `flutter test`.
|
|
|
|
You can see the bot's status on the [Flutter build dashboard](https://flutter-dashboard.appspot.com/#/build).
|