[Piglit] [PATCH] framework: add a verbose flag to produce a result spew

Ilia Mirkin imirkin at alum.mit.edu
Sat Feb 15 01:15:13 PST 2014


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]))
-- 
1.8.3.2



More information about the Piglit mailing list