| Index: tests/standalone/code_collection_test.dart
|
| ===================================================================
|
| --- tests/standalone/code_collection_test.dart (revision 0)
|
| +++ tests/standalone/code_collection_test.dart (revision 0)
|
| @@ -0,0 +1,68 @@
|
| +// 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() {
|
| + var opts = new Options();
|
| + if (opts.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,
|
| + "--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);
|
| + }
|
| +}
|
|
|