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

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


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


More information about the Piglit mailing list