diff options
Diffstat (limited to 'tools/benchmarks/run.py')
-rwxr-xr-x | tools/benchmarks/run.py | 47 |
1 files changed, 33 insertions, 14 deletions
diff --git a/tools/benchmarks/run.py b/tools/benchmarks/run.py index 989175a..271b6b7 100755 --- a/tools/benchmarks/run.py +++ b/tools/benchmarks/run.py @@ -64,8 +64,8 @@ def BuildOptions(): return args -def host_java(command): - return utils.Command(command, cwd=utils.dir_build_java_classes) +def host_java(command, command_string=None): + return utils.Command(command, command_string, cwd=utils.dir_build_java_classes) def DeleteAppInDalvikCache(target_copy_path, target): # We delete the entire dalvik-cache in the test path. @@ -83,8 +83,7 @@ def BuildBenchmarks(build_for_target): command += ['-t'] utils.Command(command) -def RunBenchADB(mode, compiler_mode, android_root, auto_calibrate, apk, - classname, target): +def RunBenchADB(mode, compiler_mode, android_root, auto_calibrate, apk, classname, target, cpuset): format_data = {'workdir': os.path.dirname(apk)} path, env, runtime_param = utils.GetAndroidRootConfiguration(android_root, mode == '64') # Escaping through `adb shell` is fiddly, so we expand the path fully in @@ -113,9 +112,14 @@ def RunBenchADB(mode, compiler_mode, android_root, auto_calibrate, apk, # - Performance critical funtions are JIT compiled as soon as possible. dalvikvm_options += ' -Xusejit:true -Xnodex2oat -Xjitthreshold:100' - command = 'cd {workdir} && ' + \ - ' '.join([environment_config, dalvikvm, - dalvikvm_options, '-cp', apk, apk_arguments]) + command = 'cd {workdir} && ' + + if cpuset: + command += 'echo $BASHPID > /dev/cpuset/' + cpuset + '/tasks && ' + dalvikvm = 'exec ' + dalvikvm + + command += ' '.join([environment_config, dalvikvm, + dalvikvm_options, '-cp', apk, apk_arguments]) command = command.format(**format_data) return utils_adb.shell(command, target, exit_on_error=False) @@ -126,12 +130,22 @@ def RunBenchHost(ignored_mode, auto_calibrate, ignored_apk, classname, - ignored_target): + ignored_target, + cpuset): + command_string = None + if auto_calibrate: command = ['java', bench_runner_main, classname] else: command = ['java', classname] - return host_java(command) + + if cpuset: + command_string = 'echo $BASHPID > /dev/cpuset/' + cpuset + '/tasks && ' + command_last = command_string + 'exec ' + ' '.join(command) + command_string += ' '.join(command) + command = ['bash', '-c', command_last] + + return host_java(command, command_string) # TODO: Avoid using global variables. @@ -144,7 +158,8 @@ def RunBench(apk, classname, mode = utils.default_mode, compiler_mode = utils.default_compiler_mode, android_root = utils.default_android_root, - target = None): + target = None, + cpuset = None): rc = 0 for iteration in range(iterations): try: @@ -154,7 +169,8 @@ def RunBench(apk, classname, auto_calibrate, apk, classname, - target) + target, + cpuset) rc += local_rc outerr = outerr.rstrip('\r\n') utils_print.VerbosePrint(outerr) @@ -187,7 +203,8 @@ def RunBenchs(apk, bench_names, iterations=utils.default_n_iterations, mode=utils.default_mode, compiler_mode=utils.default_compiler_mode, - android_root=utils.default_android_root): + android_root=utils.default_android_root, + cpuset=None): rc = 0 utils_print.VerbosePrint('\n# Running benchmarks: ' + ' '.join(bench_names)) run_helper = RunBenchADB if target else RunBenchHost @@ -200,7 +217,8 @@ def RunBenchs(apk, bench_names, mode = mode, compiler_mode = compiler_mode, android_root = android_root, - target = target) + target = target, + cpuset = cpuset) return rc @@ -253,7 +271,8 @@ def GetBenchmarkResults(args): args.iterations, args.mode, args.compiler_mode, - args.android_root) + args.android_root, + args.cpuset) if rc: utils.Error("The benchmarks did *not* run successfully. (rc = %d)" % rc, rc) |