# Copyright 2013 The Chromium Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. import unittest from metrics import smoothness from metrics.gpu_rendering_stats import GpuRenderingStats from telemetry.page import page from telemetry.page.page_measurement_results import PageMeasurementResults class SmoothnessMetricsUnitTest(unittest.TestCase): def testCalcResultsRealRenderStats(self): mock_rendering_stats_deltas = { 'totalTimeInSeconds': 1.0, 'numFramesSentToScreen': 100, 'droppedFrameCount': 20, 'numImplThreadScrolls': 50, 'numMainThreadScrolls': 50, 'numLayersDrawn': 240, 'numMissingTiles': 10, 'textureUploadCount': 120, 'totalTextureUploadTimeInSeconds': 1.2, 'totalCommitCount': 130, 'totalCommitTimeInSeconds': 1.3, 'totalDeferredImageDecodeCount': 140, 'totalDeferredImageDecodeTimeInSeconds': 1.4, 'totalDeferredImageCacheHitCount': 30, 'totalImageGatheringCount': 150, 'totalImageGatheringTimeInSeconds': 1.5, 'totalTilesAnalyzed': 160, 'totalTileAnalysisTimeInSeconds': 1.6, 'solidColorTilesAnalyzed': 40, 'inputEventCount': 170, 'totalInputLatency': 1.7, 'touchUICount': 180, 'totalTouchUILatency': 1.8, 'touchAckedCount': 190, 'totalTouchAckedLatency': 1.9, 'scrollUpdateCount': 200, 'totalScrollUpdateLatency': 2.0} stats = GpuRenderingStats(mock_rendering_stats_deltas) res = PageMeasurementResults() res.WillMeasurePage(page.Page('http://foo.com/', None)) smoothness.CalcResults(stats, res) res.DidMeasurePage() # Scroll Results self.assertAlmostEquals( 1.0 / 100.0 * 1000.0, res.page_results[0]['mean_frame_time'].value, 2) self.assertAlmostEquals( 20.0 / 100.0 * 100.0, res.page_results[0]['dropped_percent'].value) self.assertAlmostEquals( 50.0 / (50.0 + 50.0) * 100.0, res.page_results[0]['percent_impl_scrolled'].value) self.assertAlmostEquals( 240.0 / 100.0, res.page_results[0]['average_num_layers_drawn'].value) self.assertAlmostEquals( 10.0 / 100.0, res.page_results[0]['average_num_missing_tiles'].value) # Texture Upload Results self.assertAlmostEquals( 1.3 / 130.0 * 1000.0, res.page_results[0]['average_commit_time'].value) self.assertEquals( 120, res.page_results[0]['texture_upload_count'].value) self.assertEquals( 1.2, res.page_results[0]['total_texture_upload_time'].value) # Image Decoding Results self.assertEquals( 140, res.page_results[0]['total_deferred_image_decode_count'].value) self.assertEquals( 30, res.page_results[0]['total_image_cache_hit_count'].value) self.assertAlmostEquals( 1.5 / 150.0 * 1000.0, res.page_results[0]['average_image_gathering_time'].value) self.assertEquals( 1.4, res.page_results[0]['total_deferred_image_decoding_time'].value) # Tile Analysis Results self.assertEquals( 160, res.page_results[0]['total_tiles_analyzed'].value) self.assertEquals( 40, res.page_results[0]['solid_color_tiles_analyzed'].value) self.assertAlmostEquals( 1.6 / 160.0 * 1000.0, res.page_results[0]['average_tile_analysis_time'].value) # Latency Results self.assertAlmostEquals( 1.7 / 170.0 * 1000.0, res.page_results[0]['average_latency'].value) self.assertAlmostEquals( 1.8 / 180.0 * 1000.0, res.page_results[0]['average_touch_ui_latency'].value) self.assertAlmostEquals( 1.9 / 190.0 * 1000.0, res.page_results[0]['average_touch_acked_latency'].value) self.assertAlmostEquals( 2.0 / 200.0 * 1000.0, res.page_results[0]['average_scroll_update_latency'].value)