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

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

Issue 898673005: [telemetry] Add a V8GCTimes measurement and benchmarks. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 11 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_unittest.py
diff --git a/tools/telemetry/telemetry/web_perf/metrics/fast_metric_unittest.py b/tools/telemetry/telemetry/web_perf/metrics/fast_metric_unittest.py
deleted file mode 100644
index 3bd2ca9b46c64d6f802030cce0ef0b646ecce58b..0000000000000000000000000000000000000000
--- a/tools/telemetry/telemetry/web_perf/metrics/fast_metric_unittest.py
+++ /dev/null
@@ -1,216 +0,0 @@
-# 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
-import StringIO
-import unittest
-
-from telemetry.results import page_test_results
-from telemetry.timeline import model as model_module
-from telemetry.timeline import async_slice
-from telemetry.web_perf import timeline_interaction_record as tir_module
-from telemetry.web_perf.metrics import fast_metric
-
-
-class RendererThreadHelper(object):
- def __init__(self, wall_start, wall_duration, thread_start, thread_duration):
- self._model = model_module.TimelineModel()
- renderer_process = self._model.GetOrCreateProcess(1)
- self._renderer_thread = renderer_process.GetOrCreateThread(2)
- self._renderer_thread.name = 'CrRendererMain'
- self._renderer_thread.BeginSlice('cat1', 'x.y', wall_start, thread_start)
- self._renderer_thread.EndSlice(wall_start + wall_duration,
- thread_start + thread_duration)
- self._async_slices = []
-
- def AddInteraction(self, logical_name='LogicalName', **kwargs):
- # Rename kwargs for AsyncSlice.
- kwargs['timestamp'] = kwargs.pop('wall_start')
- kwargs['duration'] = kwargs.pop('wall_duration')
-
- self._async_slices.append(async_slice.AsyncSlice(
- 'cat', 'Interaction.%s/is_fast' % logical_name,
- start_thread=self._renderer_thread, end_thread=self._renderer_thread,
- **kwargs))
-
- def AddEvent(self, category, name, wall_start, wall_duration, thread_start,
- thread_duration):
- self._renderer_thread.BeginSlice(category, name, wall_start, thread_start)
- self._renderer_thread.EndSlice(wall_start + wall_duration,
- thread_start + thread_duration)
-
- def MeasureFakePage(self, metric):
- self._renderer_thread.async_slices.extend(self._async_slices)
- self._model.FinalizeImport()
- interaction_records = [
- tir_module.TimelineInteractionRecord.FromAsyncEvent(s)
- for s in self._async_slices]
- results = page_test_results.PageTestResults()
- fake_page = None
- results.WillRunPage(fake_page)
- metric.AddResults(self._model, self._renderer_thread, interaction_records,
- results)
- results.DidRunPage(fake_page)
- return results
-
-
-class FastMetricTests(unittest.TestCase):
-
- def setUp(self):
- self.log_output = StringIO.StringIO()
- self.stream_handler = logging.StreamHandler(self.log_output)
- logging.getLogger().addHandler(self.stream_handler)
-
- def tearDown(self):
- logging.getLogger().removeHandler(self.stream_handler)
- self.log_output.close()
-
- def LogOutput(self):
- return self.log_output.getvalue()
-
- def ActualValues(self, results):
- return sorted(
- (v.name, v.units, v.value)
- for v in results.all_page_specific_values
- )
-
- def testAddResultsWithThreadTime(self):
- # Wall time diagram:
- # 1 2 3 4
- # 01234567890123456789012345678901234567890123456789
- # [ x.y ]
- # [ Interaction.LogicalName/is_fast ]
- renderer_thread_helper = RendererThreadHelper(
- wall_start=5, wall_duration=35, thread_start=0, thread_duration=54)
- renderer_thread_helper.AddInteraction(
- wall_start=32, wall_duration=37, thread_start=51, thread_duration=33)
-
- metric = fast_metric.FastMetric()
- results = renderer_thread_helper.MeasureFakePage(metric)
-
- expected_values = [
- ('fast-cpu_time', 'ms', 3), # 54 - 51; thread overlap
- ('fast-duration', 'ms', 37), # total interaction wall duration
- ('fast-idle_time', 'ms', 29), # (32 + 37) - (5 + 35); interaction wall
- # time outside of renderer wall time.
- ('fast-incremental_marking', 'ms', 0.0),
- ('fast-incremental_marking_outside_idle', 'ms', 0.0),
- ('fast-mark_compactor', 'ms', 0.0),
- ('fast-mark_compactor_outside_idle', 'ms', 0.0),
- ('fast-scavenger', 'ms', 0.0),
- ('fast-scavenger_outside_idle', 'ms', 0.0),
- ('fast-total_garbage_collection', 'ms', 0.0),
- ('fast-total_garbage_collection_outside_idle', 'ms', 0.0)
- ]
- self.assertEqual(expected_values, self.ActualValues(results))
-
- def testAddResultsWithoutThreadTime(self):
- # Wall time diagram:
- # 1 2 3 4
- # 01234567890123456789012345678901234567890123456789
- # [ x.y ]
- # [ Interaction.LogicalName/is_fast ]
- renderer_thread_helper = RendererThreadHelper(
- wall_start=5, wall_duration=35, thread_start=0, thread_duration=54)
- renderer_thread_helper.AddInteraction(
- wall_start=32, wall_duration=37) # no thread_start, no thread_duration
-
- metric = fast_metric.FastMetric()
- results = renderer_thread_helper.MeasureFakePage(metric)
-
- expected_values = [
- # cpu_time is skipped because there is no thread time.
- ('fast-duration', 'ms', 37), # total interaction wall duration
- ('fast-idle_time', 'ms', 29), # (32 + 37) - (5 + 35); interaction wall
- # time outside of renderer wall time.
- ('fast-incremental_marking', 'ms', 0.0),
- ('fast-incremental_marking_outside_idle', 'ms', 0.0),
- ('fast-mark_compactor', 'ms', 0.0),
- ('fast-mark_compactor_outside_idle', 'ms', 0.0),
- ('fast-scavenger', 'ms', 0.0),
- ('fast-scavenger_outside_idle', 'ms', 0.0),
- ('fast-total_garbage_collection', 'ms', 0.0),
- ('fast-total_garbage_collection_outside_idle', 'ms', 0.0)
- ]
- self.assertEqual(expected_values, self.ActualValues(results))
- self.assertIn('Main thread cpu_time cannot be computed for records',
- self.LogOutput())
-
- def testAddResultsWithMultipleInteractions(self):
- # Wall time diagram:
- # 1 2 3 4
- # 01234567890123456789012345678901234567890123456789
- # [ x.y ]
- # [ Interaction.Foo/is_fast ] [ Interaction.Bar/is_fast ]
- renderer_thread_helper = RendererThreadHelper(
- wall_start=2, wall_duration=45, thread_start=0, thread_duration=101)
- renderer_thread_helper.AddInteraction(
- logical_name='Foo',
- wall_start=6, wall_duration=27, thread_start=51, thread_duration=33)
- renderer_thread_helper.AddInteraction(
- logical_name='Bar',
- wall_start=38, wall_duration=27, thread_start=90, thread_duration=33)
-
- metric = fast_metric.FastMetric()
- results = renderer_thread_helper.MeasureFakePage(metric)
-
- expected_values = [
- ('fast-cpu_time', 'ms', 44), # thread overlap
- ('fast-duration', 'ms', 54), # 27 + 27; total interaction wall duration
- ('fast-idle_time', 'ms', 18), # (38 + 27) - (2 + 45); interaction wall
- # time outside of renderer wall time.
- ('fast-incremental_marking', 'ms', 0.0),
- ('fast-incremental_marking_outside_idle', 'ms', 0.0),
- ('fast-mark_compactor', 'ms', 0.0),
- ('fast-mark_compactor_outside_idle', 'ms', 0.0),
- ('fast-scavenger', 'ms', 0.0),
- ('fast-scavenger_outside_idle', 'ms', 0.0),
- ('fast-total_garbage_collection', 'ms', 0.0),
- ('fast-total_garbage_collection_outside_idle', 'ms', 0.0)
- ]
- self.assertEqual(expected_values, self.ActualValues(results))
-
- def testAddResultsWithGarbeCollectionEvents(self):
- # Thread time diagram:
- # 1 2 3 4 5
- # 012345678901234567890123456789012345678901234567890123456789
- # [ x.y ]
- # [ Interaction.Foo/is_fast ]
- # [ Idle ] [Idle] [Idle]
- # [ S ] [S] [ I ] [I] [MC ] [MC]
- renderer_thread_helper = RendererThreadHelper(
- wall_start=1, wall_duration=57, thread_start=1, thread_duration=57)
- renderer_thread_helper.AddInteraction(
- logical_name='Foo',
- wall_start=3, wall_duration=58, thread_start=3, thread_duration=58)
- renderer_thread_helper.AddEvent('v8', 'V8.GCIdleNotification', 3, 7, 3, 7)
- renderer_thread_helper.AddEvent('v8', 'V8.GCIdleNotification', 22, 5, 22, 5)
- renderer_thread_helper.AddEvent('v8', 'V8.GCIdleNotification', 41, 5, 41, 5)
- renderer_thread_helper.AddEvent('v8', 'V8.GCScavenger', 5, 4, 5, 4)
- renderer_thread_helper.AddEvent('v8', 'V8.GCScavenger', 15, 2, 15, 2)
- renderer_thread_helper.AddEvent('v8', 'V8.GCIncrementalMarking', 23, 4, 23,
- 4)
- renderer_thread_helper.AddEvent('v8', 'V8.GCIncrementalMarking', 34, 2, 34,
- 2)
- renderer_thread_helper.AddEvent('v8', 'V8.GCCompactor', 42, 4, 42, 4)
- renderer_thread_helper.AddEvent('v8', 'V8.GCCompactor', 52, 3, 52, 3)
-
- metric = fast_metric.FastMetric()
- results = renderer_thread_helper.MeasureFakePage(metric)
-
- expected_values = [
- ('fast-cpu_time', 'ms', 55), # thread overlap
- ('fast-duration', 'ms', 58), # total interaction wall duration
- ('fast-idle_time', 'ms', 3), # (3 + 58) - (1 + 57); interaction wall
- # time outside of renderer wall time.
- ('fast-incremental_marking', 'ms', 6.0),
- ('fast-incremental_marking_outside_idle', 'ms', 2.0),
- ('fast-mark_compactor', 'ms', 7.0),
- ('fast-mark_compactor_outside_idle', 'ms', 3.0),
- ('fast-scavenger', 'ms', 6.0),
- ('fast-scavenger_outside_idle', 'ms', 2.0),
- ('fast-total_garbage_collection', 'ms', 19.0),
- ('fast-total_garbage_collection_outside_idle', 'ms', 7.0)
- ]
- self.assertEqual(expected_values, self.ActualValues(results))

Powered by Google App Engine
This is Rietveld 408576698