Unverified Commit c0b21b16 authored by Kostia Sokolovskyi's avatar Kostia Sokolovskyi Committed by GitHub

SemanticsHandle should dispatch creation and disposal events. (#137960)

parent 4880aab1
...@@ -822,6 +822,16 @@ typedef LayoutCallback<T extends Constraints> = void Function(T constraints); ...@@ -822,6 +822,16 @@ typedef LayoutCallback<T extends Constraints> = void Function(T constraints);
class _LocalSemanticsHandle implements SemanticsHandle { class _LocalSemanticsHandle implements SemanticsHandle {
_LocalSemanticsHandle._(PipelineOwner owner, this.listener) _LocalSemanticsHandle._(PipelineOwner owner, this.listener)
: _owner = owner { : _owner = owner {
// TODO(polina-c): stop duplicating code across disposables
// https://github.com/flutter/flutter/issues/137435
if (kFlutterMemoryAllocationsEnabled) {
MemoryAllocations.instance.dispatchObjectCreated(
library: 'package:flutter/rendering.dart',
className: '$_LocalSemanticsHandle',
object: this,
);
}
if (listener != null) { if (listener != null) {
_owner.semanticsOwner!.addListener(listener!); _owner.semanticsOwner!.addListener(listener!);
} }
...@@ -834,6 +844,12 @@ class _LocalSemanticsHandle implements SemanticsHandle { ...@@ -834,6 +844,12 @@ class _LocalSemanticsHandle implements SemanticsHandle {
@override @override
void dispose() { 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 (listener != null) { if (listener != null) {
_owner.semanticsOwner!.removeListener(listener!); _owner.semanticsOwner!.removeListener(listener!);
} }
......
...@@ -191,7 +191,17 @@ mixin SemanticsBinding on BindingBase { ...@@ -191,7 +191,17 @@ mixin SemanticsBinding on BindingBase {
/// ///
/// To obtain a [SemanticsHandle], call [SemanticsBinding.ensureSemantics]. /// To obtain a [SemanticsHandle], call [SemanticsBinding.ensureSemantics].
class SemanticsHandle { class SemanticsHandle {
SemanticsHandle._(this._onDispose); SemanticsHandle._(this._onDispose) {
// TODO(polina-c): stop duplicating code across disposables
// https://github.com/flutter/flutter/issues/137435
if (kFlutterMemoryAllocationsEnabled) {
MemoryAllocations.instance.dispatchObjectCreated(
library: 'package:flutter/semantics.dart',
className: '$SemanticsHandle',
object: this,
);
}
}
final VoidCallback _onDispose; final VoidCallback _onDispose;
...@@ -201,6 +211,12 @@ class SemanticsHandle { ...@@ -201,6 +211,12 @@ class SemanticsHandle {
/// framework will stop generating semantics information. /// framework will stop generating semantics information.
@mustCallSuper @mustCallSuper
void dispose() { void dispose() {
// TODO(polina-c): stop duplicating code across disposables
// https://github.com/flutter/flutter/issues/137435
if (kFlutterMemoryAllocationsEnabled) {
MemoryAllocations.instance.dispatchObjectDisposed(object: this);
}
_onDispose(); _onDispose();
} }
} }
...@@ -82,4 +82,14 @@ void main() { ...@@ -82,4 +82,14 @@ void main() {
expect(SemanticsBinding.instance.semanticsEnabled, isFalse); expect(SemanticsBinding.instance.semanticsEnabled, isFalse);
expect(tester.binding.pipelineOwner.semanticsOwner, isNull); expect(tester.binding.pipelineOwner.semanticsOwner, isNull);
}, semanticsEnabled: false); }, semanticsEnabled: false);
test('SemanticsHandle dispatches memory events', () async {
await expectLater(
await memoryEvents(
() => SemanticsBinding.instance.ensureSemantics().dispose(),
SemanticsHandle,
),
areCreateAndDispose,
);
});
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment