#! /usr/bin/env python import argparse import time from threading import Event from launch_time import LaunchTimeBenchmark, DefaultLaunchTimeHandler import feedback_server class NewTabBenchmark(LaunchTimeBenchmark): def _parse_wait_time(self, string): values = string.split(':') start = None end = None try: if len(values) == 2: start = float(values[0]) end = float(values[1]) if start > end: raise elif len(values) == 1: start = float(values[0]) end = start else: raise except: raise argparse.ArgumentTypeError( "'" + string + "' is not a range of numbers. Expected form is N:M where N < M") return start, end def initialize(self): self.benchmark_description = "Measure time to open a new tab for a given browser." self.response_handler = NewTabBenchmark.ResponseHandler(self) self.start_time = None self.stop_time = None self.stop_signal_was_received = Event() self.allow_prewarm = True def run_iteration(self): tabs_to_open = 1 if self.allow_prewarm else 2 self.stop_time = None for _ in range(tabs_to_open - 1): self.open_tab(blank=True) self.start_time = time.time() * 1000 self.open_tab() while self.stop_time is None: self.stop_signal_was_received.wait() result = self.stop_time - self.start_time self.stop_signal_was_received.clear() for _ in range(tabs_to_open): self.close_tab() return result def group_init(self): self.launch_browser() def will_parse_arguments(self): self.argument_parser.add_argument('-g', '--groups', type=int, help='number of groups of iterations to run (default: {})'.format(self.iteration_groups)) self.argument_parser.add_argument('-w', '--wait-time', type=self._parse_wait_time, help='wait time to use between iterations or range to scan (format is "N" or "N:M" where N < M, default: {}:{})'.format(self.wait_time_low, self.wait_time_high)) self.argument_parser.add_argument('--no-prewarm', action='store_true', help='attempt to ignore process prewarming (will most likely raise standard deviation)') def did_parse_arguments(self, args): if args.groups: self.iteration_groups = args.groups if args.wait_time: self.wait_time_low, self.wait_time_high = args.wait_time if args.no_prewarm: self.allow_prewarm = False @staticmethod def ResponseHandler(new_tab_benchmark): class Handler(DefaultLaunchTimeHandler): def get_test_page(self): return ''' New Tab Benchmark

New Tab Benchmark

''' def on_receive_stop_signal(self, data): new_tab_benchmark.stop_time = float(data) new_tab_benchmark.stop_signal_was_received.set() return Handler if __name__ == '__main__': NewTabBenchmark().run()