@displays = split(/,/, join(',', @displays));
@displays = map { s/ //g; $_ } @displays;
+# 2: get a list of all testcases
+my @testfiles = @ARGV;
+
+# if no files were passed on command line, run all tests from t/
+@testfiles = <t/*.t> if @testfiles == 0;
+
+my $numtests = scalar @testfiles;
+
# No displays specified, let’s start some Xdummy instances.
-@displays = start_xdummy($parallel) if @displays == 0;
+@displays = start_xdummy($parallel, $numtests) if @displays == 0;
# 1: create an output directory for this test-run
my $outdir = "testsuite-";
my $timingsjson = StartXDummy::slurp('.last_run_timings.json');
%timings = %{decode_json($timingsjson)} if length($timingsjson) > 0;
-# 2: get a list of all testcases
-my @testfiles = @ARGV;
-
-# if no files were passed on command line, run all tests from t/
-@testfiles = <t/*.t> if @testfiles == 0;
-
# Re-order the files so that those which took the longest time in the previous
# run will be started at the beginning to not delay the whole run longer than
# necessary.
my $x_socketpath = '/tmp/.X11-unix/X';
sub start_xdummy {
- my ($parallel) = @_;
+ my ($parallel, $numtests) = @_;
my @displays = ();
my @childpids = ();
$parallel ||= $num_cores * 2;
+ # If we are running a small number of tests, don’t over-parallelize.
+ $parallel = $numtests if $numtests < $parallel;
+
# First get the last used display number, then increment it by one.
# Effectively falls back to 1 if no X server is running.
my ($displaynum) = map { /(\d+)$/ } reverse sort glob($x_socketpath . '*');