blob: 2a42f9dd24e39b71792dc1934b87ab0ed74ed406 [file] [log] [blame]
# 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)