blob: d2a93dcd0f619c661d5ac6a2a8bff72c668d944b [file] [log] [blame]
# 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.
import unittest
from collections import namedtuple
from telemetry.internal.results import page_test_results
from telemetry.page import page
from telemetry.web_perf.metrics import jitter_timeline
from telemetry.web_perf import timeline_interaction_record
FakeEvent = namedtuple('Event', 'name, start, end, thread_duration, args')
Interaction = timeline_interaction_record.TimelineInteractionRecord
TEST_INTERACTION_LABEL = 'Action_TestInteraction'
JITTER_EVENT_NAME = 'jitter'
def GetJitterMetrics(events, interactions):
results = page_test_results.PageTestResults()
test_page = page.Page('file://blank.html')
results.WillRunPage(test_page)
jitter_timeline.JitterTimelineMetric()._AddJitterResultsInternal(
events, interactions, results)
return_dict = dict((value.name, value.values) for value in
results.current_page_run.values)
results.DidRunPage(test_page)
return return_dict
def FakeJitterEvent(start, end, value, thread_duration=None):
if not thread_duration:
thread_duration = end - start
return FakeEvent(jitter_timeline.JITTER_EVENT_NAME,
start, end, thread_duration, {'value':value})
def TestInteraction(start, end):
return Interaction(TEST_INTERACTION_LABEL, start, end)
class JitterTimelineMetricUnitTest(unittest.TestCase):
def testJitterMetric(self):
events = [FakeJitterEvent(0, 1, 10),
FakeJitterEvent(5, 10, 5),
FakeJitterEvent(15, 34, 45)]
interactions = [TestInteraction(4, 14)]
# The first and the last event do not start during the interaction, so
# they are ignored. The second event starts during the interaction, and its
# value is 5.
self.assertEqual({'jitter-amount': [5]},
GetJitterMetrics(events, interactions))