Home | History | Annotate | Download | only in benchmarks
      1 # Copyright (c) 2012 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 spaceport.io's PerfMarks benchmark."""
      6 
      7 import logging
      8 import os
      9 
     10 from telemetry import test
     11 from telemetry.core import util
     12 from telemetry.page import page_measurement
     13 from telemetry.page import page_set
     14 
     15 
     16 class SpaceportMeasurement(page_measurement.PageMeasurement):
     17   def CustomizeBrowserOptions(self, options):
     18     options.extra_browser_args.extend(['--disable-gpu-vsync'])
     19 
     20   def MeasurePage(self, _, tab, results):
     21     util.WaitFor(lambda: tab.EvaluateJavaScript(
     22         '!document.getElementById("start-performance-tests").disabled'), 60)
     23 
     24     tab.ExecuteJavaScript("""
     25         window.__results = {};
     26         window.console.log = function(str) {
     27             if (!str) return;
     28             var key_val = str.split(': ');
     29             if (!key_val.length == 2) return;
     30             __results[key_val[0]] = key_val[1];
     31         };
     32         document.getElementById('start-performance-tests').click();
     33     """)
     34 
     35     js_get_results = 'JSON.stringify(window.__results)'
     36     num_tests_complete = [0]  # A list to work around closure issue.
     37     def _IsDone():
     38       num_tests_in_measurement = 24
     39       num_results = len(eval(tab.EvaluateJavaScript(js_get_results)))
     40       if num_results > num_tests_complete[0]:
     41         num_tests_complete[0] = num_results
     42         logging.info('Completed measurement %d of %d'
     43                      % (num_tests_complete[0],
     44                         num_tests_in_measurement))
     45       return num_tests_complete[0] >= num_tests_in_measurement
     46     util.WaitFor(_IsDone, 1200, poll_interval=5)
     47 
     48     result_dict = eval(tab.EvaluateJavaScript(js_get_results))
     49     for key in result_dict:
     50       chart, trace = key.split('.', 1)
     51       results.Add(trace, 'objects (bigger is better)', float(result_dict[key]),
     52                   chart_name=chart, data_type='unimportant')
     53     results.Add('Score', 'objects (bigger is better)',
     54                 [float(x) for x in result_dict.values()])
     55 
     56 
     57 class Spaceport(test.Test):
     58   """spaceport.io's PerfMarks benchmark."""
     59   test = SpaceportMeasurement
     60 
     61   def CreatePageSet(self, options):
     62     spaceport_dir = os.path.join(util.GetChromiumSrcDir(), 'chrome', 'test',
     63         'data', 'third_party', 'spaceport')
     64     return page_set.PageSet.FromDict(
     65         {'pages': [{'url': 'file:///index.html'}]},
     66         spaceport_dir)
     67