7091266045
Bug: Change-Id: Ia0bfee80bf788a6eda83813fc986182a0d56a648 Reviewed-on: https://dart-review.googlesource.com/9980 Commit-Queue: Jakob Roland Andersen <jakobr@google.com> Reviewed-by: Florian Loitsch <floitsch@google.com>
67 lines
1.4 KiB
Dart
67 lines
1.4 KiB
Dart
library NativeGCTest;
|
|
|
|
import 'dart:async';
|
|
import 'dart:html';
|
|
|
|
import 'package:expect/minitest.dart';
|
|
|
|
var testEvent = new EventStreamProvider<Event>('test');
|
|
|
|
void testEventListener() {
|
|
final int N = 1000000;
|
|
final int M = 1000;
|
|
|
|
var div;
|
|
for (int i = 0; i < M; ++i) {
|
|
// This memory should be freed when the listener below is
|
|
// collected.
|
|
List l = new List(N);
|
|
|
|
// Record the iteration number.
|
|
l[N - 1] = i;
|
|
|
|
div = new Element.tag('div');
|
|
testEvent.forTarget(div).listen((_) {
|
|
// Only the final iteration's listener should be invoked.
|
|
// Note: the reference to l keeps the entire list alive.
|
|
expect(l[N - 1], M - 1);
|
|
});
|
|
}
|
|
|
|
final event = new Event('test');
|
|
div.dispatchEvent(event);
|
|
}
|
|
|
|
Future<Null> testWindowEventListener() {
|
|
String message = 'WindowEventListenerTestPingMessage';
|
|
|
|
Element testDiv = new DivElement();
|
|
testDiv.id = '#TestDiv';
|
|
document.body.append(testDiv);
|
|
window.onMessage.listen((e) {
|
|
if (e.data == message) testDiv.click();
|
|
});
|
|
|
|
for (int i = 0; i < 100; ++i) {
|
|
triggerMajorGC();
|
|
}
|
|
|
|
final done = new Completer<Null>();
|
|
testDiv.onClick.listen(((_) {
|
|
done.complete();
|
|
}));
|
|
window.postMessage(message, '*');
|
|
return done.future;
|
|
}
|
|
|
|
main() async {
|
|
testEventListener();
|
|
await testWindowEventListener();
|
|
}
|
|
|
|
void triggerMajorGC() {
|
|
List list = new List(1000000);
|
|
Element div = new DivElement();
|
|
div.onClick.listen((e) => print(list[0]));
|
|
}
|