PerformanceModeRequestHandle should dispatch creation and disposal events. (#137642)

This commit is contained in:
Kostia Sokolovskyi 2023-11-01 00:53:53 +01:00 committed by GitHub
parent 64d3937090
commit cdcacd06e4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 27 additions and 1 deletions

View File

@ -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;
}

View File

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