Changeset 185859 in webkit
- Timestamp:
- Jun 22, 2015 8:47:24 PM (9 years ago)
- Location:
- trunk/Tools
- Files:
-
- 3 deleted
- 18 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Tools/ChangeLog
r185857 r185859 1 2015-06-22 Dewei Zhu <dewei_zhu@apple.com> 2 3 Get rid of factory json files in benchmark_runner 4 https://bugs.webkit.org/show_bug.cgi?id=146175 5 6 Reviewed by Ryosuke Niwa. 7 8 Get rid of factory json files in benchmark_runner and refactoring the code. 9 10 * Scripts/webkitpy/benchmark_runner/benchmark_builder/__init__.py: 11 (benchmark_builder_loader): 12 * Scripts/webkitpy/benchmark_runner/benchmark_builder/benchmark_builder_factory.py: 13 (BenchmarkBuilderFactory): 14 * Scripts/webkitpy/benchmark_runner/benchmark_builder/benchmark_builders.json: Removed. 15 * Scripts/webkitpy/benchmark_runner/benchmark_builder/generic_benchmark_builder.py: 16 (GenericBenchmarkBuilder): 17 * Scripts/webkitpy/benchmark_runner/benchmark_runner.py: 18 (BenchmarkRunner.__init__): 19 (BenchmarkRunner.execute): 20 * Scripts/webkitpy/benchmark_runner/browser_driver/__init__.py: 21 (browser_driver_loader): 22 * Scripts/webkitpy/benchmark_runner/browser_driver/browser_driver.py: 23 (BrowserDriver): 24 * Scripts/webkitpy/benchmark_runner/browser_driver/browser_driver_factory.py: 25 (BrowserDriverFactory): 26 (BrowserDriverFactory.available_platforms): 27 (BrowserDriverFactory.available_browsers): 28 (BrowserDriverFactory.add_browser_driver): 29 (BrowserDriverFactory.create): 30 * Scripts/webkitpy/benchmark_runner/browser_driver/browser_drivers.json: Removed. 31 * Scripts/webkitpy/benchmark_runner/browser_driver/osx_browser_driver.py: 32 (OSXBrowserDriver): 33 (OSXBrowserDriver.prepareEnv): 34 (OSXBrowserDriver.terminateProcesses): 35 (OSXBrowserDriver.screenSize): 36 * Scripts/webkitpy/benchmark_runner/browser_driver/osx_chrome_driver.py: 37 (OSXChromeDriver): 38 (OSXChromeCanaryDriver): 39 * Scripts/webkitpy/benchmark_runner/browser_driver/osx_firefox_driver.py: 40 (OSXFirefoxDriver): 41 (OSXFirefoxNightlyDriver): 42 * Scripts/webkitpy/benchmark_runner/browser_driver/osx_safari_driver.py: 43 (OSXSafariDriver): 44 * Scripts/webkitpy/benchmark_runner/generic_factory.py: 45 (GenericFactory.create): 46 (GenericFactory.add): 47 (GenericFactory.iterateGetItem): Deleted. 48 * Scripts/webkitpy/benchmark_runner/http_server_driver/__init__.py: 49 (http_server_driver_loader): 50 * Scripts/webkitpy/benchmark_runner/http_server_driver/http_server_driver.py: 51 (HTTPServerDriver): 52 * Scripts/webkitpy/benchmark_runner/http_server_driver/http_server_driver_factory.py: 53 (HTTPServerDriverFactory): 54 * Scripts/webkitpy/benchmark_runner/http_server_driver/http_server_drivers.json: Removed. 55 * Scripts/webkitpy/benchmark_runner/http_server_driver/simple_http_server_driver.py: 56 (SimpleHTTPServerDriver): 57 * Scripts/webkitpy/benchmark_runner/utils.py: 58 (is_subclass): 59 (load_subclasses): 60 (ModuleNotFoundError): Deleted. 61 (loadModule): Deleted. 62 (loadJSONFromFile): Deleted. 63 1 64 2015-06-22 Simon Fraser <simon.fraser@apple.com> 2 65 -
trunk/Tools/Scripts/webkitpy/benchmark_runner/benchmark_builder/__init__.py
r183443 r185859 12 12 # allows different callers to choose different initialization code, 13 13 # as necessary. 14 import os 15 16 from webkitpy.benchmark_runner.utils import load_subclasses 17 from benchmark_builder_factory import BenchmarkBuilderFactory 18 19 20 def benchmark_builder_loader(benchmark_builder_class): 21 if benchmark_builder_class.builder_name: 22 BenchmarkBuilderFactory.add(benchmark_builder_class.builder_name, benchmark_builder_class) 23 24 25 load_subclasses( 26 dirname=os.path.dirname(os.path.abspath(__file__)), 27 base_class_name='GenericBenchmarkBuilder', 28 loader=benchmark_builder_loader) -
trunk/Tools/Scripts/webkitpy/benchmark_runner/benchmark_builder/benchmark_builder_factory.py
r183309 r185859 6 6 7 7 from webkitpy.benchmark_runner.generic_factory import GenericFactory 8 from webkitpy.benchmark_runner.utils import loadJSONFromFile9 10 11 builderFileName = 'benchmark_builders.json'12 8 13 9 14 10 class BenchmarkBuilderFactory(GenericFactory): 15 11 16 products = loadJSONFromFile(os.path.join(os.path.dirname(__file__), builderFileName))12 products = {} -
trunk/Tools/Scripts/webkitpy/benchmark_runner/benchmark_builder/generic_benchmark_builder.py
r185371 r185859 16 16 17 17 class GenericBenchmarkBuilder(object): 18 19 builder_name = 'GenericBenchmarkBuilder' 18 20 19 21 def prepare(self, name, plan): -
trunk/Tools/Scripts/webkitpy/benchmark_runner/benchmark_runner.py
r185732 r185859 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 loadModule,getPathFromProjectRoot19 from utils import getPathFromProjectRoot 20 20 from utils import timeout 21 21 … … 38 38 if httpServerDriverOverride: 39 39 self.plan['http_server_driver'] = httpServerDriverOverride 40 self.browserDriver = BrowserDriverFactory.create( [platform, browser])41 self.httpServerDriver = HTTPServerDriverFactory.create( [self.plan['http_server_driver']])40 self.browserDriver = BrowserDriverFactory.create(platform, browser) 41 self.httpServerDriver = HTTPServerDriverFactory.create(self.plan['http_server_driver']) 42 42 self.httpServerDriver.setDeviceID(deviceID) 43 43 self.buildDir = os.path.abspath(buildDir) if buildDir else None … … 66 66 _log.info('Start a new benchmark') 67 67 results = [] 68 self.benchmarkBuilder = BenchmarkBuilderFactory.create( [self.plan['benchmark_builder']])68 self.benchmarkBuilder = BenchmarkBuilderFactory.create(self.plan['benchmark_builder']) 69 69 70 70 webRoot = self.benchmarkBuilder.prepare(self.planName, self.plan) -
trunk/Tools/Scripts/webkitpy/benchmark_runner/browser_driver/__init__.py
r183443 r185859 12 12 # allows different callers to choose different initialization code, 13 13 # as necessary. 14 import os 15 16 from webkitpy.benchmark_runner.utils import load_subclasses 17 from browser_driver_factory import BrowserDriverFactory 18 19 20 def browser_driver_loader(browser_driver_class): 21 if browser_driver_class.platform and browser_driver_class.browser_name: 22 BrowserDriverFactory.add_browser_driver(browser_driver_class.platform, browser_driver_class.browser_name, browser_driver_class) 23 24 25 load_subclasses( 26 dirname=os.path.dirname(os.path.abspath(__file__)), 27 base_class_name='BrowserDriver', 28 loader=browser_driver_loader) -
trunk/Tools/Scripts/webkitpy/benchmark_runner/browser_driver/browser_driver.py
r185732 r185859 5 5 6 6 class BrowserDriver(object): 7 platform = None 8 browser_name = None 7 9 8 10 @abc.abstractmethod -
trunk/Tools/Scripts/webkitpy/benchmark_runner/browser_driver/browser_driver_factory.py
r184044 r185859 5 5 import os 6 6 7 from webkitpy.benchmark_runner.generic_factory import GenericFactory8 from webkitpy.benchmark_runner.utils import loadJSONFromFile9 7 8 class BrowserDriverFactory(object): 10 9 11 driverFileName = 'browser_drivers.json' 10 browser_drivers = {} 11 platforms = set() 12 browsers = set() 12 13 13 14 class BrowserDriverFactory(GenericFactory):15 16 products = loadJSONFromFile(os.path.join(os.path.dirname(__file__), driverFileName))17 14 18 15 @classmethod 19 16 def available_platforms(cls): 20 return cls.products.keys()17 return list(cls.platforms) 21 18 22 19 @classmethod 23 20 def available_browsers(cls): 24 browsers = [] 25 for platform in cls.products.values(): 26 for browser in platform: 27 browsers.append(browser) 28 return browsers 21 return list(cls.browsers) 22 23 @classmethod 24 def add_browser_driver(cls, platform, browser_name, browser_driver_class): 25 cls.platforms.add(platform) 26 cls.browsers.add(browser_name) 27 if platform not in cls.browser_drivers: 28 cls.browser_drivers[platform] = {} 29 cls.browser_drivers[platform][browser_name] = browser_driver_class 30 31 @classmethod 32 def create(cls, platform, browser_name): 33 return cls.browser_drivers[platform][browser_name]() -
trunk/Tools/Scripts/webkitpy/benchmark_runner/browser_driver/osx_browser_driver.py
r185732 r185859 4 4 import subprocess 5 5 6 from AppKit import NSRunningApplication7 from AppKit import NSScreen8 from Quartz import CGWarpMouseCursorPosition9 6 from browser_driver import BrowserDriver 10 7 … … 15 12 class OSXBrowserDriver(BrowserDriver): 16 13 bundleIdentifier = None 14 platform = 'osx' 17 15 18 16 def prepareEnv(self, deviceID): 19 17 self.closeBrowsers() 18 from Quartz import CGWarpMouseCursorPosition 20 19 CGWarpMouseCursorPosition((10, 0)) 21 20 … … 38 37 def terminateProcesses(cls, bundleIdentifier): 39 38 _log.info('Closing all terminating all processes with the bundle identifier %s' % bundleIdentifier) 39 from AppKit import NSRunningApplication 40 40 processes = NSRunningApplication.runningApplicationsWithBundleIdentifier_(bundleIdentifier) 41 41 for process in processes: … … 50 50 @classmethod 51 51 def screenSize(cls): 52 from AppKit import NSScreen 52 53 return NSScreen.mainScreen().frame().size -
trunk/Tools/Scripts/webkitpy/benchmark_runner/browser_driver/osx_chrome_driver.py
r185483 r185859 14 14 class OSXChromeDriver(OSXBrowserDriver): 15 15 bundleIdentifier = 'com.google.Chrome' 16 browser_name = 'chrome' 16 17 17 18 def launchUrl(self, url, browserBuildPath): … … 21 22 class OSXChromeCanaryDriver(OSXBrowserDriver): 22 23 bundleIdentifier = 'com.google.Chrome.canary' 24 browser_name = 'chrome-canary' 23 25 24 26 def launchUrl(self, url, browserBuildPath): -
trunk/Tools/Scripts/webkitpy/benchmark_runner/browser_driver/osx_firefox_driver.py
r185483 r185859 14 14 class OSXFirefoxDriver(OSXBrowserDriver): 15 15 bundleIdentifier = 'org.mozilla.firefox' 16 browser_name = 'firefox' 16 17 17 18 def launchUrl(self, url, browserBuildPath): … … 21 22 class OSXFirefoxNightlyDriver(OSXBrowserDriver): 22 23 bundleIdentifier = 'org.mozilla.nightly' 24 browser_name = 'firefox-nightly' 23 25 24 26 def launchUrl(self, url, browserBuildPath): -
trunk/Tools/Scripts/webkitpy/benchmark_runner/browser_driver/osx_safari_driver.py
r185785 r185859 16 16 class OSXSafariDriver(OSXBrowserDriver): 17 17 bundleIdentifier = 'com.apple.Safari' 18 browser_name = 'safari' 18 19 19 20 def prepareEnv(self, deviceID): -
trunk/Tools/Scripts/webkitpy/benchmark_runner/generic_factory.py
r185243 r185859 3 3 import logging 4 4 import os 5 6 from utils import loadModule, ModuleNotFoundError7 5 8 6 … … 15 13 16 14 @classmethod 17 def iterateGetItem(cls, options, keys): 18 ret = options 19 for key in keys: 20 try: 21 ret = ret.__getitem__(key) 22 except KeyError: 23 raise 24 return ret 15 def create(cls, description): 16 return cls.products[description]() 25 17 26 18 @classmethod 27 def create(cls, descriptions): 28 try: 29 return loadModule(cls.iterateGetItem(cls.products, descriptions))() 30 except Exception: 31 raise 19 def add(cls, description, product): 20 cls.products[description] = product -
trunk/Tools/Scripts/webkitpy/benchmark_runner/http_server_driver/__init__.py
r183443 r185859 12 12 # allows different callers to choose different initialization code, 13 13 # as necessary. 14 import os 15 import imp 16 17 from webkitpy.benchmark_runner.utils import load_subclasses 18 from http_server_driver_factory import HTTPServerDriverFactory 19 20 21 def http_server_driver_loader(http_server_driver_class): 22 if http_server_driver_class.name: 23 HTTPServerDriverFactory.add(http_server_driver_class.name, http_server_driver_class) 24 25 26 load_subclasses( 27 dirname=os.path.dirname(os.path.abspath(__file__)), 28 base_class_name='HTTPServerDriver', 29 loader=http_server_driver_loader) -
trunk/Tools/Scripts/webkitpy/benchmark_runner/http_server_driver/http_server_driver.py
r185732 r185859 5 5 6 6 class HTTPServerDriver(object): 7 name = None 7 8 @abstractmethod 8 9 def serve(self, webRoot): -
trunk/Tools/Scripts/webkitpy/benchmark_runner/http_server_driver/http_server_driver_factory.py
r183309 r185859 6 6 7 7 from webkitpy.benchmark_runner.generic_factory import GenericFactory 8 from webkitpy.benchmark_runner.utils import loadJSONFromFile9 10 11 driverFileName = 'http_server_drivers.json'12 8 13 9 14 10 class HTTPServerDriverFactory(GenericFactory): 15 16 products = loadJSONFromFile(os.path.join(os.path.dirname(__file__), driverFileName)) 11 products = {} -
trunk/Tools/Scripts/webkitpy/benchmark_runner/http_server_driver/simple_http_server_driver.py
r185244 r185859 19 19 """This class depends on unix environment, need to be modified to achieve crossplatform compability 20 20 """ 21 name = 'SimpleHTTPServerDriver' 21 22 22 23 def __init__(self): -
trunk/Tools/Scripts/webkitpy/benchmark_runner/utils.py
r185732 r185859 1 1 #!/usr/bin/env python 2 2 3 import json 3 import imp 4 import inspect 4 5 import logging 5 6 import os 6 7 import signal 7 8 import shutil 9 import sys 8 10 9 11 … … 11 13 12 14 13 class ModuleNotFoundError(Exception): 14 pass 15 # Borrow following code from stackoverflow 16 # Link: http://stackoverflow.com/questions/11461356/issubclass-returns-flase-on-the-same-class-imported-from-different-paths 17 def is_subclass(child, parent_name): 18 return inspect.isclass(child) and parent_name in [cls.__name__ for cls in inspect.getmro(child)] 15 19 16 20 17 def loadModule(moduleDesc): 18 try: 19 ret = getattr(__import__(moduleDesc['filePath'], globals(), locals(), moduleDesc['moduleName'], -1), moduleDesc['moduleName']) 20 return ret 21 except Exception as error: 22 raise ModuleNotFoundError('Error loading module (%s) with path(%s): {%s}' % (moduleDesc['moduleName'], moduleDesc['filePath'], error)) 21 def load_subclasses(dirname, base_class_name, loader): 22 for filename in os.listdir(dirname): 23 if not filename.endswith('.py') or filename in ['__init__.py']: 24 continue 25 module_name = filename[:-3] 26 module = imp.load_source(module_name, os.path.join(dirname, filename)) 27 for item_name in dir(module): 28 item = getattr(module, item_name) 29 if is_subclass(item, base_class_name): 30 loader(item) 23 31 24 32 … … 28 36 # and return an absolute path 29 37 return os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)), relativePathToProjectRoot)) 30 31 32 def loadJSONFromFile(filePath):33 try:34 jsonObject = json.load(open(filePath, 'r'))35 assert(jsonObject)36 return jsonObject37 except Exception as error:38 raise Exception("Invalid json format or empty json was found in %s - Error: %s" % (filePath, error))39 38 40 39
Note: See TracChangeset
for help on using the changeset viewer.