| Index: tools/telemetry/examples/benchmarks/message_loop_metric.py
|
| diff --git a/tools/telemetry/examples/benchmarks/message_loop_metric.py b/tools/telemetry/examples/benchmarks/message_loop_metric.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..881eb3a6af7a5fdd2f71bde47b1e1cad24265c43
|
| --- /dev/null
|
| +++ b/tools/telemetry/examples/benchmarks/message_loop_metric.py
|
| @@ -0,0 +1,39 @@
|
| +# 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.
|
| +
|
| +from telemetry.value import improvement_direction
|
| +from telemetry.value import scalar
|
| +from telemetry.web_perf.metrics import timeline_based_metric
|
| +
|
| +def _IsMessageLoopEvent(event):
|
| + return event.name.startswith('MessageLoop')
|
| +
|
| +
|
| +class _AverageMessageLoopLatency(scalar.ScalarValue):
|
| + def __init__(self, value, page, none_value_reason=None):
|
| + super(_AverageMessageLoopLatency, self).__init__(
|
| + page=page, name='avg_message_loop_events_latency', value=value,
|
| + units='ms', improvement_direction=improvement_direction.DOWN,
|
| + description=('Average wall-time latency of message loop events during '
|
| + 'any of the interaction records\' time ranges'),
|
| + none_value_reason=none_value_reason)
|
| +
|
| +
|
| +class MessageLoopLatencyMetric(timeline_based_metric.TimelineBasedMetric):
|
| +
|
| + def AddResults(self, model, renderer_thread, interactions, results):
|
| + message_loop_events = []
|
| + for event in model.IterAllEvents(event_predicate=_IsMessageLoopEvent):
|
| + if timeline_based_metric.IsEventInInteractions(event, interactions):
|
| + message_loop_events.append(event)
|
| +
|
| + if message_loop_events:
|
| + avg = (
|
| + sum(e.duration for e in message_loop_events)/len(message_loop_events))
|
| + results.AddValue(_AverageMessageLoopLatency(
|
| + value=avg, page=results.current_page))
|
| + else:
|
| + results.AddValue(_AverageMessageLoopLatency(
|
| + None, page=results.current_page,
|
| + none_value_reason='No message loop events found.'))
|
|
|