Changeset 185898 in webkit
- Timestamp:
- Jun 23, 2015 7:13:24 PM (9 years ago)
- Location:
- trunk/Tools
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Tools/ChangeLog
r185887 r185898 1 2015-06-23 Dewei Zhu <dewei_zhu@apple.com> 2 3 Refactoring benchmark runner script to follow pep8 code style. 4 https://bugs.webkit.org/show_bug.cgi?id=146264 5 6 Reviewed by Ryosuke Niwa. 7 8 Refactor benchmark runner script to follow pep8 code style. 9 10 * Scripts/webkitpy/benchmark_runner/benchmark_builder/generic_benchmark_builder.py: 11 (GenericBenchmarkBuilder.prepare): 12 (GenericBenchmarkBuilder._run_create_script): 13 (GenericBenchmarkBuilder._copy_benchmark_to_temp_dir): 14 (GenericBenchmarkBuilder._fetch_remote_archive): 15 (GenericBenchmarkBuilder): 16 (GenericBenchmarkBuilder._checkout_with_subversion): 17 (GenericBenchmarkBuilder._apply_patch): 18 (GenericBenchmarkBuilder.clean): 19 (GenericBenchmarkBuilder._runCreateScript): Deleted. 20 (GenericBenchmarkBuilder._copyBenchmarkToTempDir): Deleted. 21 (GenericBenchmarkBuilder._fetchRemoteArchive): Deleted. 22 (GenericBenchmarkBuilder._checkoutWithSubverion): Deleted. 23 (GenericBenchmarkBuilder._applyPatch): Deleted. 24 * Scripts/webkitpy/benchmark_runner/benchmark_runner.py: 25 (BenchmarkRunner.__init__): 26 (BenchmarkRunner._find_plan_file): 27 (BenchmarkRunner.execute): 28 (BenchmarkRunner._cleanup): 29 (BenchmarkRunner._dump): 30 (BenchmarkRunner._wrap): 31 (BenchmarkRunner._merge): 32 (BenchmarkRunner._show_results): 33 (BenchmarkRunner._findPlanFile): Deleted. 34 (BenchmarkRunner.cleanup): Deleted. 35 (BenchmarkRunner.dump): Deleted. 36 (BenchmarkRunner.wrap): Deleted. 37 (BenchmarkRunner.merge): Deleted. 38 (BenchmarkRunner.show_results): Deleted. 39 * Scripts/webkitpy/benchmark_runner/browser_driver/browser_driver.py: 40 (BrowserDriver.prepare_env): 41 (BrowserDriver.launch_url): 42 (BrowserDriver.close_browsers): 43 (BrowserDriver.prepareEnv): Deleted. 44 (BrowserDriver.launchUrl): Deleted. 45 (BrowserDriver.closeBrowser): Deleted. 46 * Scripts/webkitpy/benchmark_runner/browser_driver/osx_browser_driver.py: 47 (OSXBrowserDriver): 48 (OSXBrowserDriver.prepare_env): 49 (OSXBrowserDriver.close_browsers): 50 (OSXBrowserDriver._launch_process): 51 (OSXBrowserDriver._terminiate_processes): 52 (OSXBrowserDriver._launch_process_with_caffinate): 53 (OSXBrowserDriver._screen_size): 54 (OSXBrowserDriver.prepareEnv): Deleted. 55 (OSXBrowserDriver.closeBrowsers): Deleted. 56 (OSXBrowserDriver.launchProcess): Deleted. 57 (OSXBrowserDriver.terminateProcesses): Deleted. 58 (OSXBrowserDriver.launchProcessWithCaffinate): Deleted. 59 (OSXBrowserDriver.screenSize): Deleted. 60 * Scripts/webkitpy/benchmark_runner/browser_driver/osx_chrome_driver.py: 61 (OSXChromeDriver): 62 (OSXChromeDriver.launch_url): 63 (OSXChromeCanaryDriver): 64 (OSXChromeCanaryDriver.launch_url): 65 (OSXChromeDriver.launchUrl): Deleted. 66 (OSXChromeCanaryDriver.launchUrl): Deleted. 67 * Scripts/webkitpy/benchmark_runner/browser_driver/osx_firefox_driver.py: 68 (OSXFirefoxDriver): 69 (OSXFirefoxDriver.launch_url): 70 (OSXFirefoxNightlyDriver): 71 (OSXFirefoxNightlyDriver.launch_url): 72 (OSXFirefoxDriver.launchUrl): Deleted. 73 (OSXFirefoxNightlyDriver.launchUrl): Deleted. 74 * Scripts/webkitpy/benchmark_runner/browser_driver/osx_safari_driver.py: 75 (OSXSafariDriver): 76 (OSXSafariDriver.prepare_env): 77 (OSXSafariDriver.launch_url): 78 (OSXSafariDriver.close_browsers): 79 (OSXSafariDriver._maximize_window): 80 (OSXSafariDriver.prepareEnv): Deleted. 81 (OSXSafariDriver.launchUrl): Deleted. 82 (OSXSafariDriver.closeBrowsers): Deleted. 83 (OSXSafariDriver.maximizeWindow): Deleted. 84 * Scripts/webkitpy/benchmark_runner/http_server_driver/http_server_driver.py: 85 (HTTPServerDriver.fetch_result): 86 (HTTPServerDriver.kill_server): 87 (HTTPServerDriver.get_return_code): 88 (HTTPServerDriver.set_device_id): 89 (HTTPServerDriver.fetchResult): Deleted. 90 (HTTPServerDriver.killServer): Deleted. 91 (HTTPServerDriver.getReturnCode): Deleted. 92 (HTTPServerDriver.setDeviceID): Deleted. 93 * Scripts/webkitpy/benchmark_runner/http_server_driver/simple_http_server_driver.py: 94 (SimpleHTTPServerDriver.serve): 95 (SimpleHTTPServerDriver.base_url): 96 (SimpleHTTPServerDriver.fetch_result): 97 (SimpleHTTPServerDriver.kill_server): 98 (SimpleHTTPServerDriver.get_return_code): 99 (SimpleHTTPServerDriver): Deleted. 100 (SimpleHTTPServerDriver.baseUrl): Deleted. 101 (SimpleHTTPServerDriver.fetchResult): Deleted. 102 (SimpleHTTPServerDriver.killServer): Deleted. 103 (SimpleHTTPServerDriver.getReturnCode): Deleted. 104 * Scripts/webkitpy/benchmark_runner/utils.py: 105 (get_path_from_project_root): 106 (force_remove): 107 (getPathFromProjectRoot): Deleted. 108 (forceRemove): Deleted. 109 1 110 2015-06-23 Anders Carlsson <andersca@apple.com> 2 111 -
trunk/Tools/Scripts/webkitpy/benchmark_runner/benchmark_builder/generic_benchmark_builder.py
r185859 r185898 9 9 10 10 from zipfile import ZipFile 11 from webkitpy.benchmark_runner.utils import get PathFromProjectRoot, forceRemove11 from webkitpy.benchmark_runner.utils import get_path_from_project_root, force_remove 12 12 13 13 … … 20 20 21 21 def prepare(self, name, plan): 22 self. name = name23 self. webRoot = tempfile.mkdtemp()24 self. dest = os.path.join(self.webRoot, self.name)22 self._name = name 23 self._web_root = tempfile.mkdtemp() 24 self._dest = os.path.join(self._web_root, self._name) 25 25 if 'local_copy' in plan: 26 self._copy BenchmarkToTempDir(plan['local_copy'])26 self._copy_benchmark_to_temp_dir(plan['local_copy']) 27 27 elif 'remote_archive' in plan: 28 self._fetch RemoteArchive(plan['remote_archive'])28 self._fetch_remote_archive(plan['remote_archive']) 29 29 elif 'svn_source' in plan: 30 self._checkout WithSubverion(plan['svn_source'])30 self._checkout_with_subversion(plan['svn_source']) 31 31 else: 32 32 raise Exception('The benchmark location was not specified') 33 33 34 _log.info('Copied the benchmark into: %s' % self. dest)34 _log.info('Copied the benchmark into: %s' % self._dest) 35 35 try: 36 36 if 'create_script' in plan: 37 self._run CreateScript(plan['create_script'])37 self._run_create_script(plan['create_script']) 38 38 if 'benchmark_patch' in plan: 39 self._apply Patch(plan['benchmark_patch'])40 return self. webRoot39 self._apply_patch(plan['benchmark_patch']) 40 return self._web_root 41 41 except Exception: 42 42 self.clean() 43 43 raise 44 44 45 def _run CreateScript(self, createScript):46 old WorkingDirectory = os.getcwd()47 os.chdir(self. dest)48 _log.debug('Running %s in %s' % (create Script, self.dest))49 error Code = subprocess.call(createScript)50 os.chdir(old WorkingDirectory)51 if error Code:52 raise Exception('Cannot create the benchmark - Error: %s' % error Code)45 def _run_create_script(self, create_script): 46 old_working_directory = os.getcwd() 47 os.chdir(self._dest) 48 _log.debug('Running %s in %s' % (create_script, self._dest)) 49 error_code = subprocess.call(create_script) 50 os.chdir(old_working_directory) 51 if error_code: 52 raise Exception('Cannot create the benchmark - Error: %s' % error_code) 53 53 54 def _copy BenchmarkToTempDir(self, benchmarkPath):55 shutil.copytree(get PathFromProjectRoot(benchmarkPath), self.dest)54 def _copy_benchmark_to_temp_dir(self, benchmark_path): 55 shutil.copytree(get_path_from_project_root(benchmark_path), self._dest) 56 56 57 def _fetch RemoteArchive(self, archiveURL):58 archive Path = os.path.join(self.webRoot, 'archive.zip')59 _log.info('Downloading %s to %s' % (archive URL, archivePath))60 urllib.urlretrieve(archive URL, archivePath)57 def _fetch_remote_archive(self, archive_url): 58 archive_path = os.path.join(self._web_root, 'archive.zip') 59 _log.info('Downloading %s to %s' % (archive_url, archive_path)) 60 urllib.urlretrieve(archive_url, archive_path) 61 61 62 with ZipFile(archive Path, 'r') as archive:63 archive.extractall(self. dest)62 with ZipFile(archive_path, 'r') as archive: 63 archive.extractall(self._dest) 64 64 65 unarchived Files = filter(lambda name: not name.startswith('.'), os.listdir(self.dest))66 if len(unarchived Files) == 1:67 first File = os.path.join(self.dest, unarchivedFiles[0])68 if os.path.isdir(first File):69 shutil.move(first File, self.webRoot)70 os.rename(os.path.join(self. webRoot, unarchivedFiles[0]), self.dest)65 unarchived_files = filter(lambda name: not name.startswith('.'), os.listdir(self._dest)) 66 if len(unarchived_files) == 1: 67 first_file = os.path.join(self._dest, unarchived_files[0]) 68 if os.path.isdir(first_file): 69 shutil.move(first_file, self._web_root) 70 os.rename(os.path.join(self._web_root, unarchived_files[0]), self._dest) 71 71 72 def _checkout WithSubverion(self, subversionURL):73 _log.info('Checking out %s to %s' % (subversion URL, self.dest))74 error Code = subprocess.call(['svn', 'checkout', subversionURL, self.dest])75 if error Code:76 raise Exception('Cannot checkout the benchmark - Error: %s' % error Code)72 def _checkout_with_subversion(self, subversion_url): 73 _log.info('Checking out %s to %s' % (subversion_url, self._dest)) 74 error_code = subprocess.call(['svn', 'checkout', subversion_url, self._dest]) 75 if error_code: 76 raise Exception('Cannot checkout the benchmark - Error: %s' % error_code) 77 77 78 def _apply Patch(self, patch):79 old WorkingDirectory = os.getcwd()80 os.chdir(self. dest)81 error Code = subprocess.call(['patch', '-p1', '-f', '-i', getPathFromProjectRoot(patch)])82 os.chdir(old WorkingDirectory)83 if error Code:84 raise Exception('Cannot apply patch, will skip current benchmark Path - Error: %s' % errorCode)78 def _apply_patch(self, patch): 79 old_working_directory = os.getcwd() 80 os.chdir(self._dest) 81 error_code = subprocess.call(['patch', '-p1', '-f', '-i', get_path_from_project_root(patch)]) 82 os.chdir(old_working_directory) 83 if error_code: 84 raise Exception('Cannot apply patch, will skip current benchmark_path - Error: %s' % error_code) 85 85 86 86 def clean(self): 87 87 _log.info('Cleaning Benchmark') 88 if self. webRoot:89 force Remove(self.webRoot)88 if self._web_root: 89 force_remove(self._web_root) -
trunk/Tools/Scripts/webkitpy/benchmark_runner/benchmark_runner.py
r185859 r185898 17 17 from browser_driver.browser_driver_factory import BrowserDriverFactory 18 18 from http_server_driver.http_server_driver_factory import HTTPServerDriverFactory 19 from utils import getPathFromProjectRoot20 19 from utils import timeout 21 20 … … 26 25 class BenchmarkRunner(object): 27 26 28 def __init__(self, plan File, localCopy, countOverride, buildDir, outputFile, platform, browser, httpServerDriverOverride=None, deviceID=None):27 def __init__(self, plan_file, local_copy, count_override, build_dir, output_file, platform, browser, http_server_driver_override=None, device_id=None): 29 28 try: 30 plan File = self._findPlanFile(planFile)31 with open(plan File, 'r') as fp:32 self. planName = os.path.split(os.path.splitext(planFile)[0])[1]33 self. plan = json.load(fp)34 if local Copy:35 self. plan['local_copy'] = localCopy36 if count Override:37 self. plan['count'] = countOverride38 if http ServerDriverOverride:39 self. plan['http_server_driver'] = httpServerDriverOverride40 self. browserDriver = BrowserDriverFactory.create(platform, browser)41 self. httpServerDriver = HTTPServerDriverFactory.create(self.plan['http_server_driver'])42 self. httpServerDriver.setDeviceID(deviceID)43 self. buildDir = os.path.abspath(buildDir) if buildDir else None44 self. outputFile = outputFile45 self. deviceID = deviceID29 plan_file = self._find_plan_file(plan_file) 30 with open(plan_file, 'r') as fp: 31 self._plan_name = os.path.split(os.path.splitext(plan_file)[0])[1] 32 self._plan = json.load(fp) 33 if local_copy: 34 self._plan['local_copy'] = local_copy 35 if count_override: 36 self._plan['count'] = count_override 37 if http_server_driver_override: 38 self._plan['http_server_driver'] = http_server_driver_override 39 self._browser_driver = BrowserDriverFactory.create(platform, browser) 40 self._http_server_driver = HTTPServerDriverFactory.create(self._plan['http_server_driver']) 41 self._http_server_driver.set_device_id(device_id) 42 self._build_dir = os.path.abspath(build_dir) if build_dir else None 43 self._output_file = output_file 44 self._device_id = device_id 46 45 except IOError as error: 47 _log.error('Can not open plan file: %s - Error %s' % (plan File, error))46 _log.error('Can not open plan file: %s - Error %s' % (plan_file, error)) 48 47 raise error 49 48 except ValueError as error: 50 _log.error('Plan file: %s may not follow JSON format - Error %s' % (plan File, error))49 _log.error('Plan file: %s may not follow JSON format - Error %s' % (plan_file, error)) 51 50 raise error 52 51 53 def _find PlanFile(self, planFile):54 if not os.path.exists(plan File):55 absPath = os.path.join(os.path.dirname(__file__), 'data/plans', plan File)52 def _find_plan_file(self, plan_file): 53 if not os.path.exists(plan_file): 54 absPath = os.path.join(os.path.dirname(__file__), 'data/plans', plan_file) 56 55 if os.path.exists(absPath): 57 56 return absPath … … 60 59 if os.path.exists(absPath): 61 60 return absPath 62 return plan File61 return plan_file 63 62 64 63 def execute(self): … … 66 65 _log.info('Start a new benchmark') 67 66 results = [] 68 self. benchmarkBuilder = BenchmarkBuilderFactory.create(self.plan['benchmark_builder'])67 self._benchmark_builder = BenchmarkBuilderFactory.create(self._plan['benchmark_builder']) 69 68 70 web Root = self.benchmarkBuilder.prepare(self.planName, self.plan)71 for x in xrange(int(self. plan['count'])):69 web_root = self._benchmark_builder.prepare(self._plan_name, self._plan) 70 for x in xrange(int(self._plan['count'])): 72 71 _log.info('Start the iteration %d of current benchmark' % (x + 1)) 73 self. httpServerDriver.serve(webRoot)74 self. browserDriver.prepareEnv(self.deviceID)75 url = urlparse.urljoin(self. httpServerDriver.baseUrl(), self.planName + '/' + self.plan['entry_point'])76 self. browserDriver.launchUrl(url, self.buildDir)72 self._http_server_driver.serve(web_root) 73 self._browser_driver.prepare_env(self._device_id) 74 url = urlparse.urljoin(self._http_server_driver.base_url(), self._plan_name + '/' + self._plan['entry_point']) 75 self._browser_driver.launch_url(url, self._build_dir) 77 76 result = None 78 77 try: 79 with timeout(self. plan['timeout']):80 result = self. httpServerDriver.fetchResult()81 assert(not self. httpServerDriver.getReturnCode())78 with timeout(self._plan['timeout']): 79 result = self._http_server_driver.fetch_result() 80 assert(not self._http_server_driver.get_return_code()) 82 81 assert(result) 83 82 results.append(json.loads(result)) 84 83 except Exception as error: 85 _log.error('No result or the server crashed. Something went wrong. Will skip current benchmark.\nError: %s, Server return code: %d, result: %s' % (error, not self.httpServerDriver.getReturnCode(), result))86 self. cleanup()84 _log.error('No result or the server crashed. Something went wrong. Will skip current benchmark.\nError: %s, Server return code: %d, result: %s' % (error, self._http_server_driver.get_return_code(), result)) 85 self._cleanup() 87 86 sys.exit(1) 88 87 finally: 89 self. browserDriver.closeBrowsers()88 self._browser_driver.close_browsers() 90 89 _log.info('End of %d iteration of current benchmark' % (x + 1)) 91 results = self. wrap(results)92 self. dump(results, self.outputFile if self.outputFile else self.plan['output_file'])93 self. show_results(results)94 self. benchmarkBuilder.clean()90 results = self._wrap(results) 91 self._dump(results, self._output_file if self._output_file else self._plan['output_file']) 92 self._show_results(results) 93 self._benchmark_builder.clean() 95 94 sys.exit() 96 95 97 def cleanup(self):98 if self. browserDriver:99 self. browserDriver.closeBrowsers()100 if self. httpServerDriver:101 self. httpServerDriver.killServer()102 if self. benchmarkBuilder:103 self. benchmarkBuilder.clean()96 def _cleanup(self): 97 if self._browser_driver: 98 self._browser_driver.close_browsers() 99 if self._http_server_driver: 100 self._http_server_driver.kill_server() 101 if self._benchmark_builder: 102 self._benchmark_builder.clean() 104 103 105 104 @classmethod 106 def dump(cls, results, outputFile):105 def _dump(cls, results, output_file): 107 106 _log.info('Dumping the results to file') 108 107 try: 109 with open(output File, 'w') as fp:108 with open(output_file, 'w') as fp: 110 109 json.dump(results, fp) 111 110 except IOError as error: 112 _log.error('Cannot open output file: %s - Error: %s' % (output File, error))111 _log.error('Cannot open output file: %s - Error: %s' % (output_file, error)) 113 112 _log.error('Results are:\n %s', json.dumps(results)) 114 113 115 114 @classmethod 116 def wrap(cls, dicts):115 def _wrap(cls, dicts): 117 116 _log.debug('Merging following results:\n%s', json.dumps(dicts)) 118 117 if not dicts: … … 120 119 ret = {} 121 120 for dic in dicts: 122 ret = cls. merge(ret, dic)121 ret = cls._merge(ret, dic) 123 122 _log.debug('Results after merging:\n%s', json.dumps(ret)) 124 123 return ret 125 124 126 125 @classmethod 127 def merge(cls, a, b):126 def _merge(cls, a, b): 128 127 assert(isinstance(a, type(b))) 129 arg Type = type(a)128 arg_type = type(a) 130 129 # special handle for list type, and should be handle before equal check 131 if arg Type == types.ListType and len(a) and (type(a[0]) == types.StringType or type(a[0]) == types.UnicodeType):130 if arg_type == types.ListType and len(a) and (type(a[0]) == types.StringType or type(a[0]) == types.UnicodeType): 132 131 return a 133 if arg Type == types.DictType:132 if arg_type == types.DictType: 134 133 result = {} 135 134 for key, value in a.items(): 136 135 if key in b: 137 result[key] = cls. merge(value, b[key])136 result[key] = cls._merge(value, b[key]) 138 137 else: 139 138 result[key] = value … … 146 145 147 146 @classmethod 148 def show_results(cls, results):147 def _show_results(cls, results): 149 148 results = BenchmarkResults(results) 150 149 print results.format() -
trunk/Tools/Scripts/webkitpy/benchmark_runner/browser_driver/browser_driver.py
r185859 r185898 9 9 10 10 @abc.abstractmethod 11 def prepare Env(self, deviceID):11 def prepare_env(self, device_id): 12 12 pass 13 13 14 14 @abc.abstractmethod 15 def launch Url(self, url, browserBuildPath=None):15 def launch_url(self, url, browser_build_path=None): 16 16 pass 17 17 18 18 @abc.abstractmethod 19 def close Browser(self):19 def close_browsers(self): 20 20 pass -
trunk/Tools/Scripts/webkitpy/benchmark_runner/browser_driver/osx_browser_driver.py
r185859 r185898 11 11 12 12 class OSXBrowserDriver(BrowserDriver): 13 bundle Identifier = None13 bundle_identifier = None 14 14 platform = 'osx' 15 15 16 def prepare Env(self, deviceID):17 self.close Browsers()16 def prepare_env(self, device_id): 17 self.close_browsers() 18 18 from Quartz import CGWarpMouseCursorPosition 19 19 CGWarpMouseCursorPosition((10, 0)) 20 20 21 def close Browsers(self):22 self. terminateProcesses(self.bundleIdentifier)21 def close_browsers(self): 22 self._terminiate_processes(self.bundle_identifier) 23 23 24 24 @classmethod 25 def launchProcess(cls, buildDir, appName, url, args):26 if not build Dir:27 build Dir = '/Applications/'28 app Path = os.path.join(buildDir, appName)25 def _launch_process(cls, build_dir, app_name, url, args): 26 if not build_dir: 27 build_dir = '/Applications/' 28 app_path = os.path.join(build_dir, app_name) 29 29 30 _log.info('Launching "%s" with url "%s"' % (app Path, url))30 _log.info('Launching "%s" with url "%s"' % (app_path, url)) 31 31 32 32 # FIXME: May need to be modified for a local build such as setting up DYLD libraries 33 args = ['open', '-a', app Path] + args34 cls. launchProcessWithCaffinate(args)33 args = ['open', '-a', app_path] + args 34 cls._launch_process_with_caffinate(args) 35 35 36 36 @classmethod 37 def terminateProcesses(cls, bundleIdentifier):38 _log.info('Closing all terminating all processes with the bundle identifier %s' % bundle Identifier)37 def _terminiate_processes(cls, bundle_identifier): 38 _log.info('Closing all terminating all processes with the bundle identifier %s' % bundle_identifier) 39 39 from AppKit import NSRunningApplication 40 processes = NSRunningApplication.runningApplicationsWithBundleIdentifier_(bundle Identifier)40 processes = NSRunningApplication.runningApplicationsWithBundleIdentifier_(bundle_identifier) 41 41 for process in processes: 42 42 process.terminate() 43 43 44 44 @classmethod 45 def launchProcessWithCaffinate(cls, args, env=None):45 def _launch_process_with_caffinate(cls, args, env=None): 46 46 process = subprocess.Popen(args, env=env) 47 47 subprocess.Popen(["/usr/bin/caffeinate", "-disw", str(process.pid)]) … … 49 49 50 50 @classmethod 51 def screenSize(cls):51 def _screen_size(cls): 52 52 from AppKit import NSScreen 53 53 return NSScreen.mainScreen().frame().size -
trunk/Tools/Scripts/webkitpy/benchmark_runner/browser_driver/osx_chrome_driver.py
r185859 r185898 13 13 14 14 class OSXChromeDriver(OSXBrowserDriver): 15 bundle Identifier = 'com.google.Chrome'15 bundle_identifier = 'com.google.Chrome' 16 16 browser_name = 'chrome' 17 17 18 def launch Url(self, url, browserBuildPath):19 self. launchProcess(buildDir=browserBuildPath, appName='Google Chrome.app', url=url, args=['--args', '--homepage', url, '--window-size={width},{height}'.format(width=int(self.screenSize().width), height=int(self.screenSize().height))])18 def launch_url(self, url, browser_build_path): 19 self._launch_process(build_dir=browser_build_path, app_name='Google Chrome.app', url=url, args=['--args', '--homepage', url, '--window-size={width},{height}'.format(width=int(self._screen_size().width), height=int(self._screen_size().height))]) 20 20 21 21 22 22 class OSXChromeCanaryDriver(OSXBrowserDriver): 23 bundle Identifier = 'com.google.Chrome.canary'23 bundle_identifier = 'com.google.Chrome.canary' 24 24 browser_name = 'chrome-canary' 25 25 26 def launch Url(self, url, browserBuildPath):27 self. launchProcess(buildDir=browserBuildPath, appName='Google Chrome Canary.app', url=url, args=['--args', '--homepage', url, '--window-size={width},{height}'.format(width=int(self.screenSize().width), height=int(self.screenSize().height))])26 def launch_url(self, url, browser_build_path): 27 self._launch_process(build_dir=browser_build_path, app_name='Google Chrome Canary.app', url=url, args=['--args', '--homepage', url, '--window-size={width},{height}'.format(width=int(self._screen_size().width), height=int(self._screen_size().height))]) -
trunk/Tools/Scripts/webkitpy/benchmark_runner/browser_driver/osx_firefox_driver.py
r185859 r185898 13 13 14 14 class OSXFirefoxDriver(OSXBrowserDriver): 15 bundle Identifier = 'org.mozilla.firefox'15 bundle_identifier = 'org.mozilla.firefox' 16 16 browser_name = 'firefox' 17 17 18 def launch Url(self, url, browserBuildPath):19 self. launchProcess(buildDir=browserBuildPath, appName='Firefox.app', url=url, args=[url, '--args', '-width', str(int(self.screenSize().width)), '-height', str(int(self.screenSize().height))])18 def launch_url(self, url, browser_build_path): 19 self._launch_process(build_dir=browser_build_path, app_name='Firefox.app', url=url, args=[url, '--args', '-width', str(int(self._screen_size().width)), '-height', str(int(self._screen_size().height))]) 20 20 21 21 22 22 class OSXFirefoxNightlyDriver(OSXBrowserDriver): 23 bundle Identifier = 'org.mozilla.nightly'23 bundle_identifier = 'org.mozilla.nightly' 24 24 browser_name = 'firefox-nightly' 25 25 26 def launch Url(self, url, browserBuildPath):27 self. launchProcess(buildDir=browserBuildPath, appName='FirefoxNightly.app', url=url, args=[url, '--args', '-width', str(int(self.screenSize().width)), '-height', str(int(self.screenSize().height))])26 def launch_url(self, url, browser_build_path): 27 self._launch_process(build_dir=browser_build_path, app_name='FirefoxNightly.app', url=url, args=[url, '--args', '-width', str(int(self._screen_size().width)), '-height', str(int(self._screen_size().height))]) -
trunk/Tools/Scripts/webkitpy/benchmark_runner/browser_driver/osx_safari_driver.py
r185859 r185898 8 8 9 9 from osx_browser_driver import OSXBrowserDriver 10 from webkitpy.benchmark_runner.utils import force Remove10 from webkitpy.benchmark_runner.utils import force_remove 11 11 12 12 … … 15 15 16 16 class OSXSafariDriver(OSXBrowserDriver): 17 bundle Identifier = 'com.apple.Safari'17 bundle_identifier = 'com.apple.Safari' 18 18 browser_name = 'safari' 19 19 20 def prepare Env(self, deviceID):21 self. safariProcess = None22 super(OSXSafariDriver, self).prepare Env(deviceID)23 force Remove(os.path.join(os.path.expanduser('~'), 'Library/Saved Application State/com.apple.Safari.savedState'))24 force Remove(os.path.join(os.path.expanduser('~'), 'Library/Safari/LastSession.plist'))25 self. maximizeWindow()26 self. safariPreferences = ["-HomePage", "about:blank", "-WarnAboutFraudulentWebsites", "0", "-ExtensionsEnabled", "0", "-ShowStatusBar", "0", "-NewWindowBehavior", "1", "-NewTabBehavior", "1"]20 def prepare_env(self, device_id): 21 self._safari_process = None 22 super(OSXSafariDriver, self).prepare_env(device_id) 23 force_remove(os.path.join(os.path.expanduser('~'), 'Library/Saved Application State/com.apple.Safari.savedState')) 24 force_remove(os.path.join(os.path.expanduser('~'), 'Library/Safari/LastSession.plist')) 25 self._maximize_window() 26 self._safari_preferences = ["-HomePage", "about:blank", "-WarnAboutFraudulentWebsites", "0", "-ExtensionsEnabled", "0", "-ShowStatusBar", "0", "-NewWindowBehavior", "1", "-NewTabBehavior", "1"] 27 27 28 def launch Url(self, url, browserBuildPath):28 def launch_url(self, url, browser_build_path): 29 29 args = ['/Applications/Safari.app/Contents/MacOS/Safari'] 30 30 env = {} 31 if browser BuildPath:32 safari AppInBuildPath = os.path.join(browserBuildPath, 'Safari.app/Contents/MacOS/Safari')33 if os.path.exists(safari AppInBuildPath):34 args = [safari AppInBuildPath]35 env = {'DYLD_FRAMEWORK_PATH': browser BuildPath, 'DYLD_LIBRARY_PATH': browserBuildPath, '__XPC_DYLD_LIBRARY_PATH': browserBuildPath}31 if browser_build_path: 32 safari_app_in_build_path = os.path.join(browser_build_path, 'Safari.app/Contents/MacOS/Safari') 33 if os.path.exists(safari_app_in_build_path): 34 args = [safari_app_in_build_path] 35 env = {'DYLD_FRAMEWORK_PATH': browser_build_path, 'DYLD_LIBRARY_PATH': browser_build_path, '__XPC_DYLD_LIBRARY_PATH': browser_build_path} 36 36 else: 37 _log.info('Could not find Safari.app at %s, using the system Safari instead' % safari AppInBuildPath)37 _log.info('Could not find Safari.app at %s, using the system Safari instead' % safari_app_in_build_path) 38 38 39 args.extend(self. safariPreferences)39 args.extend(self._safari_preferences) 40 40 _log.info('Launching safari: %s with url: %s' % (args[0], url)) 41 self. safariProcess = OSXSafariDriver.launchProcessWithCaffinate(args, env)41 self._safari_process = OSXSafariDriver._launch_process_with_caffinate(args, env) 42 42 43 43 # Stop for initialization of the safari process, otherwise, open … … 46 46 subprocess.Popen(['open', url]) 47 47 48 def close Browsers(self):49 super(OSXSafariDriver, self).close Browsers()50 if self. safariProcess and self.safariProcess.returncode:48 def close_browsers(self): 49 super(OSXSafariDriver, self).close_browsers() 50 if self._safari_process and self._safari_process.returncode: 51 51 sys.exit('Browser crashed with exitcode %d' % self._process.returncode) 52 52 53 53 @classmethod 54 def maximizeWindow(cls):54 def _maximize_window(cls): 55 55 try: 56 subprocess.check_call(['/usr/bin/defaults', 'write', 'com.apple.Safari', 'NSWindow Frame BrowserWindowFrame', ' '.join(['0', '0', str(cls. screenSize().width), str(cls.screenSize().height)] * 2)])56 subprocess.check_call(['/usr/bin/defaults', 'write', 'com.apple.Safari', 'NSWindow Frame BrowserWindowFrame', ' '.join(['0', '0', str(cls._screen_size().width), str(cls._screen_size().height)] * 2)]) 57 57 except Exception as error: 58 58 _log.error('Reset safari window size failed - Error: {}'.format(error)) -
trunk/Tools/Scripts/webkitpy/benchmark_runner/http_server_driver/http_server_driver.py
r185859 r185898 11 11 12 12 @abstractmethod 13 def fetch Result(self):13 def fetch_result(self): 14 14 pass 15 15 16 16 @abstractmethod 17 def kill Server(self):17 def kill_server(self): 18 18 pass 19 19 20 20 @abstractmethod 21 def get ReturnCode(self):21 def get_return_code(self): 22 22 pass 23 23 24 24 @abstractmethod 25 def set DeviceID(self, deviceID):25 def set_device_id(self, deviceID): 26 26 pass -
trunk/Tools/Scripts/webkitpy/benchmark_runner/http_server_driver/simple_http_server_driver.py
r185859 r185898 22 22 23 23 def __init__(self): 24 self. server_process = None25 self. server_port = 024 self._server_process = None 25 self._server_port = 0 26 26 # FIXME: This may not be reliable. 27 27 _log.info('Finding the IP address of current machine') 28 28 try: 29 self. ip = [ip for ip in socket.gethostbyname_ex(socket.gethostname())[2] if not ip.startswith("127.")][0]30 _log.info('IP of current machine is: %s' % self. ip)29 self._ip = [ip for ip in socket.gethostbyname_ex(socket.gethostname())[2] if not ip.startswith("127.")][0] 30 _log.info('IP of current machine is: %s' % self._ip) 31 31 except Exception as error: 32 32 _log.error('Cannot get the ip address of current machine - Error: %s' % error) … … 36 36 _log.info('Launching an http server') 37 37 http_server_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "http_server/twisted_http_server.py") 38 self. server_process = subprocess.Popen(["/usr/bin/python", http_server_path, web_root], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)38 self._server_process = subprocess.Popen(["/usr/bin/python", http_server_path, web_root], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 39 39 40 max Attempt = 540 max_attempt = 5 41 41 interval = 0.5 42 42 _log.info('Start to fetching the port number of the http server') 43 43 try: 44 44 import psutil 45 for attempt in xrange(max Attempt):45 for attempt in xrange(max_attempt): 46 46 try: 47 self. server_port = psutil.Process(self.server_process.pid).connections()[0][3][1]48 if self. server_port:49 _log.info('HTTP Server is serving at port: %d', self. server_port)47 self._server_port = psutil.Process(self._server_process.pid).connections()[0][3][1] 48 if self._server_port: 49 _log.info('HTTP Server is serving at port: %d', self._server_port) 50 50 break 51 51 except IndexError: … … 57 57 raise Exception("Cannot listen to server, max tries exceeded") 58 58 except ImportError: 59 for attempt in xrange(max Attempt):59 for attempt in xrange(max_attempt): 60 60 try: 61 output = subprocess.check_output(['/usr/sbin/lsof', '-a', '-iTCP', '-sTCP:LISTEN', '-p', str(self. server_process.pid)])62 self. server_port = int(re.search('TCP \*:(\d+) \(LISTEN\)', output).group(1))63 if self. server_port:64 _log.info('HTTP Server is serving at port: %d', self. server_port)61 output = subprocess.check_output(['/usr/sbin/lsof', '-a', '-iTCP', '-sTCP:LISTEN', '-p', str(self._server_process.pid)]) 62 self._server_port = int(re.search('TCP \*:(\d+) \(LISTEN\)', output).group(1)) 63 if self._server_port: 64 _log.info('HTTP Server is serving at port: %d', self._server_port) 65 65 break 66 66 except Exception as error: … … 73 73 74 74 # Wait for server to be up completely before exiting 75 for attempt in xrange(max Attempt):75 for attempt in xrange(max_attempt): 76 76 try: 77 subprocess.check_call(["curl", "--silent", "--head", "--fail", "--output", "/dev/null", self.base Url()])77 subprocess.check_call(["curl", "--silent", "--head", "--fail", "--output", "/dev/null", self.base_url()]) 78 78 return 79 79 except Exception as error: … … 82 82 raise Exception('Server not running, max tries exceeded: %s' % error) 83 83 84 def base_url(self): 85 return "http://%s:%d" % (self._ip, self._server_port) 84 86 85 def baseUrl(self): 86 return "http://%s:%d" % (self.ip, self.server_port) 87 88 def fetchResult(self): 89 (stdout, stderr) = self.server_process.communicate() 87 def fetch_result(self): 88 (stdout, stderr) = self._server_process.communicate() 90 89 print stderr 91 90 return stdout 92 91 93 def kill Server(self):92 def kill_server(self): 94 93 try: 95 self. server_process.terminate()94 self._server_process.terminate() 96 95 except OSError as error: 97 96 _log.info('Error terminating server process: %s' % (error)) 98 97 99 def get ReturnCode(self):100 return self. server_process.returncode98 def get_return_code(self): 99 return self._server_process.returncode -
trunk/Tools/Scripts/webkitpy/benchmark_runner/utils.py
r185859 r185898 31 31 32 32 33 def get PathFromProjectRoot(relativePathToProjectRoot):33 def get_path_from_project_root(relative_path_to_project_root): 34 34 # Choose the directory containing current file as start point, 35 35 # compute relative path base on the parameter, 36 36 # and return an absolute path 37 return os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)), relative PathToProjectRoot))37 return os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)), relative_path_to_project_root)) 38 38 39 39 40 def force Remove(path):40 def force_remove(path): 41 41 try: 42 42 shutil.rmtree(path)
Note: See TracChangeset
for help on using the changeset viewer.