diff --git a/packages/flutter/lib/src/scheduler/ticker.dart b/packages/flutter/lib/src/scheduler/ticker.dart index 303a59018ea..ce6cee86415 100644 --- a/packages/flutter/lib/src/scheduler/ticker.dart +++ b/packages/flutter/lib/src/scheduler/ticker.dart @@ -71,6 +71,15 @@ class Ticker { _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 @@ class Ticker { /// 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 d4eab13d6fb..4b87a64caba 100644 --- a/packages/flutter/test/scheduler/ticker_test.dart +++ b/packages/flutter/test/scheduler/ticker_test.dart @@ -23,6 +23,7 @@ void main() { } final Ticker ticker = Ticker(handleTick); + addTearDown(ticker.dispose); expect(ticker.isTicking, isFalse); expect(ticker.isActive, isFalse); @@ -100,6 +101,7 @@ void main() { testWidgetsWithLeakTracking('Ticker control test', (WidgetTester tester) async { late Ticker ticker; + addTearDown(() => ticker.dispose()); void testFunction() { ticker = Ticker((Duration _) { }); @@ -154,6 +156,7 @@ void main() { } final Ticker ticker = Ticker(handleTick); + addTearDown(ticker.dispose); ticker.start(); expect(ticker.isTicking, isTrue); @@ -179,6 +182,7 @@ void main() { } final Ticker ticker = Ticker(handleTick); + addTearDown(ticker.dispose); ticker.start(); expect(tickCount, equals(0)); @@ -198,4 +202,11 @@ void main() { ticker.stop(); }); + + test('Ticker dispatches memory events', () async { + await expectLater( + await memoryEvents(() => Ticker((_) {}).dispose(), Ticker,), + areCreateAndDispose, + ); + }); }