| Index: build/scripts/slave/chromium/playback_benchmark.py
|
| ===================================================================
|
| --- build/scripts/slave/chromium/playback_benchmark.py (revision 232812)
|
| +++ build/scripts/slave/chromium/playback_benchmark.py (working copy)
|
| @@ -1,151 +0,0 @@
|
| -#!/usr/bin/env python
|
| -# Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| -# Use of this source code is governed by a BSD-style license that can be
|
| -# found in the LICENSE file.
|
| -
|
| -"""A tool to run the playback tests, used by the buildbot slaves.
|
| -
|
| - When this is run, the current directory (cwd) should be the outer build
|
| - directory (e.g., chrome-release/build/).
|
| -
|
| - For a list of command-line options, call this script with '--help'.
|
| -"""
|
| -
|
| -import logging
|
| -import optparse
|
| -import os
|
| -import shutil
|
| -import simplejson as json
|
| -import subprocess
|
| -import sys
|
| -import tempfile
|
| -import threading
|
| -
|
| -from common import chromium_utils
|
| -from slave import build_directory
|
| -from slave import xvfb
|
| -from slave.chromium import playback_benchmark_replay
|
| -
|
| -# So we can import google.*_utils below with native Pythons.
|
| -sys.path.append(os.path.abspath('src/tools/python'))
|
| -
|
| -USAGE = '%s [options]' % os.path.basename(sys.argv[0])
|
| -
|
| -SERVER_PORT = 8080
|
| -START_URL = 'http://localhost:%i' % SERVER_PORT
|
| -
|
| -def print_result(top, name, result, refbuild):
|
| - prefix = ''
|
| - if top:
|
| - prefix = '*'
|
| - score_label = 'score'
|
| - if refbuild:
|
| - score_label = 'score_ref'
|
| - print ('%sRESULT %s: %s= %s ms (smaller is better)' %
|
| - (prefix, name, score_label, str(result)))
|
| -
|
| -
|
| -def run_benchmark(options, use_refbuild, benchmark_results):
|
| - build_dir = os.path.abspath(build_directory.GetBuildOutputDirectory())
|
| -
|
| - if not use_refbuild:
|
| - build_dir = os.path.join(build_dir, options.target)
|
| - else:
|
| - build_dir = os.path.join(os.path.dirname(build_dir), 'chrome', 'tools',
|
| - 'test', 'reference_build')
|
| - if chromium_utils.IsMac():
|
| - build_dir = os.path.join(build_dir, 'chrome_mac')
|
| - elif chromium_utils.IsLinux():
|
| - build_dir = os.path.join(build_dir, 'chrome_linux')
|
| - else:
|
| - build_dir = os.path.join(build_dir, 'chrome_win')
|
| -
|
| - if chromium_utils.IsWindows():
|
| - chrome_exe_name = 'chrome.exe'
|
| - elif chromium_utils.IsLinux():
|
| - chrome_exe_name = 'chrome'
|
| - else:
|
| - chrome_exe_name = 'Chromium'
|
| - chrome_exe_path = os.path.join(build_dir, chrome_exe_name)
|
| - if not os.path.exists(chrome_exe_path):
|
| - raise chromium_utils.PathNotFound('Unable to find %s' % chrome_exe_path)
|
| -
|
| - temp_dir = tempfile.mkdtemp()
|
| - command = [chrome_exe_path,
|
| - '--user-data-dir=%s' % temp_dir,
|
| - '--no-first-run',
|
| - '--no-default-browser-check',
|
| - START_URL]
|
| -
|
| - print "Executing: "
|
| - print command
|
| - browser_process = subprocess.Popen(command)
|
| -
|
| - benchmark_results['ready'].wait()
|
| - if benchmark_results['ready'].isSet():
|
| - results = json.loads(benchmark_results['results'])[0]
|
| - print_result(True, 'Total', results['score'], use_refbuild)
|
| - for child in results['children']:
|
| - print_result(False, child['name'], child['score'], use_refbuild)
|
| - benchmark_results['ready'].clear()
|
| -
|
| - if chromium_utils.IsWindows():
|
| - subprocess.call('taskkill /f /pid %i /t' % browser_process.pid)
|
| - else:
|
| - os.system('kill -15 %i' % browser_process.pid)
|
| - browser_process.wait()
|
| - shutil.rmtree(temp_dir)
|
| - return 0
|
| -
|
| -
|
| -def playback_benchmark(options, args):
|
| - """Using the target build configuration, run the playback test."""
|
| - # TODO(thakis): Stop looking at options.build_dir here.
|
| - root_dir = os.path.dirname(options.build_dir) # That's src dir.
|
| - data_dir = os.path.join(root_dir, 'data', 'webapp_benchmarks', 'gmailjs')
|
| -
|
| - benchmark_results = {'ready': threading.Event()}
|
| - def callback(results):
|
| - benchmark_results['results'] = results
|
| - benchmark_results['ready'].set()
|
| -
|
| - benchmark = playback_benchmark_replay.ReplayBenchmark(callback,
|
| - data_dir,
|
| - SERVER_PORT)
|
| - server_thread = threading.Thread(target=benchmark.RunForever)
|
| - server_thread.setDaemon(True)
|
| - server_thread.start()
|
| -
|
| - if chromium_utils.IsLinux():
|
| - xvfb.StartVirtualX(options.target, '')
|
| -
|
| - result = run_benchmark(options, False, benchmark_results)
|
| - result |= run_benchmark(options, True, benchmark_results)
|
| -
|
| - if chromium_utils.IsLinux():
|
| - xvfb.StopVirtualX(options.target)
|
| -
|
| - return result
|
| -
|
| -
|
| -def main():
|
| - # Initialize logging.
|
| - log_level = logging.INFO
|
| - logging.basicConfig(level=log_level,
|
| - format='%(asctime)s %(filename)s:%(lineno)-3d'
|
| - ' %(levelname)s %(message)s',
|
| - datefmt='%y%m%d %H:%M:%S')
|
| -
|
| - option_parser = optparse.OptionParser(usage=USAGE)
|
| -
|
| - option_parser.add_option('', '--target', default='Release',
|
| - help='build target (Debug or Release)')
|
| - option_parser.add_option('', '--build-dir', default='chrome',
|
| - help='path to main build directory (the parent of '
|
| - 'the Release or Debug directory)')
|
| - options, args = option_parser.parse_args()
|
| - return playback_benchmark(options, args)
|
| -
|
| -
|
| -if '__main__' == __name__:
|
| - sys.exit(main())
|
|
|