[Piglit] [PATCH] framework: add a verbose flag to produce a result spew
Dylan Baker
baker.dylan.c at gmail.com
Sat Feb 15 01:49:07 PST 2014
On Saturday, February 15, 2014 04:15:13 AM Ilia Mirkin wrote:
> This restores a similar output to the old one for use-cases where a spew
> is useful, such as when hangs can happen and the on-screen output is the
> only record.
>
> Signed-off-by: Ilia Mirkin <imirkin at alum.mit.edu>
> ---
>
> Sorry, this is a little dirty. Can't think of a great way around it, given
> the current log api. Perhaps it should become log_start/log_end?
>
> Also, why does log() happen before the test runs/mark_complete? Is that just
> to deal with having an output before the very first test completes?
>
> Note, this probably depends on some of the earlier patches I sent to the
> list.
>
> framework/core.py | 10 +++++++---
> framework/log.py | 17 ++++++++++++-----
> piglit-resume.py | 3 ++-
> piglit-run.py | 7 ++++++-
> 4 files changed, 27 insertions(+), 10 deletions(-)
>
> diff --git a/framework/core.py b/framework/core.py
> index 7b2083b..d85bf70 100644
> --- a/framework/core.py
> +++ b/framework/core.py
> @@ -356,7 +356,7 @@ class TestrunResult:
>
> class Environment:
> def __init__(self, concurrent=True, execute=True, include_filter=[],
> - exclude_filter=[], valgrind=False, dmesg=False):
> + exclude_filter=[], valgrind=False, dmesg=False,
> verbose=False): self.concurrent = concurrent
> self.execute = execute
> self.filter = []
> @@ -364,6 +364,7 @@ class Environment:
> self.exclude_tests = set()
> self.valgrind = valgrind
> self.dmesg = dmesg
> + self.verbose = verbose
>
> """
> The filter lists that are read in should be a list of string
> objects, @@ -440,7 +441,7 @@ class Test(object):
> # Run the test
> if env.execute:
> try:
> - log.log()
> + log.log(env.verbose, log_current, path, "running")
> time_start = time.time()
> dmesg.update_dmesg()
> self._test_hook_execute_run()
> @@ -464,6 +465,9 @@ class Test(object):
> result['traceback'] = \
> "".join(traceback.format_tb(sys.exc_info()[2]))
>
> + if env.verbose:
> + log.log(env.verbose, log_current, path, result["result"])
> +
> if 'subtest' in result and len(result['subtest']) > 1:
> for test in result['subtest']:
> res = result['result'] = result['subtest'][test]
> @@ -473,7 +477,7 @@ class Test(object):
> counts[result['result']] = 1
> json_writer.write_dict_item(path, result)
> else:
> - log.log()
> + log.log(env.verbose, log_current, path, "noexec")
> log.mark_complete(log_current, counts)
>
>
> diff --git a/framework/log.py b/framework/log.py
> index 8ae7541..90998ba 100644
> --- a/framework/log.py
> +++ b/framework/log.py
> @@ -73,17 +73,24 @@ class Log(object):
> self.__summary[k] = self.__summary.get(k, 0) + v
>
> @synchronized_self
> - def log(self):
> + def log(self, verbose, id, name, result):
> """ Print to the screen
>
> Works by moving the cursor back to the front of the line and
> printing over it.
>
> """
> - sys.stdout.write("{0} {1} \r".format(self._percent(),
> self._running())) - # Need to flush explicitly, otherwise it all
> gets buffered without a - # newline.
> - sys.stdout.flush()
> + if verbose:
> + sys.stdout.write("[{0}/{1}] :: {2:>7} :: {3}\n".format(
> + str(id).zfill(self.__pad),
> + str(self.__total).zfill(self.__pad),
> + result,
> + name))
> + else:
> + sys.stdout.write("{0} {1} \r".format(self._percent(),
> self._running())) + # Need to flush explicitly, otherwise it all
> gets buffered without a + # newline.
> + sys.stdout.flush()
>
> @synchronized_self
> def get_current(self):
> diff --git a/piglit-resume.py b/piglit-resume.py
> index 7b82420..06bba4d 100755
> --- a/piglit-resume.py
> +++ b/piglit-resume.py
> @@ -43,7 +43,8 @@ def main():
> include_filter=results.options['filter'],
> execute=results.options['execute'],
> valgrind=results.options['valgrind'],
> - dmesg=results.options['dmesg'])
> + dmesg=results.options['dmesg'],
> + verbose=results.options['verbose'])
>
> # Change working directory to the piglit directory
> os.chdir(path.dirname(path.realpath(sys.argv[0])))
> diff --git a/piglit-run.py b/piglit-run.py
> index ba5c925..5fc9baf 100755
> --- a/piglit-run.py
> +++ b/piglit-run.py
> @@ -82,6 +82,10 @@ def main():
> action="store_true",
> help="Capture a difference in dmesg before and "
> "after each test. Implies
> -1/--no-concurrency") + parser.add_argument("-v", "--verbose",
> + action="store_true",
> + help="Produce a line of output for each test before
> " + "and after it runs")
> parser.add_argument("test_profile",
> metavar="<Path to one or more test profile(s)>",
> nargs='+',
> @@ -115,7 +119,8 @@ def main():
> include_filter=args.include_tests,
> execute=args.execute,
> valgrind=args.valgrind,
> - dmesg=args.dmesg)
> + dmesg=args.dmesg,
> + verbose=args.verbose)
>
> # Change working directory to the root of the piglit directory
> piglit_dir = path.dirname(path.realpath(sys.argv[0]))
I'd rather not have this kind of if branching, it's going to eat a lot of the
performance gain of the terse output, and and that point why bother? I've sent
out a patch that kinda cuts the middle between what I wrote and what was there
before.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 490 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.freedesktop.org/archives/piglit/attachments/20140215/84194f1b/attachment-0001.pgp>
More information about the Piglit
mailing list