1a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)# Copyright 2013 The Chromium Authors. All rights reserved. 2a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be 3a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)# found in the LICENSE file. 4a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)import unittest 5a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 6a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)from metrics import smoothness 74311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdochfrom metrics.gpu_rendering_stats import GpuRenderingStats 8a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)from telemetry.page import page 9a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)from telemetry.page.page_measurement_results import PageMeasurementResults 10a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 11a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)class SmoothnessMetricsUnitTest(unittest.TestCase): 124311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch def testCalcResultsRealRenderStats(self): 134311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch mock_rendering_stats_deltas = { 144311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 'totalTimeInSeconds': 1.0, 154311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 'numFramesSentToScreen': 100, 164311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 'droppedFrameCount': 20, 174311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 'numImplThreadScrolls': 50, 184311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 'numMainThreadScrolls': 50, 194311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 'numLayersDrawn': 240, 204311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 'numMissingTiles': 10, 214311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 'textureUploadCount': 120, 224311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 'totalTextureUploadTimeInSeconds': 1.2, 234311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 'totalCommitCount': 130, 244311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 'totalCommitTimeInSeconds': 1.3, 254311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 'totalDeferredImageDecodeCount': 140, 264311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 'totalDeferredImageDecodeTimeInSeconds': 1.4, 274311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 'totalDeferredImageCacheHitCount': 30, 284311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 'totalImageGatheringCount': 150, 294311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 'totalImageGatheringTimeInSeconds': 1.5, 304311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 'totalTilesAnalyzed': 160, 314311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 'totalTileAnalysisTimeInSeconds': 1.6, 324311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 'solidColorTilesAnalyzed': 40, 334311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 'inputEventCount': 170, 344311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 'totalInputLatency': 1.7, 354311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 'touchUICount': 180, 364311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 'totalTouchUILatency': 1.8, 374311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 'touchAckedCount': 190, 384311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 'totalTouchAckedLatency': 1.9, 394311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 'scrollUpdateCount': 200, 404311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 'totalScrollUpdateLatency': 2.0} 414311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch stats = GpuRenderingStats(mock_rendering_stats_deltas) 42a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 43a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) res = PageMeasurementResults() 44a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) res.WillMeasurePage(page.Page('http://foo.com/', None)) 454311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch smoothness.CalcResults(stats, res) 46a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) res.DidMeasurePage() 474311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 484311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch # Scroll Results 494311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch self.assertAlmostEquals( 504311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 1.0 / 100.0 * 1000.0, 514311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch res.page_results[0]['mean_frame_time'].value, 2) 524311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch self.assertAlmostEquals( 534311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 20.0 / 100.0 * 100.0, 544311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch res.page_results[0]['dropped_percent'].value) 554311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch self.assertAlmostEquals( 564311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 50.0 / (50.0 + 50.0) * 100.0, 574311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch res.page_results[0]['percent_impl_scrolled'].value) 58a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) self.assertAlmostEquals( 594311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 240.0 / 100.0, 604311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch res.page_results[0]['average_num_layers_drawn'].value) 614311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch self.assertAlmostEquals( 624311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 10.0 / 100.0, 634311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch res.page_results[0]['average_num_missing_tiles'].value) 64a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 654311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch # Texture Upload Results 664311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch self.assertAlmostEquals( 674311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 1.3 / 130.0 * 1000.0, 684311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch res.page_results[0]['average_commit_time'].value) 694311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch self.assertEquals( 704311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 120, 714311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch res.page_results[0]['texture_upload_count'].value) 724311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch self.assertEquals( 734311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 1.2, 744311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch res.page_results[0]['total_texture_upload_time'].value) 754311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 764311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch # Image Decoding Results 774311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch self.assertEquals( 784311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 140, 794311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch res.page_results[0]['total_deferred_image_decode_count'].value) 804311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch self.assertEquals( 814311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 30, 824311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch res.page_results[0]['total_image_cache_hit_count'].value) 834311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch self.assertAlmostEquals( 844311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 1.5 / 150.0 * 1000.0, 854311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch res.page_results[0]['average_image_gathering_time'].value) 864311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch self.assertEquals( 874311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 1.4, 884311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch res.page_results[0]['total_deferred_image_decoding_time'].value) 894311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 904311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch # Tile Analysis Results 914311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch self.assertEquals( 924311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 160, 934311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch res.page_results[0]['total_tiles_analyzed'].value) 944311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch self.assertEquals( 954311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 40, 964311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch res.page_results[0]['solid_color_tiles_analyzed'].value) 974311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch self.assertAlmostEquals( 984311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 1.6 / 160.0 * 1000.0, 994311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch res.page_results[0]['average_tile_analysis_time'].value) 1004311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 1014311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch # Latency Results 1024311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch self.assertAlmostEquals( 1034311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 1.7 / 170.0 * 1000.0, 1044311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch res.page_results[0]['average_latency'].value) 1054311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch self.assertAlmostEquals( 1064311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 1.8 / 180.0 * 1000.0, 1074311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch res.page_results[0]['average_touch_ui_latency'].value) 1084311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch self.assertAlmostEquals( 1094311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 1.9 / 190.0 * 1000.0, 1104311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch res.page_results[0]['average_touch_acked_latency'].value) 111a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) self.assertAlmostEquals( 1124311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 2.0 / 200.0 * 1000.0, 1134311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch res.page_results[0]['average_scroll_update_latency'].value) 114