Ori.livneh has submitted this change and it was merged. Change subject: vbench: code clean-ups ......................................................................
vbench: code clean-ups Change-Id: I31f0079cba44d419dca06927c3b045bd602b8f5e --- M files/ve/vbench 1 file changed, 93 insertions(+), 61 deletions(-) Approvals: Ori.livneh: Verified; Looks good to me, approved diff --git a/files/ve/vbench b/files/ve/vbench index 53fe39e..cffbae1 100755 --- a/files/ve/vbench +++ b/files/ve/vbench @@ -4,24 +4,18 @@ vbench - VisualEditor benchmarking tool ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - usage: vbench [--host HOST] [--port PORT] [--repeat N] [--log-requests] - [--write-profiles] [--verbose] [--display DISPLAY_OPTIONS] - [--latency] URL - - positional arguments: - URL URL to load - - optional arguments: - -h, --help show this help message and exit - --host HOST Chromium host (default: localhost) - --port PORT Chromium port (default: 9222) - --repeat N times to repeat (default: 5) - --log-requests log uncached network requests - --write-profiles save profiling data as .cpuprofile files. - --verbose log verbosely - --display OPTIONS set device display metrics to WIDTHxHEIGHT or - WIDTHxHEIGHT*SCALE_FACTOR. - --latency simulate realistic network conditions + Usage: vbench [OPTIONS] URL + -h, --help show this help message and exit + --host HOST Chromium host (default: localhost) + --port PORT Chromium port (default: 9222) + --repeat N times to repeat (default: 5) + --log-requests log uncached network requests + --write-profile-data save profiling data as .cpuprofile files. + --verbose log verbosely + --display DISPLAY set device display metrics to WIDTHxHEIGHT or + WIDTHxHEIGHT*SCALE_FACTOR + --extra-latency-ms N simulate network conditions by adding N + milliseconds of latency to network requests Copyright 2015 Ori Livneh <[email protected]> @@ -86,10 +80,10 @@ class Highlighter(object): RED, GREEN, YELLOW, BLUE, WHITE = ('\x1b[1;3%sm' % n for n in '12347') + RESET = '\x1b[0m' SUBS = {'^': RED, '@': GREEN, '_': YELLOW, '~': BLUE, '*': WHITE} RE = re.compile(r'(?P<meta>[%s])\((?P<text>.+?)\)(?P=meta)' % ''.join(SUBS)) - RESET = '\x1b[0m' def __init__(self, use_color=True): self.use_color = use_color @@ -104,6 +98,9 @@ class HighlightingFormatter(logging.Formatter, Highlighter): + """A formatter for the Python standard library's logging module + that uses `Highlighter` to colorize text.""" + def __init__(self, use_color=False): self.use_color = use_color super(HighlightingFormatter, self).__init__( @@ -239,6 +236,7 @@ def onConnect(self, response): self.message_ids = itertools.count() self.requests = {} + self.cached_requests = set() self.deferreds = {} self.cpu_times = [] self.wall_times = [] @@ -270,17 +268,15 @@ if self.factory.display: yield self.page.setDeviceMetricsOverride(**self.factory.display) - if self.factory.latency: - # FIXME: Make this configurable. - throughput = 256 * 1024 + if self.factory.extra_latency_ms: yield self.network.emulateNetworkConditions( - offline=False, latency=100, downloadThroughput=throughput, - uploadThroughput=throughput) + offline=False, latency=self.factory.extra_latency_ms, + downloadThroughput=0, uploadThroughput=0) yield self.onProfilerReady() def onNetworkRequestServedFromCache(self, params=None): - del self.requests[params['requestId']] + self.cached_requests.add(params['requestId']) def onNetworkRequestWillBeSent(self, params=None): self.requests[params['requestId']] = params['request'] @@ -297,18 +293,20 @@ def onProfilerConsoleProfileStarted(self, params=None): self.requests.clear() + self.cached_requests.clear() def onProfilerConsoleProfileFinished(self, params=None): data = params['profile'] - if self.factory.write_profiles: + if self.factory.write_profile_data: self.writeProfilerData(data) profile = ChromeCPUProfile(data) if self.factory.log_requests: - for req in self.requests.values(): - log.info('[*(%(method)s)*] %(url)s', req) + for id, req in self.requests.items(): + if id not in self.cached_requests: + log.info('[*(%(method)s)*] %(url)s', req) self.cpu_times.append(profile.cpu_time) self.wall_times.append(profile.wall_time) @@ -360,21 +358,16 @@ class ChromeRemoteDebuggingFactory(WebSocketClientFactory): - def __init__(self, url, host='localhost', port=9222, write_profiles=False, - repetitions=5, log_requests=False, display=False, - latency=False): - self.host = host - self.port = port - self.repetitions = repetitions - self.target_url = url.replace('https://', 'http://', 1) # force HTTP - self.write_profiles = write_profiles - self.log_requests = log_requests - self.display = display - self.latency = latency - tabs = self.getTabs() - tab = next(t for t in tabs if 'webSocketDebuggerUrl' in t) - WebSocketClientFactory.__init__(self, tab['webSocketDebuggerUrl']) + def __init__(self, target_url, **kwargs): + self.__dict__.update(kwargs) + self.target_url = target_url.replace('https://', 'http://', 1) + WebSocketClientFactory.__init__(self, self.getConnectableTabUrl()) self.protocol = ChromeRemoteDebuggingProtocol + + def getConnectableTabUrl(self): + for tab in self.getTabs(): + if 'webSocketDebuggerUrl' in tab: + return tab['webSocketDebuggerUrl'] def getTabs(self): req = urllib2.urlopen('http://%s:%s/json' % (self.host, self.port)) @@ -382,29 +375,68 @@ ap = argparse.ArgumentParser(fromfile_prefix_chars='@') -ap.add_argument('--host', default='localhost', - help='Chromium host (default: localhost)') -ap.add_argument('--port', default=9222, type=int, - help='Chromium port (default: 9222)') -ap.add_argument('--repeat', default=5, metavar='N', type=int, - dest='repetitions', help='times to repeat (default: 5)') -ap.add_argument('--log-requests', action='store_true', default=False, - help='log uncached network requests') -ap.add_argument('--write-profiles', action='store_true', default=False, - help='save profiling data as .cpuprofile files.') -ap.add_argument('--verbose', action='store_const', const=logging.DEBUG, - default=logging.INFO, dest='log_level', help='log verbosely') -ap.add_argument('--display', type=parse_display_opts, - help='set device display metrics to WIDTHxHEIGHT or ' - 'WIDTHxHEIGHT*SCALE_FACTOR.') -ap.add_argument('--latency', action='store_true', default=False, - help='simulate realistic network conditions') -ap.add_argument('url', help='URL to load') +ap.add_argument( + '--host', + default='localhost', + help='Chromium host (default: localhost)', +) +ap.add_argument( + '--port', + default=9222, + help='Chromium port (default: 9222)', + type=int, +) +ap.add_argument( + '--repeat', + default=5, + dest='repetitions', + help='times to repeat (default: 5)', + metavar='N', + type=int, +) +ap.add_argument( + '--log-requests', + action='store_true', + default=False, + help='log uncached network requests', +) +ap.add_argument( + '--write-profile-data', + action='store_true', + default=False, + help='save profiling data as .cpuprofile files', +) +ap.add_argument( + '--verbose', + action='store_const', + const=logging.DEBUG, + default=logging.INFO, + dest='log_level', + help='log verbosely', +) +ap.add_argument( + '--display', + type=parse_display_opts, + help='set device display metrics to WIDTHxHEIGHT or ' + 'WIDTHxHEIGHT*SCALE_FACTOR', +) +ap.add_argument( + '--extra-latency-ms', + metavar='N', + type=int, + default=0, + help='simulate network conditions by adding N milliseconds of latency ' + 'to network requests', +) +ap.add_argument( + 'target_url', + metavar='URL', + help='URL to load', +) args = ap.parse_args() log = logging.getLogger('vbench') log.setLevel(args.log_level) -del args.log_level is_tty = sys.stdout.isatty() stdout_handler = logging.StreamHandler(stream=sys.stdout) -- To view, visit https://gerrit.wikimedia.org/r/190145 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: I31f0079cba44d419dca06927c3b045bd602b8f5e Gerrit-PatchSet: 2 Gerrit-Project: operations/puppet Gerrit-Branch: production Gerrit-Owner: Ori.livneh <[email protected]> Gerrit-Reviewer: Ori.livneh <[email protected]> _______________________________________________ MediaWiki-commits mailing list [email protected] https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits
