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

Unified Diff: tools/telemetry/telemetry/web_perf/metrics/fast_metric.py

Issue 904903002: Revert of [telemetry] Add a V8GCTimes measurement and benchmarks. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 10 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/metrics/fast_metric.py
diff --git a/tools/telemetry/telemetry/web_perf/metrics/fast_metric.py b/tools/telemetry/telemetry/web_perf/metrics/fast_metric.py
new file mode 100644
index 0000000000000000000000000000000000000000..88b198918d969cc5f09a2e57c20c8f20f7b3816e
--- /dev/null
+++ b/tools/telemetry/telemetry/web_perf/metrics/fast_metric.py
@@ -0,0 +1,101 @@
+# Copyright 2014 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 logging
+
+from telemetry.timeline import bounds
+from telemetry.value import scalar
+from telemetry.web_perf import timeline_interaction_record as tir_module
+from telemetry.web_perf.metrics import timeline_based_metric
+from telemetry.web_perf.metrics import v8_stats as v8_stats_module
+
+
+class FastMetric(timeline_based_metric.TimelineBasedMetric):
+ def __init__(self):
+ super(FastMetric, self).__init__()
+
+ def AddResults(self, model, renderer_thread, interaction_records, results):
+ """Add 11 results: duration, cpu_time, and idle_time,
+ incremental_marking, incremental_marking_outside_idle,
+ scavenger, scavenger_outside_idle,
+ mark_compactor, mark_compactor_outside_idle,
+ total_garbage_collection,
+ total_garbage_collection_outside_idle
+
+ duration is the total wall time for |interaction_records|.
+ cpu_time is the renderer thread time that intersects |interaction_records|.
+ idle time is wall time for |interaction_records| for which renderer slices
+ do not overlap. Note that unscheduled renderer thread time is not
+ counted. Idle time is time for which there was nothing to do.
+ incremental_marking is the total thread duration spent in incremental
+ marking steps.
+ incremental_marking_outside_idle is the thread duration spent in incremental
+ marking steps outside of idle notifications.
+ scavenger is the total thread duration spent in scavenges.
+ scavenger_outside_idle is the thread duration spent in scavenges outside of
+ idle notifications.
+ mark_compactor is the total thread duration spent in mark-sweep-compactor.
+ mark_compactor_outside_idle is the thread duration spent in
+ mark-sweep-compactor outside of idle notifications.
+ total_garbage_collection is the total thread duration spend in garbage
+ collection
+ total_garbage_collection_outside_idle is the total thread duration spend in
+ garbage collection outside of idle notification.
+
+ Args:
+ model: a TimelineModule instance
+ renderer_thread: a telemetry.timeline.thread.Thread() instance
+ interaction_records: an iterable of TimelineInteractionRecord instances
+ results: an instance of page.PageTestResults
+ """
+ self.VerifyNonOverlappedRecords(interaction_records)
+
+ duration = sum(r.end - r.start for r in interaction_records)
+ results.AddValue(scalar.ScalarValue(
+ results.current_page, 'fast-duration', 'ms', duration))
+
+ try:
+ cpu_time = sum(
+ r.GetOverlappedThreadTimeForSlice(s)
+ for r in interaction_records
+ for s in renderer_thread.toplevel_slices)
+ except tir_module.NoThreadTimeDataException:
+ logging.warning(
+ 'Main thread cpu_time cannot be computed for records %s since '
+ 'trace does not contain thread time data.',
+ repr(interaction_records))
+ else:
+ results.AddValue(scalar.ScalarValue(
+ results.current_page, 'fast-cpu_time', 'ms', cpu_time))
+
+ idle_time = duration - sum(
+ bounds.Bounds.GetOverlap(r.start, r.end, s.start, s.end)
+ for r in interaction_records
+ for s in renderer_thread.toplevel_slices)
+ results.AddValue(scalar.ScalarValue(
+ results.current_page, 'fast-idle_time', 'ms', idle_time))
+
+ v8_stats = v8_stats_module.V8Stats(renderer_thread, interaction_records)
+
+ for event_stats in v8_stats.all_event_stats:
+ results.AddValue(scalar.ScalarValue(
+ results.current_page, 'fast-' + event_stats.result_name, 'ms',
+ event_stats.thread_duration,
+ event_stats.result_description))
+ results.AddValue(scalar.ScalarValue(
+ results.current_page,
+ 'fast-' + event_stats.result_name + '_outside_idle', 'ms',
+ event_stats.thread_duration_outside_idle,
+ event_stats.result_description + 'outside of idle notifications'))
+
+ results.AddValue(scalar.ScalarValue(
+ results.current_page, 'fast-total_garbage_collection', 'ms',
+ v8_stats.total_gc_thread_duration,
+ 'Total thread duration of all garbage collection events'))
+
+ results.AddValue(scalar.ScalarValue(
+ results.current_page, 'fast-total_garbage_collection_outside_idle',
+ 'ms', v8_stats.total_gc_thread_duration_outside_idle,
+ 'Total thread duration of all garbage collection events outside of idle'
+ 'notifications'))

Powered by Google App Engine
This is Rietveld 408576698