| Differences between
and this patch
- a/Tools/ChangeLog +29 lines
Lines 1-3 a/Tools/ChangeLog_sec1
1
2015-06-18  Dewei Zhu  <dewei_zhu@apple.com>
2
3
        Extend run-benchmark script capability to supoort mobile device
4
        https://bugs.webkit.org/show_bug.cgi?id=146125
5
6
        Reviewed by NOBODY (OOPS!).
7
8
        * Scripts/run-benchmark:
9
        (main): Deleted.
10
        * Scripts/webkitpy/benchmark_runner/benchmark_runner.py:
11
        (BenchmarkRunner.__init__):
12
        (BenchmarkRunner.execute):
13
        * Scripts/webkitpy/benchmark_runner/browser_driver/browser_driver.py:
14
        (BrowserDriver.prepareEnv):
15
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_browser_driver.py:
16
        (OSXBrowserDriver.prepareEnv):
17
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_safari_driver.py:
18
        (OSXSafariDriver.prepareEnv):
19
        * Scripts/webkitpy/benchmark_runner/http_server_driver/http_server_driver.py:
20
        (HTTPServerDriver.getReturnCode):
21
        (HTTPServerDriver):
22
        (HTTPServerDriver.setDeviceID):
23
        * Scripts/webkitpy/benchmark_runner/run_benchmark.py: Copied from Tools/Scripts/run-benchmark.
24
        (parse_args):
25
        (start):
26
        (main):
27
        * Scripts/webkitpy/benchmark_runner/utils.py:
28
        (getPathFromProjectRoot):
29
1
2015-06-15  Chris Fleizach  <cfleizach@apple.com>
30
2015-06-15  Chris Fleizach  <cfleizach@apple.com>
2
31
3
        AX:  iOS accessibility tests are not running because we need WKTR support
32
        AX:  iOS accessibility tests are not running because we need WKTR support
- a/Tools/Scripts/run-benchmark -27 / +1 lines
Lines 1-12 a/Tools/Scripts/run-benchmark_sec1
1
#!/usr/bin/env python
1
#!/usr/bin/env python
2
2
3
import argparse
4
import logging
3
import logging
5
import platform
6
import sys
4
import sys
7
5
8
from webkitpy.benchmark_runner.benchmark_runner import BenchmarkRunner
6
from webkitpy.benchmark_runner.run_benchmark import main
9
from webkitpy.benchmark_runner.browser_driver.browser_driver_factory import BrowserDriverFactory
10
7
11
8
12
_log = logging.getLogger()
9
_log = logging.getLogger()
Lines 17-44 ch.setFormatter(formatter) a/Tools/Scripts/run-benchmark_sec2
17
_log.addHandler(ch)
14
_log.addHandler(ch)
18
15
19
16
20
def main():
21
    parser = argparse.ArgumentParser(description='Automate the browser based performance benchmarks')
22
    parser.add_argument('--output-file', dest='output', default=None)
23
    parser.add_argument('--build-directory', dest='buildDir', help='Path to the browser executable. e.g. WebKitBuild/Release/')
24
    parser.add_argument('--plan', dest='plan', required=True, help='Benchmark plan to run. e.g. speedometer, jetstream')
25
    parser.add_argument('--platform', dest='platform', required=True, choices=BrowserDriverFactory.available_platforms())
26
    # FIXME: Should we add chrome as an option? Well, chrome uses webkit in iOS.
27
    parser.add_argument('--browser', dest='browser', required=True, choices=BrowserDriverFactory.available_browsers())
28
    parser.add_argument('--debug', action='store_true')
29
    parser.add_argument('--local-copy', dest='localCopy', help='Path to a local copy of the benchmark. e.g. PerformanceTests/SunSpider/')
30
    parser.add_argument('--count', dest='countOverride', type=int, help='Number of times to run the benchmark. e.g. 5')
31
    args = parser.parse_args()
32
33
    if args.debug:
34
        _log.setLevel(logging.DEBUG)
35
    _log.debug('Initializing program with following parameters')
36
    _log.debug('\toutput file name\t: %s' % args.output)
37
    _log.debug('\tbuild directory\t: %s' % args.buildDir)
38
    _log.debug('\tplan name\t: %s', args.plan)
39
    runner = BenchmarkRunner(args.plan, args.localCopy, args.countOverride, args.buildDir, args.output, args.platform, args.browser)
40
    runner.execute()
41
42
43
if __name__ == '__main__':
17
if __name__ == '__main__':
44
    sys.exit(main())
18
    sys.exit(main())
- a/Tools/Scripts/webkitpy/benchmark_runner/benchmark_runner.py -3 / +7 lines
Lines 25-32 _log = logging.getLogger(__name__) a/Tools/Scripts/webkitpy/benchmark_runner/benchmark_runner.py_sec1
25
25
26
class BenchmarkRunner(object):
26
class BenchmarkRunner(object):
27
27
28
    def __init__(self, planFile, localCopy, countOverride, buildDir, outputFile, platform, browser):
28
    def __init__(self, planFile, localCopy, countOverride, buildDir, outputFile, platform, browser, httpServerDriverOverride=None, deviceID=None):
29
        _log.info('Initializing benchmark running')
29
        _log.info('Initializing benchmark runner')
30
        try:
30
        try:
31
            planFile = self._findPlanFile(planFile)
31
            planFile = self._findPlanFile(planFile)
32
            with open(planFile, 'r') as fp:
32
            with open(planFile, 'r') as fp:
Lines 36-45 class BenchmarkRunner(object): a/Tools/Scripts/webkitpy/benchmark_runner/benchmark_runner.py_sec2
36
                    self.plan['local_copy'] = localCopy
36
                    self.plan['local_copy'] = localCopy
37
                if countOverride:
37
                if countOverride:
38
                    self.plan['count'] = countOverride
38
                    self.plan['count'] = countOverride
39
                if httpServerDriverOverride:
40
                    self.plan['http_server_driver'] = httpServerDriverOverride
39
                self.browserDriver = BrowserDriverFactory.create([platform, browser])
41
                self.browserDriver = BrowserDriverFactory.create([platform, browser])
40
                self.httpServerDriver = HTTPServerDriverFactory.create([self.plan['http_server_driver']])
42
                self.httpServerDriver = HTTPServerDriverFactory.create([self.plan['http_server_driver']])
43
                self.httpServerDriver.setDeviceID(deviceID)
41
                self.buildDir = os.path.abspath(buildDir) if buildDir else None
44
                self.buildDir = os.path.abspath(buildDir) if buildDir else None
42
                self.outputFile = outputFile
45
                self.outputFile = outputFile
46
                self.deviceID = deviceID
43
        except IOError as error:
47
        except IOError as error:
44
            _log.error('Can not open plan file: %s - Error %s' % (planFile, error))
48
            _log.error('Can not open plan file: %s - Error %s' % (planFile, error))
45
            raise error
49
            raise error
Lines 68-74 class BenchmarkRunner(object): a/Tools/Scripts/webkitpy/benchmark_runner/benchmark_runner.py_sec3
68
        for x in xrange(int(self.plan['count'])):
72
        for x in xrange(int(self.plan['count'])):
69
            _log.info('Start the iteration %d of current benchmark' % (x + 1))
73
            _log.info('Start the iteration %d of current benchmark' % (x + 1))
70
            self.httpServerDriver.serve(webRoot)
74
            self.httpServerDriver.serve(webRoot)
71
            self.browserDriver.prepareEnv()
75
            self.browserDriver.prepareEnv(self.deviceID)
72
            url = urlparse.urljoin(self.httpServerDriver.baseUrl(), self.planName + '/' + self.plan['entry_point'])
76
            url = urlparse.urljoin(self.httpServerDriver.baseUrl(), self.planName + '/' + self.plan['entry_point'])
73
            self.browserDriver.launchUrl(url, self.buildDir)
77
            self.browserDriver.launchUrl(url, self.buildDir)
74
            result = None
78
            result = None
- a/Tools/Scripts/webkitpy/benchmark_runner/browser_driver/browser_driver.py -1 / +1 lines
Lines 6-12 import abc a/Tools/Scripts/webkitpy/benchmark_runner/browser_driver/browser_driver.py_sec1
6
class BrowserDriver(object):
6
class BrowserDriver(object):
7
7
8
    @abc.abstractmethod
8
    @abc.abstractmethod
9
    def prepareEnv(self):
9
    def prepareEnv(self, udid=None):
10
        pass
10
        pass
11
11
12
    @abc.abstractmethod
12
    @abc.abstractmethod
- a/Tools/Scripts/webkitpy/benchmark_runner/browser_driver/osx_browser_driver.py -1 / +1 lines
Lines 15-21 _log = logging.getLogger(__name__) a/Tools/Scripts/webkitpy/benchmark_runner/browser_driver/osx_browser_driver.py_sec1
15
class OSXBrowserDriver(BrowserDriver):
15
class OSXBrowserDriver(BrowserDriver):
16
    bundleIdentifier = None
16
    bundleIdentifier = None
17
17
18
    def prepareEnv(self):
18
    def prepareEnv(self, udid=None):
19
        self.closeBrowsers()
19
        self.closeBrowsers()
20
        CGWarpMouseCursorPosition((10, 0))
20
        CGWarpMouseCursorPosition((10, 0))
21
21
- a/Tools/Scripts/webkitpy/benchmark_runner/browser_driver/osx_safari_driver.py -1 / +1 lines
Lines 16-22 _log = logging.getLogger(__name__) a/Tools/Scripts/webkitpy/benchmark_runner/browser_driver/osx_safari_driver.py_sec1
16
class OSXSafariDriver(OSXBrowserDriver):
16
class OSXSafariDriver(OSXBrowserDriver):
17
    bundleIdentifier = 'com.apple.Safari'
17
    bundleIdentifier = 'com.apple.Safari'
18
18
19
    def prepareEnv(self):
19
    def prepareEnv(self, udid=None):
20
        self.safariProcess = None
20
        self.safariProcess = None
21
        super(OSXSafariDriver, self).prepareEnv()
21
        super(OSXSafariDriver, self).prepareEnv()
22
        forceRemove(os.path.join(os.path.expanduser('~'), 'Library/Saved Application State/com.apple.Safari.savedState'))
22
        forceRemove(os.path.join(os.path.expanduser('~'), 'Library/Saved Application State/com.apple.Safari.savedState'))
- a/Tools/Scripts/webkitpy/benchmark_runner/http_server_driver/http_server_driver.py +4 lines
Lines 19-21 class HTTPServerDriver(object): a/Tools/Scripts/webkitpy/benchmark_runner/http_server_driver/http_server_driver.py_sec1
19
    @abstractmethod
19
    @abstractmethod
20
    def getReturnCode(self):
20
    def getReturnCode(self):
21
        pass
21
        pass
22
23
    @abstractmethod
24
    def setDeviceID(self, deviceID):
25
        pass
- a/Tools/Scripts/webkitpy/benchmark_runner/run_benchmark.py +52 lines
Line 0 a/Tools/Scripts/webkitpy/benchmark_runner/run_benchmark.py_sec1
1
#!/usr/bin/env python
2
3
import argparse
4
import logging
5
import platform
6
import os
7
8
from benchmark_runner import BenchmarkRunner
9
from browser_driver.browser_driver_factory import BrowserDriverFactory
10
11
12
_log = logging.getLogger(__name__)
13
# _log.setLevel(logging.INFO)
14
# ch = logging.StreamHandler()
15
# formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
16
# ch.setFormatter(formatter)
17
# _log.addHandler(ch)
18
19
20
def parse_args():
21
    parser = argparse.ArgumentParser(description='Automate the browser based performance benchmarks')
22
    parser.add_argument('--output-file', dest='output', default=None)
23
    parser.add_argument('--build-directory', dest='buildDir', help='Path to the browser executable. e.g. WebKitBuild/Release/')
24
    parser.add_argument('--plan', dest='plan', required=True, help='Benchmark plan to run. e.g. speedometer, jetstream')
25
    parser.add_argument('--platform', dest='platform', required=True, choices=BrowserDriverFactory.available_platforms())
26
    # FIXME: Should we add chrome as an option? Well, chrome uses webkit in iOS.
27
    parser.add_argument('--browser', dest='browser', required=True, choices=BrowserDriverFactory.available_browsers())
28
    parser.add_argument('--debug', action='store_true')
29
    parser.add_argument('--local-copy', dest='localCopy', help='Path to a local copy of the benchmark. e.g. PerformanceTests/SunSpider/')
30
    parser.add_argument('--count', dest='countOverride', type=int, help='Number of times to run the benchmark. e.g. 5')
31
    parser.add_argument('--http-server-driver', dest='httpServerDriverOverride', default=None, help='Specify which HTTP server you wants to use')
32
    parser.add_argument('--device-id', dest='device_id', default=None)
33
34
    args = parser.parse_args()
35
36
    if args.debug:
37
        _log.setLevel(logging.DEBUG)
38
    _log.debug('Initializing program with following parameters')
39
    _log.debug('\toutput file name\t: %s' % args.output)
40
    _log.debug('\tbuild directory\t: %s' % args.buildDir)
41
    _log.debug('\tplan name\t: %s', args.plan)
42
43
    return args
44
45
46
def start(args):
47
    runner = BenchmarkRunner(args.plan, args.localCopy, args.countOverride, args.buildDir, args.output, args.platform, args.browser, args.httpServerDriverOverride, args.device_id)
48
    runner.execute()
49
50
51
def main():
52
    start(parse_args())
- a/Tools/Scripts/webkitpy/benchmark_runner/utils.py -1 / +1 lines
Lines 23-29 def loadModule(moduleDesc): a/Tools/Scripts/webkitpy/benchmark_runner/utils.py_sec1
23
23
24
24
25
def getPathFromProjectRoot(relativePathToProjectRoot):
25
def getPathFromProjectRoot(relativePathToProjectRoot):
26
    # Choose the directory containning current file as start point,
26
    # Choose the directory containing current file as start point,
27
    # compute relative path base on the parameter,
27
    # compute relative path base on the parameter,
28
    # and return an absolute path
28
    # and return an absolute path
29
    return os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)), relativePathToProjectRoot))
29
    return os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)), relativePathToProjectRoot))

Return to Bug 146125