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

Unified Diff: tools/telemetry/telemetry/web_perf/trace_mappers_based_measurement.py

Issue 1371403004: CL for perf tryjob on mac Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 3 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 side-by-side diff with in-line comments
Download patch
Index: tools/telemetry/telemetry/web_perf/trace_mappers_based_measurement.py
diff --git a/tools/telemetry/telemetry/web_perf/trace_mappers_based_measurement.py b/tools/telemetry/telemetry/web_perf/trace_mappers_based_measurement.py
new file mode 100644
index 0000000000000000000000000000000000000000..0c5439edf8e864097730b9ecafaf2f4db5c1b792
--- /dev/null
+++ b/tools/telemetry/telemetry/web_perf/trace_mappers_based_measurement.py
@@ -0,0 +1,88 @@
+# Copyright 2015 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+import os
+import tempfile
+import shutil
+
+from telemetry.web_perf import tracing_based_measurement
+from perf_insights import map_single_trace
+from perf_insights import map_function_handle as map_function_handle_module
+from perf_insights import results as pi_results_module
+from perf_insights.value import run_info as run_info_module
+from perf_insights import local_file_trace_handle
+
+
+class TraceMapperHandler(object):
+ """ A trace mapper handler hold the reference to a mapper function & define
+ how the results output by the trace mapper should be translated to telemetry's
+ results.
+
+ """
+ def __init__(self, trace_mapper_path):
+ assert os.path.isfile(trace_mapper_path)
+ self._trace_mapper_path = trace_mapper_path
+
+
+ @property
+ def trace_mapper_path(self):
+ return self._trace_mapper_path
+
+ def AddResults(self, pi_results, page, results):
+ """ Override to add values to |results| based on |pi_results|'s values."""
+ raise NotImplementedError
+
+
+class Options(tracing_based_measurement.Options):
+ """A class to be used to configure TraceMapperBasedMeasurement.
+
+ This is created and returned by
+ Benchmark.CreateTimelineBasedMeasurementOptions.
+
+ """
+
+ def __init__(self,
+ overhead_level=tracing_based_measurement.NO_OVERHEAD_LEVEL):
+ super(Options, self).__init__(overhead_level)
+ self._trace_mapper_handlers = []
+
+ def AddTraceMapperHandlers(self, handler):
+ assert isinstance(handler, TraceMapperHandler)
+ self._trace_mapper_handlers.append(handler)
+
+ @property
+ def trace_mapper_handlers(self):
+ return self._trace_mapper_handlers
+
+
+class TraceMapperBasedMeasurement(
+ tracing_based_measurement.TracingBasedMeasurement):
+ def __init__(self, options):
+ super(TraceMapperBasedMeasurement, self).__init__(options)
+ assert isinstance(options, Options)
+ assert self._options.trace_mapper_handlers, (
+ 'Must specify at least a trace mapper')
+
+ def ComputeMetricsForTrace(self, trace_result, results):
+ """Collect all possible metrics and added them to results."""
+ temp_dir = tempfile.mkdtemp()
+ trace_file_path = os.path.join(temp_dir, 'trace.json')
+ try:
+ with open(trace_file_path, 'w') as f:
+ trace_result.Serialize(f)
+ for mapper_handler in self._options.trace_mapper_handlers:
+ MapTrace(trace_file_path, mapper_handler, results)
+ finally:
+ shutil.rmtree(temp_dir)
+
+
+def MapTrace(trace_file_path, trace_mapper_handler, results):
+ run_info = run_info_module.RunInfo(
+ results.current_page.url)
+ map_function_handle = map_function_handle_module.MapFunctionHandle(
+ filename=trace_mapper_handler.trace_mapper_path)
+ trace_handle = local_file_trace_handle.LocalFileTraceHandle(
+ run_info, trace_file_path)
+ pi_results = pi_results_module.Results()
+ map_single_trace.MapSingleTrace(pi_results, trace_handle, map_function_handle)
+ trace_mapper_handler.AddResults(pi_results, results.current_page, results)

Powered by Google App Engine
This is Rietveld 408576698