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,
+    );
+  });
 }