[Piglit] [PATCH] framework: keep track of running stats and display them
Dylan Baker
baker.dylan.c at gmail.com
Sun Feb 16 14:45:35 PST 2014
On Saturday, February 15, 2014 01:34:09 PM Ilia Mirkin wrote:
> On Sat, Feb 15, 2014 at 6:43 AM, Dylan Baker <baker.dylan.c at gmail.com>
wrote:
> > 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
> That shouldn't be possible -- that should still be the completed
> count, which is 1/test. The subtests only affect the summary bit.
I completely misunderstood what was happening here, my bad.
>
> > I'd prefer not counting subtests, but just incrementing the total every
> > time a subtest is counted would be fine by me too.
>
> Sorry, having trouble parsing that...
Yeah, I should know better than to write emails late at night, sigh.
>
> Anyways, I'll just kill the subtest stuff and use the overall result
> and be done with it.
>
> Any changes I make will conflict with your fixes to the logging stuff
> too -- how do you want to handle it? It seems like your latest RFC is
> based on my changes?
>
> -ilia
-------------- 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/644b76ca/attachment.pgp>
More information about the Piglit
mailing list