opencv/modules/ts/misc/perf_tests_timing.py

109 lines
3.6 KiB
Python
Raw Normal View History

2012-12-24 12:29:49 +01:00
#!/usr/bin/env python
import testlog_parser, sys, os, xml, glob, re
from table_formatter import *
from optparse import OptionParser
from operator import itemgetter, attrgetter
from summary import getSetName, alphanum_keyselector
if __name__ == "__main__":
2012-12-24 13:47:30 +01:00
usage = "%prog <log_name>.xml [...]"
2012-12-24 12:29:49 +01:00
parser = OptionParser(usage = usage)
2012-12-24 13:47:30 +01:00
parser.add_option("-o", "--output", dest = "format",
help = "output results in text format (can be 'txt', 'html' or 'auto' - default)",
metavar = 'FMT', default = 'auto')
2012-12-24 12:29:49 +01:00
(options, args) = parser.parse_args()
if 1 != len(args):
parser.print_help()
exit(0)
2012-12-24 13:47:30 +01:00
options.generateHtml = detectHtmlOutputType(options.format)
2012-12-24 12:29:49 +01:00
# expand wildcards and filter duplicates
file = os.path.abspath(args[0])
if not os.path.isfile(file):
2012-12-24 13:47:30 +01:00
sys.stderr.write("IOError reading \"" + file + "\" - " + str(err) + os.linesep)
2012-12-24 12:29:49 +01:00
parser.print_help()
exit(0)
# read all passed files
test_sets = []
try:
tests = testlog_parser.parseLogFile(file)
if tests:
test_sets.append((os.path.basename(file), tests))
except IOError as err:
sys.stderr.write("IOError reading \"" + file + "\" - " + str(err) + os.linesep)
except xml.parsers.expat.ExpatError as err:
sys.stderr.write("ExpatError reading \"" + file + "\" - " + str(err) + os.linesep)
if not test_sets:
sys.stderr.write("Error: no test data found" + os.linesep)
quit()
# find matches
setsCount = len(test_sets)
test_cases = {}
name_extractor = lambda name: str(name)
for i in range(setsCount):
for case in test_sets[i][1]:
name = name_extractor(case)
if name not in test_cases:
test_cases[name] = [None] * setsCount
test_cases[name][i] = case
testsuits = [] # testsuit name, time, flag for failed tests
prevGroupName = None
suit_time = 0
has_failed = False
for name in sorted(test_cases.iterkeys(), key=alphanum_keyselector):
cases = test_cases[name]
groupName = next(c for c in cases if c).shortName()
if groupName != prevGroupName:
if prevGroupName != None:
2012-12-24 13:47:30 +01:00
testsuits.append({'name': prevGroupName, 'time': suit_time, \
'failed': has_failed})
2012-12-24 12:29:49 +01:00
has_failed = False
suit_time = 0
prevGroupName = groupName
for i in range(setsCount):
case = cases[i]
if not case is None:
2012-12-24 13:47:30 +01:00
if case.get('status') == 'run':
suit_time += case.get('time')
if case.get('status') == 'failed':
2012-12-24 12:29:49 +01:00
has_failed = True
2013-01-10 10:16:46 +01:00
testsuits.append({'name': prevGroupName, 'time': suit_time, \
'failed': has_failed})
2012-12-24 12:29:49 +01:00
tbl = table()
# header
2012-12-24 13:47:30 +01:00
tbl.newColumn('name', 'Name of testsuit', align = 'left', cssclass = 'col_name')
tbl.newColumn('time', 'Time (ms)', align = 'left', cssclass = 'col_name')
tbl.newColumn('failed', 'Failed tests', align = 'center', cssclass = 'col_name')
2012-12-24 12:29:49 +01:00
# rows
2012-12-24 13:47:30 +01:00
for suit in sorted(testsuits, key = lambda suit: suit['time'], reverse = True):
2012-12-24 12:29:49 +01:00
tbl.newRow()
2012-12-24 13:47:30 +01:00
tbl.newCell('name', suit['name'])
tbl.newCell('time', formatValue(suit['time'], '', ''), suit['time'])
if (suit['failed']):
tbl.newCell('failed', 'Yes')
else:
tbl.newCell('failed', ' ')
2012-12-24 12:29:49 +01:00
# output table
if options.generateHtml:
tbl.htmlPrintTable(sys.stdout)
htmlPrintFooter(sys.stdout)
else:
tbl.consolePrintTable(sys.stdout)