1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)# Copyright 2013 The Chromium Authors. All rights reserved. 2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be 3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)# found in the LICENSE file. 4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)"""Runs a Google Maps performance test. 6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)Rerforms several common navigation actions on the map (pan, zoom, rotate)""" 7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)import os 9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)import re 10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 11116680a4aac90f2aa7413d9095a592090648e557Ben Murdochfrom telemetry import benchmark 12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)from telemetry.core import util 135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liufrom telemetry.page import page as page_module 145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liufrom telemetry.page import page_set as page_set_module 156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)from telemetry.page import page_test 16f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)from telemetry.value import scalar 17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class _MapsMeasurement(page_test.PageTest): 206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) def ValidateAndMeasurePage(self, page, tab, results): 21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) js_get_results = 'document.getElementsByTagName("pre")[0].innerText' 22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) test_results = tab.EvaluateJavaScript(js_get_results) 23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) total = re.search('total=([0-9]+)', test_results).group(1) 25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) render = re.search('render=([0-9.]+),([0-9.]+)', test_results).group(2) 26f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) results.AddValue(scalar.ScalarValue( 27f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) results.current_page, 'total_time', 'ms', total)) 28f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) results.AddValue(scalar.ScalarValue( 29f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) results.current_page, 'render_mean_time', 'ms', render)) 30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuclass MapsPage(page_module.Page): 325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu def __init__(self, page_set, base_dir): 335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu super(MapsPage, self).__init__( 345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu url='http://localhost:10020/tracker.html', 355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu page_set=page_set, 365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base_dir=base_dir) 375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu def RunNavigateSteps(self, action_runner): 39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) action_runner.NavigateToPage(self) 40f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) action_runner.WaitForJavaScriptCondition('window.testDone') 415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch@benchmark.Disabled 44116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass MapsBenchmark(benchmark.Benchmark): 45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) """Basic Google Maps benchmarks.""" 4623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) test = _MapsMeasurement 47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) def CreatePageSet(self, options): 49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) page_set_path = os.path.join( 50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) util.GetChromiumSrcDir(), 'tools', 'perf', 'page_sets') 515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ps = page_set_module.PageSet( 525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu archive_data_file='data/maps.json', 535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu make_javascript_deterministic=False, 545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu file_path=page_set_path) 555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ps.AddPage(MapsPage(ps, ps.base_dir)) 565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return ps 57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class MapsNoVsync(MapsBenchmark): 59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) """Runs the Google Maps benchmark with Vsync disabled""" 60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) tag = 'novsync' 61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) def CustomizeBrowserOptions(self, options): 63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) options.AppendExtraBrowserArgs('--disable-gpu-vsync') 64