Add an option to dump a complete performance report
Add --perf-output=<filename> option to gnome-shell that combines the reports written for each run by the C/Javascript code into a complete report. If this option is not specified, a brief human-readable summary is printed to stdout instead. https://bugzilla.gnome.org/show_bug.cgi?id=618189
This commit is contained in:
parent
bc57574094
commit
52a68eb24a
@ -2,6 +2,7 @@
|
|||||||
# -*- mode: Python; indent-tabs-mode: nil; -*-
|
# -*- mode: Python; indent-tabs-mode: nil; -*-
|
||||||
|
|
||||||
import atexit
|
import atexit
|
||||||
|
import datetime
|
||||||
import json
|
import json
|
||||||
import optparse
|
import optparse
|
||||||
import os
|
import os
|
||||||
@ -285,6 +286,7 @@ def run_performance_test():
|
|||||||
if options.perf_warmup:
|
if options.perf_warmup:
|
||||||
iters += 1
|
iters += 1
|
||||||
|
|
||||||
|
logs = []
|
||||||
metric_summaries = {}
|
metric_summaries = {}
|
||||||
|
|
||||||
for i in xrange(0, iters):
|
for i in xrange(0, iters):
|
||||||
@ -311,6 +313,10 @@ def run_performance_test():
|
|||||||
finally:
|
finally:
|
||||||
os.remove(output_file)
|
os.remove(output_file)
|
||||||
|
|
||||||
|
# Grab the event definitions the first time around
|
||||||
|
if i == 0:
|
||||||
|
events = output['events']
|
||||||
|
|
||||||
if options.perf_warmup and i == 0:
|
if options.perf_warmup and i == 0:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
@ -326,10 +332,45 @@ def run_performance_test():
|
|||||||
|
|
||||||
summary['values'].append(metric['value'])
|
summary['values'].append(metric['value'])
|
||||||
|
|
||||||
for metric in sorted(metric_summaries.keys()):
|
logs.append(output['log'])
|
||||||
summary = metric_summaries[metric]
|
|
||||||
print "#", summary['description']
|
if options.perf_output:
|
||||||
print metric, ", ".join((str(x) for x in summary['values']))
|
# Write a complete report, formatted as JSON. The Javascript/C code that
|
||||||
|
# generates the individual reports we are summarizing here is very careful
|
||||||
|
# to format them nicely, but we just dump out a compressed no-whitespace
|
||||||
|
# version here for simplicity. Using json.dump(indent=0) doesn't real
|
||||||
|
# improve the readability of the output much.
|
||||||
|
report = {
|
||||||
|
'date': datetime.datetime.now().isoformat(),
|
||||||
|
'events': events,
|
||||||
|
'metrics': metric_summaries,
|
||||||
|
'logs': logs
|
||||||
|
}
|
||||||
|
|
||||||
|
# Add the Git revision if available
|
||||||
|
bin_dir = os.path.dirname(os.path.abspath(sys.argv[0]))
|
||||||
|
if os.path.exists(os.path.join(bin_dir, 'gnome-shell.in')):
|
||||||
|
top_dir = os.path.dirname(bin_dir)
|
||||||
|
git_dir = os.path.join(top_dir, '.git')
|
||||||
|
if os.path.exists(git_dir):
|
||||||
|
env = dict(os.environ)
|
||||||
|
env['GIT_DIR'] = git_dir
|
||||||
|
revision = subprocess.Popen(['git', 'rev-parse', 'HEAD'],
|
||||||
|
env=env,
|
||||||
|
stdout=subprocess.PIPE).communicate()[0].strip()
|
||||||
|
report['revision'] = revision
|
||||||
|
|
||||||
|
f = open(options.perf_output, 'w')
|
||||||
|
json.dump(report, f)
|
||||||
|
f.close()
|
||||||
|
else:
|
||||||
|
# Write a human readable summary
|
||||||
|
print '------------------------------------------------------------';
|
||||||
|
for metric in sorted(metric_summaries.keys()):
|
||||||
|
summary = metric_summaries[metric]
|
||||||
|
print "#", summary['description']
|
||||||
|
print metric, ", ".join((str(x) for x in summary['values']))
|
||||||
|
print '------------------------------------------------------------';
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
@ -386,6 +427,8 @@ parser.add_option("", "--perf-iters", type="int", metavar="ITERS",
|
|||||||
default=1)
|
default=1)
|
||||||
parser.add_option("", "--perf-warmup", action="store_true",
|
parser.add_option("", "--perf-warmup", action="store_true",
|
||||||
help="Run a dry run before performance tests")
|
help="Run a dry run before performance tests")
|
||||||
|
parser.add_option("", "--perf-output",
|
||||||
|
help="Output file to write performance report")
|
||||||
parser.add_option("", "--xephyr", action="store_true",
|
parser.add_option("", "--xephyr", action="store_true",
|
||||||
help="Run a debugging instance inside Xephyr")
|
help="Run a debugging instance inside Xephyr")
|
||||||
parser.add_option("", "--geometry", metavar="GEOMETRY",
|
parser.add_option("", "--geometry", metavar="GEOMETRY",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user