Index: tools/telemetry/telemetry/web_perf/timeline_based_measurement.py |
diff --git a/tools/telemetry/telemetry/web_perf/timeline_based_measurement.py b/tools/telemetry/telemetry/web_perf/timeline_based_measurement.py |
index 017bf080e393c75f10f2eb6a7286795a731db11d..267ef00307c5dd6a6bdad662462c3610141ac20a 100644 |
--- a/tools/telemetry/telemetry/web_perf/timeline_based_measurement.py |
+++ b/tools/telemetry/telemetry/web_perf/timeline_based_measurement.py |
@@ -12,6 +12,7 @@ from telemetry.value import trace |
from telemetry.web_perf import timeline_interaction_record as tir_module |
from telemetry.web_perf.metrics import responsiveness_metric |
from telemetry.web_perf.metrics import smoothness |
+from telemetry.web_perf.metrics import layout |
# TimelineBasedMeasurement considers all instrumentation as producing a single |
# timeline. But, depending on the amount of instrumentation that is enabled, |
@@ -27,23 +28,18 @@ ALL_OVERHEAD_LEVELS = [ |
DEBUG_OVERHEAD_LEVEL |
] |
-DEFAULT_METRICS = { |
- tir_module.IS_SMOOTH: smoothness.SmoothnessMetric, |
- tir_module.IS_RESPONSIVE: responsiveness_metric.ResponsivenessMetric, |
-} |
-class InvalidInteractions(Exception): |
- pass |
+def _GetAllTimelineBasedMetrics(): |
+ # TODO(nednguyen): use discovery pattern to return all the instances of |
+ # all TimelineBasedMetrics class in web_perf/metrics/ folder. |
+ # This cannot be done until crbug.com/460208 is fixed. |
+ return (smoothness.SmoothnessMetric(), |
+ responsiveness_metric.ResponsivenessMetric(), |
+ layout.LayoutMetric()) |
-def _GetMetricsFromFlags(record_custom_flags): |
- flags_set = set(record_custom_flags) |
- unknown_flags = flags_set.difference(DEFAULT_METRICS) |
- if unknown_flags: |
- raise Exception("Unknown metric flags: %s" % sorted(unknown_flags)) |
- |
- return [metric() for flag, metric in DEFAULT_METRICS.iteritems() |
- if flag in flags_set] |
+class InvalidInteractions(Exception): |
+ pass |
# TODO(nednguyen): Get rid of this results wrapper hack after we add interaction |
@@ -86,13 +82,10 @@ def _GetRendererThreadsToInteractionRecordsMap(model): |
class _TimelineBasedMetrics(object): |
- def __init__(self, model, renderer_thread, interaction_records, |
- get_metrics_from_flags_callback): |
+ def __init__(self, model, renderer_thread, interaction_records): |
self._model = model |
self._renderer_thread = renderer_thread |
self._interaction_records = interaction_records |
- self._get_metrics_from_flags_callback = \ |
- get_metrics_from_flags_callback |
def AddResults(self, results): |
interactions_by_label = defaultdict(list) |
@@ -118,8 +111,7 @@ class _TimelineBasedMetrics(object): |
raise InvalidInteractions('Interaction records with the same logical ' |
'name must have the same flags.') |
- metrics_list = self._get_metrics_from_flags_callback(records_custom_flags) |
- for metric in metrics_list: |
+ for metric in _GetAllTimelineBasedMetrics(): |
metric.AddResults(self._model, self._renderer_thread, |
interactions, wrapped_results) |
@@ -131,8 +123,7 @@ class Options(object): |
Benchmark.CreateTimelineBasedMeasurementOptions. |
""" |
- def __init__(self, overhead_level=NO_OVERHEAD_LEVEL, |
- get_metrics_from_flags_callback=_GetMetricsFromFlags): |
+ def __init__(self, overhead_level=NO_OVERHEAD_LEVEL): |
"""As the amount of instrumentation increases, so does the overhead. |
The user of the measurement chooses the overhead level that is appropriate, |
and the tracing is filtered accordingly. |
@@ -140,9 +131,6 @@ class Options(object): |
overhead_level: Can either be a custom TracingCategoryFilter object or |
one of NO_OVERHEAD_LEVEL, MINIMAL_OVERHEAD_LEVEL or |
DEBUG_OVERHEAD_LEVEL. |
- get_metrics_from_flags_callback: Callback function which returns a |
- a list of metrics based on timeline record flags. See the default |
- _GetMetricsFromFlags() as an example. |
""" |
if (not isinstance(overhead_level, |
tracing_category_filter.TracingCategoryFilter) and |
@@ -153,7 +141,6 @@ class Options(object): |
self._overhead_level = overhead_level |
self._extra_category_filters = [] |
- self._get_metrics_from_flags_callback = get_metrics_from_flags_callback |
def ExtendTraceCategoryFilters(self, filters): |
self._extra_category_filters.extend(filters) |
@@ -166,10 +153,6 @@ class Options(object): |
def overhead_level(self): |
return self._overhead_level |
- @property |
- def get_metrics_from_flags_callback(self): |
- return self._get_metrics_from_flags_callback |
- |
class TimelineBasedMeasurement(object): |
"""Collects multiple metrics based on their interaction records. |
@@ -244,8 +227,7 @@ class TimelineBasedMeasurement(object): |
for renderer_thread, interaction_records in ( |
threads_to_records_map.iteritems()): |
meta_metrics = _TimelineBasedMetrics( |
- model, renderer_thread, interaction_records, |
- self._tbm_options.get_metrics_from_flags_callback) |
+ model, renderer_thread, interaction_records) |
meta_metrics.AddResults(results) |
def DidRunUserStory(self, tracing_controller): |