Index: tools/android/loading/sandwich.py |
diff --git a/tools/android/loading/sandwich.py b/tools/android/loading/sandwich.py |
index 5f61aac31553afeed8eae0be89f4372c147ed7e0..30c3d65351d10e91ae3feb7d907a539707d00a2e 100755 |
--- a/tools/android/loading/sandwich.py |
+++ b/tools/android/loading/sandwich.py |
@@ -35,6 +35,8 @@ import options |
import sandwich_metrics |
import sandwich_misc |
from sandwich_runner import SandwichRunner |
+import sandwich_task_builder |
+import task_manager |
from trace_test.webserver_test import WebServer |
@@ -49,6 +51,8 @@ def _ArgumentParser(): |
common_job_parser.add_argument('--job', required=True, |
help='JSON file with job description.') |
+ task_parser = task_manager.CommandLineParser() |
+ |
# Plumbing parser to configure OPTIONS. |
plumbing_parser = OPTIONS.GetParentParser('plumbing options') |
@@ -166,6 +170,21 @@ def _ArgumentParser(): |
record_trace_parser.add_argument('-o', '--output', type=str, required=True, |
help='Output path of the generated trace.') |
+ # Run all subcommand. |
+ run_all = subparsers.add_parser('run-all', |
+ parents=[common_job_parser, task_parser], |
+ help='Run all steps using the task manager ' |
+ 'infrastructure.') |
+ run_all.add_argument('-g', '--gen-full', action='store_true', |
+ help='Generate the full graph with all possible' |
+ 'benchmarks.') |
+ run_all.add_argument('--wpr-archive', default=None, type=str, |
+ dest='wpr_archive_path', |
+ help='WebPageReplay archive to use, instead of ' |
+ 'generating one.') |
+ run_all.add_argument('--url-repeat', default=1, type=int, |
+ help='How many times to repeat the urls.') |
+ |
return parser |
@@ -240,10 +259,45 @@ def _RecordWebServerTestTrace(args): |
address = server.Address() |
sandwich_runner.urls = ['http://%s/%s' % (address, args.page)] |
sandwich_runner.Run() |
- shutil.copy(os.path.join(out_path, 'run', '0', 'trace.json'), args.output) |
+ trace_path = os.path.join( |
+ out_path, 'run', '0', sandwich_runner.TRACE_FILENAME) |
+ shutil.copy(trace_path, args.output) |
return 0 |
+def _RunAllMain(args): |
+ builder = sandwich_task_builder.SandwichTaskBuilder( |
+ output_directory=args.output, |
+ job_path=args.job, |
+ url_repeat=args.url_repeat) |
+ if args.wpr_archive_path: |
+ builder.OverridePathToWprArchive(args.wpr_archive_path) |
+ else: |
+ builder.PopulateWprRecordingTask() |
+ builder.PopulateCommonPipelines() |
+ |
+ runner_transformer_name = 'no-network-emulation' |
+ runner_transformer = lambda arg: None |
+ builder.PopulateLoadBenchmark(sandwich_misc.EMPTY_CACHE_DISCOVERER, |
+ runner_transformer_name, runner_transformer) |
+ builder.PopulateLoadBenchmark(sandwich_misc.FULL_CACHE_DISCOVERER, |
+ runner_transformer_name, runner_transformer) |
+ |
+ if args.gen_full: |
+ for subresource_discoverer in sandwich_misc.SUBRESOURCE_DISCOVERERS: |
+ if subresource_discoverer == sandwich_misc.FULL_CACHE_DISCOVERER: |
+ continue |
+ for network_condition in ['Regular4G', 'Regular3G', 'Regular2G']: |
+ runner_transformer_name = network_condition.lower() |
+ runner_transformer = sandwich_task_builder.NetworkSimulationTransformer( |
+ network_condition) |
+ builder.PopulateLoadBenchmark( |
+ subresource_discoverer, runner_transformer_name, runner_transformer) |
+ |
+ return task_manager.ExecuteWithCommandLine( |
+ args, builder.tasks.values(), builder.default_final_tasks) |
+ |
+ |
def main(command_line_args): |
logging.basicConfig(level=logging.INFO) |
devil_chromium.Initialize() |
@@ -266,6 +320,8 @@ def main(command_line_args): |
return _FilterCacheMain(args) |
if args.subcommand == 'record-test-trace': |
return _RecordWebServerTestTrace(args) |
+ if args.subcommand == 'run-all': |
+ return _RunAllMain(args) |
assert False |