From cdcacd06e48d264356e81a29f0c6b999673fb5c6 Mon Sep 17 00:00:00 2001 From: Kostia Sokolovskyi Date: Wed, 1 Nov 2023 00:53:53 +0100 Subject: [PATCH] PerformanceModeRequestHandle should dispatch creation and disposal events. (#137642) --- packages/flutter/lib/src/scheduler/binding.dart | 17 ++++++++++++++++- .../test/scheduler/performance_mode_test.dart | 11 +++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/packages/flutter/lib/src/scheduler/binding.dart b/packages/flutter/lib/src/scheduler/binding.dart index 039ddfc2f9..2fa31174af 100644 --- a/packages/flutter/lib/src/scheduler/binding.dart +++ b/packages/flutter/lib/src/scheduler/binding.dart @@ -196,7 +196,17 @@ typedef _PerformanceModeCleanupCallback = VoidCallback; /// To create a [PerformanceModeRequestHandle], use [SchedulerBinding.requestPerformanceMode]. /// The component that makes the request is responsible for disposing the handle. class PerformanceModeRequestHandle { - PerformanceModeRequestHandle._(_PerformanceModeCleanupCallback this._cleanup); + PerformanceModeRequestHandle._(_PerformanceModeCleanupCallback this._cleanup) { + // 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: '$PerformanceModeRequestHandle', + object: this, + ); + } + } _PerformanceModeCleanupCallback? _cleanup; @@ -206,6 +216,11 @@ class PerformanceModeRequestHandle { /// This method must only be called once per object. void dispose() { assert(_cleanup != null); + // TODO(polina-c): stop duplicating code across disposables + // https://github.com/flutter/flutter/issues/137435 + if (kFlutterMemoryAllocationsEnabled) { + MemoryAllocations.instance.dispatchObjectDisposed(object: this); + } _cleanup!(); _cleanup = null; } diff --git a/packages/flutter/test/scheduler/performance_mode_test.dart b/packages/flutter/test/scheduler/performance_mode_test.dart index 7a44796cd0..c89ec8301c 100644 --- a/packages/flutter/test/scheduler/performance_mode_test.dart +++ b/packages/flutter/test/scheduler/performance_mode_test.dart @@ -7,6 +7,7 @@ import 'dart:ui'; import 'package:flutter/scheduler.dart'; import 'package:flutter/widgets.dart'; import 'package:flutter_test/flutter_test.dart'; +import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart'; void main() { late SchedulerBinding binding; @@ -53,4 +54,14 @@ void main() { requestHandle2?.dispose(); expect(binding.debugGetRequestedPerformanceMode(), isNull); }); + + test('PerformanceModeRequestHandle dispatches memory events', () async { + await expectLater( + await memoryEvents( + () => binding.requestPerformanceMode(DartPerformanceMode.latency)!.dispose(), + PerformanceModeRequestHandle, + ), + areCreateAndDispose, + ); + }); }