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