mirror of
https://github.com/flutter/packages.git
synced 2025-06-28 05:37:17 +08:00
[webview_flutter_wkwebview] Repeatedly pump WebViews until one is garbage collected (#4662)
This should improve the chance that a `WKWebView` is garbage collected by repeatedly pumping `WebViewWidgets`.
This commit is contained in:
@ -69,18 +69,22 @@ Future<void> main() async {
|
||||
testWidgets(
|
||||
'WKWebView is released by garbage collection',
|
||||
(WidgetTester tester) async {
|
||||
final Completer<void> webViewGCCompleter = Completer<void>();
|
||||
bool aWebViewHasBeenGarbageCollected = false;
|
||||
|
||||
late final InstanceManager instanceManager;
|
||||
instanceManager =
|
||||
InstanceManager(onWeakReferenceRemoved: (int identifier) {
|
||||
if (!aWebViewHasBeenGarbageCollected) {
|
||||
final Copyable instance =
|
||||
instanceManager.getInstanceWithWeakReference(identifier)!;
|
||||
if (instance is WKWebView && !webViewGCCompleter.isCompleted) {
|
||||
webViewGCCompleter.complete();
|
||||
if (instance is WKWebView) {
|
||||
aWebViewHasBeenGarbageCollected = true;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Wait for any WebView to be garbage collected.
|
||||
while (!aWebViewHasBeenGarbageCollected) {
|
||||
await tester.pumpWidget(
|
||||
Builder(
|
||||
builder: (BuildContext context) {
|
||||
@ -106,10 +110,9 @@ Future<void> main() async {
|
||||
.watchPerformance(() async {
|
||||
await tester.pumpAndSettle();
|
||||
});
|
||||
|
||||
await expectLater(webViewGCCompleter.future, completes);
|
||||
}
|
||||
},
|
||||
timeout: const Timeout(Duration(seconds: 10)),
|
||||
timeout: const Timeout(Duration(seconds: 30)),
|
||||
);
|
||||
|
||||
testWidgets('loadRequest', (WidgetTester tester) async {
|
||||
|
Reference in New Issue
Block a user