Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / tools / telemetry / telemetry / web_perf / metrics / fast_metric_unittest.py
index 0419bec..3bd2ca9 100644 (file)
@@ -34,6 +34,12 @@ class RendererThreadHelper(object):
         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()
@@ -86,8 +92,16 @@ class FastMetricTests(unittest.TestCase):
     expected_values = [
         ('fast-cpu_time', 'ms', 3),  # 54 - 51; thread overlap
         ('fast-duration', 'ms', 37),  # total interaction wall duration
-        ('fast-idle_time', 'ms', 29),  # 37 - ((5 + 35) - 32); interaction wall
+        ('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))
 
@@ -108,8 +122,16 @@ class FastMetricTests(unittest.TestCase):
     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),  # 37 - ((5 + 35) - 32); interaction wall
+        ('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',
@@ -136,7 +158,59 @@ class FastMetricTests(unittest.TestCase):
     expected_values = [
         ('fast-cpu_time', 'ms', 44),  # thread overlap
         ('fast-duration', 'ms', 54),  # 27 + 27; total interaction wall duration
-        ('fast-idle_time', 'ms', 18),  # 27 - ((2 + 45) - 45); interaction wall
+        ('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))