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

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

Issue 397663002: Addition of first_gesture_scroll_latency (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Renaming of new metric Created 6 years, 5 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/rendering_stats_unittest.py
diff --git a/tools/telemetry/telemetry/web_perf/metrics/rendering_stats_unittest.py b/tools/telemetry/telemetry/web_perf/metrics/rendering_stats_unittest.py
index 8abffc2930b55ff725e2a3cb075a19ba4bca4a2f..c0ba3fb3d20df0327b25331f7f767106eb76575e 100644
--- a/tools/telemetry/telemetry/web_perf/metrics/rendering_stats_unittest.py
+++ b/tools/telemetry/telemetry/web_perf/metrics/rendering_stats_unittest.py
@@ -6,17 +6,28 @@ import random
import unittest
from telemetry.web_perf.metrics.rendering_stats import (
- UI_COMP_NAME, BEGIN_COMP_NAME, ORIGINAL_COMP_NAME, END_COMP_NAME)
-from telemetry.web_perf.metrics.rendering_stats import ComputeInputEventLatency
-from telemetry.web_perf.metrics.rendering_stats import GetInputLatencyEvents
-from telemetry.web_perf.metrics.rendering_stats import HasRenderingStats
-from telemetry.web_perf.metrics.rendering_stats import NotEnoughFramesError
-from telemetry.web_perf.metrics.rendering_stats import RenderingStats
+ UI_COMP_NAME,
+ BEGIN_COMP_NAME,
+ ORIGINAL_COMP_NAME,
+ END_COMP_NAME,
+ GESTURE_SCROLL_UPDATE,
+ ALL_INPUT_EVENTS)
+
+from telemetry.web_perf.metrics.rendering_stats import (
+ ComputeInputEventLatency,
+ GetInputLatencyEvents,
+ HasRenderingStats,
+ NotEnoughFramesError,
+ RenderingStats,
+ GetInputEventStartAndLatency)
+
from telemetry.util.statistics import DivideIfPossibleOrZero
import telemetry.timeline.bounds as timeline_bounds
from telemetry.timeline import model
import telemetry.timeline.async_slice as tracing_async_slice
+from collections import namedtuple
+InputEventDetails = namedtuple('InputEventDetails','start_time latency')
class MockTimer(object):
"""A mock timer class which can generate random durations.
@@ -196,6 +207,15 @@ def AddInputLatencyStats(mock_timer, start_thread, end_thread,
(data[END_COMP_NAME]['time'] - data[ORIGINAL_COMP_NAME]['time']) / 1000.0)
+def assertListsAreAlmostEqual(self, list1, list2):
+ """Compare items in two lists to default (7 decimal places) precision
+ to avoid rounding errors generating false positives.
+ """
+ self.assertEquals(len(list1), len(list2))
+ for item1, item2 in zip(list1, list2):
+ self.assertAlmostEqual(item1, item2)
+
+
class RenderingStatsUnitTest(unittest.TestCase):
def testHasRenderingStats(self):
timeline = model.TimelineModel()
@@ -364,6 +384,7 @@ class RenderingStatsUnitTest(unittest.TestCase):
self.assertEquals(stats.recorded_pixel_counts,
renderer_ref_stats.recorded_pixel_counts)
+
def testInputLatencyFromTimeline(self):
timeline = model.TimelineModel()
@@ -419,5 +440,51 @@ class RenderingStatsUnitTest(unittest.TestCase):
input_events.extend(GetInputLatencyEvents(browser, timeline_range))
self.assertEquals(input_events, ref_latency.input_event)
- self.assertEquals(ComputeInputEventLatency(input_events),
- ref_latency.input_event_latency)
+
+ assertListsAreAlmostEqual(self,
+ ComputeInputEventLatency(input_events),
+ ref_latency.input_event_latency)
+
+ def testGetInputEventStartAndLatency(self):
+ data_1 = { ORIGINAL_COMP_NAME: {'time': 1000.0},
+ UI_COMP_NAME: {'time': 1000.0},
+ BEGIN_COMP_NAME: {'time': 1000.0},
+ END_COMP_NAME: {'time': 5000.0} }
+
+ data_2 = { ORIGINAL_COMP_NAME: {'time': 2000.0},
+ UI_COMP_NAME: {'time': 2000.0},
+ BEGIN_COMP_NAME: {'time': 2000.0},
+ END_COMP_NAME: {'time': 8000.0} }
+
+ timestamp = MockTimer().Get()
+
+ async_slice_GSU = tracing_async_slice.AsyncSlice(
+ 'benchmark', 'InputLatency', timestamp)
+
+ async_slice = tracing_async_slice.AsyncSlice(
+ 'benchmark', 'InputLatency', timestamp)
+
+ async_slice_GSU.args = {'data': data_1, 'step':GESTURE_SCROLL_UPDATE}
+ async_slice.args = {'data': data_2, 'step':'GeneralInput'}
+
+ input_events = []
+
+ input_events.append(async_slice_GSU)
+ input_events.append(async_slice)
+
+ filtered_GSU_events = GetInputEventStartAndLatency(input_events,
+ GESTURE_SCROLL_UPDATE)
+ self.assertEquals([InputEventDetails(1.0, 4.0)], filtered_GSU_events)
+
+ filtered_Non_GSU_events = GetInputEventStartAndLatency(input_events,
+ 'GeneralInput')
+ self.assertEquals([InputEventDetails(2.0, 6.0)], filtered_Non_GSU_events)
+
+ all_events = GetInputEventStartAndLatency(input_events, ALL_INPUT_EVENTS)
+ self.assertEquals([InputEventDetails(1.0, 4.0),
+ InputEventDetails(2.0, 6.0)], all_events)
+
+ no_events = GetInputEventStartAndLatency(input_events, "Nothing to match")
+ self.assertEquals([], no_events)
+
+

Powered by Google App Engine
This is Rietveld 408576698