1a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)# Copyright 2014 The Chromium Authors. All rights reserved.
2a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be
3a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)# found in the LICENSE file.
4a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
5a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)from measurements import repaint
6a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)from telemetry.core import wpr_modes
75c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liufrom telemetry.page import page as page_module
8a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)from telemetry.unittest import options_for_unittests
96e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)from telemetry.unittest import page_test_test_case
10116680a4aac90f2aa7413d9095a592090648e557Ben Murdochfrom telemetry.unittest import test
11a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
12a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
13010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)class TestRepaintPage(page_module.Page):
145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  def __init__(self, page_set, base_dir):
155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    super(TestRepaintPage, self).__init__('file://blank.html',
165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                                          page_set, base_dir)
175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  def RunRepaint(self, action_runner):
19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    action_runner.RepaintContinuously(seconds=2)
205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class RepaintUnitTest(page_test_test_case.PageTestTestCase):
23a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  """Smoke test for repaint measurement
24a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
25a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)     Runs repaint measurement on a simple page and verifies
26a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)     that all metrics were added to the results. The test is purely functional,
27a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)     i.e. it only checks if the metrics are present and non-zero.
28a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  """
29a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
30a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  def setUp(self):
31a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    self._options = options_for_unittests.GetCopy()
32a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    self._options.browser_options.wpr_mode = wpr_modes.WPR_OFF
33a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
34a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  def testRepaint(self):
355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    ps = self.CreateEmptyPageSet()
365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    ps.AddPage(TestRepaintPage(ps, ps.base_dir))
37a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    measurement = repaint.Repaint()
38a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    results = self.RunMeasurement(measurement, ps, options=self._options)
39a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    self.assertEquals(0, len(results.failures))
40a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
41a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    frame_times = results.FindAllPageSpecificValuesNamed('frame_times')
42a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    self.assertEquals(len(frame_times), 1)
43a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    self.assertGreater(frame_times[0].GetRepresentativeNumber(), 0)
44a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
45a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    mean_frame_time = results.FindAllPageSpecificValuesNamed('mean_frame_time')
46a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    self.assertEquals(len(mean_frame_time), 1)
47a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    self.assertGreater(mean_frame_time[0].GetRepresentativeNumber(), 0)
48a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
49a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    jank = results.FindAllPageSpecificValuesNamed('jank')
50a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    self.assertEquals(len(jank), 1)
51a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    self.assertGreater(jank[0].GetRepresentativeNumber(), 0)
52a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
53a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    mostly_smooth = results.FindAllPageSpecificValuesNamed('mostly_smooth')
54a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    self.assertEquals(len(mostly_smooth), 1)
55a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    self.assertGreaterEqual(mostly_smooth[0].GetRepresentativeNumber(), 0)
56effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
570529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  @test.Disabled('android')
58effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  def testCleanUpTrace(self):
59effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    self.TestTracingCleanedUp(repaint.Repaint, self._options)
60