[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