[Piglit] [PATCH] RFC: Example of my proposal

Dylan Baker baker.dylan.c at gmail.com
Sun Feb 16 14:42:53 PST 2014


On Saturday, February 15, 2014 11:11:27 PM Ilia Mirkin wrote:
> On Sat, Feb 15, 2014 at 7:33 AM, Dylan Baker <baker.dylan.c at gmail.com> 
wrote:
> > There are some things that need to be worked out still
> 
> This seems to be based on my change, right?

yes

> 
> I like not having to pass env.environ in every time -- that was
> definitely an annoying wart of my impl.
> 
> I dunno about putting the summary on the same line with the verbose
> output, the lines will end up being super-long. What do you think
> about having the verbose output be *both* lines? e.g. something like
> "result :: name\n[complete/total] summary running\r". That way the
> ephemeral information isn't in the scroll-back, but still available.

I don't really care what the verbose output looks like, the point of my 
example was to pass verbose the constructor and only do the branching once.

> 
> On a semi-unrelated note, if you're so concerned with the speed of the
> log stuff, have you played around with making self.__running a set?
> That should speed removal up a bit...]

That's a good idea.

> 
> In any case,
> 
> Reviewed-by: Ilia Mirkin <imirkin at alum.mit.edu>
> 
> Should I go ahead and start pushing the changes you reviewed from my
> list? I was waiting since I don't want to cause too many conflicts.

Yeah, that would be fine with me.

> 
>   -ilia
> 
> > ---
> > 
> >  framework/core.py | 15 ++++++++-------
> >  framework/log.py  | 41 ++++++++++++++++++++++-------------------
> >  2 files changed, 30 insertions(+), 26 deletions(-)
> > 
> > diff --git a/framework/core.py b/framework/core.py
> > index ee39616..e4a18ea 100644
> > --- a/framework/core.py
> > +++ b/framework/core.py
> > 
> > @@ -435,12 +435,14 @@ class Test(object):
> >              ``spec/glsl-1.30/preprocessor/compiler/keywords/void.frag``.
> >          
> >          '''
> > 
> > -        log_current = log.get_current()
> > +        log_current = log.pre_log()
> > 
> >          counts = {}
> >          # Run the test
> >          
> >          if env.execute:
> >              try:
> > -                log.log(env.verbose, log_current, path, "running")
> > +                if env.verbose:
> > +                    log.log(log_current, path, "running")
> > +
> > 
> >                  time_start = time.time()
> >                  dmesg.update_dmesg()
> >                  self._test_hook_execute_run()
> > 
> > @@ -464,8 +466,7 @@ 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"])
> > +            log.log(log_current, path, result["result"])
> > 
> >              if 'subtest' in result and len(result['subtest']) > 1:
> >                  for test in result['subtest']:
> > @@ -476,8 +477,8 @@ class Test(object):
> >                  counts[result['result']] = 1
> >                  json_writer.write_dict_item(path, result)
> >          
> >          else:
> > -            log.log(env.verbose, log_current, path, "noexec")
> > -        log.mark_complete(log_current, counts)
> > +            log.log(log_current, path, "dry-run")
> > +        log.post_log(log_current, counts)
> > 
> >  class Group(dict):
> > @@ -562,7 +563,7 @@ class TestProfile(object):
> >          '''
> >          
> >          self.prepare_test_list(env)
> > 
> > -        log = Log(len(self.test_list))
> > +        log = Log(len(self.test_list), env.verbose)
> > 
> >          def test(pair):
> >              """ Function to call test.execute from .map
> > 
> > diff --git a/framework/log.py b/framework/log.py
> > index 880cff3..5b5a7af 100644
> > --- a/framework/log.py
> > +++ b/framework/log.py
> > 
> > @@ -31,7 +31,7 @@ class Log(object):
> >      total -- The total number of tests to run.
> >      
> >      """
> > 
> > -    def __init__(self, total):
> > 
> > +    def __init__(self, total, verbose):
> >          self.__total = total
> >          self.__complete = 1
> >          self.__running = []
> > 
> > @@ -39,22 +39,29 @@ class Log(object):
> >          self.__pad = len(str(self.__total))
> >          self.__summary = {}
> > 
> > +        if verbose:
> > +            self.__output = "[{percent} {summary}] :: {result:>7} ::
> > {name}\n" +        else:
> > +            self.__output = "[{percent}] {running} {summary}\r"
> > +
> > 
> >      def _summary(self):
> > +        """ Print a summary of test statuses """
> > 
> >          return ", ".join("{0}: {1}".format(k, self.__summary[k])
> >          
> >                           for k in sorted(self.__summary))
> >      
> >      def _running(self):
> > +        """ Print running tests """
> > 
> >          return "Running Test(s): {}".format(
> >          
> >              " ".join([str(x).zfill(self.__pad) for x in self.__running]))
> >      
> >      def _percent(self):
> > -        return "[{0}/{1}] {2}".format(
> > -            str(self.__complete).zfill(self.__pad),
> > -            str(self.__total).zfill(self.__pad),
> > -            self._summary())
> > +        """ Print the percentage of tests completed in form
> > <finsihed>/<total> +        """
> > +        return "{0}/{1}".format(str(self.__complete).zfill(self.__pad),
> > +                                str(self.__total).zfill(self.__pad))
> > 
> >      @synchronized_self
> > 
> > -    def mark_complete(self, value, counts):
> > 
> > +    def post_log(self, value, counts):
> >          """ Used to mark a test as complete in the log
> > 
> >          Arguments:
> > @@ -73,27 +80,23 @@ class Log(object):
> >              self.__summary[k] = self.__summary.get(k, 0) + v
> >      
> >      @synchronized_self
> > 
> > -    def log(self, verbose, id, name, result):
> > 
> > +    def log(self, test_id, name, result):
> >          """ Print to the screen
> >          
> >          Works by moving the cursor back to the front of the line and
> >          printing
> >          over it.
> >          
> >          """
> > 
> > -        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()
> > +        sys.stdout.write(self.__output.format(**{'percent':
> > self._percent(), +                                                
> > 'running': self._running(), +                                            
> >     'summary': self._summary(), +                                        
> >         'name': name,
> > +                                                 'result': result}))
> > +
> > +        sys.stdout.flush()
> > 
> >      @synchronized_self
> > 
> > -    def get_current(self):
> > 
> > +    def pre_log(self):
> >          """ Returns a new number to know what processes are running """
> >          x = self.__generator.next()
> >          self.__running.append(x)
> > 
> > --
> > 1.8.5.4
> > 
> > _______________________________________________
> > Piglit mailing list
> > Piglit at lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/piglit
-------------- 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/20140216/07d8b9b9/attachment.pgp>


More information about the Piglit mailing list