gnome-shell-perf-tool: Fix various problems

* Fix wrong parameter name to on_name_appeared callbacks
* optparse doesn't just leave extra command line arguments, it
  errors out, so don't try to pass through extra arguments -
  instead add explicit passthrough for '--replace'
* Fix usage of Gio.DBusProxy
* Add a default value for --perf so that if it's not supplied
  things don't die with a mysterious error message. (This wasn't
  needed when --perf enabled perf-mode)

https://bugzilla.gnome.org/show_bug.cgi?id=687287
This commit is contained in:
Owen W. Taylor 2012-10-31 15:28:55 -04:00
parent e04a4c3923
commit a21ddb5914

View File

@ -28,7 +28,7 @@ def show_version(option, opt_str, value, parser):
def wait_for_dbus_name(wait_name): def wait_for_dbus_name(wait_name):
loop = GLib.MainLoop() loop = GLib.MainLoop()
def on_name_appeared(connection, name, name_owner, *args): def on_name_appeared(connection, name, new_owner, *args):
if not (name == wait_name and new_owner != ''): if not (name == wait_name and new_owner != ''):
return return
loop.quit() loop.quit()
@ -60,13 +60,18 @@ def start_perf_helper():
wait_for_dbus_name (PERF_HELPER_NAME) wait_for_dbus_name (PERF_HELPER_NAME)
def stop_perf_helper(): def stop_perf_helper():
proxy = Gio.DBusProxy(g_bus_type=Gio.BusType.SESSION, bus = Gio.bus_get_sync(Gio.BusType.SESSION, None)
g_name=PERF_HELPER_NAME,
g_interface=PERF_HELPER_IFACE, proxy = Gio.DBusProxy.new_sync(bus,
g_object_path=PERF_HELPER_PATH) Gio.DBusProxyFlags.NONE,
None,
PERF_HELPER_NAME,
PERF_HELPER_PATH,
PERF_HELPER_IFACE,
None)
proxy.Exit() proxy.Exit()
def start_shell(extra_args, perf_output=None): def start_shell(perf_output=None):
# Set up environment # Set up environment
env = dict(os.environ) env = dict(os.environ)
env['SHELL_PERF_MODULE'] = options.perf env['SHELL_PERF_MODULE'] = options.perf
@ -76,19 +81,21 @@ def start_shell(extra_args, perf_output=None):
env['SHELL_PERF_OUTPUT'] = perf_output env['SHELL_PERF_OUTPUT'] = perf_output
self_dir = os.path.dirname(os.path.abspath(sys.argv[0])) self_dir = os.path.dirname(os.path.abspath(sys.argv[0]))
args = []
args.append(os.path.join(self_dir, 'gnome-shell')) args.append(os.path.join(self_dir, 'gnome-shell'))
# pass on any additional arguments
args += extra_args if options.replace:
args.append('--replace')
return subprocess.Popen(args, env=env) return subprocess.Popen(args, env=env)
def run_shell(args, perf_output=None): def run_shell(perf_output=None):
# we do no additional supervision of gnome-shell, # we do no additional supervision of gnome-shell,
# beyond that of wait # beyond that of wait
# in particular, we don't kill the shell upon # in particular, we don't kill the shell upon
# receving a KeyboardInterrupt, as we expect to be # receving a KeyboardInterrupt, as we expect to be
# in the same process group # in the same process group
shell = start_shell(extra_args, perf_output=perf_output) shell = start_shell(perf_output=perf_output)
shell.wait() shell.wait()
return shell.returncode == 0 return shell.returncode == 0
@ -173,7 +180,7 @@ def upload_performance_report(report_text):
print "Performance report upload failed with status %d" % response.status print "Performance report upload failed with status %d" % response.status
print response.read() print response.read()
def run_performance_test(args): def run_performance_test():
iters = options.perf_iters iters = options.perf_iters
if options.perf_warmup: if options.perf_warmup:
iters += 1 iters += 1
@ -192,7 +199,7 @@ def run_performance_test(args):
# Run the performance test and collect the output as JSON # Run the performance test and collect the output as JSON
normal_exit = False normal_exit = False
try: try:
normal_exit = run_shell(args, perf_output=output_file) normal_exit = run_shell(perf_output=output_file)
except: except:
stop_perf_helper() stop_perf_helper()
raise raise
@ -288,7 +295,8 @@ def run_performance_test(args):
parser = optparse.OptionParser() parser = optparse.OptionParser()
parser.add_option("", "--perf", metavar="PERF_MODULE", parser.add_option("", "--perf", metavar="PERF_MODULE",
help="Specify the name of a performance module to run") help="Specify the name of a performance module to run",
default="core")
parser.add_option("", "--perf-iters", type="int", metavar="ITERS", parser.add_option("", "--perf-iters", type="int", metavar="ITERS",
help="Numbers of iterations of performance module to run", help="Numbers of iterations of performance module to run",
default=1) default=1)
@ -301,9 +309,16 @@ parser.add_option("", "--perf-upload", action="store_true",
parser.add_option("", "--version", action="callback", callback=show_version, parser.add_option("", "--version", action="callback", callback=show_version,
help="Display version and exit") help="Display version and exit")
parser.add_option("-r", "--replace", action="store_true",
help="Replace the running window manager")
options, args = parser.parse_args() options, args = parser.parse_args()
normal_exit = run_performance_test(args) if args:
parser.print_usage()
sys.exit(1)
normal_exit = run_performance_test()
if normal_exit: if normal_exit:
sys.exit(0) sys.exit(0)
else: else: