Diff
Modified: trunk/Tools/ChangeLog (188091 => 188092)
--- trunk/Tools/ChangeLog 2015-08-06 23:35:32 UTC (rev 188091)
+++ trunk/Tools/ChangeLog 2015-08-06 23:40:49 UTC (rev 188092)
@@ -1,3 +1,43 @@
+2015-08-06 Ryosuke Niwa <rn...@webkit.org>
+
+ http_server_driver and benchmark_builder should not be in run-benchmark's plan files
+ https://bugs.webkit.org/show_bug.cgi?id=147752
+
+ Reviewed by Chris Dumez.
+
+ Removed BenchmarkBuilderFactory since we have exactly one subclass of BenchmarkBuilder.
+
+ Also made HTTPServerDriverFactory instantiate the appropriate HTTP server based on the platform name instead of HTTP server name.
+ This allows us to remove --http-server-driver option from run-benchmark, which was added to support the HTTP server for iOS.
+
+ * Scripts/webkitpy/benchmark_runner/benchmark_builder: Removed.
+ * Scripts/webkitpy/benchmark_runner/benchmark_builder.py: Moved from benchmark_runner/benchmark_builder/generic_benchmark_builder.py.
+ * Scripts/webkitpy/benchmark_runner/benchmark_builder/__init__.py: Removed.
+ * Scripts/webkitpy/benchmark_runner/benchmark_builder/benchmark_builder_factory.py: Removed.
+ * Scripts/webkitpy/benchmark_runner/benchmark_builder/generic_benchmark_builder.py: Moved to benchmark_runner/benchmark_builder.py.
+ * Scripts/webkitpy/benchmark_runner/benchmark_runner.py:
+ (BenchmarkRunner.__init__): No longer takes http_server_driver_override as an argument since this is not handled by
+ HTTPServerDriverFactory taking the platform name as an argument.
+ (BenchmarkRunner.execute): Directly instantiate BenchmarkBuilder.
+ * Scripts/webkitpy/benchmark_runner/data/plans/dromaeo-cssquery.plan: Removed http_server_driver and benchmark_builder.
+ * Scripts/webkitpy/benchmark_runner/data/plans/dromaeo-dom.plan: Ditto.
+ * Scripts/webkitpy/benchmark_runner/data/plans/dromaeo-jslib.plan: Ditto.
+ * Scripts/webkitpy/benchmark_runner/data/plans/jetstream.plan: Ditto.
+ * Scripts/webkitpy/benchmark_runner/data/plans/jsbench.plan: Ditto.
+ * Scripts/webkitpy/benchmark_runner/data/plans/kraken.plan: Ditto.
+ * Scripts/webkitpy/benchmark_runner/data/plans/octane.plan: Ditto.
+ * Scripts/webkitpy/benchmark_runner/data/plans/speedometer.plan: Ditto.
+ * Scripts/webkitpy/benchmark_runner/data/plans/sunspider.plan: Ditto.
+ * Scripts/webkitpy/benchmark_runner/http_server_driver/__init__.py:
+ (http_server_driver_loader): Register http server drivers via supported platform names instead of http server names.
+ * Scripts/webkitpy/benchmark_runner/http_server_driver/http_server_driver.py:
+ (HTTPServerDriver): Replaced name by platforms.
+ * Scripts/webkitpy/benchmark_runner/http_server_driver/simple_http_server_driver.py:
+ (SimpleHTTPServerDriver): Ditto.
+ * Scripts/webkitpy/benchmark_runner/run_benchmark.py:
+ (parse_args): Removed --http-server-driver option.
+ (start): Ditto.
+
2015-08-06 Chris Dumez <cdu...@apple.com>
Toggle GPS state based on page visibility to save battery
Copied: trunk/Tools/Scripts/webkitpy/benchmark_runner/benchmark_builder.py (from rev 188065, trunk/Tools/Scripts/webkitpy/benchmark_runner/benchmark_builder/generic_benchmark_builder.py) (0 => 188092)
--- trunk/Tools/Scripts/webkitpy/benchmark_runner/benchmark_builder.py (rev 0)
+++ trunk/Tools/Scripts/webkitpy/benchmark_runner/benchmark_builder.py 2015-08-06 23:40:49 UTC (rev 188092)
@@ -0,0 +1,98 @@
+#!/usr/bin/env python
+
+import logging
+import tempfile
+import os
+import urllib
+import shutil
+import subprocess
+import tarfile
+
+from zipfile import ZipFile
+from webkitpy.benchmark_runner.utils import get_path_from_project_root, force_remove
+
+
+_log = logging.getLogger(__name__)
+
+
+class BenchmarkBuilder(object):
+ def prepare(self, name, plan):
+ self._name = name
+ self._web_root = tempfile.mkdtemp()
+ self._dest = os.path.join(self._web_root, self._name)
+ if 'local_copy' in plan:
+ self._copy_benchmark_to_temp_dir(plan['local_copy'])
+ elif 'remote_archive' in plan:
+ self._fetch_remote_archive(plan['remote_archive'])
+ elif 'svn_source' in plan:
+ self._checkout_with_subversion(plan['svn_source'])
+ else:
+ raise Exception('The benchmark location was not specified')
+
+ _log.info('Copied the benchmark into: %s' % self._dest)
+ try:
+ if 'create_script' in plan:
+ self._run_create_script(plan['create_script'])
+ if 'benchmark_patch' in plan:
+ self._apply_patch(plan['benchmark_patch'])
+ return self._web_root
+ except Exception:
+ self.clean()
+ raise
+
+ def _run_create_script(self, create_script):
+ old_working_directory = os.getcwd()
+ os.chdir(self._dest)
+ _log.debug('Running %s in %s' % (create_script, self._dest))
+ error_code = subprocess.call(create_script)
+ os.chdir(old_working_directory)
+ if error_code:
+ raise Exception('Cannot create the benchmark - Error: %s' % error_code)
+
+ def _copy_benchmark_to_temp_dir(self, benchmark_path):
+ shutil.copytree(get_path_from_project_root(benchmark_path), self._dest)
+
+ def _fetch_remote_archive(self, archive_url):
+ if archive_url.endswith('.zip'):
+ archive_type = 'zip'
+ elif archive_url.endswith('tar.gz'):
+ archive_type = 'tar.gz'
+ else:
+ raise Exception('Could not infer the file extention from URL: %s' % archive_url)
+
+ archive_path = os.path.join(self._web_root, 'archive.' + archive_type)
+ _log.info('Downloading %s to %s' % (archive_url, archive_path))
+ urllib.urlretrieve(archive_url, archive_path)
+
+ if archive_type == 'zip':
+ with ZipFile(archive_path, 'r') as archive:
+ archive.extractall(self._dest)
+ elif archive_type == 'tar.gz':
+ with tarfile.open(archive_path, 'r:gz') as archive:
+ archive.extractall(self._dest)
+
+ unarchived_files = filter(lambda name: not name.startswith('.'), os.listdir(self._dest))
+ if len(unarchived_files) == 1:
+ first_file = os.path.join(self._dest, unarchived_files[0])
+ if os.path.isdir(first_file):
+ shutil.move(first_file, self._web_root)
+ os.rename(os.path.join(self._web_root, unarchived_files[0]), self._dest)
+
+ def _checkout_with_subversion(self, subversion_url):
+ _log.info('Checking out %s to %s' % (subversion_url, self._dest))
+ error_code = subprocess.call(['svn', 'checkout', subversion_url, self._dest])
+ if error_code:
+ raise Exception('Cannot checkout the benchmark - Error: %s' % error_code)
+
+ def _apply_patch(self, patch):
+ old_working_directory = os.getcwd()
+ os.chdir(self._dest)
+ error_code = subprocess.call(['patch', '-p1', '-f', '-i', get_path_from_project_root(patch)])
+ os.chdir(old_working_directory)
+ if error_code:
+ raise Exception('Cannot apply patch, will skip current benchmark_path - Error: %s' % error_code)
+
+ def clean(self):
+ _log.info('Cleaning Benchmark')
+ if self._web_root:
+ force_remove(self._web_root)
Modified: trunk/Tools/Scripts/webkitpy/benchmark_runner/benchmark_runner.py (188091 => 188092)
--- trunk/Tools/Scripts/webkitpy/benchmark_runner/benchmark_runner.py 2015-08-06 23:35:32 UTC (rev 188091)
+++ trunk/Tools/Scripts/webkitpy/benchmark_runner/benchmark_runner.py 2015-08-06 23:40:49 UTC (rev 188092)
@@ -12,7 +12,7 @@
import os
import urlparse
-from benchmark_builder.benchmark_builder_factory import BenchmarkBuilderFactory
+from benchmark_builder import BenchmarkBuilder
from benchmark_results import BenchmarkResults
from browser_driver.browser_driver_factory import BrowserDriverFactory
from http_server_driver.http_server_driver_factory import HTTPServerDriverFactory
@@ -24,7 +24,7 @@
class BenchmarkRunner(object):
- def __init__(self, plan_file, local_copy, count_override, build_dir, output_file, platform, browser, http_server_driver_override=None, device_id=None):
+ def __init__(self, plan_file, local_copy, count_override, build_dir, output_file, platform, browser, device_id=None):
try:
plan_file = self._find_plan_file(plan_file)
with open(plan_file, 'r') as fp:
@@ -34,10 +34,8 @@
self._plan['local_copy'] = local_copy
if count_override:
self._plan['count'] = count_override
- if http_server_driver_override:
- self._plan['http_server_driver'] = http_server_driver_override
self._browser_driver = BrowserDriverFactory.create(platform, browser)
- self._http_server_driver = HTTPServerDriverFactory.create(self._plan['http_server_driver'])
+ self._http_server_driver = HTTPServerDriverFactory.create(platform)
self._http_server_driver.set_device_id(device_id)
self._build_dir = os.path.abspath(build_dir) if build_dir else None
self._output_file = output_file
@@ -64,7 +62,7 @@
_log.info('Start to execute the plan')
_log.info('Start a new benchmark')
results = []
- self._benchmark_builder = BenchmarkBuilderFactory.create(self._plan['benchmark_builder'])
+ self._benchmark_builder = BenchmarkBuilder()
web_root = self._benchmark_builder.prepare(self._plan_name, self._plan)
for x in xrange(int(self._plan['count'])):
Modified: trunk/Tools/Scripts/webkitpy/benchmark_runner/data/plans/dromaeo-cssquery.plan (188091 => 188092)
--- trunk/Tools/Scripts/webkitpy/benchmark_runner/data/plans/dromaeo-cssquery.plan 2015-08-06 23:35:32 UTC (rev 188091)
+++ trunk/Tools/Scripts/webkitpy/benchmark_runner/data/plans/dromaeo-cssquery.plan 2015-08-06 23:40:49 UTC (rev 188092)
@@ -1,8 +1,6 @@
{
- "http_server_driver": "SimpleHTTPServerDriver",
"timeout": 1200,
"count": 1,
- "benchmark_builder": "GenericBenchmarkBuilder",
"remote_archive": "https://github.com/jeresig/dromaeo/archive/ed7e6a8f25ea72f45c191f34a68722f80dc3c513.zip",
"benchmark_patch": "data/patches/Dromaeo.patch",
"create_script": ["make", "web"],
Modified: trunk/Tools/Scripts/webkitpy/benchmark_runner/data/plans/dromaeo-dom.plan (188091 => 188092)
--- trunk/Tools/Scripts/webkitpy/benchmark_runner/data/plans/dromaeo-dom.plan 2015-08-06 23:35:32 UTC (rev 188091)
+++ trunk/Tools/Scripts/webkitpy/benchmark_runner/data/plans/dromaeo-dom.plan 2015-08-06 23:40:49 UTC (rev 188092)
@@ -1,8 +1,6 @@
{
- "http_server_driver": "SimpleHTTPServerDriver",
"timeout": 1200,
"count": 1,
- "benchmark_builder": "GenericBenchmarkBuilder",
"remote_archive": "https://github.com/jeresig/dromaeo/archive/ed7e6a8f25ea72f45c191f34a68722f80dc3c513.zip",
"benchmark_patch": "data/patches/Dromaeo.patch",
"create_script": ["make", "web"],
Modified: trunk/Tools/Scripts/webkitpy/benchmark_runner/data/plans/dromaeo-jslib.plan (188091 => 188092)
--- trunk/Tools/Scripts/webkitpy/benchmark_runner/data/plans/dromaeo-jslib.plan 2015-08-06 23:35:32 UTC (rev 188091)
+++ trunk/Tools/Scripts/webkitpy/benchmark_runner/data/plans/dromaeo-jslib.plan 2015-08-06 23:40:49 UTC (rev 188092)
@@ -1,8 +1,6 @@
{
- "http_server_driver": "SimpleHTTPServerDriver",
"timeout": 1200,
"count": 1,
- "benchmark_builder": "GenericBenchmarkBuilder",
"remote_archive": "https://github.com/jeresig/dromaeo/archive/ed7e6a8f25ea72f45c191f34a68722f80dc3c513.zip",
"benchmark_patch": "data/patches/Dromaeo.patch",
"create_script": ["make", "web"],
Modified: trunk/Tools/Scripts/webkitpy/benchmark_runner/data/plans/jetstream.plan (188091 => 188092)
--- trunk/Tools/Scripts/webkitpy/benchmark_runner/data/plans/jetstream.plan 2015-08-06 23:35:32 UTC (rev 188091)
+++ trunk/Tools/Scripts/webkitpy/benchmark_runner/data/plans/jetstream.plan 2015-08-06 23:40:49 UTC (rev 188092)
@@ -1,8 +1,6 @@
{
- "http_server_driver": "SimpleHTTPServerDriver",
"timeout": 600,
"count": 5,
- "benchmark_builder": "GenericBenchmarkBuilder",
"svn_source": "https://svn.webkit.org/repository/webkit/trunk/PerformanceTests/JetStream/@r183091",
"benchmark_patch": "data/patches/JetStream.patch",
"create_script": ["ruby", "create.rb"],
Modified: trunk/Tools/Scripts/webkitpy/benchmark_runner/data/plans/jsbench.plan (188091 => 188092)
--- trunk/Tools/Scripts/webkitpy/benchmark_runner/data/plans/jsbench.plan 2015-08-06 23:35:32 UTC (rev 188091)
+++ trunk/Tools/Scripts/webkitpy/benchmark_runner/data/plans/jsbench.plan 2015-08-06 23:40:49 UTC (rev 188092)
@@ -1,8 +1,6 @@
{
- "http_server_driver": "SimpleHTTPServerDriver",
"timeout": 600,
"count": 1,
- "benchmark_builder": "GenericBenchmarkBuilder",
"remote_archive": "http://plg.uwaterloo.ca/~dynjs/jsbench/suite/jsbench-2013.1.tar.gz",
"benchmark_patch": "data/patches/JSBench.patch",
"entry_point": "index.html",
Modified: trunk/Tools/Scripts/webkitpy/benchmark_runner/data/plans/kraken.plan (188091 => 188092)
--- trunk/Tools/Scripts/webkitpy/benchmark_runner/data/plans/kraken.plan 2015-08-06 23:35:32 UTC (rev 188091)
+++ trunk/Tools/Scripts/webkitpy/benchmark_runner/data/plans/kraken.plan 2015-08-06 23:40:49 UTC (rev 188092)
@@ -1,8 +1,6 @@
{
- "http_server_driver": "SimpleHTTPServerDriver",
"timeout": 300,
"count": 5,
- "benchmark_builder": "GenericBenchmarkBuilder",
"remote_archive": "http://hg.mozilla.org/projects/kraken/archive/tip.zip",
"benchmark_patch": "data/patches/Kraken.patch",
"create_script": ["python", "make-hosted.py"],
Modified: trunk/Tools/Scripts/webkitpy/benchmark_runner/data/plans/octane.plan (188091 => 188092)
--- trunk/Tools/Scripts/webkitpy/benchmark_runner/data/plans/octane.plan 2015-08-06 23:35:32 UTC (rev 188091)
+++ trunk/Tools/Scripts/webkitpy/benchmark_runner/data/plans/octane.plan 2015-08-06 23:40:49 UTC (rev 188092)
@@ -1,8 +1,6 @@
{
- "http_server_driver": "SimpleHTTPServerDriver",
"timeout": 300,
"count": 5,
- "benchmark_builder": "GenericBenchmarkBuilder",
"remote_archive": "https://github.com/chromium/octane-benchmark/archive/fab09aef01c2a5560c22cdc1c1a2451c0d0f4cdc.zip",
"benchmark_patch": "data/patches/Octane.patch",
"entry_point": "index.html?auto=1",
Modified: trunk/Tools/Scripts/webkitpy/benchmark_runner/data/plans/speedometer.plan (188091 => 188092)
--- trunk/Tools/Scripts/webkitpy/benchmark_runner/data/plans/speedometer.plan 2015-08-06 23:35:32 UTC (rev 188091)
+++ trunk/Tools/Scripts/webkitpy/benchmark_runner/data/plans/speedometer.plan 2015-08-06 23:40:49 UTC (rev 188092)
@@ -1,8 +1,6 @@
{
- "http_server_driver": "SimpleHTTPServerDriver",
"timeout": 300,
"count": 5,
- "benchmark_builder": "GenericBenchmarkBuilder",
"local_copy": "../../../../PerformanceTests/Speedometer",
"benchmark_patch": "data/patches/Speedometer.patch",
"entry_point": "Full.html",
Modified: trunk/Tools/Scripts/webkitpy/benchmark_runner/data/plans/sunspider.plan (188091 => 188092)
--- trunk/Tools/Scripts/webkitpy/benchmark_runner/data/plans/sunspider.plan 2015-08-06 23:35:32 UTC (rev 188091)
+++ trunk/Tools/Scripts/webkitpy/benchmark_runner/data/plans/sunspider.plan 2015-08-06 23:40:49 UTC (rev 188092)
@@ -1,8 +1,6 @@
{
- "http_server_driver": "SimpleHTTPServerDriver",
"timeout": 300,
"count": 5,
- "benchmark_builder": "GenericBenchmarkBuilder",
"svn_source": "https://svn.webkit.org/repository/webkit/trunk/PerformanceTests/SunSpider/@r182170",
"benchmark_patch": "data/patches/SunSpider.patch",
"create_script": ["perl", "make-hosted"],
Modified: trunk/Tools/Scripts/webkitpy/benchmark_runner/http_server_driver/__init__.py (188091 => 188092)
--- trunk/Tools/Scripts/webkitpy/benchmark_runner/http_server_driver/__init__.py 2015-08-06 23:35:32 UTC (rev 188091)
+++ trunk/Tools/Scripts/webkitpy/benchmark_runner/http_server_driver/__init__.py 2015-08-06 23:40:49 UTC (rev 188092)
@@ -19,8 +19,8 @@
def http_server_driver_loader(http_server_driver_class):
- if http_server_driver_class.name:
- HTTPServerDriverFactory.add(http_server_driver_class.name, http_server_driver_class)
+ for platform in http_server_driver_class.platforms:
+ HTTPServerDriverFactory.add(platform, http_server_driver_class)
load_subclasses(
Modified: trunk/Tools/Scripts/webkitpy/benchmark_runner/http_server_driver/http_server_driver.py (188091 => 188092)
--- trunk/Tools/Scripts/webkitpy/benchmark_runner/http_server_driver/http_server_driver.py 2015-08-06 23:35:32 UTC (rev 188091)
+++ trunk/Tools/Scripts/webkitpy/benchmark_runner/http_server_driver/http_server_driver.py 2015-08-06 23:40:49 UTC (rev 188092)
@@ -4,7 +4,8 @@
class HTTPServerDriver(object):
- name = None
+ platforms = []
+
@abstractmethod
def serve(self, webRoot):
pass
Modified: trunk/Tools/Scripts/webkitpy/benchmark_runner/http_server_driver/simple_http_server_driver.py (188091 => 188092)
--- trunk/Tools/Scripts/webkitpy/benchmark_runner/http_server_driver/simple_http_server_driver.py 2015-08-06 23:35:32 UTC (rev 188091)
+++ trunk/Tools/Scripts/webkitpy/benchmark_runner/http_server_driver/simple_http_server_driver.py 2015-08-06 23:40:49 UTC (rev 188092)
@@ -18,8 +18,9 @@
"""This class depends on unix environment, need to be modified to achieve crossplatform compability
"""
- name = 'SimpleHTTPServerDriver'
+ platforms = ['osx']
+
def __init__(self):
self._server_process = None
self._server_port = 0
Modified: trunk/Tools/Scripts/webkitpy/benchmark_runner/run_benchmark.py (188091 => 188092)
--- trunk/Tools/Scripts/webkitpy/benchmark_runner/run_benchmark.py 2015-08-06 23:35:32 UTC (rev 188091)
+++ trunk/Tools/Scripts/webkitpy/benchmark_runner/run_benchmark.py 2015-08-06 23:40:49 UTC (rev 188092)
@@ -23,7 +23,6 @@
parser.add_argument('--debug', action='')
parser.add_argument('--local-copy', dest='localCopy', help='Path to a local copy of the benchmark. e.g. PerformanceTests/SunSpider/')
parser.add_argument('--count', dest='countOverride', type=int, help='Number of times to run the benchmark. e.g. 5')
- parser.add_argument('--http-server-driver', dest='httpServerDriverOverride', default=None, help='Specify which HTTP server you wants to use')
parser.add_argument('--device-id', dest='device_id', default=None)
args = parser.parse_args()
@@ -39,7 +38,7 @@
def start(args):
- runner = BenchmarkRunner(args.plan, args.localCopy, args.countOverride, args.buildDir, args.output, args.platform, args.browser, args.httpServerDriverOverride, args.device_id)
+ runner = BenchmarkRunner(args.plan, args.localCopy, args.countOverride, args.buildDir, args.output, args.platform, args.browser, args.device_id)
runner.execute()