Index: tools/telemetry/telemetry/web_perf/metrics/memory_timeline.py |
diff --git a/tools/telemetry/telemetry/web_perf/metrics/memory_timeline.py b/tools/telemetry/telemetry/web_perf/metrics/memory_timeline.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..028ad5210b51de4437244515d8008a7f4c821ba7 |
--- /dev/null |
+++ b/tools/telemetry/telemetry/web_perf/metrics/memory_timeline.py |
@@ -0,0 +1,40 @@ |
+# 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.timeline import memory_dump_event |
+from telemetry.value import list_of_scalar_values |
+from telemetry.web_perf.metrics import timeline_based_metric |
+ |
+ |
+REPORTED_METRICS = memory_dump_event.STATS_SUMMARY.keys() |
+ |
+ |
+class MemoryTimelineMetric(timeline_based_metric.TimelineBasedMetric): |
+ """MemoryTimelineMetric reports summary stats from memory dump events.""" |
+ |
+ def AddResults(self, model, _renderer_thread, interactions, results): |
+ def contained_in(dump, interaction): |
+ return interaction.start < dump.start and dump.end < interaction.end |
+ |
+ def with_mmaps_during_interactions(dump): |
+ return dump.has_mmaps and any(contained_in(dump, interaction) |
+ for interaction in interactions) |
+ |
+ memory_stats = [memory_dump.GetStatsSummary() |
+ for memory_dump in model.IterMemoryDumpEvents() |
+ if with_mmaps_during_interactions(memory_dump)] |
+ |
+ if memory_stats: |
+ none_reason = None |
+ else: |
+ none_reason = 'No memory dumps found during test interactions' |
+ |
+ for metric in REPORTED_METRICS: |
+ values = [d[metric] for d in memory_stats] if memory_stats else None |
+ results.AddValue(list_of_scalar_values.ListOfScalarValues( |
+ page=results.current_page, |
+ name='memory_' + metric, |
+ units='bytes', |
+ values=values, |
+ none_value_reason=none_reason)) |