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 metrics.gpu_rendering_stats import GpuRenderingStats |
7 from telemetry.page import page | 8 from telemetry.page import page |
8 from telemetry.page.page_measurement_results import PageMeasurementResults | 9 from telemetry.page.page_measurement_results import PageMeasurementResults |
9 | 10 |
10 class SmoothnessMetricsUnitTest(unittest.TestCase): | 11 class SmoothnessMetricsUnitTest(unittest.TestCase): |
| 12 def testCalcResultsRealRenderStats(self): |
| 13 mock_rendering_stats_deltas = { |
| 14 'totalTimeInSeconds': 1.0, |
| 15 'numFramesSentToScreen': 100, |
| 16 'droppedFrameCount': 20, |
| 17 'numImplThreadScrolls': 50, |
| 18 'numMainThreadScrolls': 50, |
| 19 'numLayersDrawn': 240, |
| 20 'numMissingTiles': 10, |
| 21 'textureUploadCount': 120, |
| 22 'totalTextureUploadTimeInSeconds': 1.2, |
| 23 'totalCommitCount': 130, |
| 24 'totalCommitTimeInSeconds': 1.3, |
| 25 'totalDeferredImageDecodeCount': 140, |
| 26 'totalDeferredImageDecodeTimeInSeconds': 1.4, |
| 27 'totalDeferredImageCacheHitCount': 30, |
| 28 'totalImageGatheringCount': 150, |
| 29 'totalImageGatheringTimeInSeconds': 1.5, |
| 30 'totalTilesAnalyzed': 160, |
| 31 'totalTileAnalysisTimeInSeconds': 1.6, |
| 32 'solidColorTilesAnalyzed': 40, |
| 33 'inputEventCount': 170, |
| 34 'totalInputLatency': 1.7, |
| 35 'touchUICount': 180, |
| 36 'totalTouchUILatency': 1.8, |
| 37 'touchAckedCount': 190, |
| 38 'totalTouchAckedLatency': 1.9, |
| 39 'scrollUpdateCount': 200, |
| 40 'totalScrollUpdateLatency': 2.0} |
| 41 stats = GpuRenderingStats(mock_rendering_stats_deltas) |
11 | 42 |
12 def testCalcResultsFromRAFRenderStats(self): | |
13 rendering_stats = {'droppedFrameCount': 5, | |
14 'totalTimeInSeconds': 1, | |
15 'numAnimationFrames': 10, | |
16 'numFramesSentToScreen': 10} | |
17 res = PageMeasurementResults() | 43 res = PageMeasurementResults() |
18 res.WillMeasurePage(page.Page('http://foo.com/', None)) | 44 res.WillMeasurePage(page.Page('http://foo.com/', None)) |
19 smoothness.CalcScrollResults(rendering_stats, res) | 45 smoothness.CalcResults(stats, res) |
20 res.DidMeasurePage() | 46 res.DidMeasurePage() |
21 self.assertEquals(50, res.page_results[0]['dropped_percent'].value) | 47 |
| 48 # Scroll Results |
22 self.assertAlmostEquals( | 49 self.assertAlmostEquals( |
23 100, | 50 1.0 / 100.0 * 1000.0, |
24 res.page_results[0]['mean_frame_time'].value, 2) | 51 res.page_results[0]['mean_frame_time'].value, 2) |
| 52 self.assertAlmostEquals( |
| 53 20.0 / 100.0 * 100.0, |
| 54 res.page_results[0]['dropped_percent'].value) |
| 55 self.assertAlmostEquals( |
| 56 50.0 / (50.0 + 50.0) * 100.0, |
| 57 res.page_results[0]['percent_impl_scrolled'].value) |
| 58 self.assertAlmostEquals( |
| 59 240.0 / 100.0, |
| 60 res.page_results[0]['average_num_layers_drawn'].value) |
| 61 self.assertAlmostEquals( |
| 62 10.0 / 100.0, |
| 63 res.page_results[0]['average_num_missing_tiles'].value) |
25 | 64 |
26 def testCalcResultsRealRenderStats(self): | 65 # Texture Upload Results |
27 rendering_stats = {'numFramesSentToScreen': 60, | |
28 'globalTotalTextureUploadTimeInSeconds': 0, | |
29 'totalProcessingCommandsTimeInSeconds': 0, | |
30 'globalTextureUploadCount': 0, | |
31 'droppedFrameCount': 0, | |
32 'textureUploadCount': 0, | |
33 'numAnimationFrames': 10, | |
34 'totalPaintTimeInSeconds': 0.35374299999999986, | |
35 'globalTotalProcessingCommandsTimeInSeconds': 0, | |
36 'totalTextureUploadTimeInSeconds': 0, | |
37 'totalRasterizeTimeInSeconds': 0, | |
38 'totalTimeInSeconds': 1.0} | |
39 res = PageMeasurementResults() | |
40 res.WillMeasurePage(page.Page('http://foo.com/', None)) | |
41 smoothness.CalcScrollResults(rendering_stats, res) | |
42 res.DidMeasurePage() | |
43 self.assertEquals(0, res.page_results[0]['dropped_percent'].value) | |
44 self.assertAlmostEquals( | 66 self.assertAlmostEquals( |
45 1000 / 60., | 67 1.3 / 130.0 * 1000.0, |
46 res.page_results[0]['mean_frame_time'].value, 2) | 68 res.page_results[0]['average_commit_time'].value) |
| 69 self.assertEquals( |
| 70 120, |
| 71 res.page_results[0]['texture_upload_count'].value) |
| 72 self.assertEquals( |
| 73 1.2, |
| 74 res.page_results[0]['total_texture_upload_time'].value) |
| 75 |
| 76 # Image Decoding Results |
| 77 self.assertEquals( |
| 78 140, |
| 79 res.page_results[0]['total_deferred_image_decode_count'].value) |
| 80 self.assertEquals( |
| 81 30, |
| 82 res.page_results[0]['total_image_cache_hit_count'].value) |
| 83 self.assertAlmostEquals( |
| 84 1.5 / 150.0 * 1000.0, |
| 85 res.page_results[0]['average_image_gathering_time'].value) |
| 86 self.assertEquals( |
| 87 1.4, |
| 88 res.page_results[0]['total_deferred_image_decoding_time'].value) |
| 89 |
| 90 # Tile Analysis Results |
| 91 self.assertEquals( |
| 92 160, |
| 93 res.page_results[0]['total_tiles_analyzed'].value) |
| 94 self.assertEquals( |
| 95 40, |
| 96 res.page_results[0]['solid_color_tiles_analyzed'].value) |
| 97 self.assertAlmostEquals( |
| 98 1.6 / 160.0 * 1000.0, |
| 99 res.page_results[0]['average_tile_analysis_time'].value) |
| 100 |
| 101 # Latency Results |
| 102 self.assertAlmostEquals( |
| 103 1.7 / 170.0 * 1000.0, |
| 104 res.page_results[0]['average_latency'].value) |
| 105 self.assertAlmostEquals( |
| 106 1.8 / 180.0 * 1000.0, |
| 107 res.page_results[0]['average_touch_ui_latency'].value) |
| 108 self.assertAlmostEquals( |
| 109 1.9 / 190.0 * 1000.0, |
| 110 res.page_results[0]['average_touch_acked_latency'].value) |
| 111 self.assertAlmostEquals( |
| 112 2.0 / 200.0 * 1000.0, |
| 113 res.page_results[0]['average_scroll_update_latency'].value) |
OLD | NEW |