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

Unified Diff: third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_finder.py

Issue 2686303003: webkitpy: Remove --run-chunk and --run-part. (Closed)
Patch Set: webkitpy: Remove --run-chunk and --run-part. 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_finder_unittest.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_finder.py
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_finder.py b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_finder.py
index c3802e7c7493ae37174aba1d7e0a26792dc6de65..963e857a9dbb037b568238f03b17276d7773c46c 100644
--- a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_finder.py
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_finder.py
@@ -29,6 +29,7 @@
import errno
import json
import logging
+import math
import re
from webkitpy.layout_tests.layout_package.json_results_generator import convert_times_trie_to_flat_paths
@@ -176,60 +177,30 @@ class LayoutTestFinder(object):
return tests_to_skip
def split_into_chunks(self, test_names):
- """split into a list to run and a set to skip, based on --run-chunk and --run-part."""
- if not self._options.run_chunk and not self._options.run_part:
+ """split into a list to run and a set to skip, based on --shard_index and --total_shards."""
+ if self._options.shard_index is None and self._options.total_shards is None:
return test_names, set()
- # If the user specifies they just want to run a subset of the tests,
- # just grab a subset of the non-skipped tests.
- chunk_value = self._options.run_chunk or self._options.run_part
- try:
- (chunk_num, chunk_len) = chunk_value.split(":")
- chunk_num = int(chunk_num)
- assert chunk_num >= 0
- test_size = int(chunk_len)
- assert test_size > 0
- except AssertionError:
- _log.critical("invalid chunk '%s'", chunk_value)
- return (None, None)
-
- # Get the number of tests
- num_tests = len(test_names)
-
- # Get the start offset of the slice.
- if self._options.run_chunk:
- chunk_len = test_size
- # In this case chunk_num can be really large. We need
- # to make the slave fit in the current number of tests.
- slice_start = (chunk_num * chunk_len) % num_tests
- else:
- # Validate the data.
- assert test_size <= num_tests
- assert chunk_num <= test_size
-
- # To count the chunk_len, and make sure we don't skip
- # some tests, we round to the next value that fits exactly
- # all the parts.
- rounded_tests = num_tests
- if rounded_tests % test_size != 0:
- rounded_tests = (num_tests + test_size - (num_tests % test_size))
+ if self._options.shard_index is None:
+ raise ValueError('Must provide --shard-index or GTEST_SHARD_INDEX when sharding.')
+ if self._options.total_shards is None:
+ raise ValueError('Must provide --total-shards or GTEST_TOTAL_SHARDS when sharding.')
+ if self._options.shard_index >= self._options.total_shards:
+ raise ValueError('Shard index (%d) should be less than total shards (%d)!' % (
+ self._options.shard_index, self._options.total_shards))
- chunk_len = rounded_tests / test_size
- slice_start = chunk_len * (chunk_num - 1)
- # It does not mind if we go over test_size.
+ return self._split_into_chunks(test_names, self._options.shard_index, self._options.total_shards)
- # Get the end offset of the slice.
- slice_end = min(num_tests, slice_start + chunk_len)
+ @staticmethod
+ def _split_into_chunks(test_names, index, count):
Dirk Pranke 2017/02/11 03:41:31 I believe gtests do the rough equivalent of:
mithro 2017/02/13 18:27:04 Your correct that gtest actually does something li
+ chunk_size = int(math.ceil(len(test_names) * 1.0 / count))
- tests_to_run = test_names[slice_start:slice_end]
+ chunk_start = index * chunk_size
+ chunk_end = (index + 1) * chunk_size
- _log.debug('chunk slice [%d:%d] of %d is %d tests', slice_start, slice_end, num_tests, (slice_end - slice_start))
+ tests_to_run = test_names[chunk_start:chunk_end]
+ other_tests = test_names[:chunk_start] + test_names[chunk_end:]
- # If we reached the end and we don't have enough tests, we run some
- # from the beginning.
- if slice_end - slice_start < chunk_len:
- extra = chunk_len - (slice_end - slice_start)
- _log.debug(' last chunk is partial, appending [0:%d]', extra)
- tests_to_run.extend(test_names[0:extra])
+ _log.debug('chunk slice [%d:%d] of %d is %d tests', chunk_start, chunk_end, len(test_names), len(tests_to_run))
- return (tests_to_run, set(test_names) - set(tests_to_run))
+ return tests_to_run, other_tests
« no previous file with comments | « no previous file | third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_finder_unittest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698