1# Copyright 2013 The Chromium Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5"""Runs a Google Maps performance test.
6Rerforms several common navigation actions on the map (pan, zoom, rotate)"""
7
8import os
9import re
10
11from telemetry import benchmark
12from telemetry.core import util
13from telemetry.page import page as page_module
14from telemetry.page import page_set as page_set_module
15from telemetry.page import page_test
16from telemetry.value import scalar
17
18
19class _MapsMeasurement(page_test.PageTest):
20  def ValidateAndMeasurePage(self, page, tab, results):
21    js_get_results = 'document.getElementsByTagName("pre")[0].innerText'
22    test_results = tab.EvaluateJavaScript(js_get_results)
23
24    total = re.search('total=([0-9]+)', test_results).group(1)
25    render = re.search('render=([0-9.]+),([0-9.]+)', test_results).group(2)
26    results.AddValue(scalar.ScalarValue(
27        results.current_page, 'total_time', 'ms', total))
28    results.AddValue(scalar.ScalarValue(
29        results.current_page, 'render_mean_time', 'ms', render))
30
31class MapsPage(page_module.Page):
32  def __init__(self, page_set, base_dir):
33    super(MapsPage, self).__init__(
34      url='http://localhost:10020/tracker.html',
35      page_set=page_set,
36      base_dir=base_dir)
37
38  def RunNavigateSteps(self, action_runner):
39    action_runner.NavigateToPage(self)
40    action_runner.WaitForJavaScriptCondition('window.testDone')
41
42
43@benchmark.Disabled
44class MapsBenchmark(benchmark.Benchmark):
45  """Basic Google Maps benchmarks."""
46  test = _MapsMeasurement
47
48  def CreatePageSet(self, options):
49    page_set_path = os.path.join(
50        util.GetChromiumSrcDir(), 'tools', 'perf', 'page_sets')
51    ps = page_set_module.PageSet(
52      archive_data_file='data/maps.json',
53      make_javascript_deterministic=False,
54      file_path=page_set_path)
55    ps.AddPage(MapsPage(ps, ps.base_dir))
56    return ps
57
58class MapsNoVsync(MapsBenchmark):
59  """Runs the Google Maps benchmark with Vsync disabled"""
60  tag = 'novsync'
61
62  def CustomizeBrowserOptions(self, options):
63    options.AppendExtraBrowserArgs('--disable-gpu-vsync')
64