[Piglit] [PATCH] Add new concurrency option
Dylan Baker
baker.dylan.c at gmail.com
Mon Dec 9 08:10:27 PST 2013
This patch adds a new concurrency option that runs all tests out of a
multi-threaded pool, ignoring their request to be threaded or not. This
new option is mutually exclusive with the -1/--no-concurrency option.
Signed-off-by: Dylan Baker <baker.dylan.c at gmail.com>
---
framework/core.py | 30 ++++++++++++++++++++----------
piglit-run.py | 17 +++++++++++++----
2 files changed, 33 insertions(+), 14 deletions(-)
diff --git a/framework/core.py b/framework/core.py
index 5a9e8b0..c8dc4bc 100644
--- a/framework/core.py
+++ b/framework/core.py
@@ -564,22 +564,32 @@ class TestProfile:
self.prepare_test_list(env)
- # If using concurrency, add all the concurrent tests to the pool and
- # execute that pool
- if env.concurrent:
+ # If concurrency is set to 'all' run all tests out of a concurrent
+ # threadpool, if it's none, then run evey test serially. otherwise mix
+ # and match them
+ if env.concurrent == "all":
+ pool = ThreadPool(multiprocessing.cpu_count())
+ for (path, test) in self.test_list.items():
+ pool.add(test.execute, (env, path, json_writer))
+ pool.join()
+ elif env.concurrent == "none":
+ pool = ThreadPool(1)
+ for (path, test) in self.test_list.items():
+ if not env.concurrent or not test.runConcurrent:
+ pool.add(test.execute, (env, path, json_writer))
+ pool.join()
+ else:
pool = ThreadPool(multiprocessing.cpu_count())
for (path, test) in self.test_list.items():
if test.runConcurrent:
pool.add(test.execute, (env, path, json_writer))
pool.join()
- # Run any remaining tests serially from a single thread pool after the
- # concurrent tests have finished
- pool = ThreadPool(1)
- for (path, test) in self.test_list.items():
- if not env.concurrent or not test.runConcurrent:
- pool.add(test.execute, (env, path, json_writer))
- pool.join()
+ pool = ThreadPool(1)
+ for (path, test) in self.test_list.items():
+ if not test.runConcurrent:
+ pool.add(test.execute, (env, path, json_writer))
+ pool.join()
def remove_test(self, test_path):
"""Remove a fully qualified test from the profile.
diff --git a/piglit-run.py b/piglit-run.py
index 0d3d1be..c4bed93 100755
--- a/piglit-run.py
+++ b/piglit-run.py
@@ -56,10 +56,19 @@ def main():
metavar="<regex>",
help="Exclude matching tests "
"(can be used more than once)")
- parser.add_argument("-1", "--no-concurrency",
- action="store_false",
- dest="concurrency",
- help="Disable concurrent test runs")
+ conc_parser = parser.add_mutually_exclusive_group()
+ conc_parser.add_argument('-c', '--all-concurrent',
+ action="store_const",
+ default="some",
+ const="all",
+ dest="concurrency",
+ help="Run all tests concurrently")
+ conc_parser.add_argument("-1", "--no-concurrency",
+ action="store_const",
+ default="some",
+ const="none",
+ dest="concurrency",
+ help="Disable concurrent test runs")
parser.add_argument("-p", "--platform",
choices=["glx", "x11_egl", "wayland", "gbm"],
help="Name of windows system passed to waffle")
--
1.8.5.1
More information about the Piglit
mailing list