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)
11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)from telemetry import test
12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)from telemetry.core import util
13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)from telemetry.page import page_measurement
14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)from telemetry.page import page_set
15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class MapsMeasurement(page_measurement.PageMeasurement):
17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  def MeasurePage(self, page, tab, results):
18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    js_get_results = 'document.getElementsByTagName("pre")[0].innerText'
19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    test_results = tab.EvaluateJavaScript(js_get_results)
20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    total = re.search('total=([0-9]+)', test_results).group(1)
22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    render = re.search('render=([0-9.]+),([0-9.]+)', test_results).group(2)
23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    results.Add('total_time', 'ms', total)
24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    results.Add('render_mean_time', 'ms', render)
25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class MapsBenchmark(test.Test):
27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  """Basic Google Maps benchmarks."""
28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  test = MapsMeasurement
29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  enabled = False
30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  def CreatePageSet(self, options):
32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    page_set_path = os.path.join(
33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        util.GetChromiumSrcDir(), 'tools', 'perf', 'page_sets')
34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    page_set_dict = {
35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      'archive_data_file': 'data/maps.json',
36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      'make_javascript_deterministic': False,
37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      'pages': [
38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        {
39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)          'url': 'http://localhost:10020/tracker.html',
40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)          'navigate_steps' : [
41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            { 'action': 'navigate' },
42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            { 'action': 'wait', 'javascript': 'window.testDone' }
43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)          ]
44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        }
45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      ]
46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    }
47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    return page_set.PageSet.FromDict(page_set_dict, page_set_path)
49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class MapsNoVsync(MapsBenchmark):
51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  """Runs the Google Maps benchmark with Vsync disabled"""
52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  tag = 'novsync'
53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  def CustomizeBrowserOptions(self, options):
55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    options.AppendExtraBrowserArgs('--disable-gpu-vsync')
56