Ticker should dispatch creation and disposal events. (#137844)
diff --git a/packages/flutter/lib/src/scheduler/ticker.dart b/packages/flutter/lib/src/scheduler/ticker.dart
index 303a590..ce6cee8 100644
--- a/packages/flutter/lib/src/scheduler/ticker.dart
+++ b/packages/flutter/lib/src/scheduler/ticker.dart
@@ -71,6 +71,15 @@
_debugCreationStack = StackTrace.current;
return true;
}());
+ // TODO(polina-c): stop duplicating code across disposables
+ // https://github.com/flutter/flutter/issues/137435
+ if (kFlutterMemoryAllocationsEnabled) {
+ MemoryAllocations.instance.dispatchObjectCreated(
+ library: 'package:flutter/scheduler.dart',
+ className: '$Ticker',
+ object: this,
+ );
+ }
}
TickerFuture? _future;
@@ -319,6 +328,12 @@
/// with a [TickerCanceled] error.
@mustCallSuper
void dispose() {
+ // TODO(polina-c): stop duplicating code across disposables
+ // https://github.com/flutter/flutter/issues/137435
+ if (kFlutterMemoryAllocationsEnabled) {
+ MemoryAllocations.instance.dispatchObjectDisposed(object: this);
+ }
+
if (_future != null) {
final TickerFuture localFuture = _future!;
_future = null;
diff --git a/packages/flutter/test/scheduler/ticker_test.dart b/packages/flutter/test/scheduler/ticker_test.dart
index d4eab13..4b87a64 100644
--- a/packages/flutter/test/scheduler/ticker_test.dart
+++ b/packages/flutter/test/scheduler/ticker_test.dart
@@ -23,6 +23,7 @@
}
final Ticker ticker = Ticker(handleTick);
+ addTearDown(ticker.dispose);
expect(ticker.isTicking, isFalse);
expect(ticker.isActive, isFalse);
@@ -100,6 +101,7 @@
testWidgetsWithLeakTracking('Ticker control test', (WidgetTester tester) async {
late Ticker ticker;
+ addTearDown(() => ticker.dispose());
void testFunction() {
ticker = Ticker((Duration _) { });
@@ -154,6 +156,7 @@
}
final Ticker ticker = Ticker(handleTick);
+ addTearDown(ticker.dispose);
ticker.start();
expect(ticker.isTicking, isTrue);
@@ -179,6 +182,7 @@
}
final Ticker ticker = Ticker(handleTick);
+ addTearDown(ticker.dispose);
ticker.start();
expect(tickCount, equals(0));
@@ -198,4 +202,11 @@
ticker.stop();
});
+
+ test('Ticker dispatches memory events', () async {
+ await expectLater(
+ await memoryEvents(() => Ticker((_) {}).dispose(), Ticker,),
+ areCreateAndDispose,
+ );
+ });
}