[gnome-shell] Add an option to dump a complete performance report
- From: Owen Taylor <otaylor src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] Add an option to dump a complete performance report
- Date: Fri, 21 May 2010 05:49:41 +0000 (UTC)
commit 52a68eb24a5c3a369d09ddbf2fe398f524c78663
Author: Owen W. Taylor <otaylor fishsoup net>
Date: Wed May 12 18:14:14 2010 -0400
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
src/gnome-shell.in | 51 +++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 47 insertions(+), 4 deletions(-)
---
diff --git a/src/gnome-shell.in b/src/gnome-shell.in
index 78b2cdb..f69d520 100644
--- a/src/gnome-shell.in
+++ b/src/gnome-shell.in
@@ -2,6 +2,7 @@
# -*- mode: Python; indent-tabs-mode: nil; -*-
import atexit
+import datetime
import json
import optparse
import os
@@ -285,6 +286,7 @@ def run_performance_test():
if options.perf_warmup:
iters += 1
+ logs = []
metric_summaries = {}
for i in xrange(0, iters):
@@ -311,6 +313,10 @@ def run_performance_test():
finally:
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:
continue
@@ -326,10 +332,45 @@ def run_performance_test():
summary['values'].append(metric['value'])
- for metric in sorted(metric_summaries.keys()):
- summary = metric_summaries[metric]
- print "#", summary['description']
- print metric, ", ".join((str(x) for x in summary['values']))
+ logs.append(output['log'])
+
+ if options.perf_output:
+ # 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
@@ -386,6 +427,8 @@ parser.add_option("", "--perf-iters", type="int", metavar="ITERS",
default=1)
parser.add_option("", "--perf-warmup", action="store_true",
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",
help="Run a debugging instance inside Xephyr")
parser.add_option("", "--geometry", metavar="GEOMETRY",
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]