Changeset 234006 in webkit


Ignore:
Timestamp:
Jul 19, 2018 2:54:48 PM (6 years ago)
Author:
commit-queue@webkit.org
Message:

Add benchmark for WebKit process launch times
https://bugs.webkit.org/show_bug.cgi?id=186414

Patch by Ben Richards <benton_richards@apple.com> on 2018-07-19
Reviewed by Ryosuke Niwa.

Added two benchmarks, one for measuring browser new tab launch time and one for browser startup time.

  • LaunchTime/.gitignore: Added.
  • LaunchTime/feedback_client.html: Added.

Displays benchmark progress in browser

  • LaunchTime/feedback_server.py: Added.

(FeedbackServer): Sends data to feedback_client via websocket
(FeedbackServer.init):
(FeedbackServer._create_app):
(FeedbackServer._start_server):
(FeedbackServer._send_all_messages):
(FeedbackServer.start):
(FeedbackServer.stop):
(FeedbackServer.send_message): Send a message to the feedback_client
(FeedbackServer.wait_until_client_has_loaded): Wait until the feedback_client has opened a websocket connection to the feedback_server
(FeedbackServer.MainHandler): Handler factory to create handler that serves feedback_client.html
(FeedbackServer.MainHandler.Handler):
(FeedbackServer.MainHandler.Handler.get):
(FeedbackServer.WSHandler): Handler factory to create handler that sends data to feedback client
(FeedbackServer.WSHandler.Handler):
(FeedbackServer.WSHandler.Handler.open): On websocket connection opened
(FeedbackServer.WSHandler.Handler.on_close): On websocket connection closed

  • LaunchTime/launch_time.py: Added.

(DefaultLaunchTimeHandler): Abstract HTTP request handler for launch time benchmarks
(DefaultLaunchTimeHandler.get_test_page): Default test page to be overridden by benchmarks
(DefaultLaunchTimeHandler.get_blank_page):
(DefaultLaunchTimeHandler.on_receive_stop_time):
(DefaultLaunchTimeHandler.do_HEAD):
(DefaultLaunchTimeHandler.do_GET):
(DefaultLaunchTimeHandler.do_POST):
(DefaultLaunchTimeHandler.log_message): Suppresses HTTP logs from SimpleHTTPRequestHandler
(LaunchTimeBenchmark): Abstract class which launch time benchmarks inherit from and override methods desired to customize
(LaunchTimeBenchmark.init):
(LaunchTimeBenchmark._parse_browser_bundle_path): Parser for bundle path option
(LaunchTimeBenchmark._parse_args):
(LaunchTimeBenchmark._run_server): Target function for main server thread
(LaunchTimeBenchmark._setup_servers):
(LaunchTimeBenchmark._clean_up):
(LaunchTimeBenchmark._exit_due_to_exception):
(LaunchTimeBenchmark._geometric_mean):
(LaunchTimeBenchmark._standard_deviation):
(LaunchTimeBenchmark._compute_results): Returns mean and std dev of list of results and pretty prints if should_print=True is specified
(LaunchTimeBenchmark._wait_times): Mimic numpy.linspace
(LaunchTimeBenchmark.open_tab): Open a browser tab with the html given by self.response_handler.get_test_page
(LaunchTimeBenchmark.launch_browser): Open a broser to either the feedback client (if option is set) or a blank page
(LaunchTimeBenchmark.quit_browser):
(LaunchTimeBenchmark.quit_browser.quit_app):
(LaunchTimeBenchmark.quit_browser.is_app_closed):
(LaunchTimeBenchmark.close_tab):
(LaunchTimeBenchmark.wait):
(LaunchTimeBenchmark.log): Print to console and send to feedback client if --feedback-in-browser flag is used
(LaunchTimeBenchmark.log_verbose): Only logs if --verbose flag is used
(LaunchTimeBenchmark.run):
(LaunchTimeBenchmark.group_init): Initialization done before each round of iterations
(LaunchTimeBenchmark.run_iteration):
(LaunchTimeBenchmark.initialize): Convenience method to be overriden by subclasses which is called at the end of init
(LaunchTimeBenchmark.will_parse_arguments): Called before argparse.parse_args to let subclasses add new command line arguments
(LaunchTimeBenchmark.did_parse_arguments): Called after argparse.parse_args to let subclass initialize based on command line arguments

  • LaunchTime/new_tab.py: Added

(NewTabBenchmark):
(NewTabBenchmark._parse_wait_time): Parser for wait time option
(NewTabBenchmark.initialize):
(NewTabBenchmark.run_iteration):
(NewTabBenchmark.group_init):
(NewTabBenchmark.will_parse_arguments):
(NewTabBenchmark.did_parse_arguments):
(NewTabBenchmark.ResponseHandler):
(NewTabBenchmark.ResponseHandler.Handler):
(NewTabBenchmark.ResponseHandler.Handler.get_test_page):

  • LaunchTime/startup.py: Added

(StartupBenchmark): This benchmark measures browser startup time and initial page load time
(StartupBenchmark.initialize):
(StartupBenchmark.run_iteration):
(StartupBenchmark.ResponseHandler):
(StartupBenchmark.ResponseHandler.Handler):
(StartupBenchmark.ResponseHandler.Handler.get_test_page):

  • LaunchTime/thirdparty/init.py: Added.

(AutoinstallImportHook): Auto installs tornado package for feedback server
(AutoinstallImportHook.init):
(AutoinstallImportHook._ensure_autoinstalled_dir_is_in_sys_path):
(AutoinstallImportHook.find_module):
(AutoinstallImportHook._install_tornado):
(AutoinstallImportHook.greater_than_equal_to_version):
(AutoinstallImportHook._install):
(AutoinstallImportHook.get_latest_pypi_url):
(AutoinstallImportHook.install_binary):
(autoinstall_everything):
(get_os_info):

Location:
trunk/PerformanceTests
Files:
9 added
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/PerformanceTests/ChangeLog

    r233147 r234006  
     12018-07-19  Ben Richards  <benton_richards@apple.com>
     2
     3        Add benchmark for WebKit process launch times
     4        https://bugs.webkit.org/show_bug.cgi?id=186414
     5
     6        Reviewed by Ryosuke Niwa.
     7
     8        Added two benchmarks, one for measuring browser new tab launch time and one for browser startup time.
     9
     10        * LaunchTime/.gitignore: Added.
     11        * LaunchTime/feedback_client.html: Added.
     12        Displays benchmark progress in browser
     13        * LaunchTime/feedback_server.py: Added.
     14        (FeedbackServer): Sends data to feedback_client via websocket
     15        (FeedbackServer.__init__):
     16        (FeedbackServer._create_app):
     17        (FeedbackServer._start_server):
     18        (FeedbackServer._send_all_messages):
     19        (FeedbackServer.start):
     20        (FeedbackServer.stop):
     21        (FeedbackServer.send_message): Send a message to the feedback_client
     22        (FeedbackServer.wait_until_client_has_loaded): Wait until the feedback_client has opened a websocket connection to the feedback_server
     23        (FeedbackServer.MainHandler): Handler factory to create handler that serves feedback_client.html
     24        (FeedbackServer.MainHandler.Handler):
     25        (FeedbackServer.MainHandler.Handler.get):
     26        (FeedbackServer.WSHandler): Handler factory to create handler that sends data to feedback client
     27        (FeedbackServer.WSHandler.Handler):
     28        (FeedbackServer.WSHandler.Handler.open): On websocket connection opened
     29        (FeedbackServer.WSHandler.Handler.on_close): On websocket connection closed
     30        * LaunchTime/launch_time.py: Added.
     31        (DefaultLaunchTimeHandler): Abstract HTTP request handler for launch time benchmarks
     32        (DefaultLaunchTimeHandler.get_test_page): Default test page to be overridden by benchmarks
     33        (DefaultLaunchTimeHandler.get_blank_page):
     34        (DefaultLaunchTimeHandler.on_receive_stop_time):
     35        (DefaultLaunchTimeHandler.do_HEAD):
     36        (DefaultLaunchTimeHandler.do_GET):
     37        (DefaultLaunchTimeHandler.do_POST):
     38        (DefaultLaunchTimeHandler.log_message): Suppresses HTTP logs from SimpleHTTPRequestHandler
     39        (LaunchTimeBenchmark): Abstract class which launch time benchmarks inherit from and override methods desired to customize
     40        (LaunchTimeBenchmark.__init__):
     41        (LaunchTimeBenchmark._parse_browser_bundle_path): Parser for bundle path option
     42        (LaunchTimeBenchmark._parse_args):
     43        (LaunchTimeBenchmark._run_server): Target function for main server thread
     44        (LaunchTimeBenchmark._setup_servers):
     45        (LaunchTimeBenchmark._clean_up):
     46        (LaunchTimeBenchmark._exit_due_to_exception):
     47        (LaunchTimeBenchmark._geometric_mean):
     48        (LaunchTimeBenchmark._standard_deviation):
     49        (LaunchTimeBenchmark._compute_results): Returns mean and std dev of list of results and pretty prints if should_print=True is specified
     50        (LaunchTimeBenchmark._wait_times): Mimic numpy.linspace
     51        (LaunchTimeBenchmark.open_tab): Open a browser tab with the html given by self.response_handler.get_test_page
     52        (LaunchTimeBenchmark.launch_browser): Open a broser to either the feedback client (if option is set) or a blank page
     53        (LaunchTimeBenchmark.quit_browser):
     54        (LaunchTimeBenchmark.quit_browser.quit_app):
     55        (LaunchTimeBenchmark.quit_browser.is_app_closed):
     56        (LaunchTimeBenchmark.close_tab):
     57        (LaunchTimeBenchmark.wait):
     58        (LaunchTimeBenchmark.log): Print to console and send to feedback client if --feedback-in-browser flag is used
     59        (LaunchTimeBenchmark.log_verbose): Only logs if --verbose flag is used
     60        (LaunchTimeBenchmark.run):
     61        (LaunchTimeBenchmark.group_init): Initialization done before each round of iterations
     62        (LaunchTimeBenchmark.run_iteration):
     63        (LaunchTimeBenchmark.initialize): Convenience method to be overriden by subclasses which is called at the end of __init__
     64        (LaunchTimeBenchmark.will_parse_arguments): Called before argparse.parse_args to let subclasses add new command line arguments
     65        (LaunchTimeBenchmark.did_parse_arguments): Called after argparse.parse_args to let subclass initialize based on command line arguments
     66        * LaunchTime/new_tab.py: Added
     67        (NewTabBenchmark):
     68        (NewTabBenchmark._parse_wait_time): Parser for wait time option
     69        (NewTabBenchmark.initialize):
     70        (NewTabBenchmark.run_iteration):
     71        (NewTabBenchmark.group_init):
     72        (NewTabBenchmark.will_parse_arguments):
     73        (NewTabBenchmark.did_parse_arguments):
     74        (NewTabBenchmark.ResponseHandler):
     75        (NewTabBenchmark.ResponseHandler.Handler):
     76        (NewTabBenchmark.ResponseHandler.Handler.get_test_page):
     77        * LaunchTime/startup.py: Added
     78        (StartupBenchmark): This benchmark measures browser startup time and initial page load time
     79        (StartupBenchmark.initialize):
     80        (StartupBenchmark.run_iteration):
     81        (StartupBenchmark.ResponseHandler):
     82        (StartupBenchmark.ResponseHandler.Handler):
     83        (StartupBenchmark.ResponseHandler.Handler.get_test_page):
     84        * LaunchTime/thirdparty/__init__.py: Added.
     85        (AutoinstallImportHook): Auto installs tornado package for feedback server
     86        (AutoinstallImportHook.__init__):
     87        (AutoinstallImportHook._ensure_autoinstalled_dir_is_in_sys_path):
     88        (AutoinstallImportHook.find_module):
     89        (AutoinstallImportHook._install_tornado):
     90        (AutoinstallImportHook.greater_than_equal_to_version):
     91        (AutoinstallImportHook._install):
     92        (AutoinstallImportHook.get_latest_pypi_url):
     93        (AutoinstallImportHook.install_binary):
     94        (autoinstall_everything):
     95        (get_os_info):
     96
    1972018-06-25  Jon Lee  <jonlee@apple.com>
    298
Note: See TracChangeset for help on using the changeset viewer.