def testSmoothness(self): ps = self.CreateStorySetFromFileInUnittestDataDir( 'scrollable_page.html') measurement = smoothness.Smoothness() results = self.RunMeasurement(measurement, ps, options=self._options) self.assertEquals(0, len(results.failures)) frame_times = results.FindAllPageSpecificValuesNamed('frame_times') self.assertEquals(len(frame_times), 1) self.assertGreater(frame_times[0].GetRepresentativeNumber(), 0) mean_frame_time = results.FindAllPageSpecificValuesNamed( 'mean_frame_time') self.assertEquals(len(mean_frame_time), 1) self.assertGreater(mean_frame_time[0].GetRepresentativeNumber(), 0) frame_time_discrepancy = results.FindAllPageSpecificValuesNamed( 'frame_time_discrepancy') self.assertEquals(len(frame_time_discrepancy), 1) self.assertGreater(frame_time_discrepancy[0].GetRepresentativeNumber(), 0) percentage_smooth = results.FindAllPageSpecificValuesNamed( 'percentage_smooth') self.assertEquals(len(percentage_smooth), 1) self.assertGreaterEqual(percentage_smooth[0].GetRepresentativeNumber(), 0) mean_input_event_latency = results.FindAllPageSpecificValuesNamed( 'mean_input_event_latency') if mean_input_event_latency: self.assertEquals(len(mean_input_event_latency), 1) self.assertGreater( mean_input_event_latency[0].GetRepresentativeNumber(), 0)
def testSyntheticDelayConfiguration(self): test_page = page.Page('http://dummy', None) test_page.synthetic_delays = { 'cc.BeginMainFrame': { 'target_duration': 0.012 }, 'cc.DrawAndSwap': { 'target_duration': 0.012, 'mode': 'alternating' }, 'gpu.PresentingFrame': { 'target_duration': 0.012 } } tab = FakeTab() measurement = smoothness.Smoothness() measurement.WillStartBrowser(tab.browser.platform) measurement.WillNavigateToPage(test_page, tab) expected_synthetic_delay = set([ 'DELAY(cc.BeginMainFrame;0.012000;static)', 'DELAY(cc.DrawAndSwap;0.012000;alternating)', 'DELAY(gpu.PresentingFrame;0.012000;static)', ]) config = tab.browser.platform.tracing_controller.config actual_synthetic_delay = ( config.chrome_trace_config.category_filter.synthetic_delays) if expected_synthetic_delay != actual_synthetic_delay: sys.stderr.write('Expected category filter: %s\n' % repr(expected_synthetic_delay)) sys.stderr.write('Actual category filter filter: %s\n' % repr(actual_synthetic_delay)) self.assertEquals(expected_synthetic_delay, actual_synthetic_delay)
def testSyntheticDelayConfiguration(self): test_page = page.Page('http://dummy', None) test_page.synthetic_delays = { 'cc.BeginMainFrame': { 'target_duration': 0.012 }, 'cc.DrawAndSwap': { 'target_duration': 0.012, 'mode': 'alternating' }, 'gpu.PresentingFrame': { 'target_duration': 0.012 } } tab = FakeTab() measurement = smoothness.Smoothness() measurement.WillRunActions(test_page, tab) expected_category_filter = [ 'DELAY(cc.BeginMainFrame;0.012000;static)', 'DELAY(cc.DrawAndSwap;0.012000;alternating)', 'DELAY(gpu.PresentingFrame;0.012000;static)', 'benchmark', 'webkit.console' ] actual_category_filter = tab.browser.category_filter.split(',') actual_category_filter.sort() if expected_category_filter != actual_category_filter: sys.stderr.write("Expected category filter: %s\n" % repr(expected_category_filter)) sys.stderr.write("Actual category filter filter: %s\n" % repr(actual_category_filter)) self.assertEquals(expected_category_filter, actual_category_filter)
def testSyntheticDelayConfiguration(self): test_page = page.Page('http://dummy', None) test_page.synthetic_delays = { 'cc.BeginMainFrame': { 'target_duration': 0.012 }, 'cc.DrawAndSwap': { 'target_duration': 0.012, 'mode': 'alternating' }, 'gpu.PresentingFrame': { 'target_duration': 0.012 } } tab = FakeTab() measurement = smoothness.Smoothness() measurement.WillStartBrowser(tab.browser.platform) measurement.WillNavigateToPage(test_page, tab) measurement.WillRunActions(test_page, tab) expected_category_filter = set([ 'DELAY(cc.BeginMainFrame;0.012000;static)', 'DELAY(cc.DrawAndSwap;0.012000;alternating)', 'DELAY(gpu.PresentingFrame;0.012000;static)', 'benchmark' ]) tracing_controller = tab.browser.platform.tracing_controller actual_category_filter = ( tracing_controller.category_filter.included_categories) # FIXME: Put blink.console into the expected above and remove these two # remove entries when the blink.console change has rolled into chromium. actual_category_filter.remove('webkit.console') actual_category_filter.remove('blink.console') if expected_category_filter != actual_category_filter: sys.stderr.write("Expected category filter: %s\n" % repr(expected_category_filter)) sys.stderr.write("Actual category filter filter: %s\n" % repr(actual_category_filter)) self.assertEquals(expected_category_filter, actual_category_filter)
def testRepaint(self): ps = self.CreateEmptyPageSet() ps.AddStory(TestRepaintPage(ps, ps.base_dir)) measurement = smoothness.Smoothness() results = self.RunMeasurement(measurement, ps, options=self._options) self.assertEquals(0, len(results.failures)) frame_times = results.FindAllPageSpecificValuesNamed('frame_times') self.assertEquals(len(frame_times), 1) self.assertGreater(frame_times[0].GetRepresentativeNumber(), 0) mean_frame_time = results.FindAllPageSpecificValuesNamed('mean_frame_time') self.assertEquals(len(mean_frame_time), 1) self.assertGreater(mean_frame_time[0].GetRepresentativeNumber(), 0) frame_time_discrepancy = results.FindAllPageSpecificValuesNamed( 'frame_time_discrepancy') self.assertEquals(len(frame_time_discrepancy), 1) self.assertGreater(frame_time_discrepancy[0].GetRepresentativeNumber(), 0) percentage_smooth = results.FindAllPageSpecificValuesNamed( 'percentage_smooth') self.assertEquals(len(percentage_smooth), 1) self.assertGreaterEqual(percentage_smooth[0].GetRepresentativeNumber(), 0) # Make sure that we don't have extra timeline based metrics that are not # related to smoothness. mainthread_jank = results.FindAllPageSpecificValuesNamed( 'responsive-total_big_jank_thread_time') self.assertEquals(len(mainthread_jank), 0)
def testSmoothness(self): ps = self.CreatePageSetFromFileInUnittestDataDir('scrollable_page.html') measurement = smoothness.Smoothness() results = self.RunMeasurement(measurement, ps, options=self._options) self.assertEquals(0, len(results.failures)) frame_times = results.FindAllPageSpecificValuesNamed('frame_times') self.assertEquals(len(frame_times), 1) self.assertGreater(frame_times[0].GetRepresentativeNumber(), 0) mean_frame_time = results.FindAllPageSpecificValuesNamed('mean_frame_time') self.assertEquals(len(mean_frame_time), 1) self.assertGreater(mean_frame_time[0].GetRepresentativeNumber(), 0) jank = results.FindAllPageSpecificValuesNamed('jank') self.assertEquals(len(jank), 1) self.assertGreater(jank[0].GetRepresentativeNumber(), 0) mostly_smooth = results.FindAllPageSpecificValuesNamed('mostly_smooth') self.assertEquals(len(mostly_smooth), 1) self.assertGreaterEqual(mostly_smooth[0].GetRepresentativeNumber(), 0) mean_mouse_wheel_latency = results.FindAllPageSpecificValuesNamed( 'mean_mouse_wheel_latency') if mean_mouse_wheel_latency: self.assertEquals(len(mean_mouse_wheel_latency), 1) self.assertGreater( mean_mouse_wheel_latency[0].GetRepresentativeNumber(), 0) mean_touch_scroll_latency = results.FindAllPageSpecificValuesNamed( 'mean_touch_scroll_latency') if mean_touch_scroll_latency: self.assertEquals(len(mean_touch_scroll_latency), 1) self.assertGreater( mean_touch_scroll_latency[0].GetRepresentativeNumber(), 0)
def testSyntheticDelayConfiguration(self): test_page = page.Page('http://dummy', None) test_page.synthetic_delays = { 'cc.BeginMainFrame': { 'target_duration': 0.012 }, 'cc.DrawAndSwap': { 'target_duration': 0.012, 'mode': 'alternating' }, 'gpu.SwapBuffers': { 'target_duration': 0.012 } } tab = FakeTab() measurement = smoothness.Smoothness() measurement.WillRunActions(test_page, tab) expected_category_filter = [ 'DELAY(cc.BeginMainFrame;0.012000;static)', 'DELAY(cc.DrawAndSwap;0.012000;alternating)', 'DELAY(gpu.SwapBuffers;0.012000;static)', 'benchmark', 'webkit.console' ] self.assertEquals(expected_category_filter, sorted(tab.browser.category_filter.split(',')))
def testSmoothness(self): ps = self.CreateStorySetFromFileInUnittestDataDir( 'scrollable_page.html') measurement = smoothness.Smoothness() results = self.RunMeasurement(measurement, ps, options=self._options) self.assertFalse(results.had_failures) stat = rendering_util.ExtractStat(results) self.assertGreater(stat['frame_times'].mean, 0) self.assertGreaterEqual(stat['percentage_smooth'].mean, 0)
def testSmoothnessForPageWithNoGesture(self): ps = self.CreateEmptyPageSet() ps.AddPage(AnimatedPage(ps)) measurement = smoothness.Smoothness() results = self.RunMeasurement(measurement, ps, options=self._options) self.assertEquals(0, len(results.failures)) mostly_smooth = results.FindAllPageSpecificValuesNamed('mostly_smooth') self.assertEquals(len(mostly_smooth), 1) self.assertGreaterEqual(mostly_smooth[0].GetRepresentativeNumber(), 0)
def testSmoothnessSurfaceFlingerMetricsCalculated(self): ps = self.CreateStorySetFromFileInUnittestDataDir( 'scrollable_page.html') measurement = smoothness.Smoothness() results = self.RunMeasurement(measurement, ps, options=self._options) self.assertFalse(results.had_failures) stat = rendering_util.ExtractStat(results) self.assertGreater(stat['avg_surface_fps'].mean, 0) self.assertGreater(stat['jank_count'].mean, -1) self.assertGreater(stat['frame_lengths'].mean, 0)
def testSmoothness(self): ps = self.CreateStorySetFromFileInUnittestDataDir('scrollable_page.html') measurement = smoothness.Smoothness() results = self.RunMeasurement(measurement, ps, options=self._options) self.assertFalse(results.had_failures) frame_times = results.FindAllPageSpecificValuesNamed('frame_times') self.assertEquals(len(frame_times), 1) self.assertGreater(frame_times[0].GetRepresentativeNumber(), 0) percentage_smooth = results.FindAllPageSpecificValuesNamed( 'percentage_smooth') self.assertEquals(len(percentage_smooth), 1) self.assertGreaterEqual(percentage_smooth[0].GetRepresentativeNumber(), 0)
def testSmoothnessWithTimelineMetric(self): ps = self.CreatePageSetFromFileInUnittestDataDir( 'scrollable_page.html') measurement = smoothness.Smoothness() timeline_options = self._options timeline_options.metric = 'timeline' results = self.RunMeasurement(measurement, ps, options=timeline_options) self.assertEquals(0, len(results.failures)) for category in timeline.TimelineThreadCategories.values(): clock_time_name = timeline.ThreadTimePercentageName(category) clock_time = results.FindAllPageSpecificValuesNamed( clock_time_name) self.assertEquals(len(clock_time), 1) cpu_time_name = timeline.ThreadCPUTimePercentageName(category) cpu_time = results.FindAllPageSpecificValuesNamed(cpu_time_name) self.assertEquals(len(cpu_time), 1)
def testSmoothnessSurfaceFlingerMetricsCalculated(self): ps = self.CreatePageSetFromFileInUnittestDataDir('scrollable_page.html') measurement = smoothness.Smoothness() results = self.RunMeasurement(measurement, ps, options=self._options) self.assertEquals(0, len(results.failures)) avg_surface_fps = results.FindAllPageSpecificValuesNamed('avg_surface_fps') self.assertEquals(1, len(avg_surface_fps)) self.assertGreater(avg_surface_fps[0].GetRepresentativeNumber, 0) jank_count = results.FindAllPageSpecificValuesNamed('jank_count') self.assertEquals(1, len(jank_count)) self.assertGreater(jank_count[0].GetRepresentativeNumber(), -1) max_frame_delay = results.FindAllPageSpecificValuesNamed('max_frame_delay') self.assertEquals(1, len(max_frame_delay)) self.assertGreater(max_frame_delay[0].GetRepresentativeNumber, 0) frame_lengths = results.FindAllPageSpecificValuesNamed('frame_lengths') self.assertEquals(1, len(frame_lengths)) self.assertGreater(frame_lengths[0].GetRepresentativeNumber, 0)