c38de04d0c
BUG= R=sgjesse@google.com Review URL: https://codereview.chromium.org//46063010 git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@29651 260f80e4-7a28-3924-810f-c04153c831b5
68 lines
1.6 KiB
Dart
68 lines
1.6 KiB
Dart
// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
|
|
// for details. All rights reserved. Use of this source code is governed by a
|
|
// BSD-style license that can be found in the LICENSE file.
|
|
|
|
// Dart test program testing code GC.
|
|
|
|
import "package:expect/expect.dart";
|
|
import "dart:async";
|
|
import "dart:io";
|
|
|
|
|
|
int foo(int x) {
|
|
x = x + 1;
|
|
return x;
|
|
}
|
|
|
|
|
|
List<int> bar() {
|
|
// A couple of big allocations trigger GC.
|
|
var l = new List.filled(700000, 7);
|
|
return l;
|
|
}
|
|
|
|
|
|
doTest() {
|
|
var i = 0;
|
|
foo(1); // Initial call to compile.
|
|
// Time passes, GC runs, foo's code is dropped.
|
|
var ms = const Duration(milliseconds: 100);
|
|
var t = new Timer.periodic(ms, (timer) {
|
|
i++;
|
|
bar();
|
|
if (i > 1) {
|
|
timer.cancel();
|
|
// foo is called again to make sure we can still run it even after
|
|
// its code has been detached.
|
|
foo(2);
|
|
}
|
|
});
|
|
}
|
|
|
|
|
|
main(List<String> arguments) {
|
|
if (arguments.contains("--run")) {
|
|
doTest();
|
|
} else {
|
|
// Run the test and capture stdout.
|
|
var pr = Process.runSync(Platform.executable,
|
|
["--collect-code",
|
|
"--code-collection-interval-in-us=100000",
|
|
"--log-code-drop",
|
|
"--optimization-counter-threshold=-1",
|
|
"--package-root=${Platform.packageRoot}",
|
|
Platform.script.toFilePath(),
|
|
"--run"]);
|
|
|
|
// Code drops are logged with --log-code-drop. Look through stdout for the
|
|
// message that foo's code was dropped.
|
|
var found = false;
|
|
pr.stdout.split("\n").forEach((line) {
|
|
if (line.contains("Detaching code") && line.contains("foo")) {
|
|
found = true;
|
|
}
|
|
});
|
|
Expect.isTrue(found);
|
|
}
|
|
}
|