OLD | NEW |
1 # Copyright 2013 The Chromium Authors. All rights reserved. | 1 # Copyright 2013 The Chromium Authors. All rights reserved. |
2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
4 import unittest | 4 import unittest |
5 | 5 |
6 from metrics import smoothness | 6 from metrics import smoothness |
7 from telemetry.page import page | 7 from telemetry.page import page |
8 from telemetry.page.page_measurement_results import PageMeasurementResults | 8 from telemetry.page.page_measurement_results import PageMeasurementResults |
9 | 9 |
10 class SmoothnessMetricsUnitTest(unittest.TestCase): | 10 class SmoothnessMetricsUnitTest(unittest.TestCase): |
11 | 11 |
12 def testCalcResultsFromRAFRenderStats(self): | 12 def testCalcResultsFromRAFRenderStats(self): |
13 rendering_stats = {'droppedFrameCount': 5, | 13 # Create mock BenchmarkStats |
14 'totalTimeInSeconds': 1, | 14 stats = {'total_time': 1, |
15 'numAnimationFrames': 10, | 15 'screen_frame_count': 10, |
16 'numFramesSentToScreen': 10} | 16 'dropped_frame_count': 5, |
| 17 'impl_thread_scroll_count': 0, |
| 18 'main_thread_scroll_count': 0, |
| 19 'drawn_layers_count': 0, |
| 20 'missing_tile_count': 0, |
| 21 'texture_upload_count': 0, |
| 22 'texture_upload_time': 0, |
| 23 'commit_count': 0, |
| 24 'commit_time': 0, |
| 25 'deferred_image_decode_count': 0, |
| 26 'deferred_image_decode_time': 0, |
| 27 'deferred_image_cache_hits': 0, |
| 28 'image_gathering_count': 0, |
| 29 'image_gathering_time': 0, |
| 30 'tile_analysis_count': 0, |
| 31 'tile_analysis_time': 0, |
| 32 'solid_color_tile_analysis_count': 0, |
| 33 'input_event_count': 0, |
| 34 'input_event_latency': 0, |
| 35 'touch_ui_count': 0, |
| 36 'touch_ui_latency': 0, |
| 37 'touch_acked_count': 0, |
| 38 'touch_acked_latency': 0, |
| 39 'scroll_update_count': 0, |
| 40 'scroll_update_latency': 0} |
| 41 |
17 res = PageMeasurementResults() | 42 res = PageMeasurementResults() |
18 res.WillMeasurePage(page.Page('http://foo.com/', None)) | 43 res.WillMeasurePage(page.Page('http://foo.com/', None)) |
19 smoothness.CalcScrollResults(rendering_stats, res) | 44 smoothness.CalcResults(stats, res) |
20 res.DidMeasurePage() | 45 res.DidMeasurePage() |
21 self.assertEquals(50, res.page_results[0]['dropped_percent'].value) | 46 self.assertEquals(50, res.page_results[0]['dropped_percent'].value) |
22 self.assertAlmostEquals( | 47 self.assertAlmostEquals( |
23 100, | 48 100, |
24 res.page_results[0]['mean_frame_time'].value, 2) | 49 res.page_results[0]['mean_frame_time'].value, 2) |
25 | 50 |
26 def testCalcResultsRealRenderStats(self): | 51 def testCalcResultsRealRenderStats(self): |
27 rendering_stats = {'numFramesSentToScreen': 60, | 52 # Create mock BenchmarkStats |
28 'globalTotalTextureUploadTimeInSeconds': 0, | 53 stats = {'total_time': 1.0, |
29 'totalProcessingCommandsTimeInSeconds': 0, | 54 'screen_frame_count': 100, |
30 'globalTextureUploadCount': 0, | 55 'dropped_frame_count': 20, |
31 'droppedFrameCount': 0, | 56 'impl_thread_scroll_count': 50, |
32 'textureUploadCount': 0, | 57 'main_thread_scroll_count': 50, |
33 'numAnimationFrames': 10, | 58 'drawn_layers_count': 240, |
34 'totalPaintTimeInSeconds': 0.35374299999999986, | 59 'missing_tile_count': 10, |
35 'globalTotalProcessingCommandsTimeInSeconds': 0, | 60 'texture_upload_count': 120, |
36 'totalTextureUploadTimeInSeconds': 0, | 61 'texture_upload_time': 1.2, |
37 'totalRasterizeTimeInSeconds': 0, | 62 'commit_count': 130, |
38 'totalTimeInSeconds': 1.0} | 63 'commit_time': 1.3, |
| 64 'deferred_image_decode_count': 140, |
| 65 'deferred_image_decode_time': 1.4, |
| 66 'deferred_image_cache_hits': 30, |
| 67 'image_gathering_count': 150, |
| 68 'image_gathering_time': 1.5, |
| 69 'tile_analysis_count': 160, |
| 70 'tile_analysis_time': 1.6, |
| 71 'solid_color_tile_analysis_count': 40, |
| 72 'input_event_count': 170, |
| 73 'input_event_latency': 1.7, |
| 74 'touch_ui_count': 180, |
| 75 'touch_ui_latency': 1.8, |
| 76 'touch_acked_count': 190, |
| 77 'touch_acked_latency': 1.9, |
| 78 'scroll_update_count': 200, |
| 79 'scroll_update_latency': 2.0} |
| 80 |
39 res = PageMeasurementResults() | 81 res = PageMeasurementResults() |
40 res.WillMeasurePage(page.Page('http://foo.com/', None)) | 82 res.WillMeasurePage(page.Page('http://foo.com/', None)) |
41 smoothness.CalcScrollResults(rendering_stats, res) | 83 smoothness.CalcResults(stats, res) |
42 res.DidMeasurePage() | 84 res.DidMeasurePage() |
43 self.assertEquals(0, res.page_results[0]['dropped_percent'].value) | 85 |
| 86 # Scroll Results |
44 self.assertAlmostEquals( | 87 self.assertAlmostEquals( |
45 1000 / 60., | 88 1.0 / 100.0 * 1000.0, |
46 res.page_results[0]['mean_frame_time'].value, 2) | 89 res.page_results[0]['mean_frame_time'].value, 2) |
| 90 self.assertAlmostEquals( |
| 91 20.0 / 100.0 * 100.0, |
| 92 res.page_results[0]['dropped_percent'].value) |
| 93 self.assertAlmostEquals( |
| 94 50.0 / (50.0 + 50.0) * 100.0, |
| 95 res.page_results[0]['percent_impl_scrolled'].value) |
| 96 self.assertAlmostEquals( |
| 97 240.0 / 100.0, |
| 98 res.page_results[0]['average_num_layers_drawn'].value) |
| 99 self.assertAlmostEquals( |
| 100 10.0 / 100.0, |
| 101 res.page_results[0]['average_num_missing_tiles'].value) |
| 102 |
| 103 # Texture Upload Results |
| 104 self.assertAlmostEquals( |
| 105 1.3 / 130.0 * 1000.0, |
| 106 res.page_results[0]['average_commit_time'].value) |
| 107 self.assertEquals( |
| 108 120, |
| 109 res.page_results[0]['texture_upload_count'].value) |
| 110 self.assertEquals( |
| 111 1.2, |
| 112 res.page_results[0]['total_texture_upload_time'].value) |
| 113 |
| 114 # Image Decoding Results |
| 115 self.assertEquals( |
| 116 140, |
| 117 res.page_results[0]['total_deferred_image_decode_count'].value) |
| 118 self.assertEquals( |
| 119 30, |
| 120 res.page_results[0]['total_image_cache_hit_count'].value) |
| 121 self.assertAlmostEquals( |
| 122 1.5 / 150.0 * 1000.0, |
| 123 res.page_results[0]['average_image_gathering_time'].value) |
| 124 self.assertEquals( |
| 125 1.4, |
| 126 res.page_results[0]['total_deferred_image_decoding_time'].value) |
| 127 |
| 128 # Tile Analysis Results |
| 129 self.assertEquals( |
| 130 160, |
| 131 res.page_results[0]['total_tiles_analyzed'].value) |
| 132 self.assertEquals( |
| 133 40, |
| 134 res.page_results[0]['solid_color_tiles_analyzed'].value) |
| 135 self.assertAlmostEquals( |
| 136 1.6 / 160.0 * 1000.0, |
| 137 res.page_results[0]['average_tile_analysis_time'].value) |
| 138 |
| 139 # Latency Results |
| 140 self.assertAlmostEquals( |
| 141 1.7 / 170.0 * 1000.0, |
| 142 res.page_results[0]['average_latency'].value) |
| 143 self.assertAlmostEquals( |
| 144 1.8 / 180.0 * 1000.0, |
| 145 res.page_results[0]['average_touch_ui_latency'].value) |
| 146 self.assertAlmostEquals( |
| 147 1.9 / 190.0 * 1000.0, |
| 148 res.page_results[0]['average_touch_acked_latency'].value) |
| 149 self.assertAlmostEquals( |
| 150 2.0 / 200.0 * 1000.0, |
| 151 res.page_results[0]['average_scroll_update_latency'].value) |
OLD | NEW |