[Piglit] [PATCH] framework: fix running with mixed concurrency (neither -c or -1)

Juan A. Suarez Romero jasuarez at igalia.com
Wed May 9 11:22:01 UTC 2018


On Tue, 2018-05-08 at 10:32 -0700, Dylan Baker wrote:
> test_list is an iterator, you can't walk an iterator more than once. To
> solve this we use itertools.tee, which creates a shared buffer for the
> iterators to draw from. This fixes errors like:
> 


Cool!! It seems to fix the problem. Thank you!


Reviewed-by: Juan A. Suarez <jasuarez at igalia.com>


> [000/480]
> Traceback (most recent call last):
>   File "./piglit", line 178, in <module>
>     main()
>   File "./piglit", line 174, in main
>     sys.exit(runner(args))
>   File "/home/user/piglit/framework/exceptions.py", line 51, in _inner
>     func(*args, **kwargs)
>   File "/home/user/piglit/framework/programs/run.py", line 370, in run
>     backend.finalize({'time_elapsed': time_elapsed.to_json()})
>   File "/home/user/piglit/framework/backends/json.py", line 163, in finalize
>     assert data['tests']
>   AssertionError
> 
> Thanks Tomi for figuring out what was wrong with the original patch!
> 
> CC: Michel Dänzer <michel at daenzer.net>
> CC: Tomi Sarvela <tomi.p.sarvela at intel.com>
> CC: "Juan A. Suarez Romero" <jasuarez at igalia.com>
> ---
>  framework/profile.py | 7 +++++--
>  1 file changed, 5 insertions(+), 2 deletions(-)
> 
> diff --git a/framework/profile.py b/framework/profile.py
> index 1c75025b3..5161f6e4c 100644
> --- a/framework/profile.py
> +++ b/framework/profile.py
> @@ -596,13 +596,16 @@ def run(profiles, logger, backend, concurrency):
>              run_threads(single, profile, test_list)
>          else:
>              assert concurrency == "some"
> +            # test_list is an iterator, we need to copy it to run it twice.
> +            test_list = itertools.tee(test_list, 2)
> +
>              # Filter and return only thread safe tests to the threaded pool
> -            run_threads(multi, profile, test_list,
> +            run_threads(multi, profile, test_list[0],
>                          lambda x: x[1].run_concurrent)
>  
>              # Filter and return the non thread safe tests to the single
>              # pool
> -            run_threads(single, profile, test_list,
> +            run_threads(single, profile, test_list[1],
>                          lambda x: not x[1].run_concurrent)
>          profile.teardown()
>  


More information about the Piglit mailing list