Skip to content

Commit cdcacd0

Browse files
authored
PerformanceModeRequestHandle should dispatch creation and disposal events. (flutter#137642)
1 parent 64d3937 commit cdcacd0

File tree

2 files changed

+27
-1
lines changed

2 files changed

+27
-1
lines changed

packages/flutter/lib/src/scheduler/binding.dart

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,17 @@ typedef _PerformanceModeCleanupCallback = VoidCallback;
196196
/// To create a [PerformanceModeRequestHandle], use [SchedulerBinding.requestPerformanceMode].
197197
/// The component that makes the request is responsible for disposing the handle.
198198
class PerformanceModeRequestHandle {
199-
PerformanceModeRequestHandle._(_PerformanceModeCleanupCallback this._cleanup);
199+
PerformanceModeRequestHandle._(_PerformanceModeCleanupCallback this._cleanup) {
200+
// TODO(polina-c): stop duplicating code across disposables
201+
// https://github.com/flutter/flutter/issues/137435
202+
if (kFlutterMemoryAllocationsEnabled) {
203+
MemoryAllocations.instance.dispatchObjectCreated(
204+
library: 'package:flutter/scheduler.dart',
205+
className: '$PerformanceModeRequestHandle',
206+
object: this,
207+
);
208+
}
209+
}
200210

201211
_PerformanceModeCleanupCallback? _cleanup;
202212

@@ -206,6 +216,11 @@ class PerformanceModeRequestHandle {
206216
/// This method must only be called once per object.
207217
void dispose() {
208218
assert(_cleanup != null);
219+
// TODO(polina-c): stop duplicating code across disposables
220+
// https://github.com/flutter/flutter/issues/137435
221+
if (kFlutterMemoryAllocationsEnabled) {
222+
MemoryAllocations.instance.dispatchObjectDisposed(object: this);
223+
}
209224
_cleanup!();
210225
_cleanup = null;
211226
}

packages/flutter/test/scheduler/performance_mode_test.dart

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import 'dart:ui';
77
import 'package:flutter/scheduler.dart';
88
import 'package:flutter/widgets.dart';
99
import 'package:flutter_test/flutter_test.dart';
10+
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
1011

1112
void main() {
1213
late SchedulerBinding binding;
@@ -53,4 +54,14 @@ void main() {
5354
requestHandle2?.dispose();
5455
expect(binding.debugGetRequestedPerformanceMode(), isNull);
5556
});
57+
58+
test('PerformanceModeRequestHandle dispatches memory events', () async {
59+
await expectLater(
60+
await memoryEvents(
61+
() => binding.requestPerformanceMode(DartPerformanceMode.latency)!.dispose(),
62+
PerformanceModeRequestHandle,
63+
),
64+
areCreateAndDispose,
65+
);
66+
});
5667
}

0 commit comments

Comments
 (0)