f827eb3a78
The sharded test runner invocations are now passed the previous results which contains the test timing, which are used to simulate how long each shard would take to run. The shards are now balanced as evenly as possible on a test level, taking multiple cores into account. Sharded tests are now run starting with the slowest test first, such that extremely long running tests finish as early as possible. This behavior ensures the cores are saturated and can be padded with fast tests near the end, rather than waiting for a few slow tests to complete while the rest of the system is idle. The algorithm works very well whenever it's able to accurately predict the time to run shards. In a number of cases, the model doesn't quite reflect reality and the data, which makes it fairly imperfect but still reasonably good. I think a second order feedback loop might kick in once it reorders the tests across shards and the test timing data reflects the new test timings. Multitests are no longer always sent to the same shard, since the data isn't available at the moment, and the change as-is speeds up the test running considerably. The front end unit test suites currently ignore the feature as there are no benefits yet to improving those quick shards. Upgrade the language version to 3.0.0 so patterns can be used and fix a mixin not being a mixin. Fixes: b/291585137 Change-Id: I3cc1b1d96038d5b46e836b091e299097717c226c Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/314081 Reviewed-by: William Hesse <whesse@google.com> Commit-Queue: Jonas Termansen <sortie@google.com>