[Piglit] [PATCH] framework: keep track of running stats and display them

Dylan Baker baker.dylan.c at gmail.com
Sat Feb 15 03:43:03 PST 2014


On Saturday, February 15, 2014 04:48:37 AM Ilia Mirkin wrote:
> On Sat, Feb 15, 2014 at 4:45 AM, Dylan Baker <baker.dylan.c at gmail.com> 
wrote:
> > On Saturday, February 15, 2014 02:28:11 AM Ilia Mirkin wrote:
> >> This will display a line that looks like:
> >> [00076/11064] fail: 1, pass: 55, skip: 19 Running Test(s): 00075
> >> 
> >> Signed-off-by: Ilia Mirkin <imirkin at alum.mit.edu>
> >> ---
> >> 
> >>  framework/core.py | 11 +++++++----
> >>  framework/log.py  | 19 +++++++++++++++----
> >>  2 files changed, 22 insertions(+), 8 deletions(-)
> >> 
> >> diff --git a/framework/core.py b/framework/core.py
> >> index ac25917..4bcaa82 100644
> >> --- a/framework/core.py
> >> +++ b/framework/core.py
> >> 
> >> @@ -435,6 +435,7 @@ class Test(object):
> >>          '''
> >>          
> >>          log_current = log.get_current()
> >> 
> >> +        counts = {}
> >> 
> >>          # Run the test
> >>          
> >>          if env.execute:
> >>              try:
> >> @@ -462,15 +463,17 @@ class Test(object):
> >>                  result['traceback'] = \
> >>                  
> >>                      "".join(traceback.format_tb(sys.exc_info()[2]))
> >> 
> >> -            if 'subtest' in result and len(result['subtest'].keys()) >
> >> 1:
> >> -                for test in result['subtest'].keys():
> >> -                    result['result'] = result['subtest'][test]
> >> +            if 'subtest' in result and len(result['subtest']) > 1:
> >> +                for test in result['subtest']:
> >> +                    res = result['result'] = result['subtest'][test]
> >> +                    counts[res] = counts.get(res, 0) + 1
> >> 
> >>                      json_writer.write_dict_item(os.path.join(path,
> >>                      test),
> >> 
> >> result) else:
> >> +                counts[result['result']] = 1
> >> 
> >>                  json_writer.write_dict_item(path, result)
> >>          
> >>          else:
> >>              log.log()
> >> 
> >> -        log.mark_complete(log_current)
> >> +        log.mark_complete(log_current, counts)
> >> 
> >>  class Group(dict):
> >> diff --git a/framework/log.py b/framework/log.py
> >> index 01c3a32..ba045da 100644
> >> --- a/framework/log.py
> >> +++ b/framework/log.py
> >> 
> >> @@ -37,22 +37,30 @@ class Log(object):
> >>          self.__running = []
> >>          self.__generator = (x for x in xrange(self.__total))
> >>          self.__pad = len(str(self.__total))
> >> 
> >> +        self.__summary = {}
> >> +
> >> +    def _summary(self):
> >> +        return ", ".join("{0}: {1}".format(k, self.__summary[k])
> >> +                         for k in sorted(self.__summary))
> >> 
> >>      def _running(self):
> >>          return "Running Test(s): {}".format(
> >>          
> >>              " ".join([str(x).zfill(self.__pad) for x in
> >>              self.__running]))
> >>      
> >>      def _percent(self):
> >> -        return
> >> "[{0}/{1}]".format(str(self.__complete).zfill(self.__pad),
> >> -                                  str(self.__total).zfill(self.__pad))
> >> +        return "[{0}/{1}] {2}".format(
> >> +            str(self.__complete).zfill(self.__pad),
> >> +            str(self.__total).zfill(self.__pad),
> >> +            self._summary())
> >> 
> >>      @synchronized_self
> >> 
> >> -    def mark_complete(self, value):
> >> 
> >> +    def mark_complete(self, value, counts):
> >>          """ Used to mark a test as complete in the log
> >>          
> >>          Arguments:
> >>          value -- the test number to mark complete
> >> 
> >> -
> >> +        counts -- a map from result to count of tests with that result
> >> +
> >> 
> >>          """
> >>          # Mark running complete
> >>          assert value in self.__running
> >> 
> >> @@ -61,6 +69,9 @@ class Log(object):
> >>          # increment the number of completed tests
> >>          self.__complete += 1
> >> 
> >> +        for k, v in counts.iteritems():
> >> +            self.__summary[k] = self.__summary.get(k, 0) + v
> >> +
> >> 
> >>      @synchronized_self
> >>      
> >>      def log(self):
> >>          """ Print to the screen
> > 
> > Keeping track of subtests is going to make all of the accounting in log
> > inaccurate, correct? Since subtests have never been displayed by the
> > logger
> > (not this one or the previous one), counting them into your total will end
> > up with a count greater than the total, or am I totally missing
> > something?
> Not missing anything. I can redo this to just add 1/test, rather than
> counting the subtests. Of course if you can add in your head _that_
> fast... oh, and piglit-summary-html, at least, shows data by subtest.
> 
>   -ilia

I just think it'll look weird when the report says: [104/100] (or similar), so 
I'd prefer not counting subtests, but just incrementing the total every time a 
subtest is counted would be fine by me too.
-------------- 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/ed1b86e6/attachment.pgp>


More information about the Piglit mailing list