Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(642)

Side by Side Diff: tools/testing/dart/test_runner.dart

Issue 2668503003: VM: [Kernel] Switch to DFE for testing -c dartk configuration. (Closed)
Patch Set: Done Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 /** 5 /**
6 * Classes and methods for executing tests. 6 * Classes and methods for executing tests.
7 * 7 *
8 * This module includes: 8 * This module includes:
9 * - Managing parallel execution of tests, including timeout checks. 9 * - Managing parallel execution of tests, including timeout checks.
10 * - Evaluating the output of each test as pass/fail/crash/timeout. 10 * - Evaluating the output of each test as pass/fail/crash/timeout.
(...skipping 347 matching lines...) Expand 10 before | Expand all | Expand 10 after
358 void _buildHashCode(HashCodeBuilder builder) { 358 void _buildHashCode(HashCodeBuilder builder) {
359 super._buildHashCode(builder); 359 super._buildHashCode(builder);
360 builder.addJson(flavor); 360 builder.addJson(flavor);
361 } 361 }
362 362
363 bool _equal(AnalysisCommand other) => 363 bool _equal(AnalysisCommand other) =>
364 super._equal(other) && flavor == other.flavor; 364 super._equal(other) && flavor == other.flavor;
365 } 365 }
366 366
367 class VmCommand extends ProcessCommand { 367 class VmCommand extends ProcessCommand {
368 final bool needsDFERunner;
368 VmCommand._(String executable, List<String> arguments, 369 VmCommand._(String executable, List<String> arguments,
369 Map<String, String> environmentOverrides) 370 Map<String, String> environmentOverrides,
371 bool this.needsDFERunner)
370 : super._("vm", executable, arguments, environmentOverrides); 372 : super._("vm", executable, arguments, environmentOverrides);
373
374 bool _equal(VmCommand other) =>
375 super._equal(other) && needsDFERunner == other.needsDFERunner;
kustermann 2017/01/31 15:39:00 whenever you overwrite _equal, also overwrite _bui
Vyacheslav Egorov (Google) 2017/01/31 17:06:56 Done.
371 } 376 }
372 377
373 class VmBatchCommand extends ProcessCommand implements VmCommand { 378 class VmBatchCommand extends ProcessCommand implements VmCommand {
374 final String dartFile; 379 final String dartFile;
375 final bool checked; 380 final bool checked;
381 final needsDFERunner = false;
376 382
377 VmBatchCommand._(String executable, String dartFile, List<String> arguments, 383 VmBatchCommand._(String executable, String dartFile, List<String> arguments,
378 Map<String, String> environmentOverrides, {this.checked: true}) 384 Map<String, String> environmentOverrides, {this.checked: true})
379 : this.dartFile = dartFile, 385 : this.dartFile = dartFile,
380 super._('vm-batch', executable, arguments, environmentOverrides); 386 super._('vm-batch', executable, arguments, environmentOverrides);
381 387
382 @override 388 @override
383 List<String> get batchArguments => checked 389 List<String> get batchArguments => checked
384 ? ['--checked', dartFile] 390 ? ['--checked', dartFile]
385 : [dartFile]; 391 : [dartFile];
(...skipping 340 matching lines...) Expand 10 before | Expand all | Expand 10 after
726 732
727 AnalysisCommand getAnalysisCommand( 733 AnalysisCommand getAnalysisCommand(
728 String displayName, executable, arguments, environmentOverrides, 734 String displayName, executable, arguments, environmentOverrides,
729 {String flavor: 'dart2analyzer'}) { 735 {String flavor: 'dart2analyzer'}) {
730 var command = new AnalysisCommand._( 736 var command = new AnalysisCommand._(
731 flavor, displayName, executable, arguments, environmentOverrides); 737 flavor, displayName, executable, arguments, environmentOverrides);
732 return _getUniqueCommand(command); 738 return _getUniqueCommand(command);
733 } 739 }
734 740
735 VmCommand getVmCommand(String executable, List<String> arguments, 741 VmCommand getVmCommand(String executable, List<String> arguments,
736 Map<String, String> environmentOverrides) { 742 Map<String, String> environmentOverrides, {bool needsDFERunner: false}) {
737 var command = new VmCommand._(executable, arguments, environmentOverrides); 743 var command = new VmCommand._(executable, arguments, environmentOverrides, n eedsDFERunner);
738 return _getUniqueCommand(command); 744 return _getUniqueCommand(command);
739 } 745 }
740 746
741 VmBatchCommand getVmBatchCommand(String executable, String tester, 747 VmBatchCommand getVmBatchCommand(String executable, String tester,
742 List<String> arguments, Map<String, String> environmentOverrides, 748 List<String> arguments, Map<String, String> environmentOverrides,
743 {bool checked: true}) { 749 {bool checked: true}) {
744 var command = 750 var command =
745 new VmBatchCommand._(executable, tester, arguments, environmentOverrides , 751 new VmBatchCommand._(executable, tester, arguments, environmentOverrides ,
746 checked: checked); 752 checked: checked);
747 return _getUniqueCommand(command); 753 return _getUniqueCommand(command);
(...skipping 837 matching lines...) Expand 10 before | Expand all | Expand 10 after
1585 outWarnings.add(fields[FORMATTED_ERROR]); 1591 outWarnings.add(fields[FORMATTED_ERROR]);
1586 } 1592 }
1587 // OK to Skip error output that doesn't match the machine format 1593 // OK to Skip error output that doesn't match the machine format
1588 } 1594 }
1589 } 1595 }
1590 } 1596 }
1591 } 1597 }
1592 1598
1593 class VmCommandOutputImpl extends CommandOutputImpl 1599 class VmCommandOutputImpl extends CommandOutputImpl
1594 with UnittestSuiteMessagesMixin { 1600 with UnittestSuiteMessagesMixin {
1601 static const DART_VM_EXITCODE_DFE_ERROR = 252;
1595 static const DART_VM_EXITCODE_COMPILE_TIME_ERROR = 254; 1602 static const DART_VM_EXITCODE_COMPILE_TIME_ERROR = 254;
1596 static const DART_VM_EXITCODE_UNCAUGHT_EXCEPTION = 255; 1603 static const DART_VM_EXITCODE_UNCAUGHT_EXCEPTION = 255;
1597 1604
1598 VmCommandOutputImpl(Command command, int exitCode, bool timedOut, 1605 VmCommandOutputImpl(Command command, int exitCode, bool timedOut,
1599 List<int> stdout, List<int> stderr, Duration time, int pid) 1606 List<int> stdout, List<int> stderr, Duration time, int pid)
1600 : super(command, exitCode, timedOut, stdout, stderr, time, false, pid); 1607 : super(command, exitCode, timedOut, stdout, stderr, time, false, pid);
1601 1608
1602 Expectation result(TestCase testCase) { 1609 Expectation result(TestCase testCase) {
1603 // Handle crashes and timeouts first 1610 // Handle crashes and timeouts first
1611 if (exitCode == DART_VM_EXITCODE_DFE_ERROR) return Expectation.DARTK_CRASH;
1604 if (hasCrashed) return Expectation.CRASH; 1612 if (hasCrashed) return Expectation.CRASH;
1605 if (hasTimedOut) return Expectation.TIMEOUT; 1613 if (hasTimedOut) return Expectation.TIMEOUT;
1606 1614
1607 // Multitests are handled specially 1615 // Multitests are handled specially
1608 if (testCase.expectCompileError) { 1616 if (testCase.expectCompileError) {
1609 if (exitCode == DART_VM_EXITCODE_COMPILE_TIME_ERROR) { 1617 if (exitCode == DART_VM_EXITCODE_COMPILE_TIME_ERROR) {
1610 return Expectation.PASS; 1618 return Expectation.PASS;
1611 } 1619 }
1612 return Expectation.MISSING_COMPILETIME_ERROR; 1620 return Expectation.MISSING_COMPILETIME_ERROR;
1613 } 1621 }
(...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after
1908 int timeout; 1916 int timeout;
1909 bool timedOut = false; 1917 bool timedOut = false;
1910 DateTime startTime; 1918 DateTime startTime;
1911 Timer timeoutTimer; 1919 Timer timeoutTimer;
1912 int pid; 1920 int pid;
1913 OutputLog stdout = new OutputLog(); 1921 OutputLog stdout = new OutputLog();
1914 OutputLog stderr = new OutputLog(); 1922 OutputLog stderr = new OutputLog();
1915 List<String> diagnostics = <String>[]; 1923 List<String> diagnostics = <String>[];
1916 bool compilationSkipped = false; 1924 bool compilationSkipped = false;
1917 Completer<CommandOutput> completer; 1925 Completer<CommandOutput> completer;
1926 List<String> preArguments;
1918 1927
1919 RunningProcess(this.command, this.timeout); 1928 RunningProcess(this.command, this.timeout, {this.preArguments});
1920 1929
1921 Future<CommandOutput> run() { 1930 Future<CommandOutput> run() {
1922 completer = new Completer<CommandOutput>(); 1931 completer = new Completer<CommandOutput>();
1923 startTime = new DateTime.now(); 1932 startTime = new DateTime.now();
1924 _runCommand(); 1933 _runCommand();
1925 return completer.future; 1934 return completer.future;
1926 } 1935 }
1927 1936
1928 void _runCommand() { 1937 void _runCommand() {
1929 command.outputIsUpToDate.then((bool isUpToDate) { 1938 command.outputIsUpToDate.then((bool isUpToDate) {
1930 if (isUpToDate) { 1939 if (isUpToDate) {
1931 compilationSkipped = true; 1940 compilationSkipped = true;
1932 _commandComplete(0); 1941 _commandComplete(0);
1933 } else { 1942 } else {
1934 var processEnvironment = _createProcessEnvironment(); 1943 var processEnvironment = _createProcessEnvironment();
1944 var args = command.arguments;
1945 if (preArguments != null) {
1946 args = []..addAll(preArguments)..addAll(args);
1947 }
1935 Future processFuture = io.Process.start( 1948 Future processFuture = io.Process.start(
1936 command.executable, command.arguments, 1949 command.executable, args,
1937 environment: processEnvironment, 1950 environment: processEnvironment,
1938 workingDirectory: command.workingDirectory); 1951 workingDirectory: command.workingDirectory);
1939 processFuture.then((io.Process process) { 1952 processFuture.then((io.Process process) {
1940 StreamSubscription stdoutSubscription = 1953 StreamSubscription stdoutSubscription =
1941 _drainStream(process.stdout, stdout); 1954 _drainStream(process.stdout, stdout);
1942 StreamSubscription stderrSubscription = 1955 StreamSubscription stderrSubscription =
1943 _drainStream(process.stderr, stderr); 1956 _drainStream(process.stderr, stderr);
1944 1957
1945 var stdoutCompleter = new Completer(); 1958 var stdoutCompleter = new Completer();
1946 var stderrCompleter = new Completer(); 1959 var stderrCompleter = new Completer();
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
2080 } 2093 }
2081 } 2094 }
2082 for (var excludedEnvironmentVariable in EXCLUDED_ENVIRONMENT_VARIABLES) { 2095 for (var excludedEnvironmentVariable in EXCLUDED_ENVIRONMENT_VARIABLES) {
2083 environment.remove(excludedEnvironmentVariable); 2096 environment.remove(excludedEnvironmentVariable);
2084 } 2097 }
2085 2098
2086 return environment; 2099 return environment;
2087 } 2100 }
2088 } 2101 }
2089 2102
2090 class BatchRunnerProcess { 2103
kustermann 2017/01/31 15:39:00 one new line is enough
Vyacheslav Egorov (Google) 2017/01/31 17:06:56 Done.
2104 class BatchRunnerProcess {
2091 Completer<CommandOutput> _completer; 2105 Completer<CommandOutput> _completer;
2092 ProcessCommand _command; 2106 ProcessCommand _command;
2093 List<String> _arguments; 2107 List<String> _arguments;
2094 String _runnerType; 2108 String _runnerType;
2095 2109
2096 io.Process _process; 2110 io.Process _process;
2097 Map _processEnvironmentOverrides; 2111 Map _processEnvironmentOverrides;
2098 Completer _stdoutCompleter; 2112 Completer _stdoutCompleter;
2099 Completer _stderrCompleter; 2113 Completer _stderrCompleter;
2100 StreamSubscription<String> _stdoutSubscription; 2114 StreamSubscription<String> _stdoutSubscription;
2101 StreamSubscription<String> _stderrSubscription; 2115 StreamSubscription<String> _stderrSubscription;
2102 Function _processExitHandler; 2116 Function _processExitHandler;
2103 2117
2104 bool _currentlyRunning = false; 2118 bool _currentlyRunning = false;
2105 OutputLog _testStdout; 2119 OutputLog _testStdout;
2106 OutputLog _testStderr; 2120 OutputLog _testStderr;
2107 String _status; 2121 String _status;
2108 DateTime _startTime; 2122 DateTime _startTime;
2109 Timer _timer; 2123 Timer _timer;
2110 2124
2111 BatchRunnerProcess();
2112
2113 Future<CommandOutput> runCommand(String runnerType, ProcessCommand command, 2125 Future<CommandOutput> runCommand(String runnerType, ProcessCommand command,
2114 int timeout, List<String> arguments) { 2126 int timeout, List<String> arguments) {
2115 assert(_completer == null); 2127 assert(_completer == null);
2116 assert(!_currentlyRunning); 2128 assert(!_currentlyRunning);
2117 2129
2118 _completer = new Completer<CommandOutput>(); 2130 _completer = new Completer<CommandOutput>();
2119 bool sameRunnerType = _runnerType == runnerType && 2131 bool sameRunnerType = _runnerType == runnerType &&
2120 _dictEquals(_processEnvironmentOverrides, command.environmentOverrides); 2132 _dictEquals(_processEnvironmentOverrides, command.environmentOverrides);
2121 _runnerType = runnerType; 2133 _runnerType = runnerType;
2122 _currentlyRunning = true; 2134 _currentlyRunning = true;
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
2299 bool _dictEquals(Map a, Map b) { 2311 bool _dictEquals(Map a, Map b) {
2300 if (a == null) return b == null; 2312 if (a == null) return b == null;
2301 if (b == null) return false; 2313 if (b == null) return false;
2302 for (var key in a.keys) { 2314 for (var key in a.keys) {
2303 if (a[key] != b[key]) return false; 2315 if (a[key] != b[key]) return false;
2304 } 2316 }
2305 return true; 2317 return true;
2306 } 2318 }
2307 } 2319 }
2308 2320
2321 class BatchDFEProcess {
2322 io.Process _process;
2323 int _port = -1;
2324 Function _processExitHandler;
2325
2326 Completer terminating = null;
2327
2328 bool locked = false;
2329
2330 Future<int> acquire() async {
2331 try {
2332 assert(!locked);
2333 locked = true;
2334 if (_process == null) {
2335 await _startProcess();
2336 }
2337 return _port;
2338 } catch(e) {
2339 locked = false;
2340 rethrow;
2341 }
2342 }
2343
2344 void release() {
2345 locked = false;
2346 }
2347
2348 Future terminate() {
2349 locked = true;
2350 if (_process == null) {
2351 return new Future.value(true);
2352 }
2353 if (terminating == null) {
2354 terminating = new Completer();
2355 _process.kill();
2356 }
2357 return terminating.future;
2358 }
2359
2360 _onExit(exitCode) {
2361 if (terminating != null) {
2362 terminating.complete();
2363 return;
2364 }
2365
2366 _process = null;
2367 locked = false;
2368 _port = -1;
2369 }
2370
2371 _startProcess() async {
kustermann 2017/01/31 15:39:00 Future
Vyacheslav Egorov (Google) 2017/01/31 17:06:56 Done.
2372 final executable = 'tools/dartk_wrappers/dfe_worker';
2373 final arguments = [];
2374
2375 try {
2376 _port = -1;
2377 _process = await io.Process.start(executable, arguments);
kustermann 2017/01/31 15:39:00 You can just use Platform.executable and 'tools/da
Vyacheslav Egorov (Google) 2017/01/31 17:06:56 Done.
2378 _process.exitCode.then(_onExit);
2379
2380 final readyMsg = await _process.stdout.transform(UTF8.decoder).transform(n ew LineSplitter()).first;
kustermann 2017/01/31 15:39:00 long line this will potentially crash the subproc
Vyacheslav Egorov (Google) 2017/01/31 17:06:56 Done.
Vyacheslav Egorov (Google) 2017/01/31 17:06:56 Done.
2381 final data = readyMsg.split(' ');
2382 assert(data[0] == 'READY');
kustermann 2017/01/31 15:39:00 Consider draining _process.stderr as well (maybe j
Vyacheslav Egorov (Google) 2017/01/31 17:06:56 Done.
2383
2384 _port = int.parse(data[1]);
2385 } catch (e) {
2386 // TODO(floitsch): should we try to report the stacktrace?
kustermann 2017/01/31 15:39:00 floitsch :)
Vyacheslav Egorov (Google) 2017/01/31 17:06:56 Done.
2387 print("Process error:");
2388 print(" Command: $executable ${arguments.join(' ')}");
2389 print(" Error: $e");
2390 // If there is an error starting a batch process, chances are that
2391 // it will always fail. So rather than re-trying a 1000+ times, we
2392 // exit.
2393 io.exit(1);
2394 return true;
2395 }
2396 }
2397 }
2398
2309 /** 2399 /**
2310 * [TestCaseEnqueuer] takes a list of TestSuites, generates TestCases and 2400 * [TestCaseEnqueuer] takes a list of TestSuites, generates TestCases and
2311 * builds a dependency graph of all commands in every TestSuite. 2401 * builds a dependency graph of all commands in every TestSuite.
2312 * 2402 *
2313 * It will maintain three helper data structures 2403 * It will maintain three helper data structures
2314 * - command2node: A mapping from a [Command] to a node in the dependency graph 2404 * - command2node: A mapping from a [Command] to a node in the dependency graph
2315 * - command2testCases: A mapping from [Command] to all TestCases that it is 2405 * - command2testCases: A mapping from [Command] to all TestCases that it is
2316 * part of. 2406 * part of.
2317 * - remainingTestCases: A set of TestCases that were enqueued but are not 2407 * - remainingTestCases: A set of TestCases that were enqueued but are not
2318 * finished 2408 * finished
(...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after
2607 final int maxProcesses; 2697 final int maxProcesses;
2608 final int maxBrowserProcesses; 2698 final int maxBrowserProcesses;
2609 AdbDevicePool adbDevicePool; 2699 AdbDevicePool adbDevicePool;
2610 2700
2611 // For dart2js and analyzer batch processing, 2701 // For dart2js and analyzer batch processing,
2612 // we keep a list of batch processes. 2702 // we keep a list of batch processes.
2613 final _batchProcesses = new Map<String, List<BatchRunnerProcess>>(); 2703 final _batchProcesses = new Map<String, List<BatchRunnerProcess>>();
2614 // We keep a BrowserTestRunner for every configuration. 2704 // We keep a BrowserTestRunner for every configuration.
2615 final _browserTestRunners = new Map<Map, BrowserTestRunner>(); 2705 final _browserTestRunners = new Map<Map, BrowserTestRunner>();
2616 2706
2707 List<BatchDFEProcess> _dfeProcesses = null;
2708
2617 bool _finishing = false; 2709 bool _finishing = false;
2618 2710
2619 CommandExecutorImpl( 2711 CommandExecutorImpl(
2620 this.globalConfiguration, this.maxProcesses, this.maxBrowserProcesses, 2712 this.globalConfiguration, this.maxProcesses, this.maxBrowserProcesses,
2621 {this.adbDevicePool}); 2713 {this.adbDevicePool});
2622 2714
2623 Future cleanup() { 2715 Future cleanup() {
2624 assert(!_finishing); 2716 assert(!_finishing);
2625 _finishing = true; 2717 _finishing = true;
2626 2718
2627 Future _terminateBatchRunners() { 2719 Future _terminateBatchRunners() {
2628 var futures = []; 2720 var futures = [];
2629 for (var runners in _batchProcesses.values) { 2721 for (var runners in _batchProcesses.values) {
2630 futures.addAll(runners.map((runner) => runner.terminate())); 2722 futures.addAll(runners.map((runner) => runner.terminate()));
2631 } 2723 }
2632 return Future.wait(futures); 2724 return Future.wait(futures);
2633 } 2725 }
2634 2726
2635 Future _terminateBrowserRunners() { 2727 Future _terminateBrowserRunners() {
2636 var futures = 2728 var futures =
2637 _browserTestRunners.values.map((runner) => runner.terminate()); 2729 _browserTestRunners.values.map((runner) => runner.terminate());
2638 return Future.wait(futures); 2730 return Future.wait(futures);
2639 } 2731 }
2640 2732
2641 return Future.wait([_terminateBatchRunners(), _terminateBrowserRunners()]); 2733 Future _terminateDFEWorkers() =>
2734 Future.wait((_dfeProcesses ?? []).map((p) => p.terminate()));
2735
2736 return Future.wait([_terminateBatchRunners(),
2737 _terminateBrowserRunners(),
2738 _terminateDFEWorkers()]);
kustermann 2017/01/31 15:39:00 indentation
Vyacheslav Egorov (Google) 2017/01/31 17:06:56 Done.
2642 } 2739 }
2643 2740
2644 Future<CommandOutput> runCommand(node, Command command, int timeout) { 2741 Future<CommandOutput> runCommand(node, Command command, int timeout) {
2645 assert(!_finishing); 2742 assert(!_finishing);
2646 2743
2647 Future<CommandOutput> runCommand(int retriesLeft) { 2744 Future<CommandOutput> runCommand(int retriesLeft) {
2648 return _runCommand(command, timeout).then((CommandOutput output) { 2745 return _runCommand(command, timeout).then((CommandOutput output) {
2649 if (retriesLeft > 0 && shouldRetryCommand(output)) { 2746 if (retriesLeft > 0 && shouldRetryCommand(output)) {
2650 DebugLogger.warning("Rerunning Command: ($retriesLeft " 2747 DebugLogger.warning("Rerunning Command: ($retriesLeft "
2651 "attempt(s) remains) [cmd: $command]"); 2748 "attempt(s) remains) [cmd: $command]");
(...skipping 27 matching lines...) Expand all
2679 } else if (command is ScriptCommand) { 2776 } else if (command is ScriptCommand) {
2680 return command.run(); 2777 return command.run();
2681 } else if (command is AdbPrecompilationCommand) { 2778 } else if (command is AdbPrecompilationCommand) {
2682 assert(adbDevicePool != null); 2779 assert(adbDevicePool != null);
2683 return adbDevicePool.acquireDevice().then((AdbDevice device) { 2780 return adbDevicePool.acquireDevice().then((AdbDevice device) {
2684 return _runAdbPrecompilationCommand(device, command, timeout) 2781 return _runAdbPrecompilationCommand(device, command, timeout)
2685 .whenComplete(() { 2782 .whenComplete(() {
2686 adbDevicePool.releaseDevice(device); 2783 adbDevicePool.releaseDevice(device);
2687 }); 2784 });
2688 }); 2785 });
2786 } else if (command is VmCommand && command.needsDFERunner) {
2787 final runner = _getDFEProcess();
2788 return runner.acquire().then((port) {
2789 return new RunningProcess(command, timeout, preArguments: ['-DDFE_WORKER _PORT=${port}']).run();
2790 }).whenComplete(() => runner.release());
2689 } else if (command is VmBatchCommand) { 2791 } else if (command is VmBatchCommand) {
2690 var name = command.displayName; 2792 var name = command.displayName;
2691 return _getBatchRunner(command.displayName + command.dartFile) 2793 return _getBatchRunner(command.displayName + command.dartFile)
2692 .runCommand(name, command, timeout, command.arguments); 2794 .runCommand(name, command, timeout, command.arguments);
2693 } else { 2795 } else {
2694 return new RunningProcess(command, timeout).run(); 2796 return new RunningProcess(command, timeout).run();
2695 } 2797 }
2696 } 2798 }
2697 2799
2698 Future<CommandOutput> _runAdbPrecompilationCommand( 2800 Future<CommandOutput> _runAdbPrecompilationCommand(
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
2781 } 2883 }
2782 _batchProcesses[identifier] = runners; 2884 _batchProcesses[identifier] = runners;
2783 } 2885 }
2784 2886
2785 for (var runner in runners) { 2887 for (var runner in runners) {
2786 if (!runner._currentlyRunning) return runner; 2888 if (!runner._currentlyRunning) return runner;
2787 } 2889 }
2788 throw new Exception('Unable to find inactive batch runner.'); 2890 throw new Exception('Unable to find inactive batch runner.');
2789 } 2891 }
2790 2892
2893 BatchDFEProcess _getDFEProcess() {
2894 _dfeProcesses ??= new List<BatchDFEProcess>.generate(maxProcesses,
2895 (_) => new BatchDFEProcess());
2896 return _dfeProcesses.firstWhere((runner) => !runner.locked);
2897 }
2898
2791 Future<CommandOutput> _startBrowserControllerTest( 2899 Future<CommandOutput> _startBrowserControllerTest(
2792 BrowserTestCommand browserCommand, int timeout) { 2900 BrowserTestCommand browserCommand, int timeout) {
2793 var completer = new Completer<CommandOutput>(); 2901 var completer = new Completer<CommandOutput>();
2794 2902
2795 var callback = (BrowserTestOutput output) { 2903 var callback = (BrowserTestOutput output) {
2796 completer 2904 completer
2797 .complete(new BrowserControllerTestOutcome(browserCommand, output)); 2905 .complete(new BrowserControllerTestOutcome(browserCommand, output));
2798 }; 2906 };
2799 2907
2800 BrowserTest browserTest; 2908 BrowserTest browserTest;
(...skipping 411 matching lines...) Expand 10 before | Expand all | Expand 10 after
3212 } 3320 }
3213 } 3321 }
3214 3322
3215 void eventAllTestsDone() { 3323 void eventAllTestsDone() {
3216 for (var listener in _eventListener) { 3324 for (var listener in _eventListener) {
3217 listener.allDone(); 3325 listener.allDone();
3218 } 3326 }
3219 _allDone(); 3327 _allDone();
3220 } 3328 }
3221 } 3329 }
OLDNEW
« tests/language/language_kernel.status ('K') | « tools/testing/dart/test_options.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698