spaceport.py revision 9ab5563a3196760eb381d102cbb2bc0f7abc6a50
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)"""Runs spaceport.io's PerfMarks benchmark."""
690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import logging
890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)import os
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
109ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdochfrom telemetry import test
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)from telemetry.core import util
12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)from telemetry.page import page_measurement
1390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)from telemetry.page import page_set
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
169ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdochclass SpaceportMeasurement(page_measurement.PageMeasurement):
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def CustomizeBrowserOptions(self, options):
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    options.extra_browser_args.extend(['--disable-gpu-vsync'])
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def MeasurePage(self, _, tab, results):
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    util.WaitFor(lambda: tab.EvaluateJavaScript(
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        '!document.getElementById("start-performance-tests").disabled'), 60)
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    tab.ExecuteJavaScript("""
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        window.__results = {};
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        window.console.log = function(str) {
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            if (!str) return;
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            var key_val = str.split(': ');
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            if (!key_val.length == 2) return;
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            __results[key_val[0]] = key_val[1];
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        };
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        document.getElementById('start-performance-tests').click();
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    """)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    js_get_results = 'JSON.stringify(window.__results)'
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    num_tests_complete = [0]  # A list to work around closure issue.
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    def _IsDone():
38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      num_tests_in_measurement = 24
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      num_results = len(eval(tab.EvaluateJavaScript(js_get_results)))
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if num_results > num_tests_complete[0]:
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        num_tests_complete[0] = num_results
42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        logging.info('Completed measurement %d of %d'
43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                     % (num_tests_complete[0],
44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                        num_tests_in_measurement))
45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      return num_tests_complete[0] >= num_tests_in_measurement
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    util.WaitFor(_IsDone, 1200, poll_interval=5)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    result_dict = eval(tab.EvaluateJavaScript(js_get_results))
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for key in result_dict:
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      chart, trace = key.split('.', 1)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      results.Add(trace, 'objects (bigger is better)', float(result_dict[key]),
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  chart_name=chart, data_type='unimportant')
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    results.Add('Score', 'objects (bigger is better)',
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                [float(x) for x in result_dict.values()])
559ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
569ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
579ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdochclass Spaceport(test.Test):
589ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  """spaceport.io's PerfMarks benchmark."""
599ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  test = SpaceportMeasurement
609ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
619ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  def CreatePageSet(self, options):
629ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch    spaceport_dir = os.path.join(util.GetChromiumSrcDir(), 'chrome', 'test',
639ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch        'data', 'third_party', 'spaceport')
649ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch    return page_set.PageSet.FromDict(
659ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch        {'pages': [{'url': 'file:///index.html'}]},
669ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch        spaceport_dir)
67