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