Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 # Copyright 2016 The Chromium Authors. All rights reserved. | 1 # Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 import csv | 5 import csv |
| 6 import json | 6 import json |
| 7 import os | 7 import os |
| 8 import shutil | 8 import shutil |
| 9 | 9 |
| 10 import chrome_cache | 10 import chrome_cache |
| (...skipping 19 matching lines...) Expand all Loading... | |
| 30 def Transformer(runner): | 30 def Transformer(runner): |
| 31 assert isinstance(runner, sandwich_runner.SandwichRunner) | 31 assert isinstance(runner, sandwich_runner.SandwichRunner) |
| 32 runner.network_condition = network_condition | 32 runner.network_condition = network_condition |
| 33 return Transformer | 33 return Transformer |
| 34 | 34 |
| 35 | 35 |
| 36 class SandwichTaskBuilder(task_manager.Builder): | 36 class SandwichTaskBuilder(task_manager.Builder): |
| 37 """A builder for a graph of tasks, each prepares or invokes a SandwichRunner. | 37 """A builder for a graph of tasks, each prepares or invokes a SandwichRunner. |
| 38 """ | 38 """ |
| 39 | 39 |
| 40 def __init__(self, output_directory, android_device, job_path, url_repeat): | 40 def __init__(self, output_directory, android_device, job_path): |
| 41 """Constructor. | 41 """Constructor. |
| 42 | 42 |
| 43 Args: | 43 Args: |
| 44 output_directory: As in task_manager.Builder.__init__ | 44 output_directory: As in task_manager.Builder.__init__ |
| 45 android_device: The android DeviceUtils to run sandwich on or None to run | 45 android_device: The android DeviceUtils to run sandwich on or None to run |
| 46 it locally. | 46 it locally. |
| 47 job_path: Path of the sandwich's job. | 47 job_path: Path of the sandwich's job. |
| 48 url_repeat: Non null integer controlling how many times the URLs should be | |
| 49 repeated in the benchmarks. | |
| 50 """ | 48 """ |
| 51 task_manager.Builder.__init__(self, output_directory) | 49 task_manager.Builder.__init__(self, output_directory) |
| 52 self._android_device = android_device | 50 self._android_device = android_device |
| 53 self._job_path = job_path | 51 self._job_path = job_path |
| 54 self._url_repeat = url_repeat | |
| 55 self._default_final_tasks = [] | 52 self._default_final_tasks = [] |
| 56 | 53 |
| 57 self._original_wpr_task = None | 54 self._original_wpr_task = None |
| 58 self._patched_wpr_task = None | 55 self._patched_wpr_task = None |
| 59 self._reference_cache_task = None | 56 self._reference_cache_task = None |
| 60 self._subresources_for_urls_run_task = None | 57 self._subresources_for_urls_run_task = None |
| 61 self._subresources_for_urls_task = None | 58 self._subresources_for_urls_task = None |
| 62 | 59 |
| 63 @property | 60 @property |
| 64 def default_final_tasks(self): | 61 def default_final_tasks(self): |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 152 | 149 |
| 153 self._patched_wpr_task = BuildPatchedWpr | 150 self._patched_wpr_task = BuildPatchedWpr |
| 154 self._reference_cache_task = BuildReferenceCache | 151 self._reference_cache_task = BuildReferenceCache |
| 155 self._subresources_for_urls_run_task = UrlsResourcesRun | 152 self._subresources_for_urls_run_task = UrlsResourcesRun |
| 156 self._subresources_for_urls_task = ListUrlsResources | 153 self._subresources_for_urls_task = ListUrlsResources |
| 157 | 154 |
| 158 self._default_final_tasks.append(ValidateReferenceCache) | 155 self._default_final_tasks.append(ValidateReferenceCache) |
| 159 return ValidateReferenceCache | 156 return ValidateReferenceCache |
| 160 | 157 |
| 161 def PopulateLoadBenchmark(self, subresource_discoverer, | 158 def PopulateLoadBenchmark(self, subresource_discoverer, |
| 162 runner_transformer_name, runner_transformer): | 159 runner_transformer_name, runner_transformers): |
| 163 """Populate benchmarking tasks from its setup tasks. | 160 """Populate benchmarking tasks from its setup tasks. |
| 164 | 161 |
| 165 Args: | 162 Args: |
| 166 subresource_discoverer: Name of a subresources discoverer. | 163 subresource_discoverer: Name of a subresources discoverer. |
| 167 runner_transformer: A function that takes an instance of SandwichRunner as | |
| 168 parameter, would be applied immediately before SandwichRunner.Run(). | |
| 169 runner_transformer_name: Name of the runner transformer used to generate | 164 runner_transformer_name: Name of the runner transformer used to generate |
|
pasko
2016/04/28 16:07:50
nit: transformer_names: A string describing the tr
gabadie
2016/04/28 16:24:01
Done.
| |
| 170 task names. | 165 task names. |
| 171 benchmark_name: The benchmark's name for that runner modifier. | 166 runner_transformers: An ordered list of function that takes an instance of |
| 167 SandwichRunner as parameter, would be applied immediately before | |
| 168 SandwichRunner.Run() in the given order. | |
| 172 | 169 |
| 173 Here is the full dependency of the added tree for the returned task: | 170 Here is the full dependency of the added tree for the returned task: |
| 174 <runner_transformer_name>/<subresource_discoverer>-metrics.csv | 171 <runner_transformer_name>/<subresource_discoverer>-metrics.csv |
| 175 depends on: <runner_transformer_name>/<subresource_discoverer>-run/ | 172 depends on: <runner_transformer_name>/<subresource_discoverer>-run/ |
| 176 depends on: common/<subresource_discoverer>-cache.zip | 173 depends on: common/<subresource_discoverer>-cache.zip |
| 177 depends on: some tasks saved by PopulateCommonPipelines() | 174 depends on: some tasks saved by PopulateCommonPipelines() |
| 178 depends on: common/<subresource_discoverer>-setup.json | 175 depends on: common/<subresource_discoverer>-setup.json |
| 179 depends on: some tasks saved by PopulateCommonPipelines() | 176 depends on: some tasks saved by PopulateCommonPipelines() |
| 180 | 177 |
| 181 Returns: | 178 Returns: |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 214 setup = json.load(open(SetupBenchmark.path)) | 211 setup = json.load(open(SetupBenchmark.path)) |
| 215 chrome_cache.ApplyUrlWhitelistToCacheArchive( | 212 chrome_cache.ApplyUrlWhitelistToCacheArchive( |
| 216 cache_archive_path=self._reference_cache_task.path, | 213 cache_archive_path=self._reference_cache_task.path, |
| 217 whitelisted_urls=setup['cache_whitelist'], | 214 whitelisted_urls=setup['cache_whitelist'], |
| 218 output_cache_archive_path=BuildBenchmarkCacheArchive.path) | 215 output_cache_archive_path=BuildBenchmarkCacheArchive.path) |
| 219 | 216 |
| 220 @self.RegisterTask(task_prefix + '-run/', | 217 @self.RegisterTask(task_prefix + '-run/', |
| 221 dependencies=[BuildBenchmarkCacheArchive]) | 218 dependencies=[BuildBenchmarkCacheArchive]) |
| 222 def RunBenchmark(): | 219 def RunBenchmark(): |
| 223 runner = self._CreateSandwichRunner() | 220 runner = self._CreateSandwichRunner() |
| 224 # runner.record_video = True | 221 for runner_transformer in runner_transformers: |
| 225 runner.job_repeat = self._url_repeat | 222 runner_transformer(runner) |
| 226 runner_transformer(runner) | |
| 227 runner.wpr_archive_path = self._patched_wpr_task.path | 223 runner.wpr_archive_path = self._patched_wpr_task.path |
| 228 runner.wpr_out_log_path = os.path.join(RunBenchmark.path, 'wpr.log') | 224 runner.wpr_out_log_path = os.path.join(RunBenchmark.path, 'wpr.log') |
| 229 runner.cache_archive_path = BuildBenchmarkCacheArchive.path | 225 runner.cache_archive_path = BuildBenchmarkCacheArchive.path |
| 230 runner.cache_operation = 'push' | 226 runner.cache_operation = 'push' |
| 231 runner.trace_output_directory = RunBenchmark.path | 227 runner.trace_output_directory = RunBenchmark.path |
| 232 runner.Run() | 228 runner.Run() |
| 233 | 229 |
| 234 @self.RegisterTask(task_prefix + '-metrics.csv', | 230 @self.RegisterTask(task_prefix + '-metrics.csv', |
| 235 dependencies=[RunBenchmark]) | 231 dependencies=[RunBenchmark]) |
| 236 def ExtractMetrics(): | 232 def ExtractMetrics(): |
| 237 sandwich_misc.VerifyBenchmarkOutputDirectory( | 233 sandwich_misc.VerifyBenchmarkOutputDirectory( |
| 238 SetupBenchmark.path, RunBenchmark.path) | 234 SetupBenchmark.path, RunBenchmark.path) |
| 239 trace_metrics_list = \ | 235 trace_metrics_list = \ |
| 240 sandwich_metrics.ExtractMetricsFromRunnerOutputDirectory( | 236 sandwich_metrics.ExtractMetricsFromRunnerOutputDirectory( |
| 241 RunBenchmark.path) | 237 RunBenchmark.path) |
| 242 trace_metrics_list.sort(key=lambda e: e['repeat_id']) | 238 trace_metrics_list.sort(key=lambda e: e['repeat_id']) |
| 243 with open(ExtractMetrics.path, 'w') as csv_file: | 239 with open(ExtractMetrics.path, 'w') as csv_file: |
| 244 writer = csv.DictWriter(csv_file, | 240 writer = csv.DictWriter(csv_file, |
| 245 fieldnames=sandwich_metrics.CSV_FIELD_NAMES) | 241 fieldnames=sandwich_metrics.CSV_FIELD_NAMES) |
| 246 writer.writeheader() | 242 writer.writeheader() |
| 247 for trace_metrics in trace_metrics_list: | 243 for trace_metrics in trace_metrics_list: |
| 248 writer.writerow(trace_metrics) | 244 writer.writerow(trace_metrics) |
| 249 | 245 |
| 250 self._default_final_tasks.append(ExtractMetrics) | 246 self._default_final_tasks.append(ExtractMetrics) |
| 251 return ExtractMetrics | 247 return ExtractMetrics |
| OLD | NEW |