Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(210)

Side by Side Diff: tools/android/loading/sandwich_task_builder.py

Issue 2009883002: sandwich: Make metrics extraction more customizable. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 logging
7 import os 8 import os
8 import shutil 9 import shutil
9 10
10 import chrome_cache 11 import chrome_cache
11 import common_util 12 import common_util
12 import emulation 13 import emulation
14 from loading_trace import LoadingTrace
13 import sandwich_metrics 15 import sandwich_metrics
14 import sandwich_misc 16 import sandwich_misc
15 import sandwich_runner 17 import sandwich_runner
16 import task_manager 18 import task_manager
17 19
18 20
19 def NetworkSimulationTransformer(network_condition): 21 def NetworkSimulationTransformer(network_condition):
20 """Creates a function that accepts a SandwichRunner as a parameter and sets 22 """Creates a function that accepts a SandwichRunner as a parameter and sets
21 network emulation options on it. 23 network emulation options on it.
22 24
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
182 SandwichRunner.Run() in the given order. 184 SandwichRunner.Run() in the given order.
183 185
184 Here is the full dependency of the added tree for the returned task: 186 Here is the full dependency of the added tree for the returned task:
185 <transformer_list_name>/<subresource_discoverer>-metrics.csv 187 <transformer_list_name>/<subresource_discoverer>-metrics.csv
186 depends on: <transformer_list_name>/<subresource_discoverer>-run/ 188 depends on: <transformer_list_name>/<subresource_discoverer>-run/
187 depends on: common/<subresource_discoverer>-cache.zip 189 depends on: common/<subresource_discoverer>-cache.zip
188 depends on: some tasks saved by PopulateCommonPipelines() 190 depends on: some tasks saved by PopulateCommonPipelines()
189 depends on: common/<subresource_discoverer>-setup.json 191 depends on: common/<subresource_discoverer>-setup.json
190 depends on: some tasks saved by PopulateCommonPipelines() 192 depends on: some tasks saved by PopulateCommonPipelines()
191 """ 193 """
194 ADDITIONAL_COLUMN_NAMES = [
195 'url',
196 'repeat_id',
197 'subresource_discoverer',
198 'subresource_count',
199 # The amount of subresources detected at SetupBenchmark step.
200 'subresource_count_theoretic',
201 # Amount of subresources for caching as suggested by the subresource
202 # discoverer.
203 'cached_subresource_count_theoretic',
204 'cached_subresource_count']
205
192 assert subresource_discoverer in sandwich_misc.SUBRESOURCE_DISCOVERERS 206 assert subresource_discoverer in sandwich_misc.SUBRESOURCE_DISCOVERERS
193 assert 'common' not in sandwich_misc.SUBRESOURCE_DISCOVERERS 207 assert 'common' not in sandwich_misc.SUBRESOURCE_DISCOVERERS
194 shared_task_prefix = os.path.join('common', subresource_discoverer) 208 shared_task_prefix = os.path.join('common', subresource_discoverer)
195 task_prefix = os.path.join(transformer_list_name, subresource_discoverer) 209 task_prefix = os.path.join(transformer_list_name, subresource_discoverer)
196 210
197 @self.RegisterTask(shared_task_prefix + '-setup.json', merge=True, 211 @self.RegisterTask(shared_task_prefix + '-setup.json', merge=True,
198 dependencies=[self._subresources_for_urls_task]) 212 dependencies=[self._subresources_for_urls_task])
199 def SetupBenchmark(): 213 def SetupBenchmark():
200 trace_path = os.path.join(self._subresources_for_urls_run_task.path, '0', 214 trace_path = os.path.join(self._subresources_for_urls_run_task.path, '0',
201 sandwich_runner.TRACE_FILENAME) 215 sandwich_runner.TRACE_FILENAME)
(...skipping 29 matching lines...) Expand all
231 runner.wpr_out_log_path = os.path.join( 245 runner.wpr_out_log_path = os.path.join(
232 RunBenchmark.path, sandwich_runner.WPR_LOG_FILENAME) 246 RunBenchmark.path, sandwich_runner.WPR_LOG_FILENAME)
233 runner.cache_archive_path = BuildBenchmarkCacheArchive.path 247 runner.cache_archive_path = BuildBenchmarkCacheArchive.path
234 runner.cache_operation = sandwich_runner.CacheOperation.PUSH 248 runner.cache_operation = sandwich_runner.CacheOperation.PUSH
235 runner.output_dir = RunBenchmark.path 249 runner.output_dir = RunBenchmark.path
236 runner.Run() 250 runner.Run()
237 251
238 @self.RegisterTask(task_prefix + '-metrics.csv', 252 @self.RegisterTask(task_prefix + '-metrics.csv',
239 dependencies=[RunBenchmark]) 253 dependencies=[RunBenchmark])
240 def ExtractMetrics(): 254 def ExtractMetrics():
255 # TODO PERF IMPROVMENT(gabadie): Can load trace only once an use it for
256 # validation and metrics extraction.
241 sandwich_misc.VerifyBenchmarkOutputDirectory( 257 sandwich_misc.VerifyBenchmarkOutputDirectory(
242 SetupBenchmark.path, RunBenchmark.path) 258 SetupBenchmark.path, RunBenchmark.path)
243 trace_metrics_list = \ 259
244 sandwich_metrics.ExtractMetricsFromRunnerOutputDirectory( 260 benchmark_setup = json.load(open(SetupBenchmark.path))
245 SetupBenchmark.path, RunBenchmark.path) 261 run_metrics_list = []
246 trace_metrics_list.sort(key=lambda e: e['repeat_id']) 262 for repeat_id, repeat_dir in sandwich_runner.IterRepeatedRuns(
263 RunBenchmark.path):
264 trace_path = os.path.join(repeat_dir, sandwich_runner.TRACE_FILENAME)
265 logging.info('processing trace \'%s\'' % trace_path)
266 trace = LoadingTrace.FromJsonFile(trace_path)
267 run_metrics = {
268 'url': trace.url,
269 'repeat_id': repeat_id,
270 'subresource_discoverer': benchmark_setup['subresource_discoverer'],
271 'subresource_count': len(sandwich_misc.ListUrlRequests(
272 trace, sandwich_misc.RequestOutcome.All)),
273 'subresource_count_theoretic':
274 len(benchmark_setup['url_resources']),
275 'cached_subresource_count': len(sandwich_misc.ListUrlRequests(
276 trace, sandwich_misc.RequestOutcome.ServedFromCache)),
277 'cached_subresource_count_theoretic':
278 len(benchmark_setup['cache_whitelist']),
279 }
280 run_metrics.update(
281 sandwich_metrics.ExtractCommonMetricsFromRepeatDirectory(
282 repeat_dir, trace))
283
284 run_metrics_list.sort(key=lambda e: e['repeat_id'])
247 with open(ExtractMetrics.path, 'w') as csv_file: 285 with open(ExtractMetrics.path, 'w') as csv_file:
248 writer = csv.DictWriter(csv_file, 286 writer = csv.DictWriter(csv_file, fieldnames=(ADDITIONAL_COLUMN_NAMES +
249 fieldnames=sandwich_metrics.CSV_FIELD_NAMES) 287 sandwich_metrics.COMMON_CSV_COLUMN_NAMES))
250 writer.writeheader() 288 writer.writeheader()
251 for trace_metrics in trace_metrics_list: 289 for trace_metrics in run_metrics_list:
252 writer.writerow(trace_metrics) 290 writer.writerow(trace_metrics)
253 291
254 self._common_builder.default_final_tasks.append(ExtractMetrics) 292 self._common_builder.default_final_tasks.append(ExtractMetrics)
OLDNEW
« tools/android/loading/sandwich_runner.py ('K') | « tools/android/loading/sandwich_runner.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698