Created
December 17, 2019 20:53
-
-
Save stephendonner/e6799dfd2c932fc7d7b871293f0e3fd4 to your computer and use it in GitHub Desktop.
./mach raptor-test -t amazon --browsertime --cold --browser-cycles 2 --post-startup-delay 3
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| ./mach raptor-test -t amazon --browsertime --cold --browser-cycles 2 --post-startup-delay 3 | |
| 20:48:23 INFO - "browsertime": { | |
| 20:48:23 INFO - "page_cycles": 1, | |
| 20:48:23 INFO - "url": "https://www.amazon.com/s?k=laptop&ref=nb_sb_noss_1", | |
| 20:48:23 INFO - "page_cycle_delay": 1000, | |
| 20:48:23 INFO - "post_startup_delay": 3 | |
| 20:48:23 INFO - }, | |
| 20:48:26 INFO - [2019-12-17 12:48:26] INFO: [browsertime] Waiting for 3 ms (post_startup_delay) | |
| stephendonner-7hlvdq:mozilla-unified sdonner$ ./mach raptor-test -t amazon --browsertime --cold --browser-cycles 2 --post-startup-delay 3 | |
| Updating external benchmarks from https://github.com/mozilla/perf-automation | |
| Cloning the benchmarks to /Users/sdonner/.mozbuild/performance-tests | |
| Switched to branch 'master' | |
| Your branch is up to date with 'origin/master'. | |
| Already up to date. | |
| Note: switching to 'e19a0865c946ae2f9a64dd25614b1c275a3996b2'. | |
| You are in 'detached HEAD' state. You can look around, make experimental | |
| changes and commit them, and you can discard any commits you make in this | |
| state without impacting any branches by switching back to a branch. | |
| If you want to create a new branch to retain commits you create, you may | |
| do so (now or later) by using -c with the switch command. Example: | |
| git switch -c <new-branch-name> | |
| Or undo this operation with: | |
| git switch - | |
| Turn off this advice by setting config variable advice.detachedHead to false | |
| HEAD is now at e19a086 Merge pull request #20 from marianrai/Add_jetstream2_benchmark_suite | |
| 20:48:20 INFO - ConsoleLogger online at 20191217 20:48:20Z in /Users/sdonner/mozilla-source/mozilla-unified | |
| 20:48:20 INFO - Run as ./mach raptor-test -t amazon --browsertime --cold --browser-cycles 2 --post-startup-delay 3 | |
| 20:48:20 INFO - Dumping config to /Users/sdonner/mozilla-source/mozilla-unified/testing/mozharness/logs/localconfig.json. | |
| 20:48:20 INFO - {u'app': u'firefox', | |
| 20:48:20 INFO - 'append_to_log': False, | |
| 20:48:20 INFO - u'base_work_dir': u'/Users/sdonner/mozilla-source/mozilla-unified/testing/mozharness', | |
| 20:48:20 INFO - u'binary_path': u'/Users/sdonner/mozilla-source/mozilla-unified/obj-x86_64-apple-darwin19.2.0/dist/Nightly.app/Contents/MacOS/firefox', | |
| 20:48:20 INFO - u'browsertime': False, | |
| 20:48:20 INFO - u'browsertime_browsertimejs': u'/Users/sdonner/mozilla-source/mozilla-unified/tools/browsertime/node_modules/browsertime/bin/browsertime.js', | |
| 20:48:20 INFO - u'browsertime_node': u'/Users/sdonner/.mozbuild/node/bin/node', | |
| 20:48:20 INFO - u'browsertime_video': False, | |
| 20:48:20 INFO - 'code_coverage': False, | |
| 20:48:20 INFO - u'cold': False, | |
| 20:48:20 INFO - 'config_files': (), | |
| 20:48:20 INFO - u'cpu_test': False, | |
| 20:48:20 INFO - u'debug_mode': False, | |
| 20:48:20 INFO - u'default_actions': (u'populate-webroot', | |
| 20:48:20 INFO - u'install-chromium-distribution', | |
| 20:48:20 INFO - u'create-virtualenv', | |
| 20:48:20 INFO - u'run-tests'), | |
| 20:48:20 INFO - 'disable_ccov_upload': False, | |
| 20:48:20 INFO - u'e10s': True, | |
| 20:48:20 INFO - u'enable_fission': False, | |
| 20:48:20 INFO - u'enable_webrender': False, | |
| 20:48:20 INFO - u'exes': {u'python': u'/usr/local/opt/python@2/bin/python2.7', | |
| 20:48:20 INFO - u'virtualenv': (u'/usr/local/opt/python@2/bin/python2.7', | |
| 20:48:20 INFO - u'/Users/sdonner/mozilla-source/mozilla-unified/third_party/python/virtualenv/virtualenv.py')}, | |
| 20:48:20 INFO - u'extra_prefs': (), | |
| 20:48:20 INFO - 'find_links': ('https://pypi.pub.build.mozilla.org/pub',), | |
| 20:48:20 INFO - u'gecko_profile': False, | |
| 20:48:20 INFO - u'host': u'127.0.0.1', | |
| 20:48:20 INFO - u'is_release_build': False, | |
| 20:48:20 INFO - 'java_code_coverage': False, | |
| 20:48:20 INFO - 'log_level': 'info', | |
| 20:48:20 INFO - u'log_name': u'raptor', | |
| 20:48:20 INFO - 'log_to_console': True, | |
| 20:48:20 INFO - u'memory_test': False, | |
| 20:48:20 INFO - u'no_conditioned_profile': False, | |
| 20:48:20 INFO - u'noinstall': False, | |
| 20:48:20 INFO - u'obj_path': u'/Users/sdonner/mozilla-source/mozilla-unified/obj-x86_64-apple-darwin19.2.0', | |
| 20:48:20 INFO - 'opt_config_files': (), | |
| 20:48:20 INFO - 'per_test_coverage': False, | |
| 20:48:20 INFO - 'pip_index': False, | |
| 20:48:20 INFO - u'power_test': False, | |
| 20:48:20 INFO - u'pypi_url': u'http://pypi.org/simple', | |
| 20:48:20 INFO - u'raptor_cmd_line_args': (u'-t', | |
| 20:48:20 INFO - u'amazon', | |
| 20:48:20 INFO - u'--browsertime', | |
| 20:48:20 INFO - u'--cold', | |
| 20:48:20 INFO - u'--browser-cycles', | |
| 20:48:20 INFO - u'2', | |
| 20:48:20 INFO - u'--post-startup-delay', | |
| 20:48:20 INFO - u'3'), | |
| 20:48:20 INFO - u'raptor_path': u'/Users/sdonner/mozilla-source/mozilla-unified/testing/raptor', | |
| 20:48:20 INFO - u'repo_path': u'/Users/sdonner/mozilla-source/mozilla-unified', | |
| 20:48:20 INFO - u'run_local': True, | |
| 20:48:20 INFO - u'title': u'stephendonner-7hlvdq', | |
| 20:48:20 INFO - 'verify': False, | |
| 20:48:20 INFO - u'virtualenv_path': u'/Users/sdonner/mozilla-source/mozilla-unified/obj-x86_64-apple-darwin19.2.0/testing/raptor-venv', | |
| 20:48:20 INFO - 'volatile_config': {'actions': None, 'add_actions': None, 'no_actions': None}, | |
| 20:48:20 INFO - 'work_dir': 'build'} | |
| 20:48:20 INFO - [mozharness: 2019-12-17 20:48:20.009487Z] Skipping clobber step. | |
| 20:48:20 INFO - [mozharness: 2019-12-17 20:48:20.009523Z] Skipping download-and-extract step. | |
| 20:48:20 INFO - [mozharness: 2019-12-17 20:48:20.009597Z] Running populate-webroot step. | |
| 20:48:20 INFO - Running pre-action listener: _resource_record_pre_action | |
| 20:48:20 INFO - Running main action method: populate_webroot | |
| 20:48:20 INFO - Running post-action listener: _resource_record_post_action | |
| 20:48:20 INFO - [mozharness: 2019-12-17 20:48:20.009722Z] Finished populate-webroot step (success) | |
| 20:48:20 INFO - [mozharness: 2019-12-17 20:48:20.009754Z] Running install-chromium-distribution step. | |
| 20:48:20 INFO - Running pre-action listener: _resource_record_pre_action | |
| 20:48:20 INFO - Running main action method: install_chromium_distribution | |
| 20:48:20 INFO - Google Chrome or Chromium distributions are not required. | |
| 20:48:20 INFO - Running post-action listener: _resource_record_post_action | |
| 20:48:20 INFO - [mozharness: 2019-12-17 20:48:20.009937Z] Finished install-chromium-distribution step (success) | |
| 20:48:20 INFO - [mozharness: 2019-12-17 20:48:20.009966Z] Running create-virtualenv step. | |
| 20:48:20 INFO - Running pre-action listener: _resource_record_pre_action | |
| 20:48:20 INFO - Running main action method: create_virtualenv | |
| 20:48:20 INFO - Virtualenv already exists, skipping creation | |
| 20:48:20 INFO - Running post-action listener: _resource_record_post_action | |
| 20:48:20 INFO - Running post-action listener: _start_resource_monitoring | |
| 20:48:20 INFO - Starting resource monitoring. | |
| 20:48:20 INFO - [mozharness: 2019-12-17 20:48:20.036371Z] Finished create-virtualenv step (success) | |
| 20:48:20 INFO - [mozharness: 2019-12-17 20:48:20.037084Z] Skipping install step. | |
| 20:48:20 INFO - [mozharness: 2019-12-17 20:48:20.037162Z] Running run-tests step. | |
| 20:48:20 INFO - Running pre-action listener: _resource_record_pre_action | |
| 20:48:20 INFO - Running pre-action listener: _set_gcov_prefix | |
| 20:48:20 INFO - Running pre-action listener: timed_screenshots | |
| 20:48:20 INFO - Running main action method: run_tests | |
| 20:48:20 INFO - Running command: [u'/Users/sdonner/mozilla-source/mozilla-unified/obj-x86_64-apple-darwin19.2.0/testing/raptor-venv/bin/python', u'--version'] | |
| 20:48:20 INFO - Copy/paste: /Users/sdonner/mozilla-source/mozilla-unified/obj-x86_64-apple-darwin19.2.0/testing/raptor-venv/bin/python --version | |
| 20:48:20 INFO - Python 2.7.17 | |
| 20:48:20 INFO - Return code: 0 | |
| 20:48:20 INFO - ENV: MOZ_UPLOAD_DIR is now /Users/sdonner/mozilla-source/mozilla-unified/testing/mozharness/build/blobber_upload_dir | |
| 20:48:20 INFO - ENV: RUST_BACKTRACE is now full | |
| 20:48:20 INFO - ENV: MINIDUMP_SAVE_PATH is now /Users/sdonner/mozilla-source/mozilla-unified/testing/mozharness/build/blobber_upload_dir | |
| 20:48:20 INFO - Running command: [u'/Users/sdonner/mozilla-source/mozilla-unified/obj-x86_64-apple-darwin19.2.0/testing/raptor-venv/bin/python', u'/Users/sdonner/mozilla-source/mozilla-unified/testing/raptor/raptor/raptor.py', u'--run-local', u'-t', u'amazon', u'--browsertime', u'--cold', u'--browser-cycles', u'2', u'--post-startup-delay', u'3', u'--browsertime-node', u'/Users/sdonner/.mozbuild/node/bin/node', u'--browsertime-browsertimejs', u'/Users/sdonner/mozilla-source/mozilla-unified/tools/browsertime/node_modules/browsertime/bin/browsertime.js', u'--host', u'127.0.0.1', u'--binary', u'/Users/sdonner/mozilla-source/mozilla-unified/obj-x86_64-apple-darwin19.2.0/dist/Nightly.app/Contents/MacOS/firefox', u'--app', u'firefox', u'--obj-path', u'/Users/sdonner/mozilla-source/mozilla-unified/obj-x86_64-apple-darwin19.2.0', u'--log-tbpl-level=debug'] in /Users/sdonner/mozilla-source/mozilla-unified/testing/mozharness/build | |
| 20:48:20 INFO - Copy/paste: /Users/sdonner/mozilla-source/mozilla-unified/obj-x86_64-apple-darwin19.2.0/testing/raptor-venv/bin/python /Users/sdonner/mozilla-source/mozilla-unified/testing/raptor/raptor/raptor.py --run-local -t amazon --browsertime --cold --browser-cycles 2 --post-startup-delay 3 --browsertime-node /Users/sdonner/.mozbuild/node/bin/node --browsertime-browsertimejs /Users/sdonner/mozilla-source/mozilla-unified/tools/browsertime/node_modules/browsertime/bin/browsertime.js --host 127.0.0.1 --binary /Users/sdonner/mozilla-source/mozilla-unified/obj-x86_64-apple-darwin19.2.0/dist/Nightly.app/Contents/MacOS/firefox --app firefox --obj-path /Users/sdonner/mozilla-source/mozilla-unified/obj-x86_64-apple-darwin19.2.0 --log-tbpl-level=debug | |
| 20:48:20 INFO - Using env: {u'EXTERNALTOOLSPATH': u'/Users/sdonner/mozilla-source/mozilla-unified/testing/mozharness/external_tools', | |
| 20:48:20 INFO - 'HOME': '/Users/sdonner', | |
| 20:48:20 INFO - u'JSGC_DISABLE_POISONING': u'1', | |
| 20:48:20 INFO - 'LANG': 'en_US.UTF-8', | |
| 20:48:20 INFO - 'LOGNAME': 'sdonner', | |
| 20:48:20 INFO - 'MACH_MAIN_PID': '19305', | |
| 20:48:20 INFO - 'MACH_STDOUT_ISATTY': '1', | |
| 20:48:20 INFO - u'MINIDUMP_SAVE_PATH': u'/Users/sdonner/mozilla-source/mozilla-unified/testing/mozharness/build/blobber_upload_dir', | |
| 20:48:20 INFO - u'MOZ_DEVELOPER_OBJ_DIR': u'/Users/sdonner/mozilla-source/mozilla-unified/obj-x86_64-apple-darwin19.2.0', | |
| 20:48:20 INFO - u'MOZ_DEVELOPER_REPO_DIR': u'/Users/sdonner/mozilla-source/mozilla-unified', | |
| 20:48:20 INFO - u'MOZ_UPLOAD_DIR': u'/Users/sdonner/mozilla-source/mozilla-unified/testing/mozharness/build/blobber_upload_dir', | |
| 20:48:20 INFO - 'PATH': u'/Users/sdonner/mozilla-source/mozilla-unified/obj-x86_64-apple-darwin19.2.0/testing/raptor-venv/bin:/Users/sdonner/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/sdonner/geckodriver:/Applications/VMware Fusion.app/Contents/Public:/Applications/Wireshark.app/Contents/MacOS', | |
| 20:48:20 INFO - 'PWD': '/Users/sdonner/mozilla-source/mozilla-unified', | |
| 20:48:20 INFO - u'PYTHONPATH': u'/Users/sdonner/mozilla-source/mozilla-unified/testing/raptor', | |
| 20:48:20 INFO - u'RUST_BACKTRACE': u'full', | |
| 20:48:20 INFO - u'SCRIPTSPATH': '/Users/sdonner/mozilla-source/mozilla-unified/testing/mozharness', | |
| 20:48:20 INFO - 'SHELL': '/bin/bash', | |
| 20:48:20 INFO - 'SHLVL': '1', | |
| 20:48:20 INFO - 'SSH_AUTH_SOCK': '/private/tmp/com.apple.launchd.DbtScMO5aN/Listeners', | |
| 20:48:20 INFO - 'TERM': 'xterm-256color', | |
| 20:48:20 INFO - 'TERM_PROGRAM': 'Apple_Terminal', | |
| 20:48:20 INFO - 'TERM_PROGRAM_VERSION': '433', | |
| 20:48:20 INFO - 'TERM_SESSION_ID': '39B1FF8A-CED9-4E77-938D-FB97071C756D', | |
| 20:48:20 INFO - 'TMPDIR': '/var/folders/tn/jmgsfg315sd73yn_dnrf66c80000gn/T/', | |
| 20:48:20 INFO - 'USER': 'sdonner', | |
| 20:48:20 INFO - 'XPC_FLAGS': '0x0', | |
| 20:48:20 INFO - 'XPC_SERVICE_NAME': '0', | |
| 20:48:20 INFO - '__CF_USER_TEXT_ENCODING': '0x1F5:0x0:0x0'} | |
| 20:48:20 INFO - Calling [u'/Users/sdonner/mozilla-source/mozilla-unified/obj-x86_64-apple-darwin19.2.0/testing/raptor-venv/bin/python', u'/Users/sdonner/mozilla-source/mozilla-unified/testing/raptor/raptor/raptor.py', u'--run-local', u'-t', u'amazon', u'--browsertime', u'--cold', u'--browser-cycles', u'2', u'--post-startup-delay', u'3', u'--browsertime-node', u'/Users/sdonner/.mozbuild/node/bin/node', u'--browsertime-browsertimejs', u'/Users/sdonner/mozilla-source/mozilla-unified/tools/browsertime/node_modules/browsertime/bin/browsertime.js', u'--host', u'127.0.0.1', u'--binary', u'/Users/sdonner/mozilla-source/mozilla-unified/obj-x86_64-apple-darwin19.2.0/dist/Nightly.app/Contents/MacOS/firefox', u'--app', u'firefox', u'--obj-path', u'/Users/sdonner/mozilla-source/mozilla-unified/obj-x86_64-apple-darwin19.2.0', u'--log-tbpl-level=debug'] with output_timeout 3600 | |
| 20:48:20 INFO - raptor-main Info: raptor-start | |
| 20:48:20 INFO - raptor-main Info: received command line arguments: Namespace(activity=None, app='firefox', binary='/Users/sdonner/mozilla-source/mozilla-unified/obj-x86_64-apple-darwin19.2.0/dist/Nightly.app/Contents/MacOS/firefox', browser_cycles=2, browsertime=True, browsertime_browsertimejs='/Users/sdonner/mozilla-source/mozilla-unified/tools/browsertime/node_modules/browsertime/bin/browsertime.js', browsertime_chromedriver=None, browsertime_ffmpeg=None, browsertime_geckodriver=None, browsertime_node='/Users/sdonner/.mozbuild/node/bin/node', browsertime_video=False, cold=True, cpu_test=False, debug_mode=False, e10s=True, enable_fission=False, enable_webrender=False, extra_prefs={}, gecko_profile=False, gecko_profile_entries=None, gecko_profile_interval=None, gecko_profile_threads=None, host='127.0.0.1', installerpath=None, intent=None, is_release_build=False, log_errorsummary=None, log_grouped=None, log_html=None, log_mach=None, log_mach_buffer=None, log_mach_level=None, log_mach_screenshot=None, log_mach_verbose=None, log_raw=None, log_raw_level=None, log_tbpl=None, log_tbpl_buffer=None, log_tbpl_compact=None, log_tbpl_level='debug', log_unittest=None, log_xunit=None, memory_test=False, no_conditioned_profile=False, noinstall=False, obj_path='/Users/sdonner/mozilla-source/mozilla-unified/obj-x86_64-apple-darwin19.2.0', page_cycles=None, page_timeout=None, post_startup_delay=3, power_test=False, run_local=True, symbols_path=None, test='amazon', test_url_params=None) | |
| 20:48:20 INFO - raptor-manifest Info: /Users/sdonner/mozilla-source/mozilla-unified/testing/raptor/raptor/raptor.ini | |
| 20:48:20 INFO - raptor-manifest Info: configuring settings for test amazon | |
| 20:48:20 INFO - raptor-manifest Info: setting browser-cycles to 2 as specified on cmd line | |
| 20:48:20 INFO - raptor-main Info: raptor tests scheduled to run: | |
| 20:48:20 INFO - raptor-main Info: amazon-cold | |
| 20:48:20 INFO - mozversion application_buildid: 20191217092755 | |
| 20:48:20 INFO - mozversion application_changeset: c223a857bd7e593a488b107cf21bedba8fa3495b | |
| 20:48:20 INFO - mozversion application_display_name: Nightly | |
| 20:48:20 INFO - mozversion application_id: {ec8030f7-c20a-464f-9b0e-13a3a9e97384} | |
| 20:48:20 INFO - mozversion application_name: Firefox | |
| 20:48:20 INFO - mozversion application_remotingname: firefox | |
| 20:48:20 INFO - mozversion application_vendor: Mozilla | |
| 20:48:20 INFO - mozversion application_version: 73.0a1 | |
| 20:48:20 INFO - mozversion platform_buildid: 20191217092755 | |
| 20:48:20 INFO - mozversion platform_changeset: c223a857bd7e593a488b107cf21bedba8fa3495b | |
| 20:48:20 INFO - mozversion platform_version: 73.0a1 | |
| 20:48:20 INFO - raptor-main Info: Browser name: Firefox | |
| 20:48:20 INFO - raptor-main Info: Browser version: 73.0a1 | |
| 20:48:20 INFO - mozversion application_buildid: 20191217092755 | |
| 20:48:20 INFO - mozversion application_changeset: c223a857bd7e593a488b107cf21bedba8fa3495b | |
| 20:48:20 INFO - mozversion application_display_name: Nightly | |
| 20:48:20 INFO - mozversion application_id: {ec8030f7-c20a-464f-9b0e-13a3a9e97384} | |
| 20:48:20 INFO - mozversion application_name: Firefox | |
| 20:48:20 INFO - mozversion application_remotingname: firefox | |
| 20:48:20 INFO - mozversion application_vendor: Mozilla | |
| 20:48:20 INFO - mozversion application_version: 73.0a1 | |
| 20:48:20 INFO - mozversion platform_buildid: 20191217092755 | |
| 20:48:20 INFO - mozversion platform_changeset: c223a857bd7e593a488b107cf21bedba8fa3495b | |
| 20:48:20 INFO - mozversion platform_version: 73.0a1 | |
| 20:48:20 INFO - raptor-main Info: Browser name: Firefox | |
| 20:48:20 INFO - raptor-main Info: Browser version: 73.0a1 | |
| 20:48:20 INFO - raptor-main Info: main raptor init, config is: {'binary': '/Users/sdonner/mozilla-source/mozilla-unified/obj-x86_64-apple-darwin19.2.0/dist/Nightly.app/Contents/MacOS/firefox', 'symbols_path': None, 'memory_test': False, 'cpu_test': False, 'enable_control_server_wait': False, 'e10s': True, 'app': 'firefox', 'gecko_profile_entries': None, 'power_test': False, 'run_local': True, 'platform': 'mac', 'host': '127.0.0.1', 'is_release_build': False, 'extra_prefs': {}, 'enable_webrender': False, 'no_conditioned_profile': False, 'enable_fission': False, 'gecko_profile_interval': None, 'processor': 'x86_64', 'gecko_profile': False, 'obj_path': '/Users/sdonner/mozilla-source/mozilla-unified/obj-x86_64-apple-darwin19.2.0'} | |
| 20:48:20 INFO - raptor-main Info: Making temp_download_dir from inside get_conditioned_profile /var/folders/tn/jmgsfg315sd73yn_dnrf66c80000gn/T/tmpS1rnJ3 | |
| 20:48:21 INFO - [2019-12-17T12:48:20.408514] Getting https://firefox-ci-tc.services.mozilla.com/api/index/v1/task/gecko.v2.mozilla-central.latest.firefox.condprof-macosx64/artifacts/public/condprof/profile-macosx64-settled-default.tgz | |
| 20:48:21 INFO - [2019-12-17T12:48:20.850107] Already Downloaded. | |
| 20:48:21 INFO - [2019-12-17T12:48:20.850358] Extracting the tarball content in /var/folders/tn/jmgsfg315sd73yn_dnrf66c80000gn/T/tmpS1rnJ3 | |
| 20:48:21 INFO - [2019-12-17T12:48:21.665699] Success, we have a profile to work with | |
| 20:48:21 INFO - raptor-main Info: self.conditioned_profile_dir is now set: /var/folders/tn/jmgsfg315sd73yn_dnrf66c80000gn/T/tmpS1rnJ3 | |
| 20:48:21 INFO - raptor-main Info: Merging profile: /Users/sdonner/mozilla-source/mozilla-unified/testing/profiles/base | |
| 20:48:21 INFO - raptor-main Info: Merging profile: /Users/sdonner/mozilla-source/mozilla-unified/testing/profiles/common | |
| 20:48:21 INFO - raptor-main Info: Merging profile: /Users/sdonner/mozilla-source/mozilla-unified/testing/profiles/perf | |
| 20:48:21 INFO - raptor-main Info: Merging profile: /Users/sdonner/mozilla-source/mozilla-unified/testing/profiles/raptor | |
| 20:48:21 INFO - raptor-main Info: Local browser profile: /var/folders/tn/jmgsfg315sd73yn_dnrf66c80000gn/T/tmpS1rnJ3 | |
| 20:48:21 INFO - raptor-main Info: Removing mozprofile delimiters from browser profile | |
| 20:48:21 INFO - raptor-main Info: cwd: '/Users/sdonner/mozilla-source/mozilla-unified/testing/mozharness/build' | |
| 20:48:21 INFO - raptor-main Info: browsertime_node: /Users/sdonner/.mozbuild/node/bin/node | |
| 20:48:21 INFO - raptor-main Info: browsertime_node: posix.stat_result(st_mode=33261, st_ino=31153445, st_dev=16777220, st_nlink=1, st_uid=501, st_gid=20, st_size=35394080, st_atime=1528842227, st_mtime=1528842227, st_ctime=1576603619) | |
| 20:48:21 INFO - raptor-main Info: browsertime_browsertimejs: /Users/sdonner/mozilla-source/mozilla-unified/tools/browsertime/node_modules/browsertime/bin/browsertime.js | |
| 20:48:21 INFO - raptor-main Info: browsertime_browsertimejs: posix.stat_result(st_mode=33261, st_ino=30747320, st_dev=16777220, st_nlink=1, st_uid=501, st_gid=20, st_size=2813, st_atime=1576525217, st_mtime=1576525085, st_ctime=1576525085) | |
| 20:48:21 INFO - raptor-main Info: browsertime_geckodriver: None | |
| 20:48:21 INFO - raptor-main Info: browsertime_geckodriver: coercing to Unicode: need string or buffer, NoneType found | |
| 20:48:21 INFO - raptor-main Info: browsertime_chromedriver: None | |
| 20:48:21 INFO - raptor-main Info: browsertime_chromedriver: coercing to Unicode: need string or buffer, NoneType found | |
| 20:48:21 INFO - raptor-main Info: starting test: amazon-cold | |
| 20:48:21 INFO - raptor-main Info: test uses playback tool: mitmproxy | |
| 20:48:21 INFO - raptor-mitmproxy Info: mitmproxy was not provided with a 'playback_binary_manifest' Using default playback_binary_manifest | |
| 20:48:21 INFO - raptor-mitmproxy Info: mozproxy_dir used for mitmproxy downloads and exe files: /Users/sdonner/mozilla-source/mozilla-unified/obj-x86_64-apple-darwin19.2.0/testing/mozproxy | |
| 20:48:21 INFO - raptor-mitmproxy Info: mitmproxy binary already exists. Skipping download | |
| 20:48:21 INFO - raptor-mitmproxy Info: downloading mitmproxy pageset | |
| 20:48:21 INFO - raptor-mitmproxy Info: INFO - unzipping "mitm4-linux-firefox-amazon.zip" | |
| 20:48:21 INFO - raptor-mitmproxy Info: mitmdump path: /Users/sdonner/mozilla-source/mozilla-unified/obj-x86_64-apple-darwin19.2.0/testing/mozproxy/mitmdump-4.0.4/mitmdump | |
| 20:48:21 INFO - raptor-mitmproxy Info: browser path: /Users/sdonner/mozilla-source/mozilla-unified/obj-x86_64-apple-darwin19.2.0/dist/Nightly.app/Contents/MacOS/firefox | |
| 20:48:21 INFO - raptor-mitmproxy Info: Starting mitmproxy playback using env path: /Users/sdonner/mozilla-source/mozilla-unified/obj-x86_64-apple-darwin19.2.0/dist/Nightly.app/Contents/MacOS:/Users/sdonner/mozilla-source/mozilla-unified/obj-x86_64-apple-darwin19.2.0/testing/raptor-venv/bin:/Users/sdonner/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/sdonner/geckodriver:/Applications/VMware Fusion.app/Contents/Public:/Applications/Wireshark.app/Contents/MacOS | |
| 20:48:21 INFO - raptor-mitmproxy Info: Starting mitmproxy playback using command: /Users/sdonner/mozilla-source/mozilla-unified/obj-x86_64-apple-darwin19.2.0/testing/mozproxy/mitmdump-4.0.4/mitmdump --listen-host 127.0.0.1 --listen-port 55123 -v --set upstream_cert=false --set websocket=false --set server_replay_files=/Users/sdonner/mozilla-source/mozilla-unified/obj-x86_64-apple-darwin19.2.0/testing/mozproxy/amazon.mp --scripts /Users/sdonner/mozilla-source/mozilla-unified/testing/mozbase/mozproxy/mozproxy/backends/mitm/scripts/alternate-server-replay-4.0.4.py | |
| 20:48:22 INFO - raptor-mitmproxy Info: Mitmproxy playback successfully started on 127.0.0.1:55123 as pid 19358 | |
| 20:48:22 INFO - raptor-mitmproxy Info: Installing mitmproxy CA certficate into Firefox | |
| 20:48:22 INFO - raptor-mitmproxy Info: folder already exists: /Users/sdonner/mozilla-source/mozilla-unified/obj-x86_64-apple-darwin19.2.0/dist/Nightly.app/Contents/Resources/distribution | |
| 20:48:22 INFO - raptor-mitmproxy Info: writing: /Users/sdonner/mozilla-source/mozilla-unified/obj-x86_64-apple-darwin19.2.0/dist/Nightly.app/Contents/Resources/distribution/policies.json | |
| 20:48:22 INFO - raptor-mitmproxy Info: reading: /Users/sdonner/mozilla-source/mozilla-unified/obj-x86_64-apple-darwin19.2.0/dist/Nightly.app/Contents/Resources/distribution/policies.json | |
| 20:48:22 INFO - raptor-mitmproxy Info: Firefox policies file contents: | |
| 20:48:22 INFO - raptor-mitmproxy Info: { | |
| 20:48:22 INFO - "policies": { | |
| 20:48:22 INFO - "Certificates": { | |
| 20:48:22 INFO - "Install": ["/Users/sdonner/.mitmproxy/mitmproxy-ca-cert.cer"] | |
| 20:48:22 INFO - }, | |
| 20:48:22 INFO - "Proxy": { | |
| 20:48:22 INFO - "Mode": "manual", | |
| 20:48:22 INFO - "HTTPProxy": "127.0.0.1:55123", | |
| 20:48:22 INFO - "SSLProxy": "127.0.0.1:55123", | |
| 20:48:22 INFO - "Passthrough": "127.0.0.1", | |
| 20:48:22 INFO - "Locked": true | |
| 20:48:22 INFO - } | |
| 20:48:22 INFO - } | |
| 20:48:22 INFO - } | |
| 20:48:22 INFO - raptor-mitmproxy Info: Verified mitmproxy CA certificate is installed in Firefox | |
| 20:48:22 INFO - raptor-main Info: Playback recording information not available | |
| 20:48:22 INFO - raptor-main Info: test: {'expected_browser_cycles': 2, 'alert_threshold': '2.0', 'playback_pageset_manifest': 'mitm4-linux-firefox-amazon.manifest', 'browser_cycles': 2, 'here': '/Users/sdonner/mozilla-source/mozilla-unified/testing/raptor/raptor/tests/tp6/desktop', 'expected': 'pass', 'measure': ['fnbpaint', 'fcp', 'dcf', 'loadtime'], 'path': '/Users/sdonner/mozilla-source/mozilla-unified/testing/raptor/raptor/tests/tp6/desktop/amazon', 'manifest_relpath': 'tests/tp6/desktop/browsertime-tp6.ini', 'cold': True, 'unit': 'ms', 'name': 'amazon-cold', 'alert_on': ['fcp', 'loadtime'], 'use_live_sites': 'false', 'playback_recordings': 'amazon.mp', 'page_cycles': 1, 'apps': 'firefox, chrome', 'test_url': 'https://www.amazon.com/s?k=laptop&ref=nb_sb_noss_1', 'manifest': '/Users/sdonner/mozilla-source/mozilla-unified/testing/raptor/raptor/tests/tp6/desktop/browsertime-tp6.ini', 'ancestor_manifest': 'raptor.ini', 'page_timeout': '60000', 'playback': 'mitmproxy', 'browser_cycle': 1, 'lower_is_better': True, 'type': 'pageload', 'relpath': 'tests/tp6/desktop/amazon'} | |
| 20:48:22 INFO - raptor-main Info: binary_path: /Users/sdonner/mozilla-source/mozilla-unified/obj-x86_64-apple-darwin19.2.0/dist/Nightly.app/Contents/MacOS/firefox | |
| 20:48:22 INFO - raptor-main Info: timeout (s): 60000 | |
| 20:48:22 INFO - raptor-main Info: browsertime cwd: /Users/sdonner/mozilla-source/mozilla-unified/testing/mozharness/build | |
| 20:48:22 INFO - raptor-main Info: browsertime cmd: /Users/sdonner/.mozbuild/node/bin/node /Users/sdonner/mozilla-source/mozilla-unified/tools/browsertime/node_modules/browsertime/bin/browsertime.js /Users/sdonner/mozilla-source/mozilla-unified/testing/raptor/raptor/../browsertime/browsertime_pageload.js --browser firefox --firefox.binaryPath /Users/sdonner/mozilla-source/mozilla-unified/obj-x86_64-apple-darwin19.2.0/dist/Nightly.app/Contents/MacOS/firefox --browsertime.page_cycles 1 --browsertime.url https://www.amazon.com/s?k=laptop&ref=nb_sb_noss_1 --browsertime.page_cycle_delay 1000 --browsertime.post_startup_delay 3 --firefox.profileTemplate /var/folders/tn/jmgsfg315sd73yn_dnrf66c80000gn/T/tmpS1rnJ3 --skipHar --video false --visualMetrics false --timeouts.pageLoad 60000 --timeouts.script 60000 -vvv --resultDir /Users/sdonner/mozilla-source/mozilla-unified/testing/mozharness/build/blobber_upload_dir/browsertime-results/amazon-cold -n 2 | |
| 20:48:22 INFO - raptor-main Info: PATH: /Users/sdonner/mozilla-source/mozilla-unified/obj-x86_64-apple-darwin19.2.0/testing/raptor-venv/bin:/Users/sdonner/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/sdonner/geckodriver:/Applications/VMware Fusion.app/Contents/Public:/Applications/Wireshark.app/Contents/MacOS | |
| 20:48:23 INFO - [2019-12-17 12:48:23] DEBUG: [browsertime] Running with options: { | |
| 20:48:23 INFO - "scripts": [], | |
| 20:48:23 INFO - "iterations": 2, | |
| 20:48:23 INFO - "delay": 0, | |
| 20:48:23 INFO - "videoParams": { | |
| 20:48:23 INFO - "addTimer": true, | |
| 20:48:23 INFO - "debug": false, | |
| 20:48:23 INFO - "keepOriginalVideo": false, | |
| 20:48:23 INFO - "filmstripFullSize": false, | |
| 20:48:23 INFO - "createFilmstrip": true, | |
| 20:48:23 INFO - "framerate": 30, | |
| 20:48:23 INFO - "crf": 23, | |
| 20:48:23 INFO - "filmstripQuality": 75, | |
| 20:48:23 INFO - "nice": 0 | |
| 20:48:23 INFO - }, | |
| 20:48:23 INFO - "_": [ | |
| 20:48:23 INFO - "/Users/sdonner/mozilla-source/mozilla-unified/testing/raptor/raptor/../browsertime/browsertime_pageload.js" | |
| 20:48:23 INFO - ], | |
| 20:48:23 INFO - "chrome": { | |
| 20:48:23 INFO - "cdp": { | |
| 20:48:23 INFO - "performance": true | |
| 20:48:23 INFO - }, | |
| 20:48:23 INFO - "ignoreCertificateErrors": true, | |
| 20:48:23 INFO - "ignore-certificate-errors": true | |
| 20:48:23 INFO - }, | |
| 20:48:23 INFO - "firefox": { | |
| 20:48:23 INFO - "disableSafeBrowsing": false, | |
| 20:48:23 INFO - "disable-safe-browsing": false, | |
| 20:48:23 INFO - "windowRecorder": true, | |
| 20:48:23 INFO - "window-recorder": true, | |
| 20:48:23 INFO - "geckoProfiler": false, | |
| 20:48:23 INFO - "gecko-profiler": false, | |
| 20:48:23 INFO - "binaryPath": "/Users/sdonner/mozilla-source/mozilla-unified/obj-x86_64-apple-darwin19.2.0/dist/Nightly.app/Contents/MacOS/firefox", | |
| 20:48:23 INFO - "binary-path": "/Users/sdonner/mozilla-source/mozilla-unified/obj-x86_64-apple-darwin19.2.0/dist/Nightly.app/Contents/MacOS/firefox", | |
| 20:48:23 INFO - "profileTemplate": "/var/folders/tn/jmgsfg315sd73yn_dnrf66c80000gn/T/tmpS1rnJ3", | |
| 20:48:23 INFO - "profile-template": "/var/folders/tn/jmgsfg315sd73yn_dnrf66c80000gn/T/tmpS1rnJ3", | |
| 20:48:23 INFO - "includeResponseBodies": "none", | |
| 20:48:23 INFO - "include-response-bodies": "none", | |
| 20:48:23 INFO - "geckoProfilerParams": { | |
| 20:48:23 INFO - "features": "js,stackwalk,leaf", | |
| 20:48:23 INFO - "threads": "GeckoMain,Compositor,Renderer", | |
| 20:48:23 INFO - "bufferSize": 1000000 | |
| 20:48:23 INFO - }, | |
| 20:48:23 INFO - "gecko-profiler-params": { | |
| 20:48:23 INFO - "features": "js,stackwalk,leaf", | |
| 20:48:23 INFO - "threads": "GeckoMain,Compositor,Renderer", | |
| 20:48:23 INFO - "buffer-size": 1000000 | |
| 20:48:23 INFO - } | |
| 20:48:23 INFO - }, | |
| 20:48:23 INFO - "video-params": { | |
| 20:48:23 INFO - "add-timer": true, | |
| 20:48:23 INFO - "debug": false, | |
| 20:48:23 INFO - "keep-original-video": false, | |
| 20:48:23 INFO - "filmstrip-full-size": false, | |
| 20:48:23 INFO - "create-filmstrip": true, | |
| 20:48:23 INFO - "framerate": 30, | |
| 20:48:23 INFO - "crf": 23, | |
| 20:48:23 INFO - "filmstrip-quality": 75, | |
| 20:48:23 INFO - "nice": 0 | |
| 20:48:23 INFO - }, | |
| 20:48:23 INFO - "android": false, | |
| 20:48:23 INFO - "processStartTime": false, | |
| 20:48:23 INFO - "process-start-time": false, | |
| 20:48:23 INFO - "screenshot": false, | |
| 20:48:23 INFO - "pageCompleteCheckInactivity": false, | |
| 20:48:23 INFO - "page-complete-check-inactivity": false, | |
| 20:48:23 INFO - "prettyPrint": false, | |
| 20:48:23 INFO - "pretty-print": false, | |
| 20:48:23 INFO - "connectivity": { | |
| 20:48:23 INFO - "throttle": { | |
| 20:48:23 INFO - "localhost": false | |
| 20:48:23 INFO - }, | |
| 20:48:23 INFO - "profile": "native", | |
| 20:48:23 INFO - "engine": "external" | |
| 20:48:23 INFO - }, | |
| 20:48:23 INFO - "cacheClearRaw": false, | |
| 20:48:23 INFO - "cache-clear-raw": false, | |
| 20:48:23 INFO - "xvfb": false, | |
| 20:48:23 INFO - "headless": false, | |
| 20:48:23 INFO - "spa": false, | |
| 20:48:23 INFO - "browser": "firefox", | |
| 20:48:23 INFO - "b": "firefox", | |
| 20:48:23 INFO - "browsertime": { | |
| 20:48:23 INFO - "page_cycles": 1, | |
| 20:48:23 INFO - "url": "https://www.amazon.com/s?k=laptop&ref=nb_sb_noss_1", | |
| 20:48:23 INFO - "page_cycle_delay": 1000, | |
| 20:48:23 INFO - "post_startup_delay": 3 | |
| 20:48:23 INFO - }, | |
| 20:48:23 INFO - "skipHar": true, | |
| 20:48:23 INFO - "skip-har": true, | |
| 20:48:23 INFO - "video": false, | |
| 20:48:23 INFO - "visualMetrics": false, | |
| 20:48:23 INFO - "visual-metrics": false, | |
| 20:48:23 INFO - "timeouts": { | |
| 20:48:23 INFO - "pageLoad": 60000, | |
| 20:48:23 INFO - "page-load": 60000, | |
| 20:48:23 INFO - "script": 60000, | |
| 20:48:23 INFO - "browserStart": 60000, | |
| 20:48:23 INFO - "browser-start": 60000, | |
| 20:48:23 INFO - "pageCompleteCheck": 300000, | |
| 20:48:23 INFO - "page-complete-check": 300000 | |
| 20:48:23 INFO - }, | |
| 20:48:23 INFO - "v": 3, | |
| 20:48:23 INFO - "verbose": 3, | |
| 20:48:23 INFO - "resultDir": "/Users/sdonner/mozilla-source/mozilla-unified/testing/mozharness/build/blobber_upload_dir/browsertime-results/amazon-cold", | |
| 20:48:23 INFO - "result-dir": "/Users/sdonner/mozilla-source/mozilla-unified/testing/mozharness/build/blobber_upload_dir/browsertime-results/amazon-cold", | |
| 20:48:23 INFO - "n": 2, | |
| 20:48:23 INFO - "screenshotParams": { | |
| 20:48:23 INFO - "type": "jpg", | |
| 20:48:23 INFO - "png": { | |
| 20:48:23 INFO - "compressionLevel": 6 | |
| 20:48:23 INFO - }, | |
| 20:48:23 INFO - "jpg": { | |
| 20:48:23 INFO - "quality": 80 | |
| 20:48:23 INFO - }, | |
| 20:48:23 INFO - "maxSize": 2000 | |
| 20:48:23 INFO - }, | |
| 20:48:23 INFO - "screenshot-params": { | |
| 20:48:23 INFO - "type": "jpg", | |
| 20:48:23 INFO - "png": { | |
| 20:48:23 INFO - "compression-level": 6 | |
| 20:48:23 INFO - }, | |
| 20:48:23 INFO - "jpg": { | |
| 20:48:23 INFO - "quality": 80 | |
| 20:48:23 INFO - }, | |
| 20:48:23 INFO - "max-size": 2000 | |
| 20:48:23 INFO - }, | |
| 20:48:23 INFO - "pageCompleteWaitTime": 5000, | |
| 20:48:23 INFO - "page-complete-wait-time": 5000, | |
| 20:48:23 INFO - "c": "native", | |
| 20:48:23 INFO - "percentiles": [ | |
| 20:48:23 INFO - 0, | |
| 20:48:23 INFO - 10, | |
| 20:48:23 INFO - 90, | |
| 20:48:23 INFO - 99, | |
| 20:48:23 INFO - 100 | |
| 20:48:23 INFO - ], | |
| 20:48:23 INFO - "decimals": 0, | |
| 20:48:23 INFO - "xvfbParams": { | |
| 20:48:23 INFO - "display": 99 | |
| 20:48:23 INFO - }, | |
| 20:48:23 INFO - "xvfb-params": { | |
| 20:48:23 INFO - "display": 99 | |
| 20:48:23 INFO - }, | |
| 20:48:23 INFO - "preURLDelay": 1500, | |
| 20:48:23 INFO - "pre-url-delay": 1500, | |
| 20:48:23 INFO - "silent": 0, | |
| 20:48:23 INFO - "q": 0, | |
| 20:48:23 INFO - "$0": "../../../tools/browsertime/node_modules/browsertime/bin/browsertime.js" | |
| 20:48:23 INFO - } | |
| 20:48:23 INFO - [2019-12-17 12:48:23] VERBOSE: [browsertime] appConstants is a new-style script object. | |
| 20:48:23 INFO - [2019-12-17 12:48:23] VERBOSE: [browsertime] asyncAppConstants is a new-style script object. | |
| 20:48:23 INFO - [2019-12-17 12:48:23] VERBOSE: [browsertime] userAgent is an old-style script object. | |
| 20:48:23 INFO - [2019-12-17 12:48:23] VERBOSE: [browsertime] windowSize is an old-style script object. | |
| 20:48:23 INFO - [2019-12-17 12:48:23] VERBOSE: [browsertime] documentHeight is an old-style script object. | |
| 20:48:23 INFO - [2019-12-17 12:48:23] VERBOSE: [browsertime] documentSize is an old-style script object. | |
| 20:48:23 INFO - [2019-12-17 12:48:23] VERBOSE: [browsertime] documentTitle is an old-style script object. | |
| 20:48:23 INFO - [2019-12-17 12:48:23] VERBOSE: [browsertime] documentWidth is an old-style script object. | |
| 20:48:23 INFO - [2019-12-17 12:48:23] VERBOSE: [browsertime] navigationStartTime is an old-style script object. | |
| 20:48:23 INFO - [2019-12-17 12:48:23] VERBOSE: [browsertime] nextHopProtocol is an old-style script object. | |
| 20:48:23 INFO - [2019-12-17 12:48:23] VERBOSE: [browsertime] responsive is an old-style script object. | |
| 20:48:23 INFO - [2019-12-17 12:48:23] VERBOSE: [browsertime] url is an old-style script object. | |
| 20:48:23 INFO - [2019-12-17 12:48:23] VERBOSE: [browsertime] visualElements is an old-style script object. | |
| 20:48:23 INFO - [2019-12-17 12:48:23] VERBOSE: [browsertime] firstPaint is an old-style script object. | |
| 20:48:23 INFO - [2019-12-17 12:48:23] VERBOSE: [browsertime] loadEventEnd is an old-style script object. | |
| 20:48:23 INFO - [2019-12-17 12:48:23] VERBOSE: [browsertime] navigationTiming is an old-style script object. | |
| 20:48:23 INFO - [2019-12-17 12:48:23] VERBOSE: [browsertime] pageTimings is an old-style script object. | |
| 20:48:23 INFO - [2019-12-17 12:48:23] VERBOSE: [browsertime] paintTiming is an old-style script object. | |
| 20:48:23 INFO - [2019-12-17 12:48:23] VERBOSE: [browsertime] rumSpeedIndex is an old-style script object. | |
| 20:48:23 INFO - [2019-12-17 12:48:23] VERBOSE: [browsertime] serverTimings is an old-style script object. | |
| 20:48:23 INFO - [2019-12-17 12:48:23] VERBOSE: [browsertime] timeToContentfulPaint is an old-style script object. | |
| 20:48:23 INFO - [2019-12-17 12:48:23] VERBOSE: [browsertime] timeToDomContentFlushed is an old-style script object. | |
| 20:48:23 INFO - [2019-12-17 12:48:23] VERBOSE: [browsertime] timeToFirstInteractive is an old-style script object. | |
| 20:48:23 INFO - [2019-12-17 12:48:23] VERBOSE: [browsertime] userTimings is an old-style script object. | |
| 20:48:23 INFO - [2019-12-17 12:48:23] INFO: [browsertime] Running tests using Firefox - 2 iteration(s) | |
| 20:48:23 INFO - 1576615703195 webdriver::httpapi DEBUG Creating routes | |
| 20:48:23 INFO - 1576615703201 geckodriver DEBUG Listening on 127.0.0.1:55916 | |
| 20:48:23 INFO - 1576615703202 webdriver::server DEBUG -> GET /status | |
| 20:48:23 INFO - 1576615703202 webdriver::server DEBUG <- 200 OK {"value":{"message":"","ready":true}} | |
| 20:48:23 INFO - 1576615703225 webdriver::server DEBUG -> POST /session {"desiredCapabilities":{"browserName":"firefox","pageLoadStrategy":"normal","moz:firefoxOptions":{"binary":"/Users/sdonner/mozilla-source/mozilla-unified/obj-x86_64-apple-darwin19.2.0/dist/Nightly.app/Contents/MacOS/firefox","profile":"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API0AABtYW5pZmVzdC5qc29uUEsBAhQACgAAAAgAwqJLTjRrc0P9AQAAvgQAAAwAAAAAAAAAAAAAAAAAsTYAAHBhY2thZ2UuanNvblBLAQIUAAoAAAAIAMKiS06JgcDeZQEAAK8CAAAJAAAAAAAAAAAAAAAAANg4AABzY3JpcHQuanNQSwECFAAKAAAACADCoktOhQamT1JnAABhkwEAEQAAAAAAAAAAAAAAAABkOgAAcGFja2FnZS1sb2NrLmpzb25QSwECFAMUAAAACADEmktOkTPHyHMDAADsBgAAFAAAAAAAAAAAAAAAgAHloQAATUVUQS1JTkYvbWFuaWZlc3QubWZQSwECFAMUAAAACADEmktOwAUFfZoAAAC+AAAAEwAAAAAAAAAAAAAAgAGKpQAATUVUQS1JTkYvbW96aWxsYS5zZlBLBQYAAAAADQANABIDAABVpgAAAABQSwMECgAAAAAAC6aRT50EpXfmKwAA5isAAAcAAAB1c2VyLmpzdXNlcl9wcmVmKCJsYXllcnMud2luZG93cmVjb3JkaW5nLnBhdGgiLCAiL1VzZXJzL3Nkb25uZXIvbW96aWxsYS1zb3VyY2UvbW96aWxsYS11bmlmaWVkL3Rlc3RpbmcvbW96aGFybmVzcy9idWlsZC9ibG9iYmVyX3VwbG9hZF9kaXIvYnJvd3NlcnRpbWUtcmVzdWx0cy9hbWF6b24tY29sZC8iKTsKdXNlcl9wcmVmKCJhcHAudXBkYXRlLmRpc2FibGVkRm9yVGVzdGluZyIsIHRydWUpOwp1c2VyX3ByZWYoImRvbS5wZXJmb3JtYW5jZS50aW1lX3RvX25vbl9ibGFua19wYWludC5lbmFibGVkIiwgdHJ1ZSk7CnVzZXJfcHJlZigiZG9tLnBlcmZvcm1hbmNlLnRpbWVfdG9fZG9tX2NvbnRlbnRfZmx1c2hlZC5lbmFibGVkIiwgdHJ1ZSk7CnVzZXJfcHJlZigiZG9tLnBlcmZvcm1hbmNlLnRpbWVfdG9fZmlyc3RfaW50ZXJhY3RpdmUuZW5hYmxlZCIsIHRydWUpOwp1c2VyX3ByZWYoImRvbS5wZXJmb3JtYW5jZS50aW1lX3RvX2NvbnRlbnRmdWxfcGFpbnQuZW5hYmxlZCIsIHRydWUpOwp1c2VyX3ByZWYoImJyb3dzZXIuc3RhcnR1cC5ob21lcGFnZSIsICJhYm91dDpibGFuayIpOwp1c2VyX3ByZWYoImRldnRvb2xzLmRldmVkaXRpb24ucHJvbW8uZW5hYmxlZCIsIGZhbHNlKTsKdXNlcl9wcmVmKCJhcHAudXBkYXRlLmVuYWJsZWQiLCBmYWxzZSk7CnVzZXJfcHJlZigiYXBwLnVwZGF0ZS51cmwiLCAiIik7CnVzZXJfcHJlZigiYnJvd3Nlci5hYm91dEhvbWVTbmlwcGV0cy51cGRhdGVVcmwiLCAiIik7CnVzZXJfcHJlZigiYnJvd3Nlci5ib29rbWFya3MucmVzdG9yZV9kZWZhdWx0X2Jvb2ttYXJrcyIsIGZhbHNlKTsKdXNlcl9wcmVmKCJicm93c2VyLmJvb2ttYXJrcy5hZGRlZF9zdGF0aWNfcm9vdCIsIHRydWUpOwp1c2VyX3ByZWYoImJyb3dzZXIucGxhY2VzLmltcG9ydEJvb2ttYXJrc0hUTUwiLCBmYWxzZSk7CnVzZXJfcHJlZigiYnJvd3Nlci5uZXd0YWJwYWdlLmRpcmVjdG9yeS5waW5nIiwgIiIpOwp1c2VyX3ByZWYoImJyb3dzZXIubmV3dGFicGFnZS5kaXJlY3Rvcnkuc291cmNlIiwgImRhdGE6YXBwbGljYXRpb24vanNvbix7fSIpOwp1c2VyX3ByZWYoImJyb3dzZXIubmV3dGFicGFnZS5lbmFibGVkIiwgZmFsc2UpOwp1c2VyX3ByZWYoImJyb3dzZXIubmV3dGFicGFnZS5lbmhhbmNlZCIsIGZhbHNlKTsKdXNlcl9wcmVmKCJicm93c2VyLm5ld3RhYnBhZ2UuaW50cm9TaG93biIsIHRydWUpOwp1c2VyX3ByZWYoImJyb3dzZXIubmV3dGFiLnByZWxvYWQiLCBmYWxzZSk7CnVzZXJfcHJlZigiYnJvd3Nlci5wYWdldGh1bWJuYWlscy5jYXB0dXJpbmdfZGlzYWJsZWQiLCB0cnVlKTsKdXNlcl9wcmVmKCJicm93c2VyLnJpZ2h0cy4zLnNob3duIiwgdHJ1ZSk7CnVzZXJfcHJlZigiYnJvd3Nlci5zZWFyY2gudXBkYXRlIiwgZmFsc2UpOwp1c2VyX3ByZWYoImJyb3dzZXIuc2Vzc2lvbnN0b3JlLnJlc3VtZV9mcm9tX2NyYXNoIiwgZmFsc2UpOwp1c2VyX3ByZWYoImJyb3dzZXIuc2hlbGwuY2hlY2tEZWZhdWx0QnJvd3NlciIsIGZhbHNlKTsKdXNlcl9wcmVmKCJicm93c2VyLnN0YXJ0dXAucGFnZSIsIDApOwp1c2VyX3ByZWYoImJyb3dzZXIudWl0b3VyLmVuYWJsZWQiLCBmYWxzZSk7CnVzZXJfcHJlZigiYnJvd3Nlci50YWJzLndhcm5PbkNsb3NlIiwgZmFsc2UpOwp1c2VyX3ByZWYoImRhdGFyZXBvcnRpbmcuaGVhbHRocmVwb3J0LnNlcnZpY2UuZW5hYmxlZCIsIGZhbHNlKTsKdXNlcl9wcmVmKCJkYXRhcmVwb3J0aW5nLmhlYWx0aHJlcG9ydC51cGxvYWRFbmFibGVkIiwgZmFsc2UpOwp1c2VyX3ByZWYoImRhdGFyZXBvcnRpbmcuaGVhbHRocmVwb3J0LnNlcnZpY2UuZmlyc3RSdW4iLCBmYWxzZSk7CnVzZXJfcHJlZigiZGF0YXJlcG9ydGluZy5oZWFsdGhyZXBvcnQubG9nZ2luZy5jb25zb2xlRW5hYmxlZCIsIGZhbHNlKTsKdXNlcl9wcmVmKCJkYXRhcmVwb3J0aW5nLnBvbGljeS5kYXRhU3VibWlzc2lvbkVuYWJsZWQiLCBmYWxzZSk7CnVzZXJfcHJlZigiZGF0YXJlcG9ydGluZy5wb2xpY3kuZGF0YVN1Ym1pc3Npb25Qb2xpY3lSZXNwb25zZVR5cGUiLCAiYWNjZXB0ZWQtaW5mby1iYXItZGlzbWlzc2VkIik7CnVzZXJfcHJlZigiZGF0YXJlcG9ydGluZy5wb2xpY3kuZGF0YVN1Ym1pc3Npb25Qb2xpY3lBY2NlcHRlZCIsIGZhbHNlKTsKdXNlcl9wcmVmKCJkb20uaXBjLnBsdWdpbnMuZmxhc2guZGlzYWJsZS1wcm90ZWN0ZWQtbW9kZSIsIHRydWUpOwp1c2VyX3ByZWYoImRvbS5tYXhfY2hyb21lX3NjcmlwdF9ydW5fdGltZSIsIDApOwp1c2VyX3ByZWYoImRvbS5tYXhfc2NyaXB0X3J1bl90aW1lIiwgMCk7CnVzZXJfcHJlZigiZG9tLndlYm5vdGlmaWNhdGlvbnMuZW5hYmxlZCIsIGZhbHNlKTsKdXNlcl9wcmVmKCJleHRlbnNpb25zLmNoZWNrQ29tcGF0aWJpbGl0eSIsIGZhbHNlKTsKdXNlcl9wcmVmKCJleHRlbnNpb25zLnVwZGF0ZS5lbmFibGVkIiwgZmFsc2UpOwp1c2VyX3ByZWYoImV4dGVuc2lvbnMudXBkYXRlLm5vdGlmeVVzZXIiLCBmYWxzZSk7CnVzZXJfcHJlZigiZXh0ZW5zaW9ucy5zaG93blNlbGVjdGlvblVJIiwgdHJ1ZSk7CnVzZXJfcHJlZigiZXh0ZW5zaW9ucy5hdXRvRGlzYWJsZVNjb3BlcyIsIDEwKTsKdXNlcl9wcmVmKCJleHRlbnNpb25zLnNoaWVsZC1yZWNpcGUtY2xpZW50LmVuYWJsZWQiLCBmYWxzZSk7CnVzZXJfcHJlZigiZXh0ZW5zaW9ucy5zeXN0ZW1BZGRvbi51cGRhdGUudXJsIiwgImh0dHA6Ly8xMjcuMC4wLjEvZHVtbXktc3lzdGVtLWFkZG9ucy54bWwiKTsKdXNlcl9wcmVmKCJpbnRsLmNoYXJzZXRtZW51LmJyb3dzZXIuY2FjaGUiLCAiVVRGLTgiKTsKdXNlcl9wcmVmKCJtZWRpYS5nbXAtZ21wb3BlbmgyNjQuYXV0b3VwZGF0ZSIsIGZhbHNlKTsKdXNlcl9wcmVmKCJuZXR3b3JrLmNvb2tpZS5wcmVmc01pZ3JhdGVkIiwgdHJ1ZSk7CnVzZXJfcHJlZigibmV0d29yay5wcm94eS50eXBlIiwgMCk7CnVzZXJfcHJlZigicGFnZVRodW1icy5lbmFibGVkIiwgZmFsc2UpOwp1c2VyX3ByZWYoInByZWYuYnJvd3Nlci5ob21lcGFnZS5kaXNhYmxlX2J1dHRvbi5jdXJyZW50X3BhZ2UiLCBmYWxzZSk7CnVzZXJfcHJlZigicHJpdmFjeS5jcGQuc2l0ZVNldHRpbmdzIiwgdHJ1ZSk7CnVzZXJfcHJlZigicHJpdmFjeS5zYW5pdGl6ZS5taWdyYXRlRngzUHJlZnMiLCB0cnVlKTsKdXNlcl9wcmVmKCJwcml2YWN5LnNhbml0aXplLnRpbWVTcGFuIiwgMCk7CnVzZXJfcHJlZigicmVhZGVyLnBhcnNlLW9uLWxvYWQuZW5hYmxlZCIsIGZhbHNlKTsKdXNlcl9wcmVmKCJzZWN1cml0eS5lbmFibGVfamF2YSIsIGZhbHNlKTsKdXNlcl9wcmVmKCJzZWN1cml0eS53YXJuX2VudGVyaW5nX3dlYWsiLCBmYWxzZSk7CnVzZXJfcHJlZigic2VjdXJpdHkud2Fybl92aWV3aW5nX21peGVkIiwgZmFsc2UpOwp1c2VyX3ByZWYoInNlY3VyaXR5Lndhcm5fZW50ZXJpbmdfc2VjdXJlIiwgZmFsc2UpOwp1c2VyX3ByZWYoInNlY3VyaXR5Lndhcm5fbGVhdmluZ19zZWN1cmUiLCBmYWxzZSk7CnVzZXJfcHJlZigic2VjdXJpdHkud2Fybl9zdWJtaXRfaW5zZWN1cmUiLCBmYWxzZSk7CnVzZXJfcHJlZigic2VydmljZXMuc3luYy5taWdyYXRlZCIsIHRydWUpOwp1c2VyX3ByZWYoInNlcnZpY2VzLnN5bmMuZW5naW5lLmJvb2ttYXJrcyIsIGZhbHNlKTsKdXNlcl9wcmVmKCJ0b29sa2l0LnRlbGVtZXRyeS5zZXJ2ZXIiLCAiaHR0cHM6Ly8xMjcuMC4wLjEvdGVsZW1ldHJ5LWR1bW15LyIpOwp1c2VyX3ByZWYoInRvb2xraXQuY29udGVudC1iYWNrZ3JvdW5kLWhhbmctbW9uaXRvci5kaXNhYmxlZCIsIHRydWUpOwp1c2VyX3ByZWYoImdmeC53ZWJyZW5kZXIuZm9yY2UtZGlzYWJsZWQiLCB0cnVlKTsKdXNlcl9wcmVmKCJ4cGluc3RhbGwud2hpdGVsaXN0LmFkZCIsICIiKTsKdXNlcl9wcmVmKCJ4cGluc3RhbGwud2hpdGVsaXN0LmFkZC4zNiIsICIiKTsKdXNlcl9wcmVmKCJ4cGluc3RhbGwuc2lnbmF0dXJlcy5yZXF1aXJlZCIsIGZhbHNlKTsKdXNlcl9wcmVmKCJzaWdub24ucmVtZW1iZXJTaWdub25zIiwgZmFsc2UpOwp1c2VyX3ByZWYoImphdmFzY3JpcHQub3B0aW9ucy5hc3luY3N0YWNrIiwgZmFsc2UpOwp1c2VyX3ByZWYoImphdmFzY3JpcHQub3B0aW9ucy5zaG93SW5Db25zb2xlIiwgdHJ1ZSk7CnVzZXJfcHJlZigiZGV2dG9vbHMuY2hyb21lLmVuYWJsZWQiLCBmYWxzZSk7CnVzZXJfcHJlZigiZGV2dG9vbHMuZGVidWdnZXIucmVtb3RlLWVuYWJsZWQiLCBmYWxzZSk7CnVzZXJfcHJlZigiZGV2dG9vbHMuc291cmNlbWFwLmxvY2F0aW9ucy5lbmFibGVkIiwgZmFsc2UpOwp1c2VyX3ByZWYoImRvbS5wdXNoLnNlcnZlclVSTCIsICIiKTsKdXNlcl9wcmVmKCJhcHAudXBkYXRlLmNoZWNrSW5zdGFsbFRpbWUiLCBmYWxzZSk7CnVzZXJfcHJlZigiYnJvd3Nlci5jaHJvbWUuZ3Vlc3NfZmF2aWNvbiIsIGZhbHNlKTsKdXNlcl9wcmVmKCJicm93c2VyLmRvbS53aW5kb3cuZHVtcC5lbmFibGVkIiwgdHJ1ZSk7CnVzZXJfcHJlZigiZGV2dG9vbHMuY29uc29sZS5zdGRvdXQuY2hyb21lIiwgdHJ1ZSk7CnVzZXJfcHJlZigiYnJvd3Nlci5uZXd0YWJwYWdlLmFjdGl2aXR5LXN0cmVhbS5hc3JvdXRlci5wcm92aWRlcnMuY2ZyIiwgIltdIik7CnVzZXJfcHJlZigiYnJvd3Nlci5uZXd0YWJwYWdlLmFjdGl2aXR5LXN0cmVhbS5hc3JvdXRlci5wcm92aWRlcnMuY2ZyLWZ4YSIsICJbXSIpOwp1c2VyX3ByZWYoImJyb3dzZXIubmV3dGFicGFnZS5hY3Rpdml0eS1zdHJlYW0uYXNyb3V0ZXIucHJvdmlkZXJzLnNuaXBwZXRzIiwgIltdIik7CnVzZXJfcHJlZigiYnJvd3Nlci5uZXd0YWJwYWdlLmFjdGl2aXR5LXN0cmVhbS5mZWVkcy5zZWN0aW9uLnRvcHN0b3JpZXMiLCBmYWxzZSk7CnVzZXJfcHJlZigiYnJvd3Nlci5uZXd0YWJwYWdlLmFjdGl2aXR5LXN0cmVhbS5mZWVkcy5zbmlwcGV0cyIsIGZhbHNlKTsKdXNlcl9wcmVmKCJicm93c2VyLm5ld3RhYnBhZ2UuYWN0aXZpdHktc3RyZWFtLnRpcHB5VG9wLnNlcnZpY2UuZW5kcG9pbnQiLCAiIik7CnVzZXJfcHJlZigiYnJvd3Nlci5uZXd0YWJwYWdlLmFjdGl2aXR5LXN0cmVhbS5kaXNjb3ZlcnlzdHJlYW0uY29uZmlnIiwgIltdIik7CnVzZXJfcHJlZigiYnJvd3Nlci5uZXd0YWJwYWdlLmFjdGl2aXR5LXN0cmVhbS5meGFjY291bnRzLmVuZHBvaW50IiwgIiIpOwp1c2VyX3ByZWYoImJyb3dzZXIuc2VhcmNoLnJlZ2lvbiIsICJVUyIpOwp1c2VyX3ByZWYoImJyb3dzZXIuc2VhcmNoLmdlb1NwZWNpZmljRGVmYXVsdHMiLCBmYWxzZSk7CnVzZXJfcHJlZigiYnJvd3Nlci53ZWJhcHBzLmNoZWNrRm9yVXBkYXRlcyIsIDApOwp1c2VyX3ByZWYoImRhdGFyZXBvcnRpbmcucG9saWN5LmRhdGFTdWJtaXNzaW9uUG9saWN5QnlwYXNzTm90aWZpY2F0aW9uIiwgdHJ1ZSk7CnVzZXJfcHJlZigiZG9tLnNlbmRfYWZ0ZXJfcGFpbnRfdG9fY29udGVudCIsIHRydWUpOwp1c2VyX3ByZWYoImV4dGVuc2lvbnMuZW5hYmxlZFNjb3BlcyIsIDUpOwp1c2VyX3ByZWYoImV4dGVuc2lvbnMubGVnYWN5LmVuYWJsZWQiLCB0cnVlKTsKdXNlcl9wcmVmKCJleHRlbnNpb25zLmdldEFkZG9ucy5kaXNjb3ZlcnkuYXBpX3VybCIsICJkYXRhOjtiYXNlNjQsZXlKeVpYTjFiSFJ6SWpwYlhYMCUzRCIpOwp1c2VyX3ByZWYoImV4dGVuc2lvbnMud2ViZXh0ZW5zaW9ucy53YXJuaW5ncy1hcy1lcnJvcnMiLCB0cnVlKTsKdXNlcl9wcmVmKCJnZW5lcmFsLnVzZXJhZ2VudC51cGRhdGVzLmVuYWJsZWQiLCBmYWxzZSk7CnVzZXJfcHJlZigiZ2Z4LndlYnJlbmRlci5hbGwucXVhbGlmaWVkIiwgZmFsc2UpOwp1c2VyX3ByZWYoImhhbmdtb25pdG9yLnRpbWVvdXQiLCAwKTsKdXNlcl9wcmVmKCJtZWRpYS5nbXAtbWFuYWdlci51cGRhdGVFbmFibGVkIiwgZmFsc2UpOwp1c2VyX3ByZWYoInNlY3VyaXR5LmNlcnRlcnJvcnMubWl0bS5wcmltaW5nLmVuYWJsZWQiLCBmYWxzZSk7CnVzZXJfcHJlZigic2VjdXJpdHkudHVybl9vZmZfYWxsX3NlY3VyaXR5X3NvX3RoYXRfdmlydXNlc19jYW5fdGFrZV9vdmVyX3RoaXNfY29tcHV0ZXIiLCB0cnVlKTsKdXNlcl9wcmVmKCJzZXJ2aWNlcy5zZXR0aW5ncy5zZXJ2ZXIiLCAiaHR0cDovL2xvY2FsaG9zdC9yZW1vdGUtc2V0dGluZ3MtZHVtbXkvdjEiKTsKdXNlcl9wcmVmKCJtZWRpYS5hdXRvcGxheS5kZWZhdWx0IiwgMCk7CnVzZXJfcHJlZigibWVkaWEuYXV0b3BsYXkuZW5hYmxlZC51c2VyLWdlc3R1cmVzLW5lZWRlZCIsIHRydWUpOwp1c2VyX3ByZWYoIm1lZGlhLmF1dG9wbGF5LmFzay1wZXJtaXNzaW9uIiwgZmFsc2UpOwp1c2VyX3ByZWYoIm1lZGlhLmF1dG9wbGF5LmJsb2NrLXdlYmF1ZGlvIiwgZmFsc2UpOwp1c2VyX3ByZWYoIm1lZGlhLmFsbG93ZWQtdG8tcGxheS5lbmFibGVkIiwgdHJ1ZSk7CnVzZXJfcHJlZigibWVkaWEuYmxvY2stYXV0b3BsYXktdW50aWwtaW4tZm9yZWdyb3VuZCIsIGZhbHNlKTsKdXNlcl9wcmVmKCJ0b29sa2l0LnRlbGVtZXRyeS5jb3ZlcmFnZS5lbmRwb2ludC5iYXNlIiwgImh0dHA6Ly9sb2NhbGhvc3QiKTsKdXNlcl9wcmVmKCJtZWRpYS5nZWNrb3ZpZXcuYXV0b3BsYXkucmVxdWVzdCIsIGZhbHNlKTsKdXNlcl9wcmVmKCJhcHAubm9ybWFuZHkuYXBpX3VybCIsICJodHRwczovLzEyNy4wLjAuMS9zZWxmc3VwcG9ydC1kdW1teS8iKTsKdXNlcl9wcmVmKCJicm93c2VyLkVVTEEub3ZlcnJpZGUiLCB0cnVlKTsKdXNlcl9wcmVmKCJicm93c2VyLmFkZG9uLXdhdGNoLmludGVydmFsIiwgLTEpOwp1c2VyX3ByZWYoImJyb3dzZXIuYm9va21hcmtzLm1heF9iYWNrdXBzIiwgMCk7CnVzZXJfcHJlZigiYnJvd3Nlci5jYWNoZS5kaXNrLnNtYXJ0X3NpemUuZW5hYmxlZCIsIGZhbHNlKTsKdXNlcl9wcmVmKCJicm93c2VyLmNocm9tZS5keW5hbWljdG9vbGJhciIsIGZhbHNlKTsKdXNlcl9wcmVmKCJicm93c2VyLmNvbnRlbnRIYW5kbGVycy50eXBlcy4wLnVyaSIsICJodHRwOi8vMTI3LjAuMC4xL3Jzcz91cmw9JXMiKTsKdXNlcl9wcmVmKCJicm93c2VyLmNvbnRlbnRIYW5kbGVycy50eXBlcy4xLnVyaSIsICJodHRwOi8vMTI3LjAuMC4xL3Jzcz91cmw9JXMiKTsKdXNlcl9wcmVmKCJicm93c2VyLmNvbnRlbnRIYW5kbGVycy50eXBlcy4yLnVyaSIsICJodHRwOi8vMTI3LjAuMC4xL3Jzcz91cmw9JXMiKTsKdXNlcl9wcmVmKCJicm93c2VyLmNvbnRlbnRIYW5kbGVycy50eXBlcy4zLnVyaSIsICJodHRwOi8vMTI3LjAuMC4xL3Jzcz91cmw9JXMiKTsKdXNlcl9wcmVmKCJicm93c2VyLmNvbnRlbnRIYW5kbGVycy50eXBlcy40LnVyaSIsICJodHRwOi8vMTI3LjAuMC4xL3Jzcz91cmw9JXMiKTsKdXNlcl9wcmVmKCJicm93c2VyLmNvbnRlbnRIYW5kbGVycy50eXBlcy41LnVyaSIsICJodHRwOi8vMTI3LjAuMC4xL3Jzcz91cmw9JXMiKTsKdXNlcl9wcmVmKCJicm93c2VyLmxpbmsub3Blbl9uZXd3aW5kb3ciLCAyKTsKdXNlcl9wcmVmKCJicm93c2VyLm5ld3RhYnBhZ2UuYWN0aXZpdHktc3RyZWFtLmRlZmF1bHQuc2l0ZXMiLCAiIik7CnVzZXJfcHJlZigiYnJvd3Nlci5uZXd0YWJwYWdlLmFjdGl2aXR5LXN0cmVhbS50ZWxlbWV0cnkiLCBmYWxzZSk7CnVzZXJfcHJlZigiYnJvd3Nlci5yZWFkZXIuZGV0ZWN0ZWRGaXJzdEFydGljbGUiLCB0cnVlKTsKdXNlcl9wcmVmKCJicm93c2VyLnNhZmVicm93c2luZy5ibG9ja2VkVVJJcy5lbmFibGVkIiwgZmFsc2UpOwp1c2VyX3ByZWYoImJyb3dzZXIuc2FmZWJyb3dzaW5nLmRvd25sb2Fkcy5lbmFibGVkIiwgZmFsc2UpOwp1c2VyX3ByZWYoImJyb3dzZXIuc2FmZWJyb3dzaW5nLmRvd25sb2Fkcy5yZW1vdGUudXJsIiwgImh0dHA6Ly8xMjcuMC4wLjEvc2FmZWJyb3dzaW5nLWR1bW15L2Rvd25sb2FkcyIpOwp1c2VyX3ByZWYoImJyb3dzZXIuc2FmZWJyb3dzaW5nLm1hbHdhcmUuZW5hYmxlZCIsIGZhbHNlKTsKdXNlcl9wcmVmKCJicm93c2VyLnNhZmVicm93c2luZy5wYXNzd29yZHMuZW5hYmxlZCIsIGZhbHNlKTsKdXNlcl9wcmVmKCJicm93c2VyLnNhZmVicm93c2luZy5waGlzaGluZy5lbmFibGVkIiwgZmFsc2UpOwp1c2VyX3ByZWYoImJyb3dzZXIuc2FmZWJyb3dzaW5nLnByb3ZpZGVyLmdvb2dsZS5nZXRoYXNoVVJMIiwgImh0dHA6Ly8xMjcuMC4wLjEvc2FmZWJyb3dzaW5nLWR1bW15L2dldGhhc2giKTsKdXNlcl9wcmVmKCJicm93c2VyLnNhZmVicm93c2luZy5wcm92aWRlci5nb29nbGUudXBkYXRlVVJMIiwgImh0dHA6Ly8xMjcuMC4wLjEvc2FmZWJyb3dzaW5nLWR1bW15L3VwZGF0ZSIpOwp1c2VyX3ByZWYoImJyb3dzZXIuc2FmZWJyb3dzaW5nLnByb3ZpZGVyLmdvb2dsZTQuZ2V0aGFzaFVSTCIsICJodHRwOi8vMTI3LjAuMC4xL3NhZmVicm93c2luZzQtZHVtbXkvZ2V0aGFzaCIpOwp1c2VyX3ByZWYoImJyb3dzZXIuc2FmZWJyb3dzaW5nLnByb3ZpZGVyLmdvb2dsZTQudXBkYXRlVVJMIiwgImh0dHA6Ly8xMjcuMC4wLjEvc2FmZWJyb3dzaW5nNC1kdW1teS91cGRhdGUiKTsKdXNlcl9wcmVmKCJicm93c2VyLnNhZmVicm93c2luZy5wcm92aWRlci5tb3ppbGxhLmdldGhhc2hVUkwiLCAiaHR0cDovLzEyNy4wLjAuMS9zYWZlYnJvd3NpbmctZHVtbXkvZ2V0aGFzaCIpOwp1c2VyX3ByZWYoImJyb3dzZXIuc2FmZWJyb3dzaW5nLnByb3ZpZGVyLm1vemlsbGEudXBkYXRlVVJMIiwgImh0dHA6Ly8xMjcuMC4wLjEvc2FmZWJyb3dzaW5nLWR1bW15L3VwZGF0ZSIpOwp1c2VyX3ByZWYoImJyb3dzZXIuc2VhcmNoLmdlb2lwLnVybCIsICIiKTsKdXNlcl9wcmVmKCJicm93c2VyLnRhYnMucmVtb3RlLmF1dG9zdGFydCIsIHRydWUpOwp1c2VyX3ByZWYoImJyb3dzZXIud2Fybk9uUXVpdCIsIGZhbHNlKTsKdXNlcl9wcmVmKCJkYXRhcmVwb3J0aW5nLmhlYWx0aHJlcG9ydC5kb2N1bWVudFNlcnZlclVSSSIsICJodHRwOi8vMTI3LjAuMC4xL2hlYWx0aHJlcG9ydC8iKTsKdXNlcl9wcmVmKCJkZXZ0b29scy50aGVtZSIsICJsaWdodCIpOwp1c2VyX3ByZWYoImRldnRvb2xzLnRpbWVsaW5lLmVuYWJsZWQiLCBmYWxzZSk7CnVzZXJfcHJlZigiZG9tLmFsbG93X3NjcmlwdHNfdG9fY2xvc2Vfd2luZG93cyIsIHRydWUpOwp1c2VyX3ByZWYoImRvbS5kaXNhYmxlX29wZW5fZHVyaW5nX2xvYWQiLCBmYWxzZSk7CnVzZXJfcHJlZigiZG9tLmRpc2FibGVfd2luZG93X2ZsaXAiLCB0cnVlKTsKdXNlcl9wcmVmKCJkb20uZGlzYWJsZV93aW5kb3dfbW92ZV9yZXNpemUiLCB0cnVlKTsKdXNlcl9wcmVmKCJkb20ucHVzaC5jb25uZWN0aW9uLmVuYWJsZWQiLCBmYWxzZSk7CnVzZXJfcHJlZigiZXh0ZW5zaW9ucy5ibG9ja2xpc3QuZW5hYmxlZCIsIGZhbHNlKTsKdXNlcl9wcmVmKCJleHRlbnNpb25zLmJsb2NrbGlzdC51cmwiLCAiaHR0cDovLzEyNy4wLjAuMS9leHRlbnNpb25zLWR1bW15L2Jsb2NrbGlzdFVSTCIpOwp1c2VyX3ByZWYoImV4dGVuc2lvbnMuZ2V0QWRkb25zLmdldC51cmwiLCAiaHR0cDovLzEyNy4wLjAuMS9leHRlbnNpb25zLWR1bW15L3JlcG9zaXRvcnlHZXRVUkwiKTsKdXNlcl9wcmVmKCJleHRlbnNpb25zLmdldEFkZG9ucy5zZWFyY2guYnJvd3NlVVJMIiwgImh0dHA6Ly8xMjcuMC4wLjEvZXh0ZW5zaW9ucy1kdW1teS9yZXBvc2l0b3J5QnJvd3NlVVJMIik7CnVzZXJfcHJlZigiZXh0ZW5zaW9ucy5ob3RmaXgudXJsIiwgImh0dHA6Ly8xMjcuMC4wLjEvZXh0ZW5zaW9ucy1kdW1teS9ob3RmaXhVUkwiKTsKdXNlcl9wcmVmKCJleHRlbnNpb25zLnVwZGF0ZS5iYWNrZ3JvdW5kLnVybCIsICJodHRwOi8vMTI3LjAuMC4xL2V4dGVuc2lvbnMtZHVtbXkvdXBkYXRlQmFja2dyb3VuZFVSTCIpOwp1c2VyX3ByZWYoImV4dGVuc2lvbnMudXBkYXRlLnVybCIsICJodHRwOi8vMTI3LjAuMC4xL2V4dGVuc2lvbnMtZHVtbXkvdXBkYXRlVVJMIik7CnVzZXJfcHJlZigiZXh0ZW5zaW9ucy53ZWJzZXJ2aWNlLmRpc2NvdmVyVVJMIiwgImh0dHA6Ly8xMjcuMC4wLjEvZXh0ZW5zaW9ucy1kdW1teS9kaXNjb3ZlcnlVUkwiKTsKdXNlcl9wcmVmKCJpZGVudGl0eS5meGFjY291bnRzLmF1dGgudXJpIiwgImh0dHBzOi8vMTI3LjAuMC4xL2Z4YS1kdW1teS8iKTsKdXNlcl9wcmVmKCJpZGVudGl0eS5meGFjY291bnRzLm1pZ3JhdGVUb0RldkVkaXRpb24iLCBmYWxzZSk7CnVzZXJfcHJlZigiaWRsZS5sYXN0RGFpbHlOb3RpZmljYXRpb24iLCAtMSk7CnVzZXJfcHJlZigibWVkaWEuY2FwdHVyZXN0cmVhbV9oaW50cy5lbmFibGVkIiwgdHJ1ZSk7CnVzZXJfcHJlZigibWVkaWEuZ21wLW1hbmFnZXIudXJsIiwgImh0dHA6Ly8xMjcuMC4wLjEvZ21wbWFuYWdlci1kdW1teS91cGRhdGUueG1sIik7CnVzZXJfcHJlZigibWVkaWEubGliYXZjb2RlYy5hbGxvdy1vYnNvbGV0ZSIsIHRydWUpOwp1c2VyX3ByZWYoIm1lZGlhLm5hdmlnYXRvci5lbmFibGVkIiwgdHJ1ZSk7CnVzZXJfcHJlZigibWVkaWEubmF2aWdhdG9yLnBlcm1pc3Npb24uZGlzYWJsZWQiLCB0cnVlKTsKdXNlcl9wcmVmKCJtZWRpYS5wZWVyY29ubmVjdGlvbi5lbmFibGVkIiwgdHJ1ZSk7CnVzZXJfcHJlZigibmV0d29yay5odHRwLnNwZWN1bGF0aXZlLXBhcmFsbGVsLWxpbWl0IiwgMCk7CnVzZXJfcHJlZigicGxhY2VzLmRhdGFiYXNlLmxhc3RNYWludGVuYW5jZSIsIDIxNDc0ODM2NDcpOwp1c2VyX3ByZWYoInBsdWdpbi5zdGF0ZS5mbGFzaCIsIDApOwp1c2VyX3ByZWYoInBsdWdpbnMuZmxhc2hCbG9jay5lbmFibGVkIiwgZmFsc2UpOwp1c2VyX3ByZWYoInByaXZhY3kucmVkdWNlVGltZXJQcmVjaXNpb24iLCBmYWxzZSk7CnVzZXJfcHJlZigicHJpdmFjeS50cmFja2luZ3Byb3RlY3Rpb24uYW5ub3RhdGVfY2hhbm5lbHMiLCBmYWxzZSk7CnVzZXJfcHJlZigicHJpdmFjeS50cmFja2luZ3Byb3RlY3Rpb24uZW5hYmxlZCIsIGZhbHNlKTsKdXNlcl9wcmVmKCJwcml2YWN5LnRyYWNraW5ncHJvdGVjdGlvbi5pbnRyb1VSTCIsICJodHRwOi8vMTI3LjAuMC4xL3RyYWNraW5ncHJvdGVjdGlvbi90b3VyIik7CnVzZXJfcHJlZigicHJpdmFjeS50cmFja2luZ3Byb3RlY3Rpb24ucGJtb2RlLmVuYWJsZWQiLCBmYWxzZSk7CnVzZXJfcHJlZigic2VjdXJpdHkuZmlsZXVyaS5zdHJpY3Rfb3JpZ2luX3BvbGljeSIsIGZhbHNlKTsKdXNlcl9wcmVmKCJzdGFydHVwLmhvbWVwYWdlX3dlbGNvbWVfdXJsIiwgIiIpOwp1c2VyX3ByZWYoInN0YXJ0dXAuaG9tZXBhZ2Vfd2VsY29tZV91cmwuYWRkaXRpb25hbCIsICIiKTsKdXNlcl9wcmVmKCJ0cmFpbGhlYWQuZmlyc3RydW4uYnJhbmNoZXMiLCAiam9pbiIpOwp1c2VyX3ByZWYoImdlY2tvdmlldy5jb25zb2xlLmVuYWJsZWQiLCB0cnVlKTsKdXNlcl9wcmVmKCJkZXZ0b29scy5jb25zb2xlLnN0ZG91dC5jb250ZW50IiwgdHJ1ZSk7UEsBAhQACgAAAAAAC6aRTwAAAAAAAAAAAAAAAAsAAAAAAAAAAAAQAAAAAAAAAGV4dGVuc2lvbnMvUEsBAhQACgAAAAAAC6aRTwAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAKQAAAHByZWZzLmpzUEsBAhQACgAAAAAAC6aRTzBV/wB9qQAAfakAADEAAAAAAAAAAAAAAAAATwAAAGV4dGVuc2lvbnMvYnJvd3NlcnRpbWUtZXh0ZW5zaW9uQHNpdGVzcGVlZC5pby54cGlQSwECFAAKAAAAAAALppFPnQSld+YrAADmKwAABwAAAAAAAAAAAAAAAAAbqgAAdXNlci5qc1BLBQYAAAAABAAEAAMBAAAm1gAAAAA=","args":["-no-remote"]}}} | |
| 20:48:23 INFO - 1576615703232 webdriver::command WARN You are using deprecated legacy session negotiation patterns (desiredCapabilities/requiredCapabilities), see https://developer.mozilla.org/en-US/docs/Web/WebDriver/Capabilities#Legacy | |
| 20:48:23 INFO - 1576615703232 geckodriver::capabilities DEBUG Creating profile directory tree /var/folders/tn/jmgsfg315sd73yn_dnrf66c80000gn/T/rust_mozprofileRCayvA/extensions/ | |
| 20:48:23 INFO - 1576615703232 geckodriver::capabilities DEBUG Extracting profile to /var/folders/tn/jmgsfg315sd73yn_dnrf66c80000gn/T/rust_mozprofileRCayvA/prefs.js | |
| 20:48:23 INFO - 1576615703232 geckodriver::capabilities DEBUG Extracting profile to /var/folders/tn/jmgsfg315sd73yn_dnrf66c80000gn/T/rust_mozprofileRCayvA/extensions/[email protected] | |
| 20:48:23 INFO - 1576615703232 geckodriver::capabilities DEBUG Extracting profile to /var/folders/tn/jmgsfg315sd73yn_dnrf66c80000gn/T/rust_mozprofileRCayvA/user.js | |
| 20:48:23 INFO - options: FirefoxOptions { binary: Some("/Users/sdonner/mozilla-source/mozilla-unified/obj-x86_64-apple-darwin19.2.0/dist/Nightly.app/Contents/MacOS/firefox"), profile: Some(Profile { path: "/var/folders/tn/jmgsfg315sd73yn_dnrf66c80000gn/T/rust_mozprofileRCayvA", temp_dir: Some(TempDir { path: "/var/folders/tn/jmgsfg315sd73yn_dnrf66c80000gn/T/rust_mozprofileRCayvA" }), prefs: None, user_prefs: None }), args: Some(["-no-remote"]), log: LogOptions { level: None }, prefs: [], android: None } | |
| 20:48:23 INFO - capabilities: {"browserName": String("firefox"), "pageLoadStrategy": String("normal")} | |
| 20:48:23 INFO - 1576615703241 mozrunner::runner INFO Running command: "/Users/sdonner/mozilla-source/mozilla-unified/obj-x86_64-apple-darwin19.2.0/dist/Nightly.app/Contents/MacOS/firefox" "-marionette" "-no-remote" "-foreground" "-profile" "/var/folders/tn/jmgsfg315sd73yn_dnrf66c80000gn/T/rust_mozprofileRCayvA" | |
| 20:48:23 INFO - 1576615703243 geckodriver::marionette DEBUG Waiting 60s to connect to browser on 127.0.0.1:55131 | |
| 20:48:23 INFO - 1576615703243 geckodriver::marionette DEBUG Waiting 60s to connect to browser | |
| 20:48:23 INFO - 1576615703243 geckodriver::marionette INFO Not connected, sleeping 120ms! | |
| 20:48:23 INFO - 1576615703363 geckodriver::marionette INFO Not connected, sleeping 240ms! | |
| 20:48:23 INFO - 1576615703604 geckodriver::marionette INFO Not connected, sleeping 480ms! | |
| 20:48:23 INFO - 1576615703790 [email protected] WARN Loading extension '[email protected]': Reading manifest: Invalid extension permission: networkStatus | |
| 20:48:23 INFO - 1576615703840 [email protected] WARN Loading extension '[email protected]': Reading manifest: Invalid extension permission: mozillaAddons | |
| 20:48:23 INFO - 1576615703840 [email protected] WARN Loading extension '[email protected]': Reading manifest: Invalid extension permission: telemetry | |
| 20:48:23 INFO - 1576615703840 [email protected] WARN Loading extension '[email protected]': Reading manifest: Invalid extension permission: resource://pdf.js/ | |
| 20:48:23 INFO - 1576615703840 [email protected] WARN Loading extension '[email protected]': Reading manifest: Invalid extension permission: about:reader* | |
| 20:48:24 INFO - 1576615703999 Marionette DEBUG Init aborted (running=false, enabled=true, finalUIStartup=false) | |
| 20:48:24 INFO - 1576615704086 geckodriver::marionette INFO Not connected, sleeping 960ms! | |
| 20:48:25 INFO - 1576615705051 geckodriver::marionette INFO Not connected, sleeping 960ms! | |
| 20:48:25 INFO - JavaScript error: resource://services-common/kinto-offline-client.js, line 603: Error: IndexedDB clear() The operation failed for reasons unrelated to the database itself and not covered by any other error code. | |
| 20:48:25 INFO - 1576615705606 Marionette DEBUG Setting recommended pref apz.content_response_timeout to 60000 | |
| 20:48:25 INFO - 1576615705606 Marionette DEBUG Setting recommended pref browser.contentblocking.introCount to 99 | |
| 20:48:25 INFO - 1576615705606 Marionette DEBUG Setting recommended pref browser.download.panel.shown to true | |
| 20:48:25 INFO - 1576615705606 Marionette DEBUG Setting recommended pref browser.tabs.disableBackgroundZombification to false | |
| 20:48:25 INFO - 1576615705606 Marionette DEBUG Setting recommended pref browser.tabs.remote.separatePrivilegedContentProcess to false | |
| 20:48:25 INFO - 1576615705606 Marionette DEBUG Setting recommended pref browser.tabs.unloadOnLowMemory to false | |
| 20:48:25 INFO - 1576615705606 Marionette DEBUG Setting recommended pref browser.tabs.warnOnCloseOtherTabs to false | |
| 20:48:25 INFO - 1576615705607 Marionette DEBUG Setting recommended pref browser.tabs.warnOnOpen to false | |
| 20:48:25 INFO - 1576615705607 Marionette DEBUG Setting recommended pref browser.usedOnWindows10.introURL to | |
| 20:48:25 INFO - 1576615705607 Marionette DEBUG Setting recommended pref browser.urlbar.suggest.searches to false | |
| 20:48:25 INFO - 1576615705607 Marionette DEBUG Setting recommended pref datareporting.policy.dataSubmissionPolicyAccepted to false | |
| 20:48:25 INFO - 1576615705607 Marionette DEBUG Setting recommended pref dom.disable_beforeunload to true | |
| 20:48:25 INFO - 1576615705607 Marionette DEBUG Setting recommended pref dom.file.createInChild to true | |
| 20:48:25 INFO - 1576615705608 Marionette DEBUG Setting recommended pref extensions.getAddons.cache.enabled to false | |
| 20:48:25 INFO - 1576615705608 Marionette DEBUG Setting recommended pref network.http.prompt-temp-redirect to false | |
| 20:48:25 INFO - 1576615705608 Marionette DEBUG Setting recommended pref security.notification_enable_delay to 0 | |
| 20:48:25 INFO - 1576615705608 Marionette DEBUG Setting recommended pref signon.autofillForms to false | |
| 20:48:25 INFO - 1576615705608 Marionette DEBUG Setting recommended pref toolkit.cosmeticAnimations.enabled to false | |
| 20:48:25 INFO - 1576615705643 Marionette INFO Listening on port 55131 | |
| 20:48:25 INFO - 1576615705643 Marionette DEBUG Marionette is listening | |
| 20:48:26 INFO - 1576615706013 geckodriver::marionette DEBUG Connection established on 127.0.0.1:55131. Waiting for Marionette handshake | |
| 20:48:26 INFO - 1576615706013 geckodriver::marionette INFO handshake, timeout is None | |
| 20:48:26 INFO - 1576615706014 Marionette DEBUG Accepted connection 0 from 127.0.0.1:55143 | |
| 20:48:26 INFO - 1576615706014 geckodriver::marionette DEBUG Connected to Marionette | |
| 20:48:26 INFO - 1576615706015 Marionette DEBUG 0 -> [0,1,"WebDriver:NewSession",{"browserName":"firefox","pageLoadStrategy":"normal"}] | |
| 20:48:26 INFO - 1576615706039 Marionette DEBUG 0 <- [1,1,null,{"sessionId":"5496a31a-1b44-e34c-ac13-769a37e9aec1","capabilities":{"browserName":"firefox","browserVersion":"73.0a ... /rust_mozprofileRCayvA","moz:shutdownTimeout":60000,"moz:useNonSpecCompliantPointerOrigin":false,"moz:webdriverClick":true}}] | |
| 20:48:26 INFO - 1576615706042 webdriver::server DEBUG <- 200 OK {"value":{"sessionId":"5496a31a-1b44-e34c-ac13-769a37e9aec1","capabilities":{"acceptInsecureCerts":false,"browserName":"firefox","browserVersion":"73.0a1","moz:accessibilityChecks":false,"moz:buildID":"20191217092755","moz:geckodriverVersion":"0.24.0-android","moz:headless":false,"moz:processID":19367,"moz:profile":"/var/folders/tn/jmgsfg315sd73yn_dnrf66c80000gn/T/rust_mozprofileRCayvA","moz:shutdownTimeout":60000,"moz:useNonSpecCompliantPointerOrigin":false,"moz:webdriverClick":true,"pageLoadStrategy":"normal","platformName":"mac","platformVersion":"19.2.0","rotatable":false,"setWindowRect":true,"strictFileInteractability":false,"timeouts":{"implicit":0,"pageLoad":300000,"script":30000},"unhandledPromptBehavior":"dismiss and notify"}}} | |
| 20:48:26 INFO - 1576615706045 webdriver::server DEBUG -> POST /session/5496a31a-1b44-e34c-ac13-769a37e9aec1/timeouts {"pageLoad":60000,"script":60000} | |
| 20:48:26 INFO - 1576615706046 Marionette DEBUG 0 -> [0,2,"WebDriver:SetTimeouts",{"pageLoad":60000,"script":60000}] | |
| 20:48:26 INFO - 1576615706046 Marionette DEBUG 0 <- [1,2,null,{"value":null}] | |
| 20:48:26 INFO - 1576615706046 webdriver::server DEBUG <- 200 OK {"value":null} | |
| 20:48:26 INFO - 1576615706048 webdriver::server DEBUG -> POST /session/5496a31a-1b44-e34c-ac13-769a37e9aec1/window/position {"windowHandle":"current","x":0,"y":0} | |
| 20:48:26 INFO - 1576615706049 Marionette DEBUG 0 -> [0,3,"WebDriver:SetWindowRect",{"x":0,"y":0}] | |
| 20:48:26 INFO - 1576615706067 Marionette DEBUG 0 <- [1,3,null,{"x":0,"y":23,"width":1280,"height":1037}] | |
| 20:48:26 INFO - 1576615706068 webdriver::server DEBUG <- 200 OK {"value":{"x":0,"y":23,"width":1280,"height":1037}} | |
| 20:48:26 INFO - 1576615706069 webdriver::server DEBUG -> POST /session/5496a31a-1b44-e34c-ac13-769a37e9aec1/window/size {"windowHandle":"current","width":1366,"height":768} | |
| 20:48:26 INFO - 1576615706070 Marionette DEBUG 0 -> [0,4,"WebDriver:SetWindowRect",{"height":768,"width":1366}] | |
| 20:48:26 INFO - 1576615706118 Marionette DEBUG 0 <- [1,4,null,{"x":0,"y":23,"width":1366,"height":768}] | |
| 20:48:26 INFO - 1576615706119 webdriver::server DEBUG <- 200 OK {"value":{"x":0,"y":23,"width":1366,"height":768}} | |
| 20:48:26 INFO - 1576615706120 webdriver::server DEBUG -> POST /session/5496a31a-1b44-e34c-ac13-769a37e9aec1/url {"url":"data:text/html;charset=utf-8,"} | |
| 20:48:26 INFO - 1576615706121 Marionette DEBUG 0 -> [0,5,"WebDriver:Navigate",{"url":"data:text/html;charset=utf-8,"}] | |
| 20:48:26 INFO - 1576615706189 Marionette DEBUG 0 <- [1,5,null,{"value":null}] | |
| 20:48:26 INFO - 1576615706194 webdriver::server DEBUG <- 200 OK {"value":null} | |
| 20:48:26 INFO - [2019-12-17 12:48:26] INFO: [browsertime] Starting a browsertime pageload | |
| 20:48:26 INFO - [2019-12-17 12:48:26] INFO: [browsertime] Waiting for 3 ms (post_startup_delay) | |
| 20:48:26 INFO - [2019-12-17 12:48:26] INFO: [browsertime] Cycle 0, waiting for 1000 ms | |
| 20:48:27 INFO - [2019-12-17 12:48:27] INFO: [browsertime] Cycle 0, starting the measure | |
| 20:48:27 INFO - [2019-12-17 12:48:27] INFO: [browsertime.command.measure] Testing url https://www.amazon.com/s?k=laptop&ref=nb_sb_noss_1 iteration 1 | |
| 20:48:27 INFO - 1576615707205 webdriver::server DEBUG -> POST /session/5496a31a-1b44-e34c-ac13-769a37e9aec1/execute/sync {"script":"return document.documentURI;","args":[]} | |
| 20:48:27 INFO - 1576615707205 Marionette DEBUG 0 -> [0,6,"WebDriver:ExecuteScript",{"args":[],"script":"return document.documentURI;"}] | |
| 20:48:27 INFO - 1576615707208 Marionette DEBUG 0 <- [1,6,null,{"value":"data:text/html;charset=utf-8,"}] | |
| 20:48:27 INFO - 1576615707208 webdriver::server DEBUG <- 200 OK {"value":"data:text/html;charset=utf-8,"} | |
| 20:48:27 INFO - 1576615707209 webdriver::server DEBUG -> POST /session/5496a31a-1b44-e34c-ac13-769a37e9aec1/execute/sync {"script":"(function() {\n const orange = document.getElementById('browsertime-orange');\n if (orange) {\n orange.parentNode.removeChild(orange);\n }\n window.requestAnimationFrame(function(){\n window.requestAnimationFrame(function(){\n window.location=\"https://www.amazon.com/s?k=laptop&ref=nb_sb_noss_1\";\n });\n });\n })();","args":[]} | |
| 20:48:27 INFO - 1576615707209 Marionette DEBUG 0 -> [0,7,"WebDriver:ExecuteScript",{"args":[],"script":"(function() {\n const orange = document.getElementById('browsert ... window.location=\"https://www.amazon.com/s?k=laptop&ref=nb_sb_noss_1\";\n });\n });\n })();"}] | |
| 20:48:27 INFO - 1576615707211 Marionette DEBUG 0 <- [1,7,null,{"value":null}] | |
| 20:48:27 INFO - 1576615707212 webdriver::server DEBUG <- 200 OK {"value":null} | |
| 20:48:27 INFO - console.log: "RemoteSettingsWorker error: ConstraintError: A mutation operation in the transaction failed because a constraint was not satisfied." | |
| 20:48:27 INFO - console.log: "RemoteSettingsWorker error: ConstraintError: A mutation operation in the transaction failed because a constraint was not satisfied." | |
| 20:48:27 INFO - console.log: "RemoteSettingsWorker error: ConstraintError: A mutation operation in the transaction failed because a constraint was not satisfied." | |
| 20:48:27 INFO - console.log: "RemoteSettingsWorker error: ConstraintError: A mutation operation in the transaction failed because a constraint was not satisfied." | |
| 20:48:27 INFO - 1576615707718 webdriver::server DEBUG -> POST /session/5496a31a-1b44-e34c-ac13-769a37e9aec1/execute/sync {"script":"return document.documentURI;","args":[]} | |
| 20:48:27 INFO - 1576615707718 Marionette DEBUG 0 -> [0,8,"WebDriver:ExecuteScript",{"args":[],"script":"return document.documentURI;"}] | |
| 20:48:28 INFO - 1576615708054 Marionette DEBUG 0 <- [1,8,null,{"value":"https://www.amazon.com/s?k=laptop&ref=nb_sb_noss_1"}] | |
| 20:48:28 INFO - 1576615708054 webdriver::server DEBUG <- 200 OK {"value":"https://www.amazon.com/s?k=laptop&ref=nb_sb_noss_1"} | |
| 20:48:28 INFO - [2019-12-17 12:48:28] DEBUG: [browsertime] Waiting for script pageCompleteCheck at most 300000 ms | |
| 20:48:28 INFO - [2019-12-17 12:48:28] VERBOSE: [browsertime] Waiting for script | |
| 20:48:28 INFO - return (function(waitTime) { | |
| 20:48:28 INFO - try { | |
| 20:48:28 INFO - var end = window.performance.timing.loadEventEnd; | |
| 20:48:28 INFO - return end > 0; | |
| 20:48:28 INFO - } catch(e) { | |
| 20:48:28 INFO - return true; | |
| 20:48:28 INFO - } | |
| 20:48:28 INFO - })(arguments[arguments.length - 1]); | |
| 20:48:28 INFO - 1576615708056 webdriver::server DEBUG -> POST /session/5496a31a-1b44-e34c-ac13-769a37e9aec1/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:28 INFO - 1576615708058 Marionette DEBUG 0 -> [0,9,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window.p ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:28 INFO - 1576615708235 Marionette DEBUG 0 <- [1,9,null,{"value":false}] | |
| 20:48:28 INFO - 1576615708236 webdriver::server DEBUG <- 200 OK {"value":false} | |
| 20:48:28 INFO - 1576615708238 webdriver::server DEBUG -> POST /session/5496a31a-1b44-e34c-ac13-769a37e9aec1/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:28 INFO - 1576615708239 Marionette DEBUG 0 -> [0,10,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window. ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:28 INFO - 1576615708273 Marionette DEBUG 0 <- [1,10,null,{"value":false}] | |
| 20:48:28 INFO - 1576615708274 webdriver::server DEBUG <- 200 OK {"value":false} | |
| 20:48:28 INFO - 1576615708276 webdriver::server DEBUG -> POST /session/5496a31a-1b44-e34c-ac13-769a37e9aec1/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:28 INFO - 1576615708277 Marionette DEBUG 0 -> [0,11,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window. ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:28 INFO - 1576615708375 Marionette DEBUG 0 <- [1,11,null,{"value":false}] | |
| 20:48:28 INFO - 1576615708375 webdriver::server DEBUG <- 200 OK {"value":false} | |
| 20:48:28 INFO - 1576615708378 webdriver::server DEBUG -> POST /session/5496a31a-1b44-e34c-ac13-769a37e9aec1/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:28 INFO - 1576615708378 Marionette DEBUG 0 -> [0,12,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window. ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:28 INFO - 1576615708391 Marionette DEBUG 0 <- [1,12,null,{"value":false}] | |
| 20:48:28 INFO - 1576615708392 webdriver::server DEBUG <- 200 OK {"value":false} | |
| 20:48:28 INFO - 1576615708394 webdriver::server DEBUG -> POST /session/5496a31a-1b44-e34c-ac13-769a37e9aec1/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:28 INFO - 1576615708395 Marionette DEBUG 0 -> [0,13,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window. ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:28 INFO - 1576615708397 Marionette DEBUG 0 <- [1,13,null,{"value":false}] | |
| 20:48:28 INFO - 1576615708397 webdriver::server DEBUG <- 200 OK {"value":false} | |
| 20:48:28 INFO - 1576615708400 webdriver::server DEBUG -> POST /session/5496a31a-1b44-e34c-ac13-769a37e9aec1/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:28 INFO - 1576615708401 Marionette DEBUG 0 -> [0,14,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window. ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:28 INFO - 1576615708478 Marionette DEBUG 0 <- [1,14,null,{"value":false}] | |
| 20:48:28 INFO - 1576615708479 webdriver::server DEBUG <- 200 OK {"value":false} | |
| 20:48:28 INFO - 1576615708481 webdriver::server DEBUG -> POST /session/5496a31a-1b44-e34c-ac13-769a37e9aec1/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:28 INFO - 1576615708482 Marionette DEBUG 0 -> [0,15,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window. ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:28 INFO - 1576615708575 Marionette DEBUG 0 <- [1,15,null,{"value":false}] | |
| 20:48:28 INFO - 1576615708575 webdriver::server DEBUG <- 200 OK {"value":false} | |
| 20:48:28 INFO - 1576615708577 webdriver::server DEBUG -> POST /session/5496a31a-1b44-e34c-ac13-769a37e9aec1/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:28 INFO - 1576615708578 Marionette DEBUG 0 -> [0,16,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window. ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:28 INFO - 1576615708585 Marionette DEBUG 0 <- [1,16,null,{"value":false}] | |
| 20:48:28 INFO - 1576615708586 webdriver::server DEBUG <- 200 OK {"value":false} | |
| 20:48:28 INFO - 1576615708587 webdriver::server DEBUG -> POST /session/5496a31a-1b44-e34c-ac13-769a37e9aec1/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:28 INFO - 1576615708589 Marionette DEBUG 0 -> [0,17,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window. ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:28 INFO - 1576615708608 Marionette DEBUG 0 <- [1,17,null,{"value":true}] | |
| 20:48:28 INFO - 1576615708609 webdriver::server DEBUG <- 200 OK {"value":true} | |
| 20:48:28 INFO - [2019-12-17 12:48:28] DEBUG: [browsertime] Waiting after load event for 5000 ms. | |
| 20:48:29 INFO - console.log: ({message:"Asset failed to load: https://m.media-amazon.com/images/I/61kzhTBl2qL._RC|11-BZEJ8lnL.js,61GQ9IdK7HL.js,21Of0-9HPCL.js,012FVc3131L.js,119KAWlHU6L.js,51xL2QLv4YL.js,11AHlQhPRjL.js,016iHgpF74L.js,11aNYFFS5hL.js,116tgw9TSaL.js,211-p4GRUCL.js,01PoLXBDXWL.js,61BanVD+50L.js,01mi-J86cyL.js,11BOgvnnntL.js,31UWuPgtTtL.js,01rpauTep4L.js,01iyxuSGj4L.js,01OWoGffjKL.js_.js?AUIClients/AmazonUI#189458-T1.192338-T1", logLevel:"ERROR", attribution:(void 0)}) | |
| 20:48:29 INFO - console.error: null | |
| 20:48:29 INFO - JavaScript error: , line 0: NetworkError: A network error occurred. | |
| 20:48:29 INFO - JavaScript error: , line 0: NetworkError: A network error occurred. | |
| 20:48:33 INFO - 1576615713614 webdriver::server DEBUG -> POST /session/5496a31a-1b44-e34c-ac13-769a37e9aec1/execute/sync {"script":"return document.documentURI;","args":[]} | |
| 20:48:33 INFO - 1576615713615 Marionette DEBUG 0 -> [0,18,"WebDriver:ExecuteScript",{"args":[],"script":"return document.documentURI;"}] | |
| 20:48:33 INFO - 1576615713617 Marionette DEBUG 0 <- [1,18,null,{"value":"https://www.amazon.com/s?k=laptop&ref=nb_sb_noss_1"}] | |
| 20:48:33 INFO - 1576615713618 webdriver::server DEBUG <- 200 OK {"value":"https://www.amazon.com/s?k=laptop&ref=nb_sb_noss_1"} | |
| 20:48:33 INFO - [2019-12-17 12:48:33] VERBOSE: [browsertime.command.measure] Collecting metrics | |
| 20:48:33 INFO - [2019-12-17 12:48:33] VERBOSE: [browsertime] Executing script appConstants with privilege. | |
| 20:48:33 INFO - [2019-12-17 12:48:33] VERBOSE: [browsertime] Executing privileged script return ( function () { | |
| 20:48:33 INFO - const { AppConstants } = ChromeUtils.import( | |
| 20:48:33 INFO - 'resource://gre/modules/AppConstants.jsm' | |
| 20:48:33 INFO - ); | |
| 20:48:33 INFO - return AppConstants; | |
| 20:48:33 INFO - } )() | |
| 20:48:33 INFO - 1576615713621 webdriver::server DEBUG -> GET /session/5496a31a-1b44-e34c-ac13-769a37e9aec1/moz/context | |
| 20:48:33 INFO - 1576615713622 Marionette DEBUG 0 -> [0,19,"Marionette:GetContext",{}] | |
| 20:48:33 INFO - 1576615713622 Marionette DEBUG 0 <- [1,19,null,{"value":"content"}] | |
| 20:48:33 INFO - 1576615713623 webdriver::server DEBUG <- 200 OK {"value":"content"} | |
| 20:48:33 INFO - 1576615713624 webdriver::server DEBUG -> POST /session/5496a31a-1b44-e34c-ac13-769a37e9aec1/moz/context {"context":"chrome"} | |
| 20:48:33 INFO - 1576615713625 Marionette DEBUG 0 -> [0,20,"Marionette:SetContext",{"value":"chrome"}] | |
| 20:48:33 INFO - 1576615713625 Marionette DEBUG 0 <- [1,20,null,{"value":null}] | |
| 20:48:33 INFO - 1576615713626 webdriver::server DEBUG <- 200 OK {"value":null} | |
| 20:48:33 INFO - 1576615713626 webdriver::server DEBUG -> POST /session/5496a31a-1b44-e34c-ac13-769a37e9aec1/execute/sync {"script":"return ( function () {\n const { AppConstants } = ChromeUtils.import(\n 'resource://gre/modules/AppConstants.jsm'\n );\n return AppConstants;\n } )()","args":[null]} | |
| 20:48:33 INFO - 1576615713627 Marionette DEBUG 0 -> [0,21,"WebDriver:ExecuteScript",{"args":[null],"script":"return ( function () {\n const { AppConstants } = ChromeUtils.import(\n 'resource://gre/modules/AppConstants.jsm'\n );\n return AppConstants;\n } )()"}] | |
| 20:48:33 INFO - 1576615713629 Marionette DEBUG 0 <- [1,21,null,{"value":{"NIGHTLY_BUILD":true,"FENNEC_NIGHTLY":false,"RELEASE_OR_BETA":false,"EARLY_BETA_OR_EARLIER":true,"ACCESS ... ERSION":4,"MOZ_NEW_XULSTORE":true,"MOZ_NEW_NOTIFICATION_STORE":true,"MOZ_NEW_CERT_STORAGE":true,"ENABLE_REMOTE_AGENT":true}}] | |
| 20:48:33 INFO - 1576615713630 webdriver::server DEBUG <- 200 OK {"value":{"ACCESSIBILITY":true,"ANDROID_PACKAGE_NAME":"org.mozilla.firefox","ASAN":false,"ASAN_REPORTER":false,"BROWSER_CHROME_URL":"chrome://browser/content/browser.xhtml","DEBUG":false,"DEBUG_JS_MODULES":"","DLL_PREFIX":"lib","DLL_SUFFIX":".dylib","EARLY_BETA_OR_EARLIER":true,"ENABLE_REMOTE_AGENT":true,"FENNEC_NIGHTLY":false,"HAVE_SHELL_SERVICE":true,"HAVE_USR_LIB64_DIR":false,"MENUBAR_CAN_AUTOHIDE":false,"MOZILLA_OFFICIAL":false,"MOZ_ALLOW_LEGACY_EXTENSIONS":true,"MOZ_ANDROID_HISTORY":false,"MOZ_APP_NAME":"firefox","MOZ_APP_VERSION":"73.0a1","MOZ_APP_VERSION_DISPLAY":"73.0a1","MOZ_BING_API_CLIENTID":"no-bing-api-clientid","MOZ_BING_API_KEY":"no-bing-api-key","MOZ_BITS_DOWNLOAD":false,"MOZ_BUILD_APP":"browser","MOZ_CODE_COVERAGE":false,"MOZ_CRASHREPORTER":true,"MOZ_DATA_REPORTING":true,"MOZ_DEV_EDITION":false,"MOZ_GECKO_PROFILER":true,"MOZ_GOOGLE_LOCATION_SERVICE_API_KEY":"no-google-location-service-api-key","MOZ_GOOGLE_SAFEBROWSING_API_KEY":"no-google-safebrowsing-api-key","MOZ_GRAPHENE":false,"MOZ_MACBUNDLE_NAME":"Nightly.app","MOZ_MAINTENANCE_SERVICE":false,"MOZ_MOZILLA_API_KEY":"no-mozilla-api-key","MOZ_NEW_CERT_STORAGE":true,"MOZ_NEW_NOTIFICATION_STORE":true,"MOZ_NEW_XULSTORE":true,"MOZ_NORMANDY":true,"MOZ_OFFICIAL_BRANDING":false,"MOZ_PLACES":true,"MOZ_REQUIRE_SIGNING":false,"MOZ_SANDBOX":true,"MOZ_SERVICES_HEALTHREPORT":true,"MOZ_SERVICES_SYNC":false,"MOZ_SWITCHBOARD":false,"MOZ_SYSTEM_NSS":false,"MOZ_TELEMETRY_ON_BY_DEFAULT":false,"MOZ_TELEMETRY_REPORTING":false,"MOZ_UNSIGNED_SCOPES":0,"MOZ_UPDATER":true,"MOZ_UPDATE_CHANNEL":"default","MOZ_WEBRTC":true,"MOZ_WIDGET_GTK":false,"MOZ_WIDGET_TOOLKIT":"cocoa","NIGHTLY_BUILD":true,"OMNIJAR_NAME":"omni.ja","RELEASE_OR_BETA":false,"SOURCE_REVISION_URL":"","TELEMETRY_PING_FORMAT_VERSION":4,"XP_UNIX":true,"isPlatformAndVersionAtLeast":{},"isPlatformAndVersionAtMost":{},"platform":"macosx","unixstyle":"other"}} | |
| 20:48:33 INFO - 1576615713631 webdriver::server DEBUG -> POST /session/5496a31a-1b44-e34c-ac13-769a37e9aec1/moz/context {"context":"content"} | |
| 20:48:33 INFO - 1576615713632 Marionette DEBUG 0 -> [0,22,"Marionette:SetContext",{"value":"content"}] | |
| 20:48:33 INFO - 1576615713632 Marionette DEBUG 0 <- [1,22,null,{"value":null}] | |
| 20:48:33 INFO - 1576615713632 webdriver::server DEBUG <- 200 OK {"value":null} | |
| 20:48:33 INFO - [2019-12-17 12:48:33] VERBOSE: [browsertime] Executing script asyncAppConstants with privilege. | |
| 20:48:33 INFO - [2019-12-17 12:48:33] VERBOSE: [browsertime] Executing privileged async script | |
| 20:48:33 INFO - var callback = arguments[arguments.length - 1]; | |
| 20:48:33 INFO - return (( async function () { | |
| 20:48:33 INFO - return new Promise(resolve => { | |
| 20:48:33 INFO - const { AppConstants } = ChromeUtils.import( | |
| 20:48:33 INFO - 'resource://gre/modules/AppConstants.jsm' | |
| 20:48:33 INFO - ); | |
| 20:48:33 INFO - resolve(AppConstants); | |
| 20:48:33 INFO - }); | |
| 20:48:33 INFO - } )()) | |
| 20:48:33 INFO - .then((r) => callback({'result': r})) | |
| 20:48:33 INFO - .catch((e) => callback({'error': e})); | |
| 20:48:33 INFO - 1576615713634 webdriver::server DEBUG -> GET /session/5496a31a-1b44-e34c-ac13-769a37e9aec1/moz/context | |
| 20:48:33 INFO - 1576615713635 Marionette DEBUG 0 -> [0,23,"Marionette:GetContext",{}] | |
| 20:48:33 INFO - 1576615713636 Marionette DEBUG 0 <- [1,23,null,{"value":"content"}] | |
| 20:48:33 INFO - 1576615713636 webdriver::server DEBUG <- 200 OK {"value":"content"} | |
| 20:48:33 INFO - 1576615713637 webdriver::server DEBUG -> POST /session/5496a31a-1b44-e34c-ac13-769a37e9aec1/moz/context {"context":"chrome"} | |
| 20:48:33 INFO - 1576615713638 Marionette DEBUG 0 -> [0,24,"Marionette:SetContext",{"value":"chrome"}] | |
| 20:48:33 INFO - 1576615713639 Marionette DEBUG 0 <- [1,24,null,{"value":null}] | |
| 20:48:33 INFO - 1576615713639 webdriver::server DEBUG <- 200 OK {"value":null} | |
| 20:48:33 INFO - 1576615713641 webdriver::server DEBUG -> POST /session/5496a31a-1b44-e34c-ac13-769a37e9aec1/execute/async {"script":"\n var callback = arguments[arguments.length - 1];\n return (( async function () {\n return new Promise(resolve => {\n const { AppConstants } = ChromeUtils.import(\n 'resource://gre/modules/AppConstants.jsm'\n );\n resolve(AppConstants);\n });\n } )())\n .then((r) => callback({'result': r}))\n .catch((e) => callback({'error': e}));\n ","args":[null]} | |
| 20:48:33 INFO - 1576615713642 Marionette DEBUG 0 -> [0,25,"WebDriver:ExecuteAsyncScript",{"args":[null],"script":"\n var callback = arguments[arguments.length - 1];\n ... )\n .then((r) => callback({'result': r}))\n .catch((e) => callback({'error': e}));\n "}] | |
| 20:48:33 INFO - 1576615713643 Marionette DEBUG 0 <- [1,25,null,{"value":{"result":{"NIGHTLY_BUILD":true,"FENNEC_NIGHTLY":false,"RELEASE_OR_BETA":false,"EARLY_BETA_OR_EARLIER":tr ... RSION":4,"MOZ_NEW_XULSTORE":true,"MOZ_NEW_NOTIFICATION_STORE":true,"MOZ_NEW_CERT_STORAGE":true,"ENABLE_REMOTE_AGENT":true}}}] | |
| 20:48:33 INFO - 1576615713643 webdriver::server DEBUG <- 200 OK {"value":{"result":{"ACCESSIBILITY":true,"ANDROID_PACKAGE_NAME":"org.mozilla.firefox","ASAN":false,"ASAN_REPORTER":false,"BROWSER_CHROME_URL":"chrome://browser/content/browser.xhtml","DEBUG":false,"DEBUG_JS_MODULES":"","DLL_PREFIX":"lib","DLL_SUFFIX":".dylib","EARLY_BETA_OR_EARLIER":true,"ENABLE_REMOTE_AGENT":true,"FENNEC_NIGHTLY":false,"HAVE_SHELL_SERVICE":true,"HAVE_USR_LIB64_DIR":false,"MENUBAR_CAN_AUTOHIDE":false,"MOZILLA_OFFICIAL":false,"MOZ_ALLOW_LEGACY_EXTENSIONS":true,"MOZ_ANDROID_HISTORY":false,"MOZ_APP_NAME":"firefox","MOZ_APP_VERSION":"73.0a1","MOZ_APP_VERSION_DISPLAY":"73.0a1","MOZ_BING_API_CLIENTID":"no-bing-api-clientid","MOZ_BING_API_KEY":"no-bing-api-key","MOZ_BITS_DOWNLOAD":false,"MOZ_BUILD_APP":"browser","MOZ_CODE_COVERAGE":false,"MOZ_CRASHREPORTER":true,"MOZ_DATA_REPORTING":true,"MOZ_DEV_EDITION":false,"MOZ_GECKO_PROFILER":true,"MOZ_GOOGLE_LOCATION_SERVICE_API_KEY":"no-google-location-service-api-key","MOZ_GOOGLE_SAFEBROWSING_API_KEY":"no-google-safebrowsing-api-key","MOZ_GRAPHENE":false,"MOZ_MACBUNDLE_NAME":"Nightly.app","MOZ_MAINTENANCE_SERVICE":false,"MOZ_MOZILLA_API_KEY":"no-mozilla-api-key","MOZ_NEW_CERT_STORAGE":true,"MOZ_NEW_NOTIFICATION_STORE":true,"MOZ_NEW_XULSTORE":true,"MOZ_NORMANDY":true,"MOZ_OFFICIAL_BRANDING":false,"MOZ_PLACES":true,"MOZ_REQUIRE_SIGNING":false,"MOZ_SANDBOX":true,"MOZ_SERVICES_HEALTHREPORT":true,"MOZ_SERVICES_SYNC":false,"MOZ_SWITCHBOARD":false,"MOZ_SYSTEM_NSS":false,"MOZ_TELEMETRY_ON_BY_DEFAULT":false,"MOZ_TELEMETRY_REPORTING":false,"MOZ_UNSIGNED_SCOPES":0,"MOZ_UPDATER":true,"MOZ_UPDATE_CHANNEL":"default","MOZ_WEBRTC":true,"MOZ_WIDGET_GTK":false,"MOZ_WIDGET_TOOLKIT":"cocoa","NIGHTLY_BUILD":true,"OMNIJAR_NAME":"omni.ja","RELEASE_OR_BETA":false,"SOURCE_REVISION_URL":"","TELEMETRY_PING_FORMAT_VERSION":4,"XP_UNIX":true,"isPlatformAndVersionAtLeast":{},"isPlatformAndVersionAtMost":{},"platform":"macosx","unixstyle":"other"}}} | |
| 20:48:33 INFO - 1576615713644 webdriver::server DEBUG -> POST /session/5496a31a-1b44-e34c-ac13-769a37e9aec1/moz/context {"context":"content"} | |
| 20:48:33 INFO - 1576615713645 Marionette DEBUG 0 -> [0,26,"Marionette:SetContext",{"value":"content"}] | |
| 20:48:33 INFO - 1576615713645 Marionette DEBUG 0 <- [1,26,null,{"value":null}] | |
| 20:48:33 INFO - 1576615713646 webdriver::server DEBUG <- 200 OK {"value":null} | |
| 20:48:33 INFO - [2019-12-17 12:48:33] VERBOSE: [browsertime] Executing script userAgent with privilege. | |
| 20:48:33 INFO - [2019-12-17 12:48:33] VERBOSE: [browsertime] Executing privileged script return (function() { | |
| 20:48:33 INFO - return navigator.userAgent; | |
| 20:48:33 INFO - })(); | |
| 20:48:33 INFO - 1576615713647 webdriver::server DEBUG -> GET /session/5496a31a-1b44-e34c-ac13-769a37e9aec1/moz/context | |
| 20:48:33 INFO - 1576615713647 Marionette DEBUG 0 -> [0,27,"Marionette:GetContext",{}] | |
| 20:48:33 INFO - 1576615713647 Marionette DEBUG 0 <- [1,27,null,{"value":"content"}] | |
| 20:48:33 INFO - 1576615713648 webdriver::server DEBUG <- 200 OK {"value":"content"} | |
| 20:48:33 INFO - 1576615713649 webdriver::server DEBUG -> POST /session/5496a31a-1b44-e34c-ac13-769a37e9aec1/moz/context {"context":"chrome"} | |
| 20:48:33 INFO - 1576615713650 Marionette DEBUG 0 -> [0,28,"Marionette:SetContext",{"value":"chrome"}] | |
| 20:48:33 INFO - 1576615713651 Marionette DEBUG 0 <- [1,28,null,{"value":null}] | |
| 20:48:33 INFO - 1576615713652 webdriver::server DEBUG <- 200 OK {"value":null} | |
| 20:48:33 INFO - 1576615713653 webdriver::server DEBUG -> POST /session/5496a31a-1b44-e34c-ac13-769a37e9aec1/execute/sync {"script":"return (function() {\n return navigator.userAgent;\n})();\n","args":[null]} | |
| 20:48:33 INFO - 1576615713653 Marionette DEBUG 0 -> [0,29,"WebDriver:ExecuteScript",{"args":[null],"script":"return (function() {\n return navigator.userAgent;\n})();\n"}] | |
| 20:48:33 INFO - 1576615713655 Marionette DEBUG 0 <- [1,29,null,{"value":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:73.0) Gecko/20100101 Firefox/73.0"}] | |
| 20:48:33 INFO - 1576615713655 webdriver::server DEBUG <- 200 OK {"value":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:73.0) Gecko/20100101 Firefox/73.0"} | |
| 20:48:33 INFO - 1576615713656 webdriver::server DEBUG -> POST /session/5496a31a-1b44-e34c-ac13-769a37e9aec1/moz/context {"context":"content"} | |
| 20:48:33 INFO - 1576615713658 Marionette DEBUG 0 -> [0,30,"Marionette:SetContext",{"value":"content"}] | |
| 20:48:33 INFO - 1576615713658 Marionette DEBUG 0 <- [1,30,null,{"value":null}] | |
| 20:48:33 INFO - 1576615713658 webdriver::server DEBUG <- 200 OK {"value":null} | |
| 20:48:33 INFO - [2019-12-17 12:48:33] VERBOSE: [browsertime] Executing script windowSize with privilege. | |
| 20:48:33 INFO - [2019-12-17 12:48:33] VERBOSE: [browsertime] Executing privileged script return (function() { | |
| 20:48:33 INFO - const w = window, | |
| 20:48:33 INFO - d = document, | |
| 20:48:33 INFO - e = d.documentElement, | |
| 20:48:33 INFO - g = d.getElementsByTagName('body')[0], | |
| 20:48:33 INFO - x = w.innerWidth || e.clientWidth || g.clientWidth, | |
| 20:48:33 INFO - y = w.innerHeight || e.clientHeight || g.clientHeight; | |
| 20:48:33 INFO - return x + 'x' + y; | |
| 20:48:33 INFO - })(); | |
| 20:48:33 INFO - 1576615713661 webdriver::server DEBUG -> GET /session/5496a31a-1b44-e34c-ac13-769a37e9aec1/moz/context | |
| 20:48:33 INFO - 1576615713661 Marionette DEBUG 0 -> [0,31,"Marionette:GetContext",{}] | |
| 20:48:33 INFO - 1576615713662 Marionette DEBUG 0 <- [1,31,null,{"value":"content"}] | |
| 20:48:33 INFO - 1576615713662 webdriver::server DEBUG <- 200 OK {"value":"content"} | |
| 20:48:33 INFO - 1576615713663 webdriver::server DEBUG -> POST /session/5496a31a-1b44-e34c-ac13-769a37e9aec1/moz/context {"context":"chrome"} | |
| 20:48:33 INFO - 1576615713664 Marionette DEBUG 0 -> [0,32,"Marionette:SetContext",{"value":"chrome"}] | |
| 20:48:33 INFO - 1576615713664 Marionette DEBUG 0 <- [1,32,null,{"value":null}] | |
| 20:48:33 INFO - 1576615713665 webdriver::server DEBUG <- 200 OK {"value":null} | |
| 20:48:33 INFO - 1576615713666 webdriver::server DEBUG -> POST /session/5496a31a-1b44-e34c-ac13-769a37e9aec1/execute/sync {"script":"return (function() {\n const w = window,\n d = document,\n e = d.documentElement,\n g = d.getElementsByTagName('body')[0],\n x = w.innerWidth || e.clientWidth || g.clientWidth,\n y = w.innerHeight || e.clientHeight || g.clientHeight;\n return x + 'x' + y;\n})();\n","args":[null]} | |
| 20:48:33 INFO - 1576615713667 Marionette DEBUG 0 -> [0,33,"WebDriver:ExecuteScript",{"args":[null],"script":"return (function() {\n const w = window,\n d = document,\n e ... .clientWidth || g.clientWidth,\n y = w.innerHeight || e.clientHeight || g.clientHeight;\n return x + 'x' + y;\n})();\n"}] | |
| 20:48:33 INFO - 1576615713668 Marionette DEBUG 0 <- [1,33,null,{"value":"1366x768"}] | |
| 20:48:33 INFO - 1576615713668 webdriver::server DEBUG <- 200 OK {"value":"1366x768"} | |
| 20:48:33 INFO - 1576615713669 webdriver::server DEBUG -> POST /session/5496a31a-1b44-e34c-ac13-769a37e9aec1/moz/context {"context":"content"} | |
| 20:48:33 INFO - 1576615713670 Marionette DEBUG 0 -> [0,34,"Marionette:SetContext",{"value":"content"}] | |
| 20:48:33 INFO - 1576615713670 Marionette DEBUG 0 <- [1,34,null,{"value":null}] | |
| 20:48:33 INFO - 1576615713671 webdriver::server DEBUG <- 200 OK {"value":null} | |
| 20:48:33 INFO - [2019-12-17 12:48:33] VERBOSE: [browsertime] Executing script return (function() { | |
| 20:48:33 INFO - function docHeight(doc) { | |
| 20:48:33 INFO - const body = doc.body, | |
| 20:48:33 INFO - docelem = doc.documentElement; | |
| 20:48:33 INFO - return Math.max( | |
| 20:48:33 INFO - body.scrollHeight, | |
| 20:48:33 INFO - body.offsetHeight, | |
| 20:48:33 INFO - docelem.clientHeight, | |
| 20:48:33 INFO - docelem.scrollHeight, | |
| 20:48:33 INFO - docelem.offsetHeight | |
| 20:48:33 INFO - ); | |
| 20:48:33 INFO - } | |
| 20:48:33 INFO - return docHeight(document); | |
| 20:48:33 INFO - })(); | |
| 20:48:33 INFO - 1576615713672 webdriver::server DEBUG -> POST /session/5496a31a-1b44-e34c-ac13-769a37e9aec1/execute/sync {"script":"return (function() {\n function docHeight(doc) {\n const body = doc.body,\n docelem = doc.documentElement;\n return Math.max(\n body.scrollHeight,\n body.offsetHeight,\n docelem.clientHeight,\n docelem.scrollHeight,\n docelem.offsetHeight\n );\n }\n\n return docHeight(document);\n})();\n","args":[null]} | |
| 20:48:33 INFO - 1576615713674 Marionette DEBUG 0 -> [0,35,"WebDriver:ExecuteScript",{"args":[null],"script":"return (function() {\n function docHeight(doc) {\n const body = ... entHeight,\n docelem.scrollHeight,\n docelem.offsetHeight\n );\n }\n\n return docHeight(document);\n})();\n"}] | |
| 20:48:33 INFO - 1576615713676 Marionette DEBUG 0 <- [1,35,null,{"value":9099}] | |
| 20:48:33 INFO - 1576615713676 webdriver::server DEBUG <- 200 OK {"value":9099} | |
| 20:48:33 INFO - [2019-12-17 12:48:33] VERBOSE: [browsertime] Executing script return (function() { | |
| 20:48:33 INFO - const t = window.performance.getEntriesByType('navigation')[0]; | |
| 20:48:33 INFO - return { | |
| 20:48:33 INFO - decodedBodySize: t.decodedBodySize, | |
| 20:48:33 INFO - encodedBodySize: t.encodedBodySize, | |
| 20:48:33 INFO - transferSize: t.transferSize | |
| 20:48:33 INFO - }; | |
| 20:48:33 INFO - })(); | |
| 20:48:33 INFO - 1576615713677 webdriver::server DEBUG -> POST /session/5496a31a-1b44-e34c-ac13-769a37e9aec1/execute/sync {"script":"return (function() {\n const t = window.performance.getEntriesByType('navigation')[0];\n return {\n decodedBodySize: t.decodedBodySize,\n encodedBodySize: t.encodedBodySize,\n transferSize: t.transferSize\n };\n})();\n","args":[null]} | |
| 20:48:33 INFO - 1576615713678 Marionette DEBUG 0 -> [0,36,"WebDriver:ExecuteScript",{"args":[null],"script":"return (function() {\n const t = window.performance.getEntriesByTyp ... odedBodySize: t.decodedBodySize,\n encodedBodySize: t.encodedBodySize,\n transferSize: t.transferSize\n };\n})();\n"}] | |
| 20:48:33 INFO - 1576615713682 Marionette DEBUG 0 <- [1,36,null,{"value":{"decodedBodySize":1030003,"encodedBodySize":1030003,"transferSize":1031006}}] | |
| 20:48:33 INFO - 1576615713683 webdriver::server DEBUG <- 200 OK {"value":{"decodedBodySize":1030003,"encodedBodySize":1030003,"transferSize":1031006}} | |
| 20:48:33 INFO - [2019-12-17 12:48:33] VERBOSE: [browsertime] Executing script return (function() { | |
| 20:48:33 INFO - return document.title; | |
| 20:48:33 INFO - })(); | |
| 20:48:33 INFO - 1576615713684 webdriver::server DEBUG -> POST /session/5496a31a-1b44-e34c-ac13-769a37e9aec1/execute/sync {"script":"return (function() {\n return document.title;\n})();\n","args":[null]} | |
| 20:48:33 INFO - 1576615713684 Marionette DEBUG 0 -> [0,37,"WebDriver:ExecuteScript",{"args":[null],"script":"return (function() {\n return document.title;\n})();\n"}] | |
| 20:48:33 INFO - 1576615713686 Marionette DEBUG 0 <- [1,37,null,{"value":"Amazon.com: laptop"}] | |
| 20:48:33 INFO - 1576615713686 webdriver::server DEBUG <- 200 OK {"value":"Amazon.com: laptop"} | |
| 20:48:33 INFO - [2019-12-17 12:48:33] VERBOSE: [browsertime] Executing script return (function() { | |
| 20:48:33 INFO - function docWidth(doc) { | |
| 20:48:33 INFO - const body = doc.body, | |
| 20:48:33 INFO - docelem = doc.documentElement; | |
| 20:48:33 INFO - return Math.max( | |
| 20:48:33 INFO - body.scrollWidth, | |
| 20:48:33 INFO - body.offsetWidth, | |
| 20:48:33 INFO - docelem.clientWidth, | |
| 20:48:33 INFO - docelem.scrollWidth, | |
| 20:48:33 INFO - docelem.offsetWidth | |
| 20:48:33 INFO - ); | |
| 20:48:33 INFO - } | |
| 20:48:33 INFO - return docWidth(document); | |
| 20:48:33 INFO - })(); | |
| 20:48:33 INFO - 1576615713687 webdriver::server DEBUG -> POST /session/5496a31a-1b44-e34c-ac13-769a37e9aec1/execute/sync {"script":"return (function() {\n function docWidth(doc) {\n const body = doc.body,\n docelem = doc.documentElement;\n return Math.max(\n body.scrollWidth,\n body.offsetWidth,\n docelem.clientWidth,\n docelem.scrollWidth,\n docelem.offsetWidth\n );\n }\n\n return docWidth(document);\n})();\n","args":[null]} | |
| 20:48:33 INFO - 1576615713688 Marionette DEBUG 0 -> [0,38,"WebDriver:ExecuteScript",{"args":[null],"script":"return (function() {\n function docWidth(doc) {\n const body = d ... .clientWidth,\n docelem.scrollWidth,\n docelem.offsetWidth\n );\n }\n\n return docWidth(document);\n})();\n"}] | |
| 20:48:33 INFO - 1576615713690 Marionette DEBUG 0 <- [1,38,null,{"value":1366}] | |
| 20:48:33 INFO - 1576615713690 webdriver::server DEBUG <- 200 OK {"value":1366} | |
| 20:48:33 INFO - [2019-12-17 12:48:33] VERBOSE: [browsertime] Executing script return (function () { | |
| 20:48:33 INFO - if (window.performance.timeOrigin) { | |
| 20:48:33 INFO - return Number(window.performance.timeOrigin.toFixed(0)); | |
| 20:48:33 INFO - } | |
| 20:48:33 INFO - if (window.performance.timing.navigationStart) { | |
| 20:48:33 INFO - return Number(window.performance.timing.navigationStart.toFixed(0)); | |
| 20:48:33 INFO - } | |
| 20:48:33 INFO - return undefined; | |
| 20:48:33 INFO - })(); | |
| 20:48:33 INFO - 1576615713692 webdriver::server DEBUG -> POST /session/5496a31a-1b44-e34c-ac13-769a37e9aec1/execute/sync {"script":"return (function () {\n if (window.performance.timeOrigin) {\n return Number(window.performance.timeOrigin.toFixed(0));\n }\n if (window.performance.timing.navigationStart) {\n return Number(window.performance.timing.navigationStart.toFixed(0));\n }\n return undefined;\n})();\n","args":[null]} | |
| 20:48:33 INFO - 1576615713693 Marionette DEBUG 0 -> [0,39,"WebDriver:ExecuteScript",{"args":[null],"script":"return (function () {\n if (window.performance.timeOrigin) {\n r ... ationStart) {\n return Number(window.performance.timing.navigationStart.toFixed(0));\n }\n return undefined;\n})();\n"}] | |
| 20:48:33 INFO - 1576615713695 Marionette DEBUG 0 <- [1,39,null,{"value":1576615707237}] | |
| 20:48:33 INFO - 1576615713696 webdriver::server DEBUG <- 200 OK {"value":1576615707237} | |
| 20:48:33 INFO - [2019-12-17 12:48:33] VERBOSE: [browsertime] Executing script return (function() { | |
| 20:48:33 INFO - const t = window.performance.getEntriesByType('navigation')[0]; | |
| 20:48:33 INFO - return t.nextHopProtocol; | |
| 20:48:33 INFO - })(); | |
| 20:48:33 INFO - 1576615713697 webdriver::server DEBUG -> POST /session/5496a31a-1b44-e34c-ac13-769a37e9aec1/execute/sync {"script":"return (function() {\n const t = window.performance.getEntriesByType('navigation')[0];\n return t.nextHopProtocol;\n})();\n","args":[null]} | |
| 20:48:33 INFO - 1576615713698 Marionette DEBUG 0 -> [0,40,"WebDriver:ExecuteScript",{"args":[null],"script":"return (function() {\n const t = window.performance.getEntriesByType('navigation')[0];\n return t.nextHopProtocol;\n})();\n"}] | |
| 20:48:33 INFO - 1576615713700 Marionette DEBUG 0 <- [1,40,null,{"value":"h2"}] | |
| 20:48:33 INFO - 1576615713701 webdriver::server DEBUG <- 200 OK {"value":"h2"} | |
| 20:48:33 INFO - [2019-12-17 12:48:33] VERBOSE: [browsertime] Executing script return (function() { | |
| 20:48:33 INFO - return document.documentElement.scrollWidth <= window.innerWidth; | |
| 20:48:33 INFO - })(); | |
| 20:48:33 INFO - 1576615713704 webdriver::server DEBUG -> POST /session/5496a31a-1b44-e34c-ac13-769a37e9aec1/execute/sync {"script":"return (function() {\n return document.documentElement.scrollWidth <= window.innerWidth;\n})();\n","args":[null]} | |
| 20:48:33 INFO - 1576615713705 Marionette DEBUG 0 -> [0,41,"WebDriver:ExecuteScript",{"args":[null],"script":"return (function() {\n return document.documentElement.scrollWidth <= window.innerWidth;\n})();\n"}] | |
| 20:48:33 INFO - 1576615713707 Marionette DEBUG 0 <- [1,41,null,{"value":true}] | |
| 20:48:33 INFO - 1576615713708 webdriver::server DEBUG <- 200 OK {"value":true} | |
| 20:48:33 INFO - [2019-12-17 12:48:33] VERBOSE: [browsertime] Executing script return (function() { | |
| 20:48:33 INFO - return document.URL; | |
| 20:48:33 INFO - })(); | |
| 20:48:33 INFO - 1576615713710 webdriver::server DEBUG -> POST /session/5496a31a-1b44-e34c-ac13-769a37e9aec1/execute/sync {"script":"return (function() {\n return document.URL;\n })();","args":[null]} | |
| 20:48:33 INFO - 1576615713710 Marionette DEBUG 0 -> [0,42,"WebDriver:ExecuteScript",{"args":[null],"script":"return (function() {\n return document.URL;\n })();"}] | |
| 20:48:33 INFO - 1576615713712 Marionette DEBUG 0 <- [1,42,null,{"value":"https://www.amazon.com/s?k=laptop&ref=nb_sb_noss_1"}] | |
| 20:48:33 INFO - 1576615713712 webdriver::server DEBUG <- 200 OK {"value":"https://www.amazon.com/s?k=laptop&ref=nb_sb_noss_1"} | |
| 20:48:33 INFO - [2019-12-17 12:48:33] VERBOSE: [browsertime] Executing script return (function (custom) { | |
| 20:48:33 INFO - /** | |
| 20:48:33 INFO - * Collect visual elements from a page and feed the size back in the | |
| 20:48:33 INFO - * format for Visual Metrics. | |
| 20:48:33 INFO - */ | |
| 20:48:33 INFO - const elementByType = {}; | |
| 20:48:33 INFO - const areaByType = {}; | |
| 20:48:33 INFO - const imageTags = [].slice.call(document.body.getElementsByTagName('img')); | |
| 20:48:33 INFO - const h1Tags = [].slice.call(document.body.getElementsByTagName('h1')); | |
| 20:48:33 INFO - // When we feed options from the CLI it can be a String or an | |
| 20:48:33 INFO - // Array with Strings. Make it easy to treat everything the same. | |
| 20:48:33 INFO - function toArray(arrayLike) { | |
| 20:48:33 INFO - if (arrayLike === undefined || arrayLike === null) { | |
| 20:48:33 INFO - return []; | |
| 20:48:33 INFO - } | |
| 20:48:33 INFO - if (Array.isArray(arrayLike)) { | |
| 20:48:33 INFO - return arrayLike; | |
| 20:48:33 INFO - } | |
| 20:48:33 INFO - return [arrayLike]; | |
| 20:48:33 INFO - } | |
| 20:48:33 INFO - function isLargest(type, area) { | |
| 20:48:33 INFO - if (!areaByType[type]) { | |
| 20:48:33 INFO - return true; | |
| 20:48:33 INFO - } else return areaByType[type] < area; | |
| 20:48:33 INFO - } | |
| 20:48:33 INFO - function isElementPartlyInViewportAndVisible (el) { | |
| 20:48:33 INFO - const rect = el.getBoundingClientRect(); | |
| 20:48:33 INFO - return !(rect.bottom < 0 || rect.right < 0 || rect.left > window.innerWidth || rect.top > window.innerHeight || rect.height === 0) | |
| 20:48:33 INFO - } | |
| 20:48:33 INFO - function visibleArea(el) { | |
| 20:48:33 INFO - const rect = el.getBoundingClientRect(); | |
| 20:48:33 INFO - const viewportWidth = document.documentElement.clientWidth; | |
| 20:48:33 INFO - const viewportHeight = document.documentElement.clientHeight; | |
| 20:48:33 INFO - // TODO make this more readable | |
| 20:48:33 INFO - const width = rect.left < 0 ? rect.width + rect.left : (viewportWidth < rect.left + rect.width) ? viewportWidth - rect.left : rect.width; | |
| 20:48:33 INFO - const height = rect.top < 0 ? rect.height + rect.top : (viewportHeight < rect.top + rect.height) ? viewportHeight - rect.top : rect.height; | |
| 20:48:33 INFO - return width * height; | |
| 20:48:33 INFO - } | |
| 20:48:33 INFO - function keepLargestElementByType(type, element) { | |
| 20:48:33 INFO - const area = visibleArea(element); | |
| 20:48:33 INFO - if (isLargest(type, area)) { | |
| 20:48:33 INFO - const filename = element.src ? element.src.substring(element.src.lastIndexOf('/') + 1) : undefined; | |
| 20:48:33 INFO - const rect = element.getBoundingClientRect(); | |
| 20:48:33 INFO - elementByType[type] = { | |
| 20:48:33 INFO - name: type, | |
| 20:48:33 INFO - x: Math.round(rect.left), | |
| 20:48:33 INFO - y: Math.round(rect.top), | |
| 20:48:33 INFO - width: Math.round(rect.width), | |
| 20:48:33 INFO - height: Math.round(rect.height), | |
| 20:48:33 INFO - filename | |
| 20:48:33 INFO - }; | |
| 20:48:33 INFO - areaByType[type] = area; | |
| 20:48:33 INFO - } | |
| 20:48:33 INFO - } | |
| 20:48:33 INFO - if (custom) { | |
| 20:48:33 INFO - // Input could be a String or an Array of Strings so convert it | |
| 20:48:33 INFO - const customArray = toArray(custom); | |
| 20:48:33 INFO - for (const nameAndSelector of customArray) { | |
| 20:48:33 INFO - const parts = nameAndSelector.split(':'); | |
| 20:48:33 INFO - const type = parts[0]; | |
| 20:48:33 INFO - const selector = parts[1]; | |
| 20:48:33 INFO - const element = document.body.querySelector(selector); | |
| 20:48:33 INFO - try { | |
| 20:48:33 INFO - if (isElementPartlyInViewportAndVisible(element)) { | |
| 20:48:33 INFO - keepLargestElementByType(type, element); | |
| 20:48:33 INFO - } | |
| 20:48:33 INFO - } catch (e) { | |
| 20:48:33 INFO - console.log('Could not find matching element for selector:' + selector + ' using document.body.querySelector. Do that element exist on the page?'); | |
| 20:48:33 INFO - } | |
| 20:48:33 INFO - } | |
| 20:48:33 INFO - } | |
| 20:48:33 INFO - imageTags.forEach(function (element) { | |
| 20:48:33 INFO - if (isElementPartlyInViewportAndVisible(element)) { | |
| 20:48:33 INFO - keepLargestElementByType('LargestImage', element); | |
| 20:48:33 INFO - } | |
| 20:48:33 INFO - }); | |
| 20:48:33 INFO - h1Tags.forEach(function (element) { | |
| 20:48:33 INFO - if (isElementPartlyInViewportAndVisible(element)) { | |
| 20:48:33 INFO - keepLargestElementByType('Heading', element); | |
| 20:48:33 INFO - } | |
| 20:48:33 INFO - }); | |
| 20:48:33 INFO - // We need to follow the standard for VisualMetrics | |
| 20:48:33 INFO - return { | |
| 20:48:33 INFO - viewport: { | |
| 20:48:33 INFO - width: document.documentElement.clientWidth, | |
| 20:48:33 INFO - height: document.documentElement.clientHeight | |
| 20:48:33 INFO - }, | |
| 20:48:33 INFO - // "heroes" :D https://github.com/sitespeedio/logo/blob/master/png/heroes/Pippi-Sitespeed.io.png | |
| 20:48:33 INFO - heroes: Object.keys(elementByType).map(function (type) { | |
| 20:48:33 INFO - return elementByType[type]; | |
| 20:48:33 INFO - }) | |
| 20:48:33 INFO - }; | |
| 20:48:33 INFO - })(arguments[arguments.length - 1]); | |
| 20:48:33 INFO - 1576615713713 webdriver::server DEBUG -> POST /session/5496a31a-1b44-e34c-ac13-769a37e9aec1/execute/sync {"script":"return (function (custom) {\n /**\n * Collect visual elements from a page and feed the size back in the \n * format for Visual Metrics.\n */\n\n const elementByType = {};\n const areaByType = {};\n const imageTags = [].slice.call(document.body.getElementsByTagName('img'));\n const h1Tags = [].slice.call(document.body.getElementsByTagName('h1'));\n\n // When we feed options from the CLI it can be a String or an \n // Array with Strings. Make it easy to treat everything the same. \n function toArray(arrayLike) {\n if (arrayLike === undefined || arrayLike === null) {\n return [];\n }\n if (Array.isArray(arrayLike)) {\n return arrayLike;\n }\n return [arrayLike];\n }\n\n function isLargest(type, area) {\n if (!areaByType[type]) {\n return true;\n } else return areaByType[type] < area;\n }\n\n function isElementPartlyInViewportAndVisible (el) {\n const rect = el.getBoundingClientRect();\n return !(rect.bottom < 0 || rect.right < 0 || rect.left > window.innerWidth || rect.top > window.innerHeight || rect.height === 0)\n }\n\n function visibleArea(el) {\n const rect = el.getBoundingClientRect();\n const viewportWidth = document.documentElement.clientWidth;\n const viewportHeight = document.documentElement.clientHeight;\n\n // TODO make this more readable\n const width = rect.left < 0 ? rect.width + rect.left : (viewportWidth < rect.left + rect.width) ? viewportWidth - rect.left : rect.width;\n const height = rect.top < 0 ? rect.height + rect.top : (viewportHeight < rect.top + rect.height) ? viewportHeight - rect.top : rect.height;\n\n return width * height;\n }\n\n function keepLargestElementByType(type, element) {\n const area = visibleArea(element);\n if (isLargest(type, area)) {\n const filename = element.src ? element.src.substring(element.src.lastIndexOf('/') + 1) : undefined;\n const rect = element.getBoundingClientRect();\n elementByType[type] = {\n name: type,\n x: Math.round(rect.left),\n y: Math.round(rect.top),\n width: Math.round(rect.width),\n height: Math.round(rect.height),\n filename\n };\n areaByType[type] = area;\n }\n }\n\n if (custom) {\n // Input could be a String or an Array of Strings so convert it\n const customArray = toArray(custom);\n for (const nameAndSelector of customArray) {\n const parts = nameAndSelector.split(':');\n const type = parts[0];\n const selector = parts[1];\n const element = document.body.querySelector(selector);\n try {\n if (isElementPartlyInViewportAndVisible(element)) {\n keepLargestElementByType(type, element);\n }\n } catch (e) {\n console.log('Could not find matching element for selector:' + selector + ' using document.body.querySelector. Do that element exist on the page?');\n }\n }\n }\n\n imageTags.forEach(function (element) { \n if (isElementPartlyInViewportAndVisible(element)) {\n keepLargestElementByType('LargestImage', element);\n }\n });\n\n h1Tags.forEach(function (element) {\n if (isElementPartlyInViewportAndVisible(element)) {\n keepLargestElementByType('Heading', element);\n }\n });\n\n // We need to follow the standard for VisualMetrics\n return {\n viewport: {\n width: document.documentElement.clientWidth,\n height: document.documentElement.clientHeight\n },\n // \"heroes\" :D https://github.com/sitespeedio/logo/blob/master/png/heroes/Pippi-Sitespeed.io.png\n heroes: Object.keys(elementByType).map(function (type) {\n return elementByType[type];\n })\n };\n})(arguments[arguments.length - 1]);","args":[null]} | |
| 20:48:33 INFO - 1576615713714 Marionette DEBUG 0 -> [0,43,"WebDriver:ExecuteScript",{"args":[null],"script":"return (function (custom) {\n /**\n * Collect visual elements ... ).map(function (type) {\n return elementByType[type];\n })\n };\n})(arguments[arguments.length - 1]);"}] | |
| 20:48:33 INFO - 1576615713719 Marionette DEBUG 0 <- [1,43,null,{"value":{"viewport":{"width":1366,"height":694},"heroes":[{"name":"LargestImage","x":292,"y":415,"width":244,"hei ... ht":218,"filename":"413clmDR2cL._AC_UY218_.jpg"},{"name":"Heading","x":0,"y":99,"width":1366,"height":44,"filename":null}]}}] | |
| 20:48:33 INFO - 1576615713719 webdriver::server DEBUG <- 200 OK {"value":{"heroes":[{"filename":"413clmDR2cL._AC_UY218_.jpg","height":218,"name":"LargestImage","width":244,"x":292,"y":415},{"filename":null,"height":44,"name":"Heading","width":1366,"x":0,"y":99}],"viewport":{"height":694,"width":1366}}} | |
| 20:48:33 INFO - [2019-12-17 12:48:33] VERBOSE: [browsertime] Executing script return (function() { | |
| 20:48:33 INFO - let p = window.performance, | |
| 20:48:33 INFO - timing = p.timing, | |
| 20:48:33 INFO - entries = p.getEntriesByType('paint'); | |
| 20:48:33 INFO - if (entries.length > 0) { | |
| 20:48:33 INFO - for (const entry of entries) { | |
| 20:48:33 INFO - if (entry.name === 'first-paint') | |
| 20:48:33 INFO - return Number(entry.startTime.toFixed(0)); | |
| 20:48:33 INFO - } | |
| 20:48:33 INFO - } else if (timing.timeToNonBlankPaint) { | |
| 20:48:33 INFO - return Number( | |
| 20:48:33 INFO - (timing.timeToNonBlankPaint - timing.navigationStart).toFixed(0) | |
| 20:48:33 INFO - ); | |
| 20:48:33 INFO - } | |
| 20:48:33 INFO - return undefined; | |
| 20:48:33 INFO - })(); | |
| 20:48:33 INFO - 1576615713721 webdriver::server DEBUG -> POST /session/5496a31a-1b44-e34c-ac13-769a37e9aec1/execute/sync {"script":"return (function() {\n let p = window.performance,\n timing = p.timing,\n entries = p.getEntriesByType('paint');\n\n if (entries.length > 0) {\n for (const entry of entries) {\n if (entry.name === 'first-paint')\n return Number(entry.startTime.toFixed(0));\n }\n } else if (timing.timeToNonBlankPaint) {\n return Number(\n (timing.timeToNonBlankPaint - timing.navigationStart).toFixed(0)\n );\n }\n return undefined;\n})();\n","args":[null]} | |
| 20:48:33 INFO - 1576615713722 Marionette DEBUG 0 -> [0,44,"WebDriver:ExecuteScript",{"args":[null],"script":"return (function() {\n let p = window.performance,\n timing = p. ... Number(\n (timing.timeToNonBlankPaint - timing.navigationStart).toFixed(0)\n );\n }\n return undefined;\n})();\n"}] | |
| 20:48:33 INFO - 1576615713726 Marionette DEBUG 0 <- [1,44,null,{"value":822}] | |
| 20:48:33 INFO - 1576615713726 webdriver::server DEBUG <- 200 OK {"value":822} | |
| 20:48:33 INFO - [2019-12-17 12:48:33] VERBOSE: [browsertime] Executing script return (function() { | |
| 20:48:33 INFO - return Number( | |
| 20:48:33 INFO - window.performance.getEntriesByType('navigation')[0].loadEventEnd.toFixed(0) | |
| 20:48:33 INFO - ); | |
| 20:48:33 INFO - })(); | |
| 20:48:33 INFO - 1576615713728 webdriver::server DEBUG -> POST /session/5496a31a-1b44-e34c-ac13-769a37e9aec1/execute/sync {"script":"return (function() {\n return Number(\n window.performance.getEntriesByType('navigation')[0].loadEventEnd.toFixed(0)\n );\n})();\n","args":[null]} | |
| 20:48:33 INFO - 1576615713729 Marionette DEBUG 0 -> [0,45,"WebDriver:ExecuteScript",{"args":[null],"script":"return (function() {\n return Number(\n window.performance.getEntriesByType('navigation')[0].loadEventEnd.toFixed(0)\n );\n})();\n"}] | |
| 20:48:33 INFO - 1576615713731 Marionette DEBUG 0 <- [1,45,null,{"value":1353}] | |
| 20:48:33 INFO - 1576615713732 webdriver::server DEBUG <- 200 OK {"value":1353} | |
| 20:48:33 INFO - [2019-12-17 12:48:33] VERBOSE: [browsertime] Executing script return (function() { | |
| 20:48:33 INFO - const t = window.performance.getEntriesByType('navigation')[0]; | |
| 20:48:33 INFO - const d = 0; | |
| 20:48:33 INFO - return { | |
| 20:48:33 INFO - connectStart: Number(t.connectStart.toFixed(d)), | |
| 20:48:33 INFO - domComplete: Number(t.domComplete.toFixed(d)), | |
| 20:48:33 INFO - domContentLoadedEventEnd: Number(t.domContentLoadedEventEnd.toFixed(d)), | |
| 20:48:33 INFO - domContentLoadedEventStart: Number(t.domContentLoadedEventStart.toFixed(d)), | |
| 20:48:33 INFO - domInteractive: Number(t.domInteractive.toFixed(d)), | |
| 20:48:33 INFO - domainLookupEnd: Number(t.domainLookupEnd.toFixed(d)), | |
| 20:48:33 INFO - domainLookupStart: Number(t.domainLookupStart.toFixed(d)), | |
| 20:48:33 INFO - duration: Number(t.duration.toFixed(d)), | |
| 20:48:33 INFO - fetchStart: Number(t.fetchStart.toFixed(d)), | |
| 20:48:33 INFO - loadEventEnd: Number(t.loadEventEnd.toFixed(d)), | |
| 20:48:33 INFO - loadEventStart: Number(t.loadEventStart.toFixed(d)), | |
| 20:48:33 INFO - redirectEnd: Number(t.redirectEnd.toFixed(d)), | |
| 20:48:33 INFO - redirectStart: Number(t.redirectStart.toFixed(d)), | |
| 20:48:33 INFO - requestStart: Number(t.requestStart.toFixed(d)), | |
| 20:48:33 INFO - responseEnd: Number(t.responseEnd.toFixed(d)), | |
| 20:48:33 INFO - responseStart: Number(t.responseStart.toFixed(d)), | |
| 20:48:33 INFO - secureConnectionStart: Number(t.secureConnectionStart.toFixed(d)), | |
| 20:48:33 INFO - startTime: Number(t.startTime.toFixed(d)), | |
| 20:48:33 INFO - unloadEventEnd: Number(t.unloadEventEnd.toFixed(d)), | |
| 20:48:33 INFO - unloadEventStart: Number(t.unloadEventStart.toFixed(d)), | |
| 20:48:33 INFO - workerStart: Number(t.workerStart.toFixed(d)) | |
| 20:48:33 INFO - }; | |
| 20:48:33 INFO - })(); | |
| 20:48:33 INFO - 1576615713733 webdriver::server DEBUG -> POST /session/5496a31a-1b44-e34c-ac13-769a37e9aec1/execute/sync {"script":"return (function() {\n const t = window.performance.getEntriesByType('navigation')[0];\n const d = 0;\n return {\n connectStart: Number(t.connectStart.toFixed(d)),\n domComplete: Number(t.domComplete.toFixed(d)),\n domContentLoadedEventEnd: Number(t.domContentLoadedEventEnd.toFixed(d)),\n domContentLoadedEventStart: Number(t.domContentLoadedEventStart.toFixed(d)),\n domInteractive: Number(t.domInteractive.toFixed(d)),\n domainLookupEnd: Number(t.domainLookupEnd.toFixed(d)),\n domainLookupStart: Number(t.domainLookupStart.toFixed(d)),\n duration: Number(t.duration.toFixed(d)),\n fetchStart: Number(t.fetchStart.toFixed(d)),\n loadEventEnd: Number(t.loadEventEnd.toFixed(d)),\n loadEventStart: Number(t.loadEventStart.toFixed(d)),\n redirectEnd: Number(t.redirectEnd.toFixed(d)),\n redirectStart: Number(t.redirectStart.toFixed(d)),\n requestStart: Number(t.requestStart.toFixed(d)),\n responseEnd: Number(t.responseEnd.toFixed(d)),\n responseStart: Number(t.responseStart.toFixed(d)),\n secureConnectionStart: Number(t.secureConnectionStart.toFixed(d)),\n startTime: Number(t.startTime.toFixed(d)),\n unloadEventEnd: Number(t.unloadEventEnd.toFixed(d)),\n unloadEventStart: Number(t.unloadEventStart.toFixed(d)),\n workerStart: Number(t.workerStart.toFixed(d))\n };\n})();\n","args":[null]} | |
| 20:48:33 INFO - 1576615713734 Marionette DEBUG 0 -> [0,46,"WebDriver:ExecuteScript",{"args":[null],"script":"return (function() {\n const t = window.performance.getEntriesByTyp ... unloadEventStart: Number(t.unloadEventStart.toFixed(d)),\n workerStart: Number(t.workerStart.toFixed(d))\n };\n})();\n"}] | |
| 20:48:33 INFO - 1576615713736 Marionette DEBUG 0 <- [1,46,null,{"value":{"connectStart":2,"domComplete":1350,"domContentLoadedEventEnd":1152,"domContentLoadedEventStart":1148,"d ... seEnd":6,"responseStart":6,"secureConnectionStart":0,"startTime":0,"unloadEventEnd":0,"unloadEventStart":0,"workerStart":0}}] | |
| 20:48:33 INFO - 1576615713736 webdriver::server DEBUG <- 200 OK {"value":{"connectStart":2,"domComplete":1350,"domContentLoadedEventEnd":1152,"domContentLoadedEventStart":1148,"domInteractive":1124,"domainLookupEnd":2,"domainLookupStart":2,"duration":1353,"fetchStart":0,"loadEventEnd":1353,"loadEventStart":1350,"redirectEnd":0,"redirectStart":0,"requestStart":2,"responseEnd":6,"responseStart":6,"secureConnectionStart":0,"startTime":0,"unloadEventEnd":0,"unloadEventStart":0,"workerStart":0}} | |
| 20:48:33 INFO - [2019-12-17 12:48:33] VERBOSE: [browsertime] Executing script return (function() { | |
| 20:48:33 INFO - const t = window.performance.getEntriesByType('navigation')[0]; | |
| 20:48:33 INFO - const d = 0; | |
| 20:48:33 INFO - return { | |
| 20:48:33 INFO - domainLookupTime: Number( | |
| 20:48:33 INFO - (t.domainLookupEnd - t.domainLookupStart).toFixed(d) | |
| 20:48:33 INFO - ), | |
| 20:48:33 INFO - redirectionTime: Number((t.redirectEnd - t.redirectStart).toFixed(d)), | |
| 20:48:33 INFO - serverConnectionTime: Number((t.connectEnd - t.connectStart).toFixed(d)), | |
| 20:48:33 INFO - serverResponseTime: Number((t.responseEnd - t.requestStart).toFixed(d)), | |
| 20:48:33 INFO - pageDownloadTime: Number((t.responseEnd - t.responseStart).toFixed(d)), | |
| 20:48:33 INFO - domInteractiveTime: Number(t.domInteractive.toFixed(d)), | |
| 20:48:33 INFO - domContentLoadedTime: Number(t.domContentLoadedEventStart.toFixed(d)), | |
| 20:48:33 INFO - pageLoadTime: Number(t.loadEventStart.toFixed(d)), | |
| 20:48:33 INFO - frontEndTime: Number((t.loadEventStart - t.responseEnd).toFixed(d)), | |
| 20:48:33 INFO - backEndTime: Number(t.responseStart.toFixed(d)) | |
| 20:48:33 INFO - }; | |
| 20:48:33 INFO - })(); | |
| 20:48:33 INFO - 1576615713737 webdriver::server DEBUG -> POST /session/5496a31a-1b44-e34c-ac13-769a37e9aec1/execute/sync {"script":"return (function() {\n const t = window.performance.getEntriesByType('navigation')[0];\n const d = 0;\n return {\n domainLookupTime: Number(\n (t.domainLookupEnd - t.domainLookupStart).toFixed(d)\n ),\n redirectionTime: Number((t.redirectEnd - t.redirectStart).toFixed(d)),\n serverConnectionTime: Number((t.connectEnd - t.connectStart).toFixed(d)),\n serverResponseTime: Number((t.responseEnd - t.requestStart).toFixed(d)),\n pageDownloadTime: Number((t.responseEnd - t.responseStart).toFixed(d)),\n domInteractiveTime: Number(t.domInteractive.toFixed(d)),\n domContentLoadedTime: Number(t.domContentLoadedEventStart.toFixed(d)),\n pageLoadTime: Number(t.loadEventStart.toFixed(d)),\n frontEndTime: Number((t.loadEventStart - t.responseEnd).toFixed(d)),\n backEndTime: Number(t.responseStart.toFixed(d))\n };\n})();\n","args":[null]} | |
| 20:48:33 INFO - 1576615713738 Marionette DEBUG 0 -> [0,47,"WebDriver:ExecuteScript",{"args":[null],"script":"return (function() {\n const t = window.performance.getEntriesByTyp ... Number((t.loadEventStart - t.responseEnd).toFixed(d)),\n backEndTime: Number(t.responseStart.toFixed(d))\n };\n})();\n"}] | |
| 20:48:33 INFO - 1576615713739 Marionette DEBUG 0 <- [1,47,null,{"value":{"domainLookupTime":0,"redirectionTime":0,"serverConnectionTime":0,"serverResponseTime":4,"pageDownloadTime":0,"domInteractiveTime":1124,"domContentLoadedTime":1148,"pageLoadTime":1350,"frontEndTime":1344,"backEndTime":6}}] | |
| 20:48:33 INFO - 1576615713740 webdriver::server DEBUG <- 200 OK {"value":{"backEndTime":6,"domContentLoadedTime":1148,"domInteractiveTime":1124,"domainLookupTime":0,"frontEndTime":1344,"pageDownloadTime":0,"pageLoadTime":1350,"redirectionTime":0,"serverConnectionTime":0,"serverResponseTime":4}} | |
| 20:48:33 INFO - [2019-12-17 12:48:33] VERBOSE: [browsertime] Executing script return (function() { | |
| 20:48:33 INFO - let p = window.performance, | |
| 20:48:33 INFO - entries, | |
| 20:48:33 INFO - values = {}; | |
| 20:48:33 INFO - entries = p.getEntriesByType('paint'); | |
| 20:48:33 INFO - if (entries.length > 0) { | |
| 20:48:33 INFO - for (const entry of entries) { | |
| 20:48:33 INFO - values[entry.name] = Number(entry.startTime.toFixed(0)); | |
| 20:48:33 INFO - } | |
| 20:48:33 INFO - return values; | |
| 20:48:33 INFO - } else return undefined; | |
| 20:48:33 INFO - })(); | |
| 20:48:33 INFO - 1576615713741 webdriver::server DEBUG -> POST /session/5496a31a-1b44-e34c-ac13-769a37e9aec1/execute/sync {"script":"return (function() {\n let p = window.performance,\n entries,\n values = {};\n\n entries = p.getEntriesByType('paint');\n\n if (entries.length > 0) {\n for (const entry of entries) {\n values[entry.name] = Number(entry.startTime.toFixed(0));\n }\n return values;\n } else return undefined;\n})();\n","args":[null]} | |
| 20:48:33 INFO - 1576615713742 Marionette DEBUG 0 -> [0,48,"WebDriver:ExecuteScript",{"args":[null],"script":"return (function() {\n let p = window.performance,\n entries,\n ... values[entry.name] = Number(entry.startTime.toFixed(0));\n }\n return values;\n } else return undefined;\n})();\n"}] | |
| 20:48:33 INFO - 1576615713743 Marionette DEBUG 0 <- [1,48,null,{"value":null}] | |
| 20:48:33 INFO - 1576615713744 webdriver::server DEBUG <- 200 OK {"value":null} | |
| 20:48:33 INFO - [2019-12-17 12:48:33] VERBOSE: [browsertime] Executing script return (function() { | |
| 20:48:33 INFO - /****************************************************************************** | |
| 20:48:33 INFO - Copyright (c) 2014, Google Inc. | |
| 20:48:33 INFO - All rights reserved. | |
| 20:48:33 INFO - Redistribution and use in source and binary forms, with or without | |
| 20:48:33 INFO - modification, are permitted provided that the following conditions are met: | |
| 20:48:33 INFO - * Redistributions of source code must retain the above copyright notice, | |
| 20:48:33 INFO - this list of conditions and the following disclaimer. | |
| 20:48:33 INFO - * Redistributions in binary form must reproduce the above copyright notice, | |
| 20:48:33 INFO - this list of conditions and the following disclaimer in the documentation | |
| 20:48:33 INFO - and/or other materials provided with the distribution. | |
| 20:48:33 INFO - * Neither the name of the <ORGANIZATION> nor the names of its contributors | |
| 20:48:33 INFO - may be used to endorse or promote products derived from this software | |
| 20:48:33 INFO - without specific prior written permission. | |
| 20:48:33 INFO - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |
| 20:48:33 INFO - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
| 20:48:33 INFO - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |
| 20:48:33 INFO - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE | |
| 20:48:33 INFO - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |
| 20:48:33 INFO - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | |
| 20:48:33 INFO - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |
| 20:48:33 INFO - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |
| 20:48:33 INFO - OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |
| 20:48:33 INFO - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
| 20:48:33 INFO - ******************************************************************************/ | |
| 20:48:33 INFO - /****************************************************************************** | |
| 20:48:33 INFO - ******************************************************************************* | |
| 20:48:33 INFO - Calculates the Speed Index for a page by: | |
| 20:48:33 INFO - - Collecting a list of visible rectangles for elements that loaded | |
| 20:48:33 INFO - external resources (images, background images, fonts) | |
| 20:48:33 INFO - - Gets the time when the external resource for those elements loaded | |
| 20:48:33 INFO - through Resource Timing | |
| 20:48:33 INFO - - Calculates the likely time that the background painted | |
| 20:48:33 INFO - - Runs the various paint rectangles through the SpeedIndex calculation: | |
| 20:48:33 INFO - https://sites.google.com/a/webpagetest.org/docs/using-webpagetest/metrics/speed-index | |
| 20:48:33 INFO - TODO: | |
| 20:48:33 INFO - - Improve the start render estimate | |
| 20:48:33 INFO - - Handle overlapping rects (though maybe counting the area as multiple paints | |
| 20:48:33 INFO - will work out well) | |
| 20:48:33 INFO - - Detect elements with Custom fonts and the time that the respective font | |
| 20:48:33 INFO - loaded | |
| 20:48:33 INFO - - Better error handling for browsers that don't support resource timing | |
| 20:48:33 INFO - ******************************************************************************* | |
| 20:48:33 INFO - ******************************************************************************/ | |
| 20:48:33 INFO - var RUMSpeedIndex = function(win) { | |
| 20:48:33 INFO - win = win || window; | |
| 20:48:33 INFO - var doc = win.document; | |
| 20:48:33 INFO - /**************************************************************************** | |
| 20:48:33 INFO - Support Routines | |
| 20:48:33 INFO - ****************************************************************************/ | |
| 20:48:33 INFO - // Get the rect for the visible portion of the provided DOM element | |
| 20:48:33 INFO - var GetElementViewportRect = function(el) { | |
| 20:48:33 INFO - var intersect = false; | |
| 20:48:33 INFO - if (el.getBoundingClientRect) { | |
| 20:48:33 INFO - var elRect = el.getBoundingClientRect(); | |
| 20:48:33 INFO - intersect = {'top': Math.max(elRect.top, 0), | |
| 20:48:33 INFO - 'left': Math.max(elRect.left, 0), | |
| 20:48:33 INFO - 'bottom': Math.min(elRect.bottom, (win.innerHeight || doc.documentElement.clientHeight)), | |
| 20:48:33 INFO - 'right': Math.min(elRect.right, (win.innerWidth || doc.documentElement.clientWidth))}; | |
| 20:48:33 INFO - if (intersect.bottom <= intersect.top || | |
| 20:48:33 INFO - intersect.right <= intersect.left) { | |
| 20:48:33 INFO - intersect = false; | |
| 20:48:33 INFO - } else { | |
| 20:48:33 INFO - intersect.area = (intersect.bottom - intersect.top) * (intersect.right - intersect.left); | |
| 20:48:33 INFO - } | |
| 20:48:33 INFO - } | |
| 20:48:33 INFO - return intersect; | |
| 20:48:33 INFO - }; | |
| 20:48:33 INFO - // Check a given element to see if it is visible | |
| 20:48:33 INFO - var CheckElement = function(el, url) { | |
| 20:48:33 INFO - if (url) { | |
| 20:48:33 INFO - var rect = GetElementViewportRect(el); | |
| 20:48:33 INFO - if (rect) { | |
| 20:48:33 INFO - rects.push({'url': url, | |
| 20:48:33 INFO - 'area': rect.area, | |
| 20:48:33 INFO - 'rect': rect}); | |
| 20:48:33 INFO - } | |
| 20:48:33 INFO - } | |
| 20:48:33 INFO - }; | |
| 20:48:33 INFO - // Get the visible rectangles for elements that we care about | |
| 20:48:33 INFO - var GetRects = function() { | |
| 20:48:33 INFO - // Walk all of the elements in the DOM (try to only do this once) | |
| 20:48:33 INFO - var elements = doc.getElementsByTagName('*'); | |
| 20:48:33 INFO - var re = /url\(.*(http.*)\)/ig; | |
| 20:48:33 INFO - for (var i = 0; i < elements.length; i++) { | |
| 20:48:33 INFO - var el = elements[i]; | |
| 20:48:33 INFO - var style = win.getComputedStyle(el); | |
| 20:48:33 INFO - // check for Images | |
| 20:48:33 INFO - if (el.tagName == 'IMG') { | |
| 20:48:33 INFO - CheckElement(el, el.currentSrc || el.src); | |
| 20:48:33 INFO - } | |
| 20:48:33 INFO - // Check for background images | |
| 20:48:33 INFO - if (style['background-image']) { | |
| 20:48:33 INFO - re.lastIndex = 0; | |
| 20:48:33 INFO - var matches = re.exec(style['background-image']); | |
| 20:48:33 INFO - if (matches && matches.length > 1) | |
| 20:48:33 INFO - CheckElement(el, matches[1].replace('"', '')); | |
| 20:48:33 INFO - } | |
| 20:48:33 INFO - // recursively walk any iFrames | |
| 20:48:33 INFO - if (el.tagName == 'IFRAME') { | |
| 20:48:33 INFO - try { | |
| 20:48:33 INFO - var rect = GetElementViewportRect(el); | |
| 20:48:33 INFO - if (rect) { | |
| 20:48:33 INFO - var tm = RUMSpeedIndex(el.contentWindow); | |
| 20:48:33 INFO - if (tm) { | |
| 20:48:33 INFO - rects.push({'tm': tm, | |
| 20:48:33 INFO - 'area': rect.area, | |
| 20:48:33 INFO - 'rect': rect}); | |
| 20:48:33 INFO - } | |
| 20:48:33 INFO - } | |
| 20:48:33 INFO - } catch(e) { | |
| 20:48:33 INFO - } | |
| 20:48:33 INFO - } | |
| 20:48:33 INFO - } | |
| 20:48:33 INFO - }; | |
| 20:48:33 INFO - // Get the time at which each external resource loaded | |
| 20:48:33 INFO - var GetRectTimings = function() { | |
| 20:48:33 INFO - var timings = {}; | |
| 20:48:33 INFO - var requests = win.performance.getEntriesByType("resource"); | |
| 20:48:33 INFO - for (var i = 0; i < requests.length; i++) | |
| 20:48:33 INFO - timings[requests[i].name] = requests[i].responseEnd; | |
| 20:48:33 INFO - for (var j = 0; j < rects.length; j++) { | |
| 20:48:33 INFO - if (!('tm' in rects[j])) | |
| 20:48:33 INFO - rects[j].tm = timings[rects[j].url] !== undefined ? timings[rects[j].url] : 0; | |
| 20:48:33 INFO - } | |
| 20:48:33 INFO - }; | |
| 20:48:33 INFO - // Get the first paint time. | |
| 20:48:33 INFO - var GetFirstPaint = function() { | |
| 20:48:33 INFO - // Try the standardized paint timing api | |
| 20:48:33 INFO - try { | |
| 20:48:33 INFO - var entries = performance.getEntriesByType('paint'); | |
| 20:48:33 INFO - for (var i = 0; i < entries.length; i++) { | |
| 20:48:33 INFO - if (entries[i]['name'] == 'first-paint') { | |
| 20:48:33 INFO - navStart = performance.getEntriesByType("navigation")[0].startTime; | |
| 20:48:33 INFO - firstPaint = entries[i].startTime - navStart; | |
| 20:48:33 INFO - break; | |
| 20:48:33 INFO - } | |
| 20:48:33 INFO - } | |
| 20:48:33 INFO - } catch(e) { | |
| 20:48:33 INFO - } | |
| 20:48:33 INFO - // If the browser supports a first paint event, just use what the browser reports | |
| 20:48:33 INFO - if (firstPaint === undefined && 'msFirstPaint' in win.performance.timing) | |
| 20:48:33 INFO - firstPaint = win.performance.timing.msFirstPaint - navStart; | |
| 20:48:33 INFO - // For browsers that don't support first-paint or where we get insane values, | |
| 20:48:33 INFO - // use the time of the last non-async script or css from the head. | |
| 20:48:33 INFO - if (firstPaint === undefined || firstPaint < 0 || firstPaint > 120000) { | |
| 20:48:33 INFO - firstPaint = win.performance.timing.responseStart - navStart; | |
| 20:48:33 INFO - var headURLs = {}; | |
| 20:48:33 INFO - var headElements = doc.getElementsByTagName('head')[0].children; | |
| 20:48:33 INFO - for (var i = 0; i < headElements.length; i++) { | |
| 20:48:33 INFO - var el = headElements[i]; | |
| 20:48:33 INFO - if (el.tagName == 'SCRIPT' && el.src && !el.async) | |
| 20:48:33 INFO - headURLs[el.src] = true; | |
| 20:48:33 INFO - if (el.tagName == 'LINK' && el.rel == 'stylesheet' && el.href) | |
| 20:48:33 INFO - headURLs[el.href] = true; | |
| 20:48:33 INFO - } | |
| 20:48:33 INFO - var requests = win.performance.getEntriesByType("resource"); | |
| 20:48:33 INFO - var doneCritical = false; | |
| 20:48:33 INFO - for (var j = 0; j < requests.length; j++) { | |
| 20:48:33 INFO - if (!doneCritical && | |
| 20:48:33 INFO - headURLs[requests[j].name] && | |
| 20:48:33 INFO - (requests[j].initiatorType == 'script' || requests[j].initiatorType == 'link')) { | |
| 20:48:33 INFO - var requestEnd = requests[j].responseEnd; | |
| 20:48:33 INFO - if (firstPaint === undefined || requestEnd > firstPaint) | |
| 20:48:33 INFO - firstPaint = requestEnd; | |
| 20:48:33 INFO - } else { | |
| 20:48:33 INFO - doneCritical = true; | |
| 20:48:33 INFO - } | |
| 20:48:33 INFO - } | |
| 20:48:33 INFO - } | |
| 20:48:33 INFO - firstPaint = Math.max(firstPaint, 0); | |
| 20:48:33 INFO - }; | |
| 20:48:33 INFO - // Sort and group all of the paint rects by time and use them to | |
| 20:48:33 INFO - // calculate the visual progress | |
| 20:48:33 INFO - var CalculateVisualProgress = function() { | |
| 20:48:33 INFO - var paints = {'0':0}; | |
| 20:48:33 INFO - var total = 0; | |
| 20:48:33 INFO - for (var i = 0; i < rects.length; i++) { | |
| 20:48:33 INFO - var tm = firstPaint; | |
| 20:48:33 INFO - if ('tm' in rects[i] && rects[i].tm > firstPaint) | |
| 20:48:33 INFO - tm = rects[i].tm; | |
| 20:48:33 INFO - if (paints[tm] === undefined) | |
| 20:48:33 INFO - paints[tm] = 0; | |
| 20:48:33 INFO - paints[tm] += rects[i].area; | |
| 20:48:33 INFO - total += rects[i].area; | |
| 20:48:33 INFO - } | |
| 20:48:33 INFO - // Add a paint area for the page background (count 10% of the pixels not | |
| 20:48:33 INFO - // covered by existing paint rects. | |
| 20:48:33 INFO - var pixels = Math.max(doc.documentElement.clientWidth, win.innerWidth || 0) * | |
| 20:48:33 INFO - Math.max(doc.documentElement.clientHeight, win.innerHeight || 0); | |
| 20:48:33 INFO - if (pixels > 0 ) { | |
| 20:48:33 INFO - pixels = Math.max(pixels - total, 0) * pageBackgroundWeight; | |
| 20:48:33 INFO - if (paints[firstPaint] === undefined) | |
| 20:48:33 INFO - paints[firstPaint] = 0; | |
| 20:48:33 INFO - paints[firstPaint] += pixels; | |
| 20:48:33 INFO - total += pixels; | |
| 20:48:33 INFO - } | |
| 20:48:33 INFO - // Calculate the visual progress | |
| 20:48:33 INFO - if (total) { | |
| 20:48:33 INFO - for (var time in paints) { | |
| 20:48:33 INFO - if (paints.hasOwnProperty(time)) { | |
| 20:48:33 INFO - progress.push({'tm': time, 'area': paints[time]}); | |
| 20:48:33 INFO - } | |
| 20:48:33 INFO - } | |
| 20:48:33 INFO - progress.sort(function(a,b){return a.tm - b.tm;}); | |
| 20:48:33 INFO - var accumulated = 0; | |
| 20:48:33 INFO - for (var j = 0; j < progress.length; j++) { | |
| 20:48:33 INFO - accumulated += progress[j].area; | |
| 20:48:33 INFO - progress[j].progress = accumulated / total; | |
| 20:48:33 INFO - } | |
| 20:48:33 INFO - } | |
| 20:48:33 INFO - }; | |
| 20:48:33 INFO - // Given the visual progress information, Calculate the speed index. | |
| 20:48:33 INFO - var CalculateSpeedIndex = function() { | |
| 20:48:33 INFO - if (progress.length) { | |
| 20:48:33 INFO - SpeedIndex = 0; | |
| 20:48:33 INFO - var lastTime = 0; | |
| 20:48:33 INFO - var lastProgress = 0; | |
| 20:48:33 INFO - for (var i = 0; i < progress.length; i++) { | |
| 20:48:33 INFO - var elapsed = progress[i].tm - lastTime; | |
| 20:48:33 INFO - if (elapsed > 0 && lastProgress < 1) | |
| 20:48:33 INFO - SpeedIndex += (1 - lastProgress) * elapsed; | |
| 20:48:33 INFO - lastTime = progress[i].tm; | |
| 20:48:33 INFO - lastProgress = progress[i].progress; | |
| 20:48:33 INFO - } | |
| 20:48:33 INFO - } else { | |
| 20:48:33 INFO - SpeedIndex = firstPaint; | |
| 20:48:33 INFO - } | |
| 20:48:33 INFO - }; | |
| 20:48:33 INFO - /**************************************************************************** | |
| 20:48:33 INFO - Main flow | |
| 20:48:33 INFO - ****************************************************************************/ | |
| 20:48:33 INFO - var rects = []; | |
| 20:48:33 INFO - var progress = []; | |
| 20:48:33 INFO - var firstPaint; | |
| 20:48:33 INFO - var SpeedIndex; | |
| 20:48:33 INFO - var pageBackgroundWeight = 0.1; | |
| 20:48:33 INFO - try { | |
| 20:48:33 INFO - var navStart = win.performance.timing.navigationStart; | |
| 20:48:33 INFO - GetRects(); | |
| 20:48:33 INFO - GetRectTimings(); | |
| 20:48:33 INFO - GetFirstPaint(); | |
| 20:48:33 INFO - CalculateVisualProgress(); | |
| 20:48:33 INFO - CalculateSpeedIndex(); | |
| 20:48:33 INFO - } catch(e) { | |
| 20:48:33 INFO - } | |
| 20:48:33 INFO - /* Debug output for testing | |
| 20:48:33 INFO - var dbg = ''; | |
| 20:48:33 INFO - dbg += "Paint Rects\n"; | |
| 20:48:33 INFO - for (var i = 0; i < rects.length; i++) | |
| 20:48:33 INFO - dbg += '(' + rects[i].area + ') ' + rects[i].tm + ' - ' + rects[i].url + "\n"; | |
| 20:48:33 INFO - dbg += "Visual Progress\n"; | |
| 20:48:33 INFO - for (var i = 0; i < progress.length; i++) | |
| 20:48:33 INFO - dbg += '(' + progress[i].area + ') ' + progress[i].tm + ' - ' + progress[i].progress + "\n"; | |
| 20:48:33 INFO - dbg += 'First Paint: ' + firstPaint + "\n"; | |
| 20:48:33 INFO - dbg += 'Speed Index: ' + SpeedIndex + "\n"; | |
| 20:48:33 INFO - console.log(dbg); | |
| 20:48:33 INFO - */ | |
| 20:48:33 INFO - return Number(SpeedIndex.toFixed(0)); | |
| 20:48:33 INFO - }; | |
| 20:48:33 INFO - return RUMSpeedIndex()|| -1; | |
| 20:48:33 INFO - })(); | |
| 20:48:33 INFO - 1576615713746 webdriver::server DEBUG -> POST /session/5496a31a-1b44-e34c-ac13-769a37e9aec1/execute/sync {"script":"return (function() {\n /******************************************************************************\n Copyright (c) 2014, Google Inc.\n All rights reserved.\n \n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n \n * Redistributions of source code must retain the above copyright notice,\n this list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n * Neither the name of the <ORGANIZATION> nor the names of its contributors\n may be used to endorse or promote products derived from this software\n without specific prior written permission.\n \n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n ******************************************************************************/\n \n /******************************************************************************\n *******************************************************************************\n Calculates the Speed Index for a page by:\n - Collecting a list of visible rectangles for elements that loaded\n external resources (images, background images, fonts)\n - Gets the time when the external resource for those elements loaded\n through Resource Timing\n - Calculates the likely time that the background painted\n - Runs the various paint rectangles through the SpeedIndex calculation:\n https://sites.google.com/a/webpagetest.org/docs/using-webpagetest/metrics/speed-index\n \n TODO:\n - Improve the start render estimate\n - Handle overlapping rects (though maybe counting the area as multiple paints\n will work out well)\n - Detect elements with Custom fonts and the time that the respective font\n loaded\n - Better error handling for browsers that don't support resource timing\n *******************************************************************************\n ******************************************************************************/\n \n var RUMSpeedIndex = function(win) {\n win = win || window;\n var doc = win.document;\n \n /****************************************************************************\n Support Routines\n ****************************************************************************/\n // Get the rect for the visible portion of the provided DOM element\n var GetElementViewportRect = function(el) {\n var intersect = false;\n if (el.getBoundingClientRect) {\n var elRect = el.getBoundingClientRect();\n intersect = {'top': Math.max(elRect.top, 0),\n 'left': Math.max(elRect.left, 0),\n 'bottom': Math.min(elRect.bottom, (win.innerHeight || doc.documentElement.clientHeight)),\n 'right': Math.min(elRect.right, (win.innerWidth || doc.documentElement.clientWidth))};\n if (intersect.bottom <= intersect.top ||\n intersect.right <= intersect.left) {\n intersect = false;\n } else {\n intersect.area = (intersect.bottom - intersect.top) * (intersect.right - intersect.left);\n }\n }\n return intersect;\n };\n \n // Check a given element to see if it is visible\n var CheckElement = function(el, url) {\n if (url) {\n var rect = GetElementViewportRect(el);\n if (rect) {\n rects.push({'url': url,\n 'area': rect.area,\n 'rect': rect});\n }\n }\n };\n \n // Get the visible rectangles for elements that we care about\n var GetRects = function() {\n // Walk all of the elements in the DOM (try to only do this once)\n var elements = doc.getElementsByTagName('*');\n var re = /url\\(.*(http.*)\\)/ig;\n for (var i = 0; i < elements.length; i++) {\n var el = elements[i];\n var style = win.getComputedStyle(el);\n \n // check for Images\n if (el.tagName == 'IMG') {\n CheckElement(el, el.currentSrc || el.src);\n }\n // Check for background images\n if (style['background-image']) {\n re.lastIndex = 0;\n var matches = re.exec(style['background-image']);\n if (matches && matches.length > 1)\n CheckElement(el, matches[1].replace('\"', ''));\n }\n // recursively walk any iFrames\n if (el.tagName == 'IFRAME') {\n try {\n var rect = GetElementViewportRect(el);\n if (rect) {\n var tm = RUMSpeedIndex(el.contentWindow);\n if (tm) {\n rects.push({'tm': tm,\n 'area': rect.area,\n 'rect': rect});\n }\n }\n } catch(e) {\n }\n }\n }\n };\n \n // Get the time at which each external resource loaded\n var GetRectTimings = function() {\n var timings = {};\n var requests = win.performance.getEntriesByType(\"resource\");\n for (var i = 0; i < requests.length; i++)\n timings[requests[i].name] = requests[i].responseEnd;\n for (var j = 0; j < rects.length; j++) {\n if (!('tm' in rects[j]))\n rects[j].tm = timings[rects[j].url] !== undefined ? timings[rects[j].url] : 0;\n }\n };\n \n // Get the first paint time.\n var GetFirstPaint = function() {\n // Try the standardized paint timing api\n try {\n var entries = performance.getEntriesByType('paint');\n for (var i = 0; i < entries.length; i++) {\n if (entries[i]['name'] == 'first-paint') {\n navStart = performance.getEntriesByType(\"navigation\")[0].startTime;\n firstPaint = entries[i].startTime - navStart;\n break;\n }\n }\n } catch(e) {\n }\n // If the browser supports a first paint event, just use what the browser reports\n if (firstPaint === undefined && 'msFirstPaint' in win.performance.timing)\n firstPaint = win.performance.timing.msFirstPaint - navStart;\n // For browsers that don't support first-paint or where we get insane values,\n // use the time of the last non-async script or css from the head.\n if (firstPaint === undefined || firstPaint < 0 || firstPaint > 120000) {\n firstPaint = win.performance.timing.responseStart - navStart;\n var headURLs = {};\n var headElements = doc.getElementsByTagName('head')[0].children;\n for (var i = 0; i < headElements.length; i++) {\n var el = headElements[i];\n if (el.tagName == 'SCRIPT' && el.src && !el.async)\n headURLs[el.src] = true;\n if (el.tagName == 'LINK' && el.rel == 'stylesheet' && el.href)\n headURLs[el.href] = true;\n }\n var requests = win.performance.getEntriesByType(\"resource\");\n var doneCritical = false;\n for (var j = 0; j < requests.length; j++) {\n if (!doneCritical &&\n headURLs[requests[j].name] &&\n (requests[j].initiatorType == 'script' || requests[j].initiatorType == 'link')) {\n var requestEnd = requests[j].responseEnd;\n if (firstPaint === undefined || requestEnd > firstPaint)\n firstPaint = requestEnd;\n } else {\n doneCritical = true;\n }\n }\n }\n firstPaint = Math.max(firstPaint, 0);\n };\n \n // Sort and group all of the paint rects by time and use them to\n // calculate the visual progress\n var CalculateVisualProgress = function() {\n var paints = {'0':0};\n var total = 0;\n for (var i = 0; i < rects.length; i++) {\n var tm = firstPaint;\n if ('tm' in rects[i] && rects[i].tm > firstPaint)\n tm = rects[i].tm;\n if (paints[tm] === undefined)\n paints[tm] = 0;\n paints[tm] += rects[i].area;\n total += rects[i].area;\n }\n // Add a paint area for the page background (count 10% of the pixels not\n // covered by existing paint rects.\n var pixels = Math.max(doc.documentElement.clientWidth, win.innerWidth || 0) *\n Math.max(doc.documentElement.clientHeight, win.innerHeight || 0);\n if (pixels > 0 ) {\n pixels = Math.max(pixels - total, 0) * pageBackgroundWeight;\n if (paints[firstPaint] === undefined)\n paints[firstPaint] = 0;\n paints[firstPaint] += pixels;\n total += pixels;\n }\n // Calculate the visual progress\n if (total) {\n for (var time in paints) {\n if (paints.hasOwnProperty(time)) {\n progress.push({'tm': time, 'area': paints[time]});\n }\n }\n progress.sort(function(a,b){return a.tm - b.tm;});\n var accumulated = 0;\n for (var j = 0; j < progress.length; j++) {\n accumulated += progress[j].area;\n progress[j].progress = accumulated / total;\n }\n }\n };\n \n // Given the visual progress information, Calculate the speed index.\n var CalculateSpeedIndex = function() {\n if (progress.length) {\n SpeedIndex = 0;\n var lastTime = 0;\n var lastProgress = 0;\n for (var i = 0; i < progress.length; i++) {\n var elapsed = progress[i].tm - lastTime;\n if (elapsed > 0 && lastProgress < 1)\n SpeedIndex += (1 - lastProgress) * elapsed;\n lastTime = progress[i].tm;\n lastProgress = progress[i].progress;\n }\n } else {\n SpeedIndex = firstPaint;\n }\n };\n \n /****************************************************************************\n Main flow\n ****************************************************************************/\n var rects = [];\n var progress = [];\n var firstPaint;\n var SpeedIndex;\n var pageBackgroundWeight = 0.1;\n try {\n var navStart = win.performance.timing.navigationStart;\n GetRects();\n GetRectTimings();\n GetFirstPaint();\n CalculateVisualProgress();\n CalculateSpeedIndex();\n } catch(e) {\n }\n /* Debug output for testing\n var dbg = '';\n dbg += \"Paint Rects\\n\";\n for (var i = 0; i < rects.length; i++)\n dbg += '(' + rects[i].area + ') ' + rects[i].tm + ' - ' + rects[i].url + \"\\n\";\n dbg += \"Visual Progress\\n\";\n for (var i = 0; i < progress.length; i++)\n dbg += '(' + progress[i].area + ') ' + progress[i].tm + ' - ' + progress[i].progress + \"\\n\";\n dbg += 'First Paint: ' + firstPaint + \"\\n\";\n dbg += 'Speed Index: ' + SpeedIndex + \"\\n\";\n console.log(dbg);\n */\n return Number(SpeedIndex.toFixed(0));\n };\n \n return RUMSpeedIndex()|| -1;\n })();","args":[null]} | |
| 20:48:33 INFO - 1576615713747 Marionette DEBUG 0 -> [0,49,"WebDriver:ExecuteScript",{"args":[null],"script":"return (function() {\n /******************************************* ... console.log(dbg);\n */\n return Number(SpeedIndex.toFixed(0));\n };\n \n return RUMSpeedIndex()|| -1;\n })();"}] | |
| 20:48:33 INFO - 1576615713935 Marionette DEBUG 0 <- [1,49,null,{"value":454}] | |
| 20:48:33 INFO - 1576615713935 webdriver::server DEBUG <- 200 OK {"value":454} | |
| 20:48:33 INFO - [2019-12-17 12:48:33] VERBOSE: [browsertime] Executing script return (function () { | |
| 20:48:33 INFO - // https://developer.mozilla.org/en-US/docs/Web/API/PerformanceServerTiming | |
| 20:48:33 INFO - const entries = window.performance.getEntriesByType('resource'); | |
| 20:48:33 INFO - if (entries.length > 0 && entries[0].serverTiming) { | |
| 20:48:33 INFO - const timings = entries[0].serverTiming; | |
| 20:48:33 INFO - const serverTimings = []; | |
| 20:48:33 INFO - for (let timing of timings) { | |
| 20:48:33 INFO - serverTimings.push({ | |
| 20:48:33 INFO - name: timing.name, | |
| 20:48:33 INFO - duration: timing.duration, | |
| 20:48:33 INFO - description: timing.description | |
| 20:48:33 INFO - }); | |
| 20:48:33 INFO - } | |
| 20:48:33 INFO - return serverTimings; | |
| 20:48:33 INFO - } else return undefined; | |
| 20:48:33 INFO - })(); | |
| 20:48:33 INFO - 1576615713937 webdriver::server DEBUG -> POST /session/5496a31a-1b44-e34c-ac13-769a37e9aec1/execute/sync {"script":"return (function () {\n // https://developer.mozilla.org/en-US/docs/Web/API/PerformanceServerTiming\n const entries = window.performance.getEntriesByType('resource');\n if (entries.length > 0 && entries[0].serverTiming) {\n const timings = entries[0].serverTiming;\n const serverTimings = [];\n for (let timing of timings) {\n serverTimings.push({\n name: timing.name,\n duration: timing.duration,\n description: timing.description\n });\n }\n return serverTimings;\n } else return undefined;\n})();\n","args":[null]} | |
| 20:48:33 INFO - 1576615713938 Marionette DEBUG 0 -> [0,50,"WebDriver:ExecuteScript",{"args":[null],"script":"return (function () {\n // https://developer.mozilla.org/en-US/do ... ion: timing.description\n });\n }\n return serverTimings;\n } else return undefined;\n})();\n"}] | |
| 20:48:33 INFO - 1576615713941 Marionette DEBUG 0 <- [1,50,null,{"value":[]}] | |
| 20:48:33 INFO - 1576615713941 webdriver::server DEBUG <- 200 OK {"value":[]} | |
| 20:48:33 INFO - [2019-12-17 12:48:33] VERBOSE: [browsertime] Executing script return (function () { | |
| 20:48:33 INFO - // Firefox only timeToContentfulPaint | |
| 20:48:33 INFO - // need pref to be activated | |
| 20:48:33 INFO - const timing = window.performance.timing; | |
| 20:48:33 INFO - if (timing.timeToContentfulPaint) { | |
| 20:48:33 INFO - return Number( | |
| 20:48:33 INFO - (timing.timeToContentfulPaint - timing.navigationStart).toFixed(0) | |
| 20:48:33 INFO - ); | |
| 20:48:33 INFO - } | |
| 20:48:33 INFO - else return undefined; | |
| 20:48:33 INFO - })(); | |
| 20:48:33 INFO - 1576615713942 webdriver::server DEBUG -> POST /session/5496a31a-1b44-e34c-ac13-769a37e9aec1/execute/sync {"script":"return (function () {\n // Firefox only timeToContentfulPaint\n // need pref to be activated\n const timing = window.performance.timing;\n if (timing.timeToContentfulPaint) {\n return Number(\n (timing.timeToContentfulPaint - timing.navigationStart).toFixed(0)\n );\n }\n else return undefined;\n})();\n","args":[null]} | |
| 20:48:33 INFO - 1576615713943 Marionette DEBUG 0 -> [0,51,"WebDriver:ExecuteScript",{"args":[null],"script":"return (function () {\n // Firefox only timeToContentfulPaint\n ... timeToContentfulPaint - timing.navigationStart).toFixed(0)\n );\n }\n else return undefined;\n})();\n"}] | |
| 20:48:33 INFO - 1576615713945 Marionette DEBUG 0 <- [1,51,null,{"value":975}] | |
| 20:48:33 INFO - 1576615713945 webdriver::server DEBUG <- 200 OK {"value":975} | |
| 20:48:33 INFO - [2019-12-17 12:48:33] VERBOSE: [browsertime] Executing script return (function () { | |
| 20:48:33 INFO - // Firefox only timeToDOMContentFlushed | |
| 20:48:33 INFO - // need pref to be activated | |
| 20:48:33 INFO - const timing = window.performance.timing; | |
| 20:48:33 INFO - if (timing.timeToDOMContentFlushed) { | |
| 20:48:33 INFO - return Number( | |
| 20:48:33 INFO - (timing.timeToDOMContentFlushed - timing.navigationStart).toFixed(0) | |
| 20:48:33 INFO - ); | |
| 20:48:33 INFO - } | |
| 20:48:33 INFO - else return undefined; | |
| 20:48:33 INFO - })(); | |
| 20:48:33 INFO - 1576615713946 webdriver::server DEBUG -> POST /session/5496a31a-1b44-e34c-ac13-769a37e9aec1/execute/sync {"script":"return (function () {\n // Firefox only timeToDOMContentFlushed\n // need pref to be activated\n const timing = window.performance.timing;\n if (timing.timeToDOMContentFlushed) {\n return Number(\n (timing.timeToDOMContentFlushed - timing.navigationStart).toFixed(0)\n );\n }\n else return undefined;\n})();\n","args":[null]} | |
| 20:48:33 INFO - 1576615713947 Marionette DEBUG 0 -> [0,52,"WebDriver:ExecuteScript",{"args":[null],"script":"return (function () {\n // Firefox only timeToDOMContentFlushed\n ... meToDOMContentFlushed - timing.navigationStart).toFixed(0)\n );\n }\n else return undefined;\n})();\n"}] | |
| 20:48:33 INFO - 1576615713949 Marionette DEBUG 0 <- [1,52,null,{"value":1087}] | |
| 20:48:33 INFO - 1576615713949 webdriver::server DEBUG <- 200 OK {"value":1087} | |
| 20:48:33 INFO - [2019-12-17 12:48:33] VERBOSE: [browsertime] Executing script return (function () { | |
| 20:48:33 INFO - // Firefox only TTFI | |
| 20:48:33 INFO - // need pref to be activated | |
| 20:48:33 INFO - // If the "event" has happend, it will return 0 | |
| 20:48:33 INFO - const timing = window.performance.timing; | |
| 20:48:33 INFO - if (timing.timeToFirstInteractive && timing.timeToFirstInteractive > 0) { | |
| 20:48:33 INFO - return Number( | |
| 20:48:33 INFO - (timing.timeToFirstInteractive - timing.navigationStart).toFixed(0) | |
| 20:48:33 INFO - ); | |
| 20:48:33 INFO - } else return undefined; | |
| 20:48:33 INFO - })(); | |
| 20:48:33 INFO - 1576615713950 webdriver::server DEBUG -> POST /session/5496a31a-1b44-e34c-ac13-769a37e9aec1/execute/sync {"script":"return (function () {\n // Firefox only TTFI\n // need pref to be activated\n // If the \"event\" has happend, it will return 0\n const timing = window.performance.timing;\n if (timing.timeToFirstInteractive && timing.timeToFirstInteractive > 0) {\n return Number(\n (timing.timeToFirstInteractive - timing.navigationStart).toFixed(0)\n );\n } else return undefined;\n})();\n","args":[null]} | |
| 20:48:33 INFO - 1576615713951 Marionette DEBUG 0 -> [0,53,"WebDriver:ExecuteScript",{"args":[null],"script":"return (function () {\n // Firefox only TTFI\n // need pref to ... (timing.timeToFirstInteractive - timing.navigationStart).toFixed(0)\n );\n } else return undefined;\n})();\n"}] | |
| 20:48:33 INFO - 1576615713952 Marionette DEBUG 0 <- [1,53,null,{"value":null}] | |
| 20:48:33 INFO - 1576615713953 webdriver::server DEBUG <- 200 OK {"value":null} | |
| 20:48:33 INFO - [2019-12-17 12:48:33] VERBOSE: [browsertime] Executing script return (function() { | |
| 20:48:33 INFO - const measures = []; | |
| 20:48:33 INFO - const marks = []; | |
| 20:48:33 INFO - if (window.performance && window.performance.getEntriesByType) { | |
| 20:48:33 INFO - const myMarks = Array.prototype.slice.call( | |
| 20:48:33 INFO - window.performance.getEntriesByType('mark') | |
| 20:48:33 INFO - ); | |
| 20:48:33 INFO - for (const mark of myMarks) { | |
| 20:48:33 INFO - marks.push({ | |
| 20:48:33 INFO - name: mark.name, | |
| 20:48:33 INFO - startTime: mark.startTime | |
| 20:48:33 INFO - }); | |
| 20:48:33 INFO - } | |
| 20:48:33 INFO - const myMeasures = Array.prototype.slice.call( | |
| 20:48:33 INFO - window.performance.getEntriesByType('measure') | |
| 20:48:33 INFO - ); | |
| 20:48:33 INFO - for (const measure of myMeasures) { | |
| 20:48:33 INFO - measures.push({ | |
| 20:48:33 INFO - name: measure.name, | |
| 20:48:33 INFO - duration: measure.duration, | |
| 20:48:33 INFO - startTime: measure.startTime | |
| 20:48:33 INFO - }); | |
| 20:48:33 INFO - } | |
| 20:48:33 INFO - } | |
| 20:48:33 INFO - return { | |
| 20:48:33 INFO - marks: marks, | |
| 20:48:33 INFO - measures: measures | |
| 20:48:33 INFO - }; | |
| 20:48:33 INFO - })(); | |
| 20:48:33 INFO - 1576615713954 webdriver::server DEBUG -> POST /session/5496a31a-1b44-e34c-ac13-769a37e9aec1/execute/sync {"script":"return (function() {\n const measures = [];\n const marks = [];\n\n if (window.performance && window.performance.getEntriesByType) {\n const myMarks = Array.prototype.slice.call(\n window.performance.getEntriesByType('mark')\n );\n\n for (const mark of myMarks) {\n marks.push({\n name: mark.name,\n startTime: mark.startTime\n });\n }\n\n const myMeasures = Array.prototype.slice.call(\n window.performance.getEntriesByType('measure')\n );\n\n for (const measure of myMeasures) {\n measures.push({\n name: measure.name,\n duration: measure.duration,\n startTime: measure.startTime\n });\n }\n }\n\n return {\n marks: marks,\n measures: measures\n };\n})();\n","args":[null]} | |
| 20:48:33 INFO - 1576615713954 Marionette DEBUG 0 -> [0,54,"WebDriver:ExecuteScript",{"args":[null],"script":"return (function() {\n const measures = [];\n const marks = [];\n\ ... tartTime: measure.startTime\n });\n }\n }\n\n return {\n marks: marks,\n measures: measures\n };\n})();\n"}] | |
| 20:48:33 INFO - 1576615713956 Marionette DEBUG 0 <- [1,54,null,{"value":{"marks":[],"measures":[]}}] | |
| 20:48:33 INFO - 1576615713957 webdriver::server DEBUG <- 200 OK {"value":{"marks":[],"measures":[]}} | |
| 20:48:33 INFO - [2019-12-17 12:48:33] INFO: [browsertime] Browsertime pageload ended. | |
| 20:48:33 INFO - [2019-12-17 12:48:33] DEBUG: [browsertime] Telling browser to quit. | |
| 20:48:33 INFO - 1576615713958 webdriver::server DEBUG -> DELETE /session/5496a31a-1b44-e34c-ac13-769a37e9aec1 | |
| 20:48:33 INFO - 1576615713959 Marionette DEBUG 0 -> [0,55,"Marionette:Quit",{"flags":["eForceQuit"]}] | |
| 20:48:33 INFO - 1576615713959 Marionette INFO Stopped listening on port 55131 | |
| 20:48:34 INFO - 1576615713994 Marionette DEBUG 0 <- [1,55,null,{"cause":"shutdown"}] | |
| 20:48:34 INFO - 1576615714032 webdriver::server DEBUG Deleting session | |
| 20:48:34 INFO - 1576615714032 geckodriver::marionette WARN delete_session called Some(Session { id: "5496a31a-1b44-e34c-ac13-769a37e9aec1" }) | |
| 20:48:34 INFO - 1576615714040 Marionette DEBUG 0 -> [0,56,"Marionette:Quit",{"flags":["eForceQuit"]}] | |
| 20:48:34 INFO - 1576615714040 Marionette DEBUG 0 <- [1,56,{"error":"invalid session id","message":"Tried to run command without establishing a connection","stacktrace":"WebDrive ... t@chrome://marionette/content/server.js:249:9\n_onJSONObjectReady/<@chrome://marionette/content/transport.js:501:20\n"},null] | |
| 20:48:34 INFO - 1576615714044 Marionette DEBUG Closed connection 0 | |
| 20:48:34 INFO - 1576615714150 Marionette DEBUG Resetting recommended pref apz.content_response_timeout | |
| 20:48:34 INFO - 1576615714150 Marionette DEBUG Resetting recommended pref browser.contentblocking.introCount | |
| 20:48:34 INFO - 1576615714150 Marionette DEBUG Resetting recommended pref browser.download.panel.shown | |
| 20:48:34 INFO - 1576615714150 Marionette DEBUG Resetting recommended pref browser.tabs.disableBackgroundZombification | |
| 20:48:34 INFO - 1576615714150 Marionette DEBUG Resetting recommended pref browser.tabs.remote.separatePrivilegedContentProcess | |
| 20:48:34 INFO - 1576615714150 Marionette DEBUG Resetting recommended pref browser.tabs.unloadOnLowMemory | |
| 20:48:34 INFO - 1576615714150 Marionette DEBUG Resetting recommended pref browser.tabs.warnOnCloseOtherTabs | |
| 20:48:34 INFO - 1576615714150 Marionette DEBUG Resetting recommended pref browser.tabs.warnOnOpen | |
| 20:48:34 INFO - 1576615714150 Marionette DEBUG Resetting recommended pref browser.usedOnWindows10.introURL | |
| 20:48:34 INFO - 1576615714150 Marionette DEBUG Resetting recommended pref browser.urlbar.suggest.searches | |
| 20:48:34 INFO - 1576615714150 Marionette DEBUG Resetting recommended pref datareporting.policy.dataSubmissionPolicyAccepted | |
| 20:48:34 INFO - 1576615714150 Marionette DEBUG Resetting recommended pref dom.disable_beforeunload | |
| 20:48:34 INFO - 1576615714150 Marionette DEBUG Resetting recommended pref dom.file.createInChild | |
| 20:48:34 INFO - 1576615714151 Marionette DEBUG Resetting recommended pref extensions.getAddons.cache.enabled | |
| 20:48:34 INFO - 1576615714151 Marionette DEBUG Resetting recommended pref network.http.prompt-temp-redirect | |
| 20:48:34 INFO - 1576615714151 Marionette DEBUG Resetting recommended pref security.notification_enable_delay | |
| 20:48:34 INFO - 1576615714151 Marionette DEBUG Resetting recommended pref signon.autofillForms | |
| 20:48:34 INFO - 1576615714151 Marionette DEBUG Resetting recommended pref toolkit.cosmeticAnimations.enabled | |
| 20:48:34 INFO - 1576615714152 Marionette DEBUG Marionette stopped listening | |
| 20:48:34 INFO - 1576615714455 geckodriver::marionette DEBUG Browser process stopped: exit code: 0 | |
| 20:48:34 INFO - 1576615714475 webdriver::server DEBUG <- 200 OK {"value":null} | |
| 20:48:34 INFO - [2019-12-17 12:48:34] DEBUG: [browsertime] Telling browser to quit. | |
| 20:48:34 INFO - [2019-12-17 12:48:34] INFO: [browsertime] https://www.amazon.com/s?k=laptop&ref=nb_sb_noss_1 BackEndTime: 6 DomInteractiveTime: 1124 DomContentLoadedTime: 1148 FirstPaint: 822 PageLoadTime: 1350 | |
| 20:48:34 INFO - 1576615714488 webdriver::httpapi DEBUG Creating routes | |
| 20:48:34 INFO - 1576615714495 geckodriver DEBUG Listening on 127.0.0.1:65350 | |
| 20:48:34 INFO - 1576615714542 webdriver::server DEBUG -> GET /status | |
| 20:48:34 INFO - 1576615714542 webdriver::server DEBUG <- 200 OK {"value":{"message":"","ready":true}} | |
| 20:48:34 INFO - 1576615714544 webdriver::server DEBUG -> POST /session {"desiredCapabilities":{"browserName":"firefox","pageLoadStrategy":"normal","moz:firefoxOptions":{"binary":"/Users/sdonner/mozilla-source/mozilla-unified/obj-x86_64-apple-darwin19.2.0/dist/Nightly.app/Contents/MacOS/firefox","profile":"UEsDBAoAAAAAABGmkU8AAAAAAAAAAAAAAAALAAAAZXh0ZW5zaW9ucy9QSwMECgAAAAAAEaaRTwAAAAAAAAAAAAAAAAgAAABwcmVmcy5qc1BLAwQKAAAAAAARppFPnQSld+YrAADmKwAABwAAAHVzZXIuanN1c2VyX3ByZWYoImxheWVycy53aW5kb3dyZWNvcmRpbmcucGF0aCIsICIvVXNlcnMvc2Rvbm5lci9tb3ppbGxhLXNvdXJjZS9tb3ppbGxhLXVuaWZpZWQvdGVzdGluZy9tb3poYXJuZXNzL2J1aWxkL2Jsb2JiZXJfdXBsb2FkX2Rpci9icm93c2VydGltZS1yZXN1bHRzL2FtYXpvbi1jb2xkLyIpOwp1c2VyX3ByZWYoImFwcC51cGRhdGUuZGlzYWJsZWRGb3JUZXN0aW5nIiwgdHJ1ZSk7CnVzZXJfcHJlZigiZG9tLnBlcmZvcm1hbmNlLnRpbWVfdG9fbm9uX2JsYW5rX3BhaW50LmVuYWJsZWQiLCB0cnVlKTsKdXNlcl9wcmVmKCJkb20ucGVyZm9ybWFuY2UudGltZV90b19kb21fY29udGVudF9mbHVzaGVkLmVuYWJsZWQiLCB0cnVlKTsKdXNlcl9wcmVmKCJkb20ucGVyZm9ybWFuY2UudGltZV90b19maXJzdF9pbnRlcmFjdGl2ZS5lbmFibGVkIiwgdHJ1ZSk7CnVzZXJfcHJlZigiZG9tLnBlcmZvcm1hbmNlLnRpbWVfdG9fY29udGVudGZ1bF9wYWludC5lbmFibGVkIiwgdHJ1ZSk7CnVzZXJfcHJlZigiYnJvd3Nlci5zdGFydHVwLmhvbWVwYWdlIiwgImFib3V0OmJsYW5rIik7CnVzZXJfcHJlZigiZGV2dG9vbHMuZGV2ZWRpdGlvbi5wcm9tby5lbmFibGVkIiwgZmFsc2UpOwp1c2VyX3ByZWYoImFwcC51cGRhdGUuZW5hYmxlZCIsIGZhbHNlKTsKdXNlcl9wcmVmKCJhcHAudXBkYXRlLnVybCIsICIiKTsKdXNlcl9wcmVmKCJicm93c2VyLmFib3V0SG9tZVNuaXBwZXRzLnVwZGF0ZVVybCIsICIiKTsKdXNlcl9wcmVmKCJicm93c2VyLmJvb2ttYXJrcy5yZXN0b3JlX2RlZmF1bHRfYm9va21hcmtzIiwgZmFsc2UpOwp1c2VyX3ByZWYoImJyb3dzZXIuYm9va21hcmtzLmFkZGVkX3N0YXRpY19yb290IiwgdHJ1ZSk7CnVzZXJfcHJlZigiYnJvd3Nlci5wbGFjZXMuaW1wb3J0Qm9va21hcmtzSFRNTCIsIGZhbHNlKTsKdXNlcl9wcmVmKCJicm93c2VyLm5ld3RhYnBhZ2UuZGlyZWN0b3J5LnBpbmciLCAiIik7CnVzZXJfcHJlZigiYnJvd3Nlci5uZXd0YWJwYWdlLmRpcmVjdG9yeS5zb3VyY2UiLCAiZGF0YTphcHBsaWNhdGlvbi9qc29uLHt9Iik7CnVzZXJfcHJlZigiYnJvd3Nlci5uZXd0YWJwYWdlLmVuYWJsZWQiLCBmYWxzZSk7CnVzZXJfcHJlZigiYnJvd3Nlci5uZXd0YWJwYWdlLmVuaGFuY2VkIiwgZmFsc2UpOwp1c2VyX3ByZWYoImJyb3dzZXIubmV3dGFicGFnZS5pbnRyb1Nob3duIiwgdHJ1ZSk7CnVzZXJfcHJlZigiYnJvd3Nlci5uZXd0YWIucHJlbG9hZCIsIGZhbHNlKTsKdXNlcl9wcmVmKCJicm93c2VyLnBhZ2V0aHVtYm5haWxzLmNhcHR1cmluZ19kaXNhYmxlZCIsIHRydWUpOwp1c2VyX3ByZWYoImJyb3dzZXIucmlnaHRzLjMuc2hvd24iLCB0cnVlKTsKdXNlcl9wcmVmKCJicm93c2VyLnNlYXJjaC51cGRhdGUiLCBmYWxzZSk7CnVzZXJfcHJlZigiYnJvd3Nlci5zZXNzaW9uc3RvcmUucmVzdW1lX2Zyb21fY3Jhc2giLCBmYWxzZSk7CnVzZXJfcHJlZigiYnJvd3Nlci5zaGVsbC5jaGVja0RlZmF1bHRCcm93c2VyIiwgZmFsc2UpOwp1c2VyX3ByZWYoImJyb3dzZXIuc3RhcnR1cC5wYWdlIiwgMCk7CnVzZXJfcHJlZigiYnJvd3Nlci51aXRvdXIuZW5hYmxlZCIsIGZhbHNlKTsKdXNlcl9wcmVmKCJicm93c2VyLnRhYnMud2Fybk9uQ2xvc2UiLCBmYWxzZSk7CnVzZXJfcHJlZigiZGF0YXJlcG9ydGluZy5oZWFsdGhyZXBvcnQuc2VydmljZS5lbmFibGVkIiwgZmFsc2UpOwp1c2VyX3ByZWYoImRhdGFyZXBvcnRpbmcuaGVhbHRocmVwb3J0LnVwbG9hZEVuYWJsZWQiLCBmYWxzZSk7CnVzZXJfcHJlZigiZGF0YXJlcG9ydGluZy5oZWFsdGhyZXBvcnQuc2VydmljZS5maXJzdFJ1biIsIGZhbHNlKTsKdXNlcl9wcmVmKCJkYXRhcmVwb3J0aW5nLmhlYWx0aHJlcG9ydC5sb2dnaW5nLmNvbnNvbGVFbmFibGVkIiwgZmFsc2UpOwp1c2VyX3ByZWYoImRhdGFyZXBvcnRpbmcucG9saWN5LmRhdGFTdWJtaXNzaW9uRW5hYmxlZCIsIGZhbHNlKTsKdXNlcl9wcmVmKCJkYXRhcmVwb3J0aW5nLnBvbGljeS5kYXRhU3VibWlzc2lvblBvbGljeVJlc3BvbnNlVHlwZSIsICJhY2NlcHRlZC1pbmZvLWJhci1kaXNtaXNzZWQiKTsKdXNlcl9wcmVmKCJkYXRhcmVwb3J0aW5nLnBvbGljeS5kYXRhU3VibWlzc2lvblBvbGljeUFjY2VwdGVkIiwgZmFsc2UpOwp1c2VyX3ByZWYoImRvbS5pcGMucGx1Z2lucy5mbGFzaC5kaXNhYmxlLXByb3RlY3RlZC1tb2RlIiwgdHJ1ZSk7CnVzZXJfcHJlZigiZG9tLm1heF9jaHJvbWVfc2NyaXB0X3J1bl90aW1lIiwgMCk7CnVzZXJfcHJlZigiZG9tLm1heF9zY3JpcHRfcnVuX3RpbWUiLCAwKTsKdXNlcl9wcmVmKCJkb20ud2Vibm90aWZpY2F0aW9ucy5lbmFibGVkIiwgZmFsc2UpOwp1c2VyX3ByZWYoImV4dGVuc2lvbnMuY2hlY2tDb21wYXRpYmlsaXR5IiwgZmFsc2UpOwp1c2VyX3ByZWYoImV4dGVuc2lvbnMudXBkYXRlLmVuYWJsZWQiLCBmYWxzZSk7CnVzZXJfcHJlZigiZXh0ZW5zaW9ucy51cGRhdGUubm90aWZ5VXNlciIsIGZhbHNlKTsKdXNlcl9wcmVmKCJleHRlbnNpb25zLnNob3duU2VsZWN0aW9uVUkiLCB0cnVlKTsKdXNlcl9wcmVmKCJleHRlbnNpb25zLmF1dG9EaXNhYmxlU2NvcGVzIiwgMTApOwp1c2VyX3ByZWYoImV4dGVuc2lvbnMuc2hpZWxkLXJlY2lwZS1jbGllbnQuZW5hYmxlZCIsIGZhbHNlKTsKdXNlcl9wcmVmKCJleHRlbnNpb25zLnN5c3RlbUFkZG9uLnVwZGF0ZS51cmwiLCAiaHR0cDovLzEyNy4wLjAuMS9kdW1teS1zeXN0ZW0tYWRkb25zLnhtbCIpOwp1c2VyX3ByZWYoImludGwuY2hhcnNldG1lbnUuYnJvd3Nlci5jYWNoZSIsICJVVEYtOCIpOwp1c2VyX3ByZWYoIm1lZGlhLmdtcC1nbXBvcGVuaDI2NC5hdXRvdXBkYXRlIiwgZmFsc2UpOwp1c2VyX3ByZWYoIm5ldHdvcmsuY29va2llLnByZWZzTWlncmF0ZWQiLCB0cnVlKTsKdXNlcl9wcmVmKCJuZXR3b3JrLnByb3h5LnR5cGUiLCAwKTsKdXNlcl9wcmVmKCJwYWdlVGh1bWJzLmVuYWJsZWQiLCBmYWxzZSk7CnVzZXJfcHJlZigicHJlZi5icm93c2VyLmhvbWVwYWdlLmRpc2FibGVfYnV0dG9uLmN1cnJlbnRfcGFnZSIsIGZhbHNlKTsKdXNlcl9wcmVmKCJwcml2YWN5LmNwZC5zaXRlU2V0dGluZ3MiLCB0cnVlKTsKdXNlcl9wcmVmKCJwcml2YWN5LnNhbml0aXplLm1pZ3JhdGVGeDNQcmVmcyIsIHRydWUpOwp1c2VyX3ByZWYoInByaXZhY3kuc2FuaXRpemUudGltZVNwYW4iLCAwKTsKdXNlcl9wcmVmKCJyZWFkZXIucGFyc2Utb24tbG9hZC5lbmFibGVkIiwgZmFsc2UpOwp1c2VyX3ByZWYoInNlY3VyaXR5LmVuYWJsZV9qYXZhIiwgZmFsc2UpOwp1c2VyX3ByZWYoInNlY3VyaXR5Lndhcm5fZW50ZXJpbmdfd2VhayIsIGZhbHNlKTsKdXNlcl9wcmVmKCJzZWN1cml0eS53YXJuX3ZpZXdpbmdfbWl4ZWQiLCBmYWxzZSk7CnVzZXJfcHJlZigic2VjdXJpdHkud2Fybl9lbnRlcmluZ19zZWN1cmUiLCBmYWxzZSk7CnVzZXJfcHJlZigic2VjdXJpdHkud2Fybl9sZWF2aW5nX3NlY3VyZSIsIGZhbHNlKTsKdXNlcl9wcmVmKCJzZWN1cml0eS53YXJuX3N1Ym1pdF9pbnNlY3VyZSIsIGZhbHNlKTsKdXNlcl9wcmVmKCJzZXJ2aWNlcy5zeW5jLm1pZ3JhdGVkIiwgdHJ1ZSk7CnVzZXJfcHJlZigic2VydmljZXMuc3luYy5lbmdpbmUuYm9va21hcmtzIiwgZmFsc2UpOwp1c2VyX3ByZWYoInRvb2xraXQudGVsZW1ldHJ5LnNlcnZlciIsICJodHRwczovLzEyNy4wLjAuMS90ZWxlbWV0cnktZHVtbXkvIik7CnVzZXJfcHJlZigidG9vbGtpdC5jb250ZW50LWJhY2tncm91bmQtaGFuZy1tb25pdG9yLmRpc2FibGVkIiwgdHJ1ZSk7CnVzZXJfcHJlZigiZ2Z4LndlYnJlbmRlci5mb3JjZS1kaXNhYmxlZCIsIHRydWUpOwp1c2VyX3ByZWYoInhwaW5zdGFsbC53aGl0ZWxpc3QuYWRkIiwgIiIpOwp1c2VyX3ByZWYoInhwaW5zdGFsbC53aGl0ZWxpc3QuYWRkLjM2IiwgIiIpOwp1c2VyX3ByZWYoInhwaW5zdGFsbC5zaWduYXR1cmVzLnJlcXVpcmVkIiwgZmFsc2UpOwp1c2VyX3ByZWYoInNpZ25vbi5yZW1lbWJlclNpZ25vbnMiLCBmYWxzZSk7CnVzZXJfcHJlZigiamF2YXNjcmlwdC5vcHRpb25zLmFzeW5jc3RhY2siLCBmYWxzZSk7CnVzZXJfcHJlZigiamF2YXNjcmlwdC5vcHRpb25zLnNob3dJbkNvbnNvbGUiLCB0cnVlKTsKdXNlcl9wcmVmKCJkZXZ0b29scy5jaHJvbWUuZW5hYmxlZCIsIGZhbHNlKTsKdXNlcl9wcmVmKCJkZXZ0b29scy5kZWJ1Z2dlci5yZW1vdGUtZW5hYmxlZCIsIGZhbHNlKTsKdXNlcl9wcmVmKCJkZXZ0b29scy5zb3VyY2VtYXAubG9jYXRpb25zLmVuYWJsZWQiLCBmYWxzZSk7CnVzZXJfcHJlZigiZG9tLnB1c2guc2VydmVyVVJMIiwgIiIpOwp1c2VyX3ByZWYoImFwcC51cGRhdGUuY2hlY2tJbnN0YWxsVGltZSIsIGZhbHNlKTsKdXNlcl9wcmVmKCJicm93c2VyLmNocm9tZS5ndWVzc19mYXZpY29uIiwgZmFsc2UpOwp1c2VyX3ByZWYoImJyb3dzZXIuZG9tLndpbmRvdy5kdW1wLmVuYWJsZWQiLCB0cnVlKTsKdXNlcl9wcmVmKCJkZXZ0b29scy5jb25zb2xlLnN0ZG91dC5jaHJvbWUiLCB0cnVlKTsKdXNlcl9wcmVmKCJicm93c2VyLm5ld3RhYnBhZ2UuYWN0aXZpdHktc3RyZWFtLmFzcm91dGVyLnByb3ZpZGVycy5jZnIiLCAiW10iKTsKdXNlcl9wcmVmKCJicm93c2VyLm5ld3RhYnBhZ2UuYWN0aXZpdHktc3RyZWFtLmFzcm91dGVyLnByb3ZpZGVycy5jZnItZnhhIiwgIltdIik7CnVzZXJfcHJlZigiYnJvd3Nlci5uZXd0YWJwYWdlLmFjdGl2aXR5LXN0cmVhbS5hc3JvdXRlci5wcm92aWRlcnMuc25pcHBldHMiLCAiW10iKTsKdXNlcl9wcmVmKCJicm93c2VyLm5ld3RhYnBhZ2UuYWN0aXZpdHktc3RyZWFtLmZlZWRzLnNlY3Rpb24udG9wc3RvcmllcyIsIGZhbHNlKTsKdXNlcl9wcmVmKCJicm93c2VyLm5ld3RhYnBhZ2UuYWN0aXZpdHktc3RyZWFtLmZlZWRzLnNuaXBwZXRzIiwgZmFsc2UpOwp1c2VyX3ByZWYoImJyb3dzZXIubmV3dGFicGFnZS5hY3Rpdml0eS1zdHJlYW0udGlwcHlUb3Auc2VydmljZS5lbmRwb2ludCIsICIiKTsKdXNlcl9wcmVmKCJicm93c2VyLm5ld3RhYnBhZ2UuYWN0aXZpdHktc3RyZWFtLmRpc2NvdmVyeXN0cmVhbS5jb25maWciLCAiW10iKTsKdXNlcl9wcmVmKCJicm93c2VyLm5ld3RhYnBhZ2UuYWN0aXZpdHktc3RyZWFtLmZ4YWNjb3VudHMuZW5kcG9pbnQiLCAiIik7CnVzZXJfcHJlZigiYnJvd3Nlci5zZWFyY2gucmVnaW9uIiwgIlVTIik7CnVzZXJfcHJlZigiYnJvd3Nlci5zZWFyY2guZ2VvU3BlY2lmaWNEZWZhdWx0cyIsIGZhbHNlKTsKdXNlcl9wcmVmKCJicm93c2VyLndlYmFwcHMuY2hlY2tGb3JVcGRhdGVzIiwgMCk7CnVzZXJfcHJlZigiZGF0YXJlcG9ydGluZy5wb2xpY3kuZGF0YVN1Ym1pc3Npb25Qb2xpY3lCeXBhc3NOb3RpZmljYXRpb24iLCB0cnVlKTsKdXNlcl9wcmVmKCJkb20uc2VuZF9hZnRlcl9wYWludF90b19jb250ZW50IiwgdHJ1ZSk7CnVzZXJfcHJlZigiZXh0ZW5zaW9ucy5lbmFibGVkU2NvcGVzIiwgNSk7CnVzZXJfcHJlZigiZXh0ZW5zaW9ucy5sZWdhY3kuZW5hYmxlZCIsIHRydWUpOwp1c2VyX3ByZWYoImV4dGVuc2lvbnMuZ2V0QWRkb25zLmRpc2NvdmVyeS5hcGlfdXJsIiwgImRhdGE6O2Jhc2U2NCxleUp5WlhOMWJIUnpJanBiWFgwJTNEIik7CnVzZXJfcHJlZigiZXh0ZW5zaW9ucy53ZWJleHRlbnNpb25zLndhcm5pbmdzLWFzLWVycm9ycyIsIHRydWUpOwp1c2VyX3ByZWYoImdlbmVyYWwudXNlcmFnZW50LnVwZGF0ZXMuZW5hYmxlZCIsIGZhbHNlKTsKdXNlcl9wcmVmKCJnZngud2VicmVuZGVyLmFsbC5xdWFsaWZpZWQiLCBmYWxzZSk7CnVzZXJfcHJlZigiaGFuZ21vbml0b3IudGltZW91dCIsIDApOwp1c2VyX3ByZWYoIm1lZGlhLmdtcC1tYW5hZ2VyLnVwZGF0ZUVuYWJsZWQiLCBmYWxzZSk7CnVzZXJfcHJlZigic2VjdXJpdHkuY2VydGVycm9ycy5taXRtLnByaW1pbmcuZW5hYmxlZCIsIGZhbHNlKTsKdXNlcl9wcmVmKCJzZWN1cml0eS50dXJuX29mZl9hbGxfc2VjdXJpdHlfc29fdGhhdF92aXJ1c2VzX2Nhbl90YWtlX292ZXJfdGhpc19jb21wdXRlciIsIHRydWUpOwp1c2VyX3ByZWYoInNlcnZpY2VzLnNldHRpbmdzLnNlcnZlciIsICJodHRwOi8vbG9jYWxob3N0L3JlbW90ZS1zZXR0aW5ncy1kdW1teS92MSIpOwp1c2VyX3ByZWYoIm1lZGlhLmF1dG9wbGF5LmRlZmF1bHQiLCAwKTsKdXNlcl9wcmVmKCJtZWRpYS5hdXRvcGxheS5lbmFibGVkLnVzZXItZ2VzdHVyZXMtbmVlZGVkIiwgdHJ1ZSk7CnVzZXJfcHJlZigibWVkaWEuYXV0b3BsYXkuYXNrLXBlcm1pc3Npb24iLCBmYWxzZSk7CnVzZXJfcHJlZigibWVkaWEuYXV0b3BsYXkuYmxvY2std2ViYXVkaW8iLCBmYWxzZSk7CnVzZXJfcHJlZigibWVkaWEuYWxsb3dlZC10by1wbGF5LmVuYWJsZWQiLCB0cnVlKTsKdXNlcl9wcmVmKCJtZWRpYS5ibG9jay1hdXRvcGxheS11bnRpbC1pbi1mb3JlZ3JvdW5kIiwgZmFsc2UpOwp1c2VyX3ByZWYoInRvb2xraXQudGVsZW1ldHJ5LmNvdmVyYWdlLmVuZHBvaW50LmJhc2UiLCAiaHR0cDovL2xvY2FsaG9zdCIpOwp1c2VyX3ByZWYoIm1lZGlhLmdlY2tvdmlldy5hdXRvcGxheS5yZXF1ZXN0IiwgZmFsc2UpOwp1c2VyX3ByZWYoImFwcC5ub3JtYW5keS5hcGlfdXJsIiwgImh0dHBzOi8vMTI3LjAuMC4xL3NlbGZzdXBwb3J0LWR1bW15LyIpOwp1c2VyX3ByZWYoImJyb3dzZXIuRVVMQS5vdmVycmlkZSIsIHRydWUpOwp1c2VyX3ByZWYoImJyb3dzZXIuYWRkb24td2F0Y2guaW50ZXJ2YWwiLCAtMSk7CnVzZXJfcHJlZigiYnJvd3Nlci5ib29rbWFya3MubWF4X2JhY2t1cHMiLCAwKTsKdXNlcl9wcmVmKCJicm93c2VyLmNhY2hlLmRpc2suc21hcnRfc2l6ZS5lbmFibGVkIiwgZmFsc2UpOwp1c2VyX3ByZWYoImJyb3dzZXIuY2hyb21lLmR5bmFtaWN0b29sYmFyIiwgZmFsc2UpOwp1c2VyX3ByZWYoImJyb3dzZXIuY29udGVudEhhbmRsZXJzLnR5cGVzLjAudXJpIiwgImh0dHA6Ly8xMjcuMC4wLjEvcnNzP3VybD0lcyIpOwp1c2VyX3ByZWYoImJyb3dzZXIuY29udGVudEhhbmRsZXJzLnR5cGVzLjEudXJpIiwgImh0dHA6Ly8xMjcuMC4wLjEvcnNzP3VybD0lcyIpOwp1c2VyX3ByZWYoImJyb3dzZXIuY29udGVudEhhbmRsZXJzLnR5cGVzLjIudXJpIiwgImh0dHA6Ly8xMjcuMC4wLjEvcnNzP3VybD0lcyIpOwp1c2VyX3ByZWYoImJyb3dzZXIuY29udGVudEhhbmRsZXJzLnR5cGVzLjMudXJpIiwgImh0dHA6Ly8xMjcuMC4wLjEvcnNzP3VybD0lcyIpOwp1c2VyX3ByZWYoImJyb3dzZXIuY29udGVudEhhbmRsZXJzLnR5cGVzLjQudXJpIiwgImh0dHA6Ly8xMjcuMC4wLjEvcnNzP3VybD0lcyIpOwp1c2VyX3ByZWYoImJyb3dzZXIuY29udGVudEhhbmRsZXJzLnR5cGVzLjUudXJpIiwgImh0dHA6Ly8xMjcuMC4wLjEvcnNzP3VybD0lcyIpOwp1c2VyX3ByZWYoImJyb3dzZXIubGluay5vcGVuX25ld3dpbmRvdyIsIDIpOwp1c2VyX3ByZWYoImJyb3dzZXIubmV3dGFicGFnZS5hY3Rpdml0eS1zdHJlYW0uZGVmYXVsdC5zaXRlcyIsICIiKTsKdXNlcl9wcmVmKCJicm93c2VyLm5ld3RhYnBhZ2UuYWN0aXZpdHktc3RyZWFtLnRlbGVtZXRyeSIsIGZhbHNlKTsKdXNlcl9wcmVmKCJicm93c2VyLnJlYWRlci5kZXRlY3RlZEZpcnN0QXJ0aWNsZSIsIHRydWUpOwp1c2VyX3ByZWYoImJyb3dzZXIuc2FmZWJyb3dzaW5nLmJsb2NrZWRVUklzLmVuYWJsZWQiLCBmYWxzZSk7CnVzZXJfcHJlZigiYnJvd3Nlci5zYWZlYnJvd3NpbmcuZG93bmxvYWRzLmVuYWJsZWQiLCBmYWxzZSk7CnVzZXJfcHJlZigiYnJvd3Nlci5zYWZlYnJvd3NpbmcuZG93bmxvYWRzLnJlbW90ZS51cmwiLCAiaHR0cDovLzEyNy4wLjAuMS9zYWZlYnJvd3NpbmctZHVtbXkvZG93bmxvYWRzIik7CnVzZXJfcHJlZigiYnJvd3Nlci5zYWZlYnJvd3NpbmcubWFsd2FyZS5lbmFibGVkIiwgZmFsc2UpOwp1c2VyX3ByZWYoImJyb3dzZXIuc2FmZWJyb3dzaW5nLnBhc3N3b3Jkcy5lbmFibGVkIiwgZmFsc2UpOwp1c2VyX3ByZWYoImJyb3dzZXIuc2FmZWJyb3dzaW5nLnBoaXNoaW5nLmVuYWJsZWQiLCBmYWxzZSk7CnVzZXJfcHJlZigiYnJvd3Nlci5zYWZlYnJvd3NpbmcucHJvdmlkZXIuZ29vZ2xlLmdldGhhc2hVUkwiLCAiaHR0cDovLzEyNy4wLjAuMS9zYWZlYnJvd3NpbmctZHVtbXkvZ2V0aGFzaCIpOwp1c2VyX3ByZWYoImJyb3dzZXIuc2FmZWJyb3dzaW5nLnByb3ZpZGVyLmdvb2dsZS51cGRhdGVVUkwiLCAiaHR0cDovLzEyNy4wLjAuMS9zYWZlYnJvd3NpbmctZHVtbXkvdXBkYXRlIik7CnVzZXJfcHJlZigiYnJvd3Nlci5zYWZlYnJvd3NpbmcucHJvdmlkZXIuZ29vZ2xlNC5nZXRoYXNoVVJMIiwgImh0dHA6Ly8xMjcuMC4wLjEvc2FmZWJyb3dzaW5nNC1kdW1teS9nZXRoYXNoIik7CnVzZXJfcHJlZigiYnJvd3Nlci5zYWZlYnJvd3NpbmcucHJvdmlkZXIuZ29vZ2xlNC51cGRhdGVVUkwiLCAiaHR0cDovLzEyNy4wLjAuMS9zYWZlYnJvd3Npbmc0LWR1bW15L3VwZGF0ZSIpOwp1c2VyX3ByZWYoImJyb3dzZXIuc2FmZWJyb3dzaW5nLnByb3ZpZGVyLm1vemlsbGEuZ2V0aGFzaFVSTCIsICJodHRwOi8vMTI3LjAuMC4xL3NhZmVicm93c2luZy1kdW1teS9nZXRoYXNoIik7CnVzZXJfcHJlZigiYnJvd3Nlci5zYWZlYnJvd3NpbmcucHJvdmlkZXIubW96aWxsYS51cGRhdGVVUkwiLCAiaHR0cDovLzEyNy4wLjAuMS9zYWZlYnJvd3NpbmctZHVtbXkvdXBkYXRlIik7CnVzZXJfcHJlZigiYnJvd3Nlci5zZWFyY2guZ2VvaXAudXJsIiwgIiIpOwp1c2VyX3ByZWYoImJyb3dzZXIudGFicy5yZW1vdGUuYXV0b3N0YXJ0IiwgdHJ1ZSk7CnVzZXJfcHJlZigiYnJvd3Nlci53YXJuT25RdWl0IiwgZmFsc2UpOwp1c2VyX3ByZWYoImRhdGFyZXBvcnRpbmcuaGVhbHRocmVwb3J0LmRvY3VtZW50U2VydmVyVVJJIiwgImh0dHA6Ly8xMjcuMC4wLjEvaGVhbHRocmVwb3J0LyIpOwp1c2VyX3ByZWYoImRldnRvb2xzLnRoZW1lIiwgImxpZ2h0Iik7CnVzZXJfcHJlZigiZGV2dG9vbHMudGltZWxpbmUuZW5hYmxlZCIsIGZhbHNlKTsKdXNlcl9wcmVmKCJkb20uYWxsb3dfc2NyaXB0c190b19jbG9zZV93aW5kb3dzIiwgdHJ1ZSk7CnVzZXJfcHJlZigiZG9tLmRpc2FibGVfb3Blbl9kdXJpbmdfbG9hZCIsIGZhbHNlKTsKdXNlcl9wcmVmKCJkb20uZGlzYWJsZV93aW5kb3dfZmxpcCIsIHRydWUpOwp1c2VyX3ByZWYoImRvbS5kaXNhYmxlX3dpbmRvd19tb3ZlX3Jlc2l6ZSIsIHRydWUpOwp1c2VyX3ByZWYoImRvbS5wdXNoLmNvbm5lY3Rpb24uZW5hYmxlZCIsIGZhbHNlKTsKdXNlcl9wcmVmKCJleHRlbnNpb25zLmJsb2NrbGlzdC5lbmFibGVkIiwgZmFsc2UpOwp1c2VyX3ByZWYoImV4dGVuc2lvbnMuYmxvY2tsaXN0LnVybCIsICJodHRwOi8vMTI3LjAuMC4xL2V4dGVuc2lvbnMtZHVtbXkvYmxvY2tsaXN0VVJMIik7CnVzZXJfcHJlZigiZXh0ZW5zaW9ucy5nZXRBZGRvbnMuZ2V0LnVybCIsICJodHRwOi8vMTI3LjAuMC4xL2V4dGVuc2lvbnMtZHVtbXkvcmVwb3NpdG9yeUdldFVSTCIpOwp1c2VyX3ByZWYoImV4dGVuc2lvbnMuZ2V0QWRkb25zLnNlYXJjaC5icm93c2VVUkwiLCAiaHR0cDovLzEyNy4wLjAuMS9leHRlbnNpb25zLWR1bW15L3JlcG9zaXRvcnlCcm93c2VVUkwiKTsKdXNlcl9wcmVmKCJleHRlbnNpb25zLmhvdGZpeC51cmwiLCAiaHR0cDovLzEyNy4wLjAuMS9leHRlbnNpb25zLWR1bW15L2hvdGZpeFVSTCIpOwp1c2VyX3ByZWYoImV4dGVuc2lvbnMudXBkYXRlLmJhY2tncm91bmQudXJsIiwgImh0dHA6Ly8xMjcuMC4wLjEvZXh0ZW5zaW9ucy1kdW1teS91cGRhdGVCYWNrZ3JvdW5kVVJMIik7CnVzZXJfcHJlZigiZXh0ZW5zaW9ucy51cGRhdGUudXJsIiwgImh0dHA6Ly8xMjcuMC4wLjEvZXh0ZW5zaW9ucy1kdW1teS91cGRhdGVVUkwiKTsKdXNlcl9wcmVmKCJleHRlbnNpb25zLndlYnNlcnZpY2UuZGlzY292ZXJVUkwiLCAiaHR0cDovLzEyNy4wLjAuMS9leHRlbnNpb25zLWR1bW15L2Rpc2NvdmVyeVVSTCIpOwp1c2VyX3ByZWYoImlkZW50aXR5LmZ4YWNjb3VudHMuYXV0aC51cmkiLCAiaHR0cHM6Ly8xMjcuMC4wLjEvZnhhLWR1bW15LyIpOwp1c2VyX3ByZWYoImlkZW50aXR5LmZ4YWNjb3VudHMubWlncmF0ZVRvRGV2RWRpdGlvbiIsIGZhbHNlKTsKdXNlcl9wcmVmKCJpZGxlLmxhc3REYWlseU5vdGlmaWNhdGlvbiIsIC0xKTsKdXNlcl9wcmVmKCJtZWRpYS5jYXB0dXJlc3RyZWFtX2hpbnRzLmVuYWJsZWQiLCB0cnVlKTsKdXNlcl9wcmVmKCJtZWRpYS5nbXAtbWFuYWdlci51cmwiLCAiaHR0cDovLzEyNy4wLjAuMS9nbXBtYW5hZ2VyLWR1bW15L3VwZGF0ZS54bWwiKTsKdXNlcl9wcmVmKCJtZWRpYS5saWJhdmNvZGVjLmFsbG93LW9ic29sZXRlIiwgdHJ1ZSk7CnVzZXJfcHJlZigibWVkaWEubmF2aWdhdG9yLmVuYWJsZWQiLCB0cnVlKTsKdXNlcl9wcmVmKCJtZWRpYS5uYXZpZ2F0b3IucGVybWlzc2lvbi5kaXNhYmxlZCIsIHRydWUpOwp1c2VyX3ByZWYoIm1lZGlhLnBlZXJjb25uZWN0aW9uLmVuYWJsZWQiLCB0cnVlKTsKdXNlcl9wcmVmKCJuZXR3b3JrLmh0dHAuc3BlY3VsYXRpdmUtcGFyYWxsZWwtbGltaXQiLCAwKTsKdXNlcl9wcmVmKCJwbGFjZXMuZGF0YWJhc2UubGFzdE1haW50ZW5hbmNlIiwgMjE0NzQ4MzY0Nyk7CnVzZXJfcHJlZigicGx1Z2luLnN0YXRlLmZsYXNoIiwgMCk7CnVzZXJfcHJlZigicGx1Z2lucy5mbGFzaEJsb2NrLmVuYWJsZWQiLCBmYWxzZSk7CnVzZXJfcHJlZigicHJpdmFjeS5yZWR1Y2VUaW1lclByZWNpc2lvbiIsIGZhbHNlKTsKdXNlcl9wcmVmKCJwcml2YWN5LnRyYWNraW5ncHJvdGVjdGlvbi5hbm5vdGF0ZV9jaGFubmVscyIsIGZhbHNlKTsKdXNlcl9wcmVmKCJwcml2YWN5LnRyYWNraW5ncHJvdGVjdGlvbi5lbmFibGVkIiwgZmFsc2UpOwp1c2VyX3ByZWYoInByaXZhY3kudHJhY2tpbmdwcm90ZWN0aW9uLmludHJvVVJMIiwgImh0dHA6Ly8xMjcuMC4wLjEvdHJhY2tpbmdwcm90ZWN0aW9uL3RvdXIiKTsKdXNlcl9wcmVmKCJwcml2YWN5LnRyYWNraW5ncHJvdGVjdGlvbi5wYm1vZGUuZW5hYmxlZCIsIGZhbHNlKTsKdXNlcl9wcmVmKCJzZWN1cml0eS5maWxldXJpLnN0cmljdF9vcmlnaW5fcG9saWN5IiwgZmFsc2UpOwp1c2VyX3ByZWYoInN0YXJ0dXAuaG9tZXBhZ2Vfd2VsY29tZV91cmwiLCAiIik7CnVzZXJfcHJlZigic3RhcnR1cC5ob21lcGFnZV93ZWxjb21lX3VybC5hZGRpdGlvbmFsIiwgIiIpOwp1c2VyX3ByZWYoInRyYWlsaGVhZC5maXJzdHJ1bi5icmFuY2hlcyIsICJqb2luIik7CnVzZXJfcHJlZigiZ2Vja292aWV3LmNvbnNvbGUuZW5hYmxlZCIsIHRydWUpOwp1c2VyX3ByZWYoImRldnRvb2xzLmNvbnNvbGUuc3Rkb3V0LmNvbnRlbnQiLCB0cnVlKTtQSwMECgAAAAAAEaaRTzBV/wB9qQAAfakAADEAAABleHRlbnNpb25zL2Jyb3dzZXJ0aW1lLWV4dGVuc2lvbkBzaXRlc3BlZWQuaW8ueHBpUEsDBBQAAAAIAMSaS05A07AKgw0AAO4QAAAUAAAATUVUQS1JTkYvbW96aWxsYS5yc2HVl3k4lPvfx81iDBrb2LLv2zTcM8aWKEt2KluIX40xlizD2AnNKEtpOfayM/YlS4pskUISnWSEEqJFshZF5kc959Q5z7me56/neq7fn+/v5/29r+/nvu7393V/ACrXexirUpxJ3DoCxALOp3KNA1QuOhgEwrACLDBmFAcELASw/7SA8qmISIAKMwKoUOV8CBgEBsP5qMTMLQZTL4D40wfaw8wEUEox7AArDGIHhSHBdjYYEUBoV7AhkZakCC8fH7yEAYnsTyLjg7xIfhgVAL1bZUfK/VHVszwi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","args":["-no-remote"]}}} | |
| 20:48:34 INFO - 1576615714551 webdriver::command WARN You are using deprecated legacy session negotiation patterns (desiredCapabilities/requiredCapabilities), see https://developer.mozilla.org/en-US/docs/Web/WebDriver/Capabilities#Legacy | |
| 20:48:34 INFO - 1576615714551 geckodriver::capabilities DEBUG Creating profile directory tree /var/folders/tn/jmgsfg315sd73yn_dnrf66c80000gn/T/rust_mozprofileK02UQp/extensions/ | |
| 20:48:34 INFO - 1576615714551 geckodriver::capabilities DEBUG Extracting profile to /var/folders/tn/jmgsfg315sd73yn_dnrf66c80000gn/T/rust_mozprofileK02UQp/prefs.js | |
| 20:48:34 INFO - 1576615714551 geckodriver::capabilities DEBUG Extracting profile to /var/folders/tn/jmgsfg315sd73yn_dnrf66c80000gn/T/rust_mozprofileK02UQp/user.js | |
| 20:48:34 INFO - 1576615714551 geckodriver::capabilities DEBUG Extracting profile to /var/folders/tn/jmgsfg315sd73yn_dnrf66c80000gn/T/rust_mozprofileK02UQp/extensions/[email protected] | |
| 20:48:34 INFO - options: FirefoxOptions { binary: Some("/Users/sdonner/mozilla-source/mozilla-unified/obj-x86_64-apple-darwin19.2.0/dist/Nightly.app/Contents/MacOS/firefox"), profile: Some(Profile { path: "/var/folders/tn/jmgsfg315sd73yn_dnrf66c80000gn/T/rust_mozprofileK02UQp", temp_dir: Some(TempDir { path: "/var/folders/tn/jmgsfg315sd73yn_dnrf66c80000gn/T/rust_mozprofileK02UQp" }), prefs: None, user_prefs: None }), args: Some(["-no-remote"]), log: LogOptions { level: None }, prefs: [], android: None } | |
| 20:48:34 INFO - capabilities: {"browserName": String("firefox"), "pageLoadStrategy": String("normal")} | |
| 20:48:34 INFO - 1576615714561 mozrunner::runner INFO Running command: "/Users/sdonner/mozilla-source/mozilla-unified/obj-x86_64-apple-darwin19.2.0/dist/Nightly.app/Contents/MacOS/firefox" "-marionette" "-no-remote" "-foreground" "-profile" "/var/folders/tn/jmgsfg315sd73yn_dnrf66c80000gn/T/rust_mozprofileK02UQp" | |
| 20:48:34 INFO - 1576615714562 geckodriver::marionette DEBUG Waiting 60s to connect to browser on 127.0.0.1:55221 | |
| 20:48:34 INFO - 1576615714562 geckodriver::marionette DEBUG Waiting 60s to connect to browser | |
| 20:48:34 INFO - 1576615714562 geckodriver::marionette INFO Not connected, sleeping 120ms! | |
| 20:48:34 INFO - 1576615714684 geckodriver::marionette INFO Not connected, sleeping 240ms! | |
| 20:48:34 INFO - 1576615714926 geckodriver::marionette INFO Not connected, sleeping 480ms! | |
| 20:48:35 INFO - 1576615715042 [email protected] WARN Loading extension '[email protected]': Reading manifest: Invalid extension permission: networkStatus | |
| 20:48:35 INFO - 1576615715095 [email protected] WARN Loading extension '[email protected]': Reading manifest: Invalid extension permission: mozillaAddons | |
| 20:48:35 INFO - 1576615715095 [email protected] WARN Loading extension '[email protected]': Reading manifest: Invalid extension permission: telemetry | |
| 20:48:35 INFO - 1576615715095 [email protected] WARN Loading extension '[email protected]': Reading manifest: Invalid extension permission: resource://pdf.js/ | |
| 20:48:35 INFO - 1576615715095 [email protected] WARN Loading extension '[email protected]': Reading manifest: Invalid extension permission: about:reader* | |
| 20:48:35 INFO - 1576615715262 Marionette DEBUG Init aborted (running=false, enabled=true, finalUIStartup=false) | |
| 20:48:35 INFO - 1576615715406 geckodriver::marionette INFO Not connected, sleeping 960ms! | |
| 20:48:36 INFO - 1576615716369 geckodriver::marionette INFO Not connected, sleeping 960ms! | |
| 20:48:36 INFO - JavaScript error: resource://services-common/kinto-offline-client.js, line 603: Error: IndexedDB clear() The operation failed for reasons unrelated to the database itself and not covered by any other error code. | |
| 20:48:36 INFO - 1576615716899 Marionette DEBUG Setting recommended pref apz.content_response_timeout to 60000 | |
| 20:48:36 INFO - 1576615716899 Marionette DEBUG Setting recommended pref browser.contentblocking.introCount to 99 | |
| 20:48:36 INFO - 1576615716900 Marionette DEBUG Setting recommended pref browser.download.panel.shown to true | |
| 20:48:36 INFO - 1576615716900 Marionette DEBUG Setting recommended pref browser.tabs.disableBackgroundZombification to false | |
| 20:48:36 INFO - 1576615716900 Marionette DEBUG Setting recommended pref browser.tabs.remote.separatePrivilegedContentProcess to false | |
| 20:48:36 INFO - 1576615716900 Marionette DEBUG Setting recommended pref browser.tabs.unloadOnLowMemory to false | |
| 20:48:36 INFO - 1576615716900 Marionette DEBUG Setting recommended pref browser.tabs.warnOnCloseOtherTabs to false | |
| 20:48:36 INFO - 1576615716900 Marionette DEBUG Setting recommended pref browser.tabs.warnOnOpen to false | |
| 20:48:36 INFO - 1576615716900 Marionette DEBUG Setting recommended pref browser.usedOnWindows10.introURL to | |
| 20:48:36 INFO - 1576615716900 Marionette DEBUG Setting recommended pref browser.urlbar.suggest.searches to false | |
| 20:48:36 INFO - 1576615716901 Marionette DEBUG Setting recommended pref datareporting.policy.dataSubmissionPolicyAccepted to false | |
| 20:48:36 INFO - 1576615716901 Marionette DEBUG Setting recommended pref dom.disable_beforeunload to true | |
| 20:48:36 INFO - 1576615716901 Marionette DEBUG Setting recommended pref dom.file.createInChild to true | |
| 20:48:36 INFO - 1576615716901 Marionette DEBUG Setting recommended pref extensions.getAddons.cache.enabled to false | |
| 20:48:36 INFO - 1576615716901 Marionette DEBUG Setting recommended pref network.http.prompt-temp-redirect to false | |
| 20:48:36 INFO - 1576615716901 Marionette DEBUG Setting recommended pref security.notification_enable_delay to 0 | |
| 20:48:36 INFO - 1576615716902 Marionette DEBUG Setting recommended pref signon.autofillForms to false | |
| 20:48:36 INFO - 1576615716902 Marionette DEBUG Setting recommended pref toolkit.cosmeticAnimations.enabled to false | |
| 20:48:36 INFO - 1576615716937 Marionette INFO Listening on port 55221 | |
| 20:48:36 INFO - 1576615716937 Marionette DEBUG Marionette is listening | |
| 20:48:37 INFO - 1576615717333 geckodriver::marionette DEBUG Connection established on 127.0.0.1:55221. Waiting for Marionette handshake | |
| 20:48:37 INFO - 1576615717333 geckodriver::marionette INFO handshake, timeout is None | |
| 20:48:37 INFO - 1576615717334 Marionette DEBUG Accepted connection 0 from 127.0.0.1:55233 | |
| 20:48:37 INFO - 1576615717334 geckodriver::marionette DEBUG Connected to Marionette | |
| 20:48:37 INFO - 1576615717335 Marionette DEBUG 0 -> [0,1,"WebDriver:NewSession",{"browserName":"firefox","pageLoadStrategy":"normal"}] | |
| 20:48:37 INFO - 1576615717359 Marionette DEBUG 0 <- [1,1,null,{"sessionId":"aebf1f89-3333-0444-b20a-6cc5376bb7bc","capabilities":{"browserName":"firefox","browserVersion":"73.0a ... /rust_mozprofileK02UQp","moz:shutdownTimeout":60000,"moz:useNonSpecCompliantPointerOrigin":false,"moz:webdriverClick":true}}] | |
| 20:48:37 INFO - 1576615717362 webdriver::server DEBUG <- 200 OK {"value":{"sessionId":"aebf1f89-3333-0444-b20a-6cc5376bb7bc","capabilities":{"acceptInsecureCerts":false,"browserName":"firefox","browserVersion":"73.0a1","moz:accessibilityChecks":false,"moz:buildID":"20191217092755","moz:geckodriverVersion":"0.24.0-android","moz:headless":false,"moz:processID":19374,"moz:profile":"/var/folders/tn/jmgsfg315sd73yn_dnrf66c80000gn/T/rust_mozprofileK02UQp","moz:shutdownTimeout":60000,"moz:useNonSpecCompliantPointerOrigin":false,"moz:webdriverClick":true,"pageLoadStrategy":"normal","platformName":"mac","platformVersion":"19.2.0","rotatable":false,"setWindowRect":true,"strictFileInteractability":false,"timeouts":{"implicit":0,"pageLoad":300000,"script":30000},"unhandledPromptBehavior":"dismiss and notify"}}} | |
| 20:48:37 INFO - 1576615717363 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/timeouts {"pageLoad":60000,"script":60000} | |
| 20:48:37 INFO - 1576615717364 Marionette DEBUG 0 -> [0,2,"WebDriver:SetTimeouts",{"pageLoad":60000,"script":60000}] | |
| 20:48:37 INFO - 1576615717364 Marionette DEBUG 0 <- [1,2,null,{"value":null}] | |
| 20:48:37 INFO - 1576615717364 webdriver::server DEBUG <- 200 OK {"value":null} | |
| 20:48:37 INFO - 1576615717365 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/window/position {"windowHandle":"current","x":0,"y":0} | |
| 20:48:37 INFO - 1576615717366 Marionette DEBUG 0 -> [0,3,"WebDriver:SetWindowRect",{"x":0,"y":0}] | |
| 20:48:37 INFO - 1576615717377 Marionette DEBUG 0 <- [1,3,null,{"x":0,"y":23,"width":1280,"height":1037}] | |
| 20:48:37 INFO - 1576615717377 webdriver::server DEBUG <- 200 OK {"value":{"x":0,"y":23,"width":1280,"height":1037}} | |
| 20:48:37 INFO - 1576615717378 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/window/size {"windowHandle":"current","width":1366,"height":768} | |
| 20:48:37 INFO - 1576615717379 Marionette DEBUG 0 -> [0,4,"WebDriver:SetWindowRect",{"height":768,"width":1366}] | |
| 20:48:37 INFO - 1576615717426 Marionette DEBUG 0 <- [1,4,null,{"x":0,"y":23,"width":1366,"height":768}] | |
| 20:48:37 INFO - 1576615717428 webdriver::server DEBUG <- 200 OK {"value":{"x":0,"y":23,"width":1366,"height":768}} | |
| 20:48:37 INFO - 1576615717430 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/url {"url":"data:text/html;charset=utf-8,"} | |
| 20:48:37 INFO - 1576615717430 Marionette DEBUG 0 -> [0,5,"WebDriver:Navigate",{"url":"data:text/html;charset=utf-8,"}] | |
| 20:48:37 INFO - 1576615717499 Marionette DEBUG 0 <- [1,5,null,{"value":null}] | |
| 20:48:37 INFO - 1576615717502 webdriver::server DEBUG <- 200 OK {"value":null} | |
| 20:48:37 INFO - [2019-12-17 12:48:37] INFO: [browsertime] Starting a browsertime pageload | |
| 20:48:37 INFO - [2019-12-17 12:48:37] INFO: [browsertime] Waiting for 3 ms (post_startup_delay) | |
| 20:48:37 INFO - [2019-12-17 12:48:37] INFO: [browsertime] Cycle 0, waiting for 1000 ms | |
| 20:48:38 INFO - [2019-12-17 12:48:38] INFO: [browsertime] Cycle 0, starting the measure | |
| 20:48:38 INFO - [2019-12-17 12:48:38] INFO: [browsertime.command.measure] Testing url https://www.amazon.com/s?k=laptop&ref=nb_sb_noss_1 iteration 2 | |
| 20:48:38 INFO - 1576615718511 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"return document.documentURI;","args":[]} | |
| 20:48:38 INFO - 1576615718512 Marionette DEBUG 0 -> [0,6,"WebDriver:ExecuteScript",{"args":[],"script":"return document.documentURI;"}] | |
| 20:48:38 INFO - 1576615718514 Marionette DEBUG 0 <- [1,6,null,{"value":"data:text/html;charset=utf-8,"}] | |
| 20:48:38 INFO - 1576615718514 webdriver::server DEBUG <- 200 OK {"value":"data:text/html;charset=utf-8,"} | |
| 20:48:38 INFO - 1576615718516 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"(function() {\n const orange = document.getElementById('browsertime-orange');\n if (orange) {\n orange.parentNode.removeChild(orange);\n }\n window.requestAnimationFrame(function(){\n window.requestAnimationFrame(function(){\n window.location=\"https://www.amazon.com/s?k=laptop&ref=nb_sb_noss_1\";\n });\n });\n })();","args":[]} | |
| 20:48:38 INFO - 1576615718517 Marionette DEBUG 0 -> [0,7,"WebDriver:ExecuteScript",{"args":[],"script":"(function() {\n const orange = document.getElementById('browsert ... window.location=\"https://www.amazon.com/s?k=laptop&ref=nb_sb_noss_1\";\n });\n });\n })();"}] | |
| 20:48:38 INFO - 1576615718519 Marionette DEBUG 0 <- [1,7,null,{"value":null}] | |
| 20:48:38 INFO - 1576615718519 webdriver::server DEBUG <- 200 OK {"value":null} | |
| 20:48:38 INFO - console.log: "RemoteSettingsWorker error: ConstraintError: A mutation operation in the transaction failed because a constraint was not satisfied." | |
| 20:48:38 INFO - console.log: "RemoteSettingsWorker error: ConstraintError: A mutation operation in the transaction failed because a constraint was not satisfied." | |
| 20:48:38 INFO - console.log: "RemoteSettingsWorker error: ConstraintError: A mutation operation in the transaction failed because a constraint was not satisfied." | |
| 20:48:38 INFO - console.log: "RemoteSettingsWorker error: ConstraintError: A mutation operation in the transaction failed because a constraint was not satisfied." | |
| 20:48:39 INFO - 1576615719021 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"return document.documentURI;","args":[]} | |
| 20:48:39 INFO - 1576615719022 Marionette DEBUG 0 -> [0,8,"WebDriver:ExecuteScript",{"args":[],"script":"return document.documentURI;"}] | |
| 20:48:39 INFO - 1576615719355 Marionette DEBUG 0 <- [1,8,null,{"value":"https://www.amazon.com/s?k=laptop&ref=nb_sb_noss_1"}] | |
| 20:48:39 INFO - 1576615719356 webdriver::server DEBUG <- 200 OK {"value":"https://www.amazon.com/s?k=laptop&ref=nb_sb_noss_1"} | |
| 20:48:39 INFO - [2019-12-17 12:48:39] DEBUG: [browsertime] Waiting for script pageCompleteCheck at most 300000 ms | |
| 20:48:39 INFO - [2019-12-17 12:48:39] VERBOSE: [browsertime] Waiting for script | |
| 20:48:39 INFO - return (function(waitTime) { | |
| 20:48:39 INFO - try { | |
| 20:48:39 INFO - var end = window.performance.timing.loadEventEnd; | |
| 20:48:39 INFO - return end > 0; | |
| 20:48:39 INFO - } catch(e) { | |
| 20:48:39 INFO - return true; | |
| 20:48:39 INFO - } | |
| 20:48:39 INFO - })(arguments[arguments.length - 1]); | |
| 20:48:39 INFO - 1576615719357 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:39 INFO - 1576615719358 Marionette DEBUG 0 -> [0,9,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window.p ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:39 INFO - 1576615719514 Marionette DEBUG 0 <- [1,9,null,{"value":false}] | |
| 20:48:39 INFO - 1576615719515 webdriver::server DEBUG <- 200 OK {"value":false} | |
| 20:48:39 INFO - 1576615719517 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:39 INFO - 1576615719518 Marionette DEBUG 0 -> [0,10,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window. ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:39 INFO - 1576615719567 Marionette DEBUG 0 <- [1,10,null,{"value":false}] | |
| 20:48:39 INFO - 1576615719567 webdriver::server DEBUG <- 200 OK {"value":false} | |
| 20:48:39 INFO - 1576615719570 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:39 INFO - 1576615719571 Marionette DEBUG 0 -> [0,11,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window. ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:39 INFO - 1576615719624 Marionette DEBUG 0 <- [1,11,null,{"value":false}] | |
| 20:48:39 INFO - 1576615719625 webdriver::server DEBUG <- 200 OK {"value":false} | |
| 20:48:39 INFO - 1576615719628 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:39 INFO - 1576615719628 Marionette DEBUG 0 -> [0,12,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window. ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:39 INFO - 1576615719674 Marionette DEBUG 0 <- [1,12,null,{"value":false}] | |
| 20:48:39 INFO - 1576615719675 webdriver::server DEBUG <- 200 OK {"value":false} | |
| 20:48:39 INFO - 1576615719677 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:39 INFO - 1576615719678 Marionette DEBUG 0 -> [0,13,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window. ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:39 INFO - 1576615719681 Marionette DEBUG 0 <- [1,13,null,{"value":false}] | |
| 20:48:39 INFO - 1576615719681 webdriver::server DEBUG <- 200 OK {"value":false} | |
| 20:48:39 INFO - 1576615719684 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:39 INFO - 1576615719688 Marionette DEBUG 0 -> [0,14,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window. ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:39 INFO - 1576615719774 Marionette DEBUG 0 <- [1,14,null,{"value":false}] | |
| 20:48:39 INFO - 1576615719775 webdriver::server DEBUG <- 200 OK {"value":false} | |
| 20:48:39 INFO - 1576615719776 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:39 INFO - 1576615719776 Marionette DEBUG 0 -> [0,15,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window. ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:39 INFO - 1576615719884 Marionette DEBUG 0 <- [1,15,null,{"value":false}] | |
| 20:48:39 INFO - 1576615719884 webdriver::server DEBUG <- 200 OK {"value":false} | |
| 20:48:39 INFO - 1576615719886 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:39 INFO - 1576615719887 Marionette DEBUG 0 -> [0,16,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window. ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:39 INFO - 1576615719905 Marionette DEBUG 0 <- [1,16,null,{"value":false}] | |
| 20:48:39 INFO - 1576615719905 webdriver::server DEBUG <- 200 OK {"value":false} | |
| 20:48:39 INFO - 1576615719908 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:39 INFO - 1576615719908 Marionette DEBUG 0 -> [0,17,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window. ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:39 INFO - 1576615719910 Marionette DEBUG 0 <- [1,17,null,{"value":false}] | |
| 20:48:39 INFO - 1576615719910 webdriver::server DEBUG <- 200 OK {"value":false} | |
| 20:48:39 INFO - 1576615719913 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:39 INFO - 1576615719914 Marionette DEBUG 0 -> [0,18,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window. ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:40 INFO - 1576615720057 Marionette DEBUG 0 <- [1,18,null,{"value":false}] | |
| 20:48:40 INFO - 1576615720057 webdriver::server DEBUG <- 200 OK {"value":false} | |
| 20:48:40 INFO - 1576615720060 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:40 INFO - 1576615720060 Marionette DEBUG 0 -> [0,19,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window. ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:40 INFO - 1576615720213 Marionette DEBUG 0 <- [1,19,null,{"value":false}] | |
| 20:48:40 INFO - 1576615720213 webdriver::server DEBUG <- 200 OK {"value":false} | |
| 20:48:40 INFO - 1576615720215 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:40 INFO - 1576615720216 Marionette DEBUG 0 -> [0,20,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window. ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:40 INFO - 1576615720217 Marionette DEBUG 0 <- [1,20,null,{"value":false}] | |
| 20:48:40 INFO - 1576615720218 webdriver::server DEBUG <- 200 OK {"value":false} | |
| 20:48:40 INFO - 1576615720220 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:40 INFO - 1576615720221 Marionette DEBUG 0 -> [0,21,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window. ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:40 INFO - 1576615720222 Marionette DEBUG 0 <- [1,21,null,{"value":false}] | |
| 20:48:40 INFO - 1576615720223 webdriver::server DEBUG <- 200 OK {"value":false} | |
| 20:48:40 INFO - 1576615720225 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:40 INFO - 1576615720226 Marionette DEBUG 0 -> [0,22,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window. ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:40 INFO - 1576615720227 Marionette DEBUG 0 <- [1,22,null,{"value":false}] | |
| 20:48:40 INFO - 1576615720227 webdriver::server DEBUG <- 200 OK {"value":false} | |
| 20:48:40 INFO - 1576615720230 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:40 INFO - 1576615720230 Marionette DEBUG 0 -> [0,23,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window. ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:40 INFO - 1576615720232 Marionette DEBUG 0 <- [1,23,null,{"value":false}] | |
| 20:48:40 INFO - 1576615720232 webdriver::server DEBUG <- 200 OK {"value":false} | |
| 20:48:40 INFO - 1576615720234 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:40 INFO - 1576615720235 Marionette DEBUG 0 -> [0,24,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window. ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:40 INFO - 1576615720236 Marionette DEBUG 0 <- [1,24,null,{"value":false}] | |
| 20:48:40 INFO - 1576615720237 webdriver::server DEBUG <- 200 OK {"value":false} | |
| 20:48:40 INFO - 1576615720239 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:40 INFO - 1576615720239 Marionette DEBUG 0 -> [0,25,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window. ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:40 INFO - 1576615720241 Marionette DEBUG 0 <- [1,25,null,{"value":false}] | |
| 20:48:40 INFO - 1576615720242 webdriver::server DEBUG <- 200 OK {"value":false} | |
| 20:48:40 INFO - 1576615720244 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:40 INFO - 1576615720245 Marionette DEBUG 0 -> [0,26,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window. ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:40 INFO - 1576615720248 Marionette DEBUG 0 <- [1,26,null,{"value":false}] | |
| 20:48:40 INFO - 1576615720248 webdriver::server DEBUG <- 200 OK {"value":false} | |
| 20:48:40 INFO - 1576615720250 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:40 INFO - 1576615720251 Marionette DEBUG 0 -> [0,27,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window. ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:40 INFO - 1576615720258 Marionette DEBUG 0 <- [1,27,null,{"value":false}] | |
| 20:48:40 INFO - 1576615720259 webdriver::server DEBUG <- 200 OK {"value":false} | |
| 20:48:40 INFO - 1576615720261 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:40 INFO - 1576615720261 Marionette DEBUG 0 -> [0,28,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window. ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:40 INFO - 1576615720266 Marionette DEBUG 0 <- [1,28,null,{"value":false}] | |
| 20:48:40 INFO - 1576615720266 webdriver::server DEBUG <- 200 OK {"value":false} | |
| 20:48:40 INFO - 1576615720268 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:40 INFO - 1576615720269 Marionette DEBUG 0 -> [0,29,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window. ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:40 INFO - 1576615720270 Marionette DEBUG 0 <- [1,29,null,{"value":false}] | |
| 20:48:40 INFO - 1576615720271 webdriver::server DEBUG <- 200 OK {"value":false} | |
| 20:48:40 INFO - 1576615720272 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:40 INFO - 1576615720272 Marionette DEBUG 0 -> [0,30,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window. ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:40 INFO - 1576615720273 Marionette DEBUG 0 <- [1,30,null,{"value":false}] | |
| 20:48:40 INFO - 1576615720274 webdriver::server DEBUG <- 200 OK {"value":false} | |
| 20:48:40 INFO - 1576615720276 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:40 INFO - 1576615720277 Marionette DEBUG 0 -> [0,31,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window. ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:40 INFO - 1576615720279 Marionette DEBUG 0 <- [1,31,null,{"value":false}] | |
| 20:48:40 INFO - 1576615720279 webdriver::server DEBUG <- 200 OK {"value":false} | |
| 20:48:40 INFO - 1576615720282 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:40 INFO - 1576615720282 Marionette DEBUG 0 -> [0,32,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window. ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:40 INFO - 1576615720293 Marionette DEBUG 0 <- [1,32,null,{"value":false}] | |
| 20:48:40 INFO - 1576615720293 webdriver::server DEBUG <- 200 OK {"value":false} | |
| 20:48:40 INFO - 1576615720296 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:40 INFO - 1576615720297 Marionette DEBUG 0 -> [0,33,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window. ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:40 INFO - 1576615720298 Marionette DEBUG 0 <- [1,33,null,{"value":false}] | |
| 20:48:40 INFO - 1576615720299 webdriver::server DEBUG <- 200 OK {"value":false} | |
| 20:48:40 INFO - 1576615720302 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:40 INFO - 1576615720302 Marionette DEBUG 0 -> [0,34,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window. ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:40 INFO - 1576615720304 Marionette DEBUG 0 <- [1,34,null,{"value":false}] | |
| 20:48:40 INFO - 1576615720304 webdriver::server DEBUG <- 200 OK {"value":false} | |
| 20:48:40 INFO - 1576615720307 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:40 INFO - 1576615720307 Marionette DEBUG 0 -> [0,35,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window. ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:40 INFO - 1576615720309 Marionette DEBUG 0 <- [1,35,null,{"value":false}] | |
| 20:48:40 INFO - 1576615720310 webdriver::server DEBUG <- 200 OK {"value":false} | |
| 20:48:40 INFO - 1576615720312 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:40 INFO - 1576615720313 Marionette DEBUG 0 -> [0,36,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window. ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:40 INFO - 1576615720315 Marionette DEBUG 0 <- [1,36,null,{"value":false}] | |
| 20:48:40 INFO - 1576615720315 webdriver::server DEBUG <- 200 OK {"value":false} | |
| 20:48:40 INFO - 1576615720317 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:40 INFO - 1576615720318 Marionette DEBUG 0 -> [0,37,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window. ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:40 INFO - 1576615720319 Marionette DEBUG 0 <- [1,37,null,{"value":false}] | |
| 20:48:40 INFO - 1576615720320 webdriver::server DEBUG <- 200 OK {"value":false} | |
| 20:48:40 INFO - 1576615720322 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:40 INFO - 1576615720322 Marionette DEBUG 0 -> [0,38,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window. ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:40 INFO - 1576615720324 Marionette DEBUG 0 <- [1,38,null,{"value":false}] | |
| 20:48:40 INFO - 1576615720324 webdriver::server DEBUG <- 200 OK {"value":false} | |
| 20:48:40 INFO - 1576615720326 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:40 INFO - 1576615720327 Marionette DEBUG 0 -> [0,39,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window. ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:40 INFO - 1576615720328 Marionette DEBUG 0 <- [1,39,null,{"value":false}] | |
| 20:48:40 INFO - 1576615720328 webdriver::server DEBUG <- 200 OK {"value":false} | |
| 20:48:40 INFO - 1576615720330 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:40 INFO - 1576615720331 Marionette DEBUG 0 -> [0,40,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window. ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:40 INFO - 1576615720332 Marionette DEBUG 0 <- [1,40,null,{"value":false}] | |
| 20:48:40 INFO - 1576615720333 webdriver::server DEBUG <- 200 OK {"value":false} | |
| 20:48:40 INFO - 1576615720335 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:40 INFO - 1576615720335 Marionette DEBUG 0 -> [0,41,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window. ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:40 INFO - 1576615720336 Marionette DEBUG 0 <- [1,41,null,{"value":false}] | |
| 20:48:40 INFO - 1576615720337 webdriver::server DEBUG <- 200 OK {"value":false} | |
| 20:48:40 INFO - 1576615720340 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:40 INFO - 1576615720341 Marionette DEBUG 0 -> [0,42,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window. ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:40 INFO - 1576615720342 Marionette DEBUG 0 <- [1,42,null,{"value":false}] | |
| 20:48:40 INFO - 1576615720343 webdriver::server DEBUG <- 200 OK {"value":false} | |
| 20:48:40 INFO - 1576615720345 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:40 INFO - 1576615720346 Marionette DEBUG 0 -> [0,43,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window. ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:40 INFO - 1576615720360 Marionette DEBUG 0 <- [1,43,null,{"value":false}] | |
| 20:48:40 INFO - 1576615720361 webdriver::server DEBUG <- 200 OK {"value":false} | |
| 20:48:40 INFO - 1576615720364 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:40 INFO - 1576615720365 Marionette DEBUG 0 -> [0,44,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window. ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:40 INFO - 1576615720366 Marionette DEBUG 0 <- [1,44,null,{"value":false}] | |
| 20:48:40 INFO - 1576615720367 webdriver::server DEBUG <- 200 OK {"value":false} | |
| 20:48:40 INFO - 1576615720369 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:40 INFO - 1576615720370 Marionette DEBUG 0 -> [0,45,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window. ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:40 INFO - 1576615720372 Marionette DEBUG 0 <- [1,45,null,{"value":false}] | |
| 20:48:40 INFO - 1576615720373 webdriver::server DEBUG <- 200 OK {"value":false} | |
| 20:48:40 INFO - 1576615720376 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:40 INFO - 1576615720378 Marionette DEBUG 0 -> [0,46,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window. ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:40 INFO - 1576615720380 Marionette DEBUG 0 <- [1,46,null,{"value":false}] | |
| 20:48:40 INFO - 1576615720380 webdriver::server DEBUG <- 200 OK {"value":false} | |
| 20:48:40 INFO - 1576615720383 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:40 INFO - 1576615720384 Marionette DEBUG 0 -> [0,47,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window. ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:40 INFO - 1576615720386 Marionette DEBUG 0 <- [1,47,null,{"value":false}] | |
| 20:48:40 INFO - 1576615720386 webdriver::server DEBUG <- 200 OK {"value":false} | |
| 20:48:40 INFO - 1576615720388 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:40 INFO - 1576615720389 Marionette DEBUG 0 -> [0,48,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window. ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:40 INFO - 1576615720390 Marionette DEBUG 0 <- [1,48,null,{"value":false}] | |
| 20:48:40 INFO - 1576615720391 webdriver::server DEBUG <- 200 OK {"value":false} | |
| 20:48:40 INFO - 1576615720393 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:40 INFO - 1576615720394 Marionette DEBUG 0 -> [0,49,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window. ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:40 INFO - 1576615720396 Marionette DEBUG 0 <- [1,49,null,{"value":false}] | |
| 20:48:40 INFO - 1576615720396 webdriver::server DEBUG <- 200 OK {"value":false} | |
| 20:48:40 INFO - 1576615720399 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:40 INFO - 1576615720400 Marionette DEBUG 0 -> [0,50,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window. ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:40 INFO - 1576615720401 Marionette DEBUG 0 <- [1,50,null,{"value":false}] | |
| 20:48:40 INFO - 1576615720402 webdriver::server DEBUG <- 200 OK {"value":false} | |
| 20:48:40 INFO - 1576615720404 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:40 INFO - 1576615720405 Marionette DEBUG 0 -> [0,51,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window. ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:40 INFO - 1576615720406 Marionette DEBUG 0 <- [1,51,null,{"value":false}] | |
| 20:48:40 INFO - 1576615720406 webdriver::server DEBUG <- 200 OK {"value":false} | |
| 20:48:40 INFO - 1576615720409 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:40 INFO - 1576615720410 Marionette DEBUG 0 -> [0,52,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window. ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:40 INFO - 1576615720411 Marionette DEBUG 0 <- [1,52,null,{"value":false}] | |
| 20:48:40 INFO - 1576615720412 webdriver::server DEBUG <- 200 OK {"value":false} | |
| 20:48:40 INFO - 1576615720414 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:40 INFO - 1576615720415 Marionette DEBUG 0 -> [0,53,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window. ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:40 INFO - 1576615720435 Marionette DEBUG 0 <- [1,53,null,{"value":false}] | |
| 20:48:40 INFO - 1576615720436 webdriver::server DEBUG <- 200 OK {"value":false} | |
| 20:48:40 INFO - 1576615720439 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:40 INFO - 1576615720439 Marionette DEBUG 0 -> [0,54,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window. ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:40 INFO - 1576615720441 Marionette DEBUG 0 <- [1,54,null,{"value":false}] | |
| 20:48:40 INFO - 1576615720441 webdriver::server DEBUG <- 200 OK {"value":false} | |
| 20:48:40 INFO - 1576615720443 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:40 INFO - 1576615720444 Marionette DEBUG 0 -> [0,55,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window. ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:40 INFO - 1576615720446 Marionette DEBUG 0 <- [1,55,null,{"value":false}] | |
| 20:48:40 INFO - 1576615720446 webdriver::server DEBUG <- 200 OK {"value":false} | |
| 20:48:40 INFO - 1576615720449 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:40 INFO - 1576615720449 Marionette DEBUG 0 -> [0,56,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window. ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:40 INFO - 1576615720451 Marionette DEBUG 0 <- [1,56,null,{"value":false}] | |
| 20:48:40 INFO - 1576615720451 webdriver::server DEBUG <- 200 OK {"value":false} | |
| 20:48:40 INFO - 1576615720453 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:40 INFO - 1576615720454 Marionette DEBUG 0 -> [0,57,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window. ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:40 INFO - 1576615720459 Marionette DEBUG 0 <- [1,57,null,{"value":false}] | |
| 20:48:40 INFO - 1576615720460 webdriver::server DEBUG <- 200 OK {"value":false} | |
| 20:48:40 INFO - 1576615720462 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:40 INFO - 1576615720463 Marionette DEBUG 0 -> [0,58,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window. ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:40 INFO - 1576615720464 Marionette DEBUG 0 <- [1,58,null,{"value":false}] | |
| 20:48:40 INFO - 1576615720464 webdriver::server DEBUG <- 200 OK {"value":false} | |
| 20:48:40 INFO - 1576615720466 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:40 INFO - 1576615720467 Marionette DEBUG 0 -> [0,59,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window. ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:40 INFO - 1576615720468 Marionette DEBUG 0 <- [1,59,null,{"value":false}] | |
| 20:48:40 INFO - 1576615720468 webdriver::server DEBUG <- 200 OK {"value":false} | |
| 20:48:40 INFO - 1576615720471 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:40 INFO - 1576615720472 Marionette DEBUG 0 -> [0,60,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window. ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:40 INFO - 1576615720473 Marionette DEBUG 0 <- [1,60,null,{"value":false}] | |
| 20:48:40 INFO - 1576615720474 webdriver::server DEBUG <- 200 OK {"value":false} | |
| 20:48:40 INFO - 1576615720476 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:40 INFO - 1576615720477 Marionette DEBUG 0 -> [0,61,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window. ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:40 INFO - 1576615720479 Marionette DEBUG 0 <- [1,61,null,{"value":false}] | |
| 20:48:40 INFO - 1576615720479 webdriver::server DEBUG <- 200 OK {"value":false} | |
| 20:48:40 INFO - 1576615720481 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:40 INFO - 1576615720482 Marionette DEBUG 0 -> [0,62,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window. ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:40 INFO - 1576615720483 Marionette DEBUG 0 <- [1,62,null,{"value":false}] | |
| 20:48:40 INFO - 1576615720484 webdriver::server DEBUG <- 200 OK {"value":false} | |
| 20:48:40 INFO - 1576615720486 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:40 INFO - 1576615720486 Marionette DEBUG 0 -> [0,63,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window. ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:40 INFO - 1576615720488 Marionette DEBUG 0 <- [1,63,null,{"value":false}] | |
| 20:48:40 INFO - 1576615720488 webdriver::server DEBUG <- 200 OK {"value":false} | |
| 20:48:40 INFO - 1576615720491 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:40 INFO - 1576615720491 Marionette DEBUG 0 -> [0,64,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window. ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:40 INFO - 1576615720493 Marionette DEBUG 0 <- [1,64,null,{"value":false}] | |
| 20:48:40 INFO - console.log: ({message:"Asset failed to load: https://m.media-amazon.com/images/I/61kzhTBl2qL._RC|11-BZEJ8lnL.js,61GQ9IdK7HL.js,21Of0-9HPCL.js,012FVc3131L.js,119KAWlHU6L.js,51xL2QLv4YL.js,11AHlQhPRjL.js,016iHgpF74L.js,11aNYFFS5hL.js,116tgw9TSaL.js,211-p4GRUCL.js,01PoLXBDXWL.js,61BanVD+50L.js,01mi-J86cyL.js,11BOgvnnntL.js,31UWuPgtTtL.js,01rpauTep4L.js,01iyxuSGj4L.js,01OWoGffjKL.js_.js?AUIClients/AmazonUI#189458-T1.192338-T1", logLevel:"ERROR", attribution:(void 0)}) | |
| 20:48:40 INFO - 1576615720494 webdriver::server DEBUG <- 200 OK {"value":false} | |
| 20:48:40 INFO - console.error: null | |
| 20:48:40 INFO - 1576615720496 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"\nreturn (function(waitTime) {\n try {\n var end = window.performance.timing.loadEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n","args":[5000]} | |
| 20:48:40 INFO - 1576615720497 Marionette DEBUG 0 -> [0,65,"WebDriver:ExecuteScript",{"args":[5000],"script":"\nreturn (function(waitTime) {\n try {\n var end = window. ... dEventEnd;\n return end > 0;\n } catch(e) {\n return true;\n }\n})(arguments[arguments.length - 1]);\n"}] | |
| 20:48:40 INFO - 1576615720540 Marionette DEBUG 0 <- [1,65,null,{"value":true}] | |
| 20:48:40 INFO - 1576615720540 webdriver::server DEBUG <- 200 OK {"value":true} | |
| 20:48:40 INFO - [2019-12-17 12:48:40] DEBUG: [browsertime] Waiting after load event for 5000 ms. | |
| 20:48:40 INFO - JavaScript error: , line 0: NetworkError: A network error occurred. | |
| 20:48:40 INFO - JavaScript error: , line 0: NetworkError: A network error occurred. | |
| 20:48:45 INFO - 1576615725545 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"return document.documentURI;","args":[]} | |
| 20:48:45 INFO - 1576615725546 Marionette DEBUG 0 -> [0,66,"WebDriver:ExecuteScript",{"args":[],"script":"return document.documentURI;"}] | |
| 20:48:45 INFO - 1576615725549 Marionette DEBUG 0 <- [1,66,null,{"value":"https://www.amazon.com/s?k=laptop&ref=nb_sb_noss_1"}] | |
| 20:48:45 INFO - 1576615725549 webdriver::server DEBUG <- 200 OK {"value":"https://www.amazon.com/s?k=laptop&ref=nb_sb_noss_1"} | |
| 20:48:45 INFO - [2019-12-17 12:48:45] VERBOSE: [browsertime.command.measure] Collecting metrics | |
| 20:48:45 INFO - [2019-12-17 12:48:45] VERBOSE: [browsertime] Executing script appConstants with privilege. | |
| 20:48:45 INFO - [2019-12-17 12:48:45] VERBOSE: [browsertime] Executing privileged script return ( function () { | |
| 20:48:45 INFO - const { AppConstants } = ChromeUtils.import( | |
| 20:48:45 INFO - 'resource://gre/modules/AppConstants.jsm' | |
| 20:48:45 INFO - ); | |
| 20:48:45 INFO - return AppConstants; | |
| 20:48:45 INFO - } )() | |
| 20:48:45 INFO - 1576615725550 webdriver::server DEBUG -> GET /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/moz/context | |
| 20:48:45 INFO - 1576615725551 Marionette DEBUG 0 -> [0,67,"Marionette:GetContext",{}] | |
| 20:48:45 INFO - 1576615725551 Marionette DEBUG 0 <- [1,67,null,{"value":"content"}] | |
| 20:48:45 INFO - 1576615725552 webdriver::server DEBUG <- 200 OK {"value":"content"} | |
| 20:48:45 INFO - 1576615725552 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/moz/context {"context":"chrome"} | |
| 20:48:45 INFO - 1576615725553 Marionette DEBUG 0 -> [0,68,"Marionette:SetContext",{"value":"chrome"}] | |
| 20:48:45 INFO - 1576615725553 Marionette DEBUG 0 <- [1,68,null,{"value":null}] | |
| 20:48:45 INFO - 1576615725554 webdriver::server DEBUG <- 200 OK {"value":null} | |
| 20:48:45 INFO - 1576615725555 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"return ( function () {\n const { AppConstants } = ChromeUtils.import(\n 'resource://gre/modules/AppConstants.jsm'\n );\n return AppConstants;\n } )()","args":[null]} | |
| 20:48:45 INFO - 1576615725555 Marionette DEBUG 0 -> [0,69,"WebDriver:ExecuteScript",{"args":[null],"script":"return ( function () {\n const { AppConstants } = ChromeUtils.import(\n 'resource://gre/modules/AppConstants.jsm'\n );\n return AppConstants;\n } )()"}] | |
| 20:48:45 INFO - 1576615725557 Marionette DEBUG 0 <- [1,69,null,{"value":{"NIGHTLY_BUILD":true,"FENNEC_NIGHTLY":false,"RELEASE_OR_BETA":false,"EARLY_BETA_OR_EARLIER":true,"ACCESS ... ERSION":4,"MOZ_NEW_XULSTORE":true,"MOZ_NEW_NOTIFICATION_STORE":true,"MOZ_NEW_CERT_STORAGE":true,"ENABLE_REMOTE_AGENT":true}}] | |
| 20:48:45 INFO - 1576615725558 webdriver::server DEBUG <- 200 OK {"value":{"ACCESSIBILITY":true,"ANDROID_PACKAGE_NAME":"org.mozilla.firefox","ASAN":false,"ASAN_REPORTER":false,"BROWSER_CHROME_URL":"chrome://browser/content/browser.xhtml","DEBUG":false,"DEBUG_JS_MODULES":"","DLL_PREFIX":"lib","DLL_SUFFIX":".dylib","EARLY_BETA_OR_EARLIER":true,"ENABLE_REMOTE_AGENT":true,"FENNEC_NIGHTLY":false,"HAVE_SHELL_SERVICE":true,"HAVE_USR_LIB64_DIR":false,"MENUBAR_CAN_AUTOHIDE":false,"MOZILLA_OFFICIAL":false,"MOZ_ALLOW_LEGACY_EXTENSIONS":true,"MOZ_ANDROID_HISTORY":false,"MOZ_APP_NAME":"firefox","MOZ_APP_VERSION":"73.0a1","MOZ_APP_VERSION_DISPLAY":"73.0a1","MOZ_BING_API_CLIENTID":"no-bing-api-clientid","MOZ_BING_API_KEY":"no-bing-api-key","MOZ_BITS_DOWNLOAD":false,"MOZ_BUILD_APP":"browser","MOZ_CODE_COVERAGE":false,"MOZ_CRASHREPORTER":true,"MOZ_DATA_REPORTING":true,"MOZ_DEV_EDITION":false,"MOZ_GECKO_PROFILER":true,"MOZ_GOOGLE_LOCATION_SERVICE_API_KEY":"no-google-location-service-api-key","MOZ_GOOGLE_SAFEBROWSING_API_KEY":"no-google-safebrowsing-api-key","MOZ_GRAPHENE":false,"MOZ_MACBUNDLE_NAME":"Nightly.app","MOZ_MAINTENANCE_SERVICE":false,"MOZ_MOZILLA_API_KEY":"no-mozilla-api-key","MOZ_NEW_CERT_STORAGE":true,"MOZ_NEW_NOTIFICATION_STORE":true,"MOZ_NEW_XULSTORE":true,"MOZ_NORMANDY":true,"MOZ_OFFICIAL_BRANDING":false,"MOZ_PLACES":true,"MOZ_REQUIRE_SIGNING":false,"MOZ_SANDBOX":true,"MOZ_SERVICES_HEALTHREPORT":true,"MOZ_SERVICES_SYNC":false,"MOZ_SWITCHBOARD":false,"MOZ_SYSTEM_NSS":false,"MOZ_TELEMETRY_ON_BY_DEFAULT":false,"MOZ_TELEMETRY_REPORTING":false,"MOZ_UNSIGNED_SCOPES":0,"MOZ_UPDATER":true,"MOZ_UPDATE_CHANNEL":"default","MOZ_WEBRTC":true,"MOZ_WIDGET_GTK":false,"MOZ_WIDGET_TOOLKIT":"cocoa","NIGHTLY_BUILD":true,"OMNIJAR_NAME":"omni.ja","RELEASE_OR_BETA":false,"SOURCE_REVISION_URL":"","TELEMETRY_PING_FORMAT_VERSION":4,"XP_UNIX":true,"isPlatformAndVersionAtLeast":{},"isPlatformAndVersionAtMost":{},"platform":"macosx","unixstyle":"other"}} | |
| 20:48:45 INFO - 1576615725560 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/moz/context {"context":"content"} | |
| 20:48:45 INFO - 1576615725560 Marionette DEBUG 0 -> [0,70,"Marionette:SetContext",{"value":"content"}] | |
| 20:48:45 INFO - 1576615725561 Marionette DEBUG 0 <- [1,70,null,{"value":null}] | |
| 20:48:45 INFO - 1576615725561 webdriver::server DEBUG <- 200 OK {"value":null} | |
| 20:48:45 INFO - [2019-12-17 12:48:45] VERBOSE: [browsertime] Executing script asyncAppConstants with privilege. | |
| 20:48:45 INFO - [2019-12-17 12:48:45] VERBOSE: [browsertime] Executing privileged async script | |
| 20:48:45 INFO - var callback = arguments[arguments.length - 1]; | |
| 20:48:45 INFO - return (( async function () { | |
| 20:48:45 INFO - return new Promise(resolve => { | |
| 20:48:45 INFO - const { AppConstants } = ChromeUtils.import( | |
| 20:48:45 INFO - 'resource://gre/modules/AppConstants.jsm' | |
| 20:48:45 INFO - ); | |
| 20:48:45 INFO - resolve(AppConstants); | |
| 20:48:45 INFO - }); | |
| 20:48:45 INFO - } )()) | |
| 20:48:45 INFO - .then((r) => callback({'result': r})) | |
| 20:48:45 INFO - .catch((e) => callback({'error': e})); | |
| 20:48:45 INFO - 1576615725562 webdriver::server DEBUG -> GET /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/moz/context | |
| 20:48:45 INFO - 1576615725563 Marionette DEBUG 0 -> [0,71,"Marionette:GetContext",{}] | |
| 20:48:45 INFO - 1576615725563 Marionette DEBUG 0 <- [1,71,null,{"value":"content"}] | |
| 20:48:45 INFO - 1576615725564 webdriver::server DEBUG <- 200 OK {"value":"content"} | |
| 20:48:45 INFO - 1576615725564 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/moz/context {"context":"chrome"} | |
| 20:48:45 INFO - 1576615725565 Marionette DEBUG 0 -> [0,72,"Marionette:SetContext",{"value":"chrome"}] | |
| 20:48:45 INFO - 1576615725565 Marionette DEBUG 0 <- [1,72,null,{"value":null}] | |
| 20:48:45 INFO - 1576615725566 webdriver::server DEBUG <- 200 OK {"value":null} | |
| 20:48:45 INFO - 1576615725566 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/async {"script":"\n var callback = arguments[arguments.length - 1];\n return (( async function () {\n return new Promise(resolve => {\n const { AppConstants } = ChromeUtils.import(\n 'resource://gre/modules/AppConstants.jsm'\n );\n resolve(AppConstants);\n });\n } )())\n .then((r) => callback({'result': r}))\n .catch((e) => callback({'error': e}));\n ","args":[null]} | |
| 20:48:45 INFO - 1576615725567 Marionette DEBUG 0 -> [0,73,"WebDriver:ExecuteAsyncScript",{"args":[null],"script":"\n var callback = arguments[arguments.length - 1];\n ... )\n .then((r) => callback({'result': r}))\n .catch((e) => callback({'error': e}));\n "}] | |
| 20:48:45 INFO - 1576615725569 Marionette DEBUG 0 <- [1,73,null,{"value":{"result":{"NIGHTLY_BUILD":true,"FENNEC_NIGHTLY":false,"RELEASE_OR_BETA":false,"EARLY_BETA_OR_EARLIER":tr ... RSION":4,"MOZ_NEW_XULSTORE":true,"MOZ_NEW_NOTIFICATION_STORE":true,"MOZ_NEW_CERT_STORAGE":true,"ENABLE_REMOTE_AGENT":true}}}] | |
| 20:48:45 INFO - 1576615725569 webdriver::server DEBUG <- 200 OK {"value":{"result":{"ACCESSIBILITY":true,"ANDROID_PACKAGE_NAME":"org.mozilla.firefox","ASAN":false,"ASAN_REPORTER":false,"BROWSER_CHROME_URL":"chrome://browser/content/browser.xhtml","DEBUG":false,"DEBUG_JS_MODULES":"","DLL_PREFIX":"lib","DLL_SUFFIX":".dylib","EARLY_BETA_OR_EARLIER":true,"ENABLE_REMOTE_AGENT":true,"FENNEC_NIGHTLY":false,"HAVE_SHELL_SERVICE":true,"HAVE_USR_LIB64_DIR":false,"MENUBAR_CAN_AUTOHIDE":false,"MOZILLA_OFFICIAL":false,"MOZ_ALLOW_LEGACY_EXTENSIONS":true,"MOZ_ANDROID_HISTORY":false,"MOZ_APP_NAME":"firefox","MOZ_APP_VERSION":"73.0a1","MOZ_APP_VERSION_DISPLAY":"73.0a1","MOZ_BING_API_CLIENTID":"no-bing-api-clientid","MOZ_BING_API_KEY":"no-bing-api-key","MOZ_BITS_DOWNLOAD":false,"MOZ_BUILD_APP":"browser","MOZ_CODE_COVERAGE":false,"MOZ_CRASHREPORTER":true,"MOZ_DATA_REPORTING":true,"MOZ_DEV_EDITION":false,"MOZ_GECKO_PROFILER":true,"MOZ_GOOGLE_LOCATION_SERVICE_API_KEY":"no-google-location-service-api-key","MOZ_GOOGLE_SAFEBROWSING_API_KEY":"no-google-safebrowsing-api-key","MOZ_GRAPHENE":false,"MOZ_MACBUNDLE_NAME":"Nightly.app","MOZ_MAINTENANCE_SERVICE":false,"MOZ_MOZILLA_API_KEY":"no-mozilla-api-key","MOZ_NEW_CERT_STORAGE":true,"MOZ_NEW_NOTIFICATION_STORE":true,"MOZ_NEW_XULSTORE":true,"MOZ_NORMANDY":true,"MOZ_OFFICIAL_BRANDING":false,"MOZ_PLACES":true,"MOZ_REQUIRE_SIGNING":false,"MOZ_SANDBOX":true,"MOZ_SERVICES_HEALTHREPORT":true,"MOZ_SERVICES_SYNC":false,"MOZ_SWITCHBOARD":false,"MOZ_SYSTEM_NSS":false,"MOZ_TELEMETRY_ON_BY_DEFAULT":false,"MOZ_TELEMETRY_REPORTING":false,"MOZ_UNSIGNED_SCOPES":0,"MOZ_UPDATER":true,"MOZ_UPDATE_CHANNEL":"default","MOZ_WEBRTC":true,"MOZ_WIDGET_GTK":false,"MOZ_WIDGET_TOOLKIT":"cocoa","NIGHTLY_BUILD":true,"OMNIJAR_NAME":"omni.ja","RELEASE_OR_BETA":false,"SOURCE_REVISION_URL":"","TELEMETRY_PING_FORMAT_VERSION":4,"XP_UNIX":true,"isPlatformAndVersionAtLeast":{},"isPlatformAndVersionAtMost":{},"platform":"macosx","unixstyle":"other"}}} | |
| 20:48:45 INFO - 1576615725570 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/moz/context {"context":"content"} | |
| 20:48:45 INFO - 1576615725570 Marionette DEBUG 0 -> [0,74,"Marionette:SetContext",{"value":"content"}] | |
| 20:48:45 INFO - 1576615725571 Marionette DEBUG 0 <- [1,74,null,{"value":null}] | |
| 20:48:45 INFO - 1576615725571 webdriver::server DEBUG <- 200 OK {"value":null} | |
| 20:48:45 INFO - [2019-12-17 12:48:45] VERBOSE: [browsertime] Executing script userAgent with privilege. | |
| 20:48:45 INFO - [2019-12-17 12:48:45] VERBOSE: [browsertime] Executing privileged script return (function() { | |
| 20:48:45 INFO - return navigator.userAgent; | |
| 20:48:45 INFO - })(); | |
| 20:48:45 INFO - 1576615725572 webdriver::server DEBUG -> GET /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/moz/context | |
| 20:48:45 INFO - 1576615725573 Marionette DEBUG 0 -> [0,75,"Marionette:GetContext",{}] | |
| 20:48:45 INFO - 1576615725573 Marionette DEBUG 0 <- [1,75,null,{"value":"content"}] | |
| 20:48:45 INFO - 1576615725573 webdriver::server DEBUG <- 200 OK {"value":"content"} | |
| 20:48:45 INFO - 1576615725574 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/moz/context {"context":"chrome"} | |
| 20:48:45 INFO - 1576615725575 Marionette DEBUG 0 -> [0,76,"Marionette:SetContext",{"value":"chrome"}] | |
| 20:48:45 INFO - 1576615725575 Marionette DEBUG 0 <- [1,76,null,{"value":null}] | |
| 20:48:45 INFO - 1576615725576 webdriver::server DEBUG <- 200 OK {"value":null} | |
| 20:48:45 INFO - 1576615725577 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"return (function() {\n return navigator.userAgent;\n})();\n","args":[null]} | |
| 20:48:45 INFO - 1576615725578 Marionette DEBUG 0 -> [0,77,"WebDriver:ExecuteScript",{"args":[null],"script":"return (function() {\n return navigator.userAgent;\n})();\n"}] | |
| 20:48:45 INFO - 1576615725578 Marionette DEBUG 0 <- [1,77,null,{"value":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:73.0) Gecko/20100101 Firefox/73.0"}] | |
| 20:48:45 INFO - 1576615725579 webdriver::server DEBUG <- 200 OK {"value":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:73.0) Gecko/20100101 Firefox/73.0"} | |
| 20:48:45 INFO - 1576615725580 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/moz/context {"context":"content"} | |
| 20:48:45 INFO - 1576615725580 Marionette DEBUG 0 -> [0,78,"Marionette:SetContext",{"value":"content"}] | |
| 20:48:45 INFO - 1576615725580 Marionette DEBUG 0 <- [1,78,null,{"value":null}] | |
| 20:48:45 INFO - 1576615725581 webdriver::server DEBUG <- 200 OK {"value":null} | |
| 20:48:45 INFO - [2019-12-17 12:48:45] VERBOSE: [browsertime] Executing script windowSize with privilege. | |
| 20:48:45 INFO - [2019-12-17 12:48:45] VERBOSE: [browsertime] Executing privileged script return (function() { | |
| 20:48:45 INFO - const w = window, | |
| 20:48:45 INFO - d = document, | |
| 20:48:45 INFO - e = d.documentElement, | |
| 20:48:45 INFO - g = d.getElementsByTagName('body')[0], | |
| 20:48:45 INFO - x = w.innerWidth || e.clientWidth || g.clientWidth, | |
| 20:48:45 INFO - y = w.innerHeight || e.clientHeight || g.clientHeight; | |
| 20:48:45 INFO - return x + 'x' + y; | |
| 20:48:45 INFO - })(); | |
| 20:48:45 INFO - 1576615725583 webdriver::server DEBUG -> GET /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/moz/context | |
| 20:48:45 INFO - 1576615725583 Marionette DEBUG 0 -> [0,79,"Marionette:GetContext",{}] | |
| 20:48:45 INFO - 1576615725583 Marionette DEBUG 0 <- [1,79,null,{"value":"content"}] | |
| 20:48:45 INFO - 1576615725584 webdriver::server DEBUG <- 200 OK {"value":"content"} | |
| 20:48:45 INFO - 1576615725585 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/moz/context {"context":"chrome"} | |
| 20:48:45 INFO - 1576615725585 Marionette DEBUG 0 -> [0,80,"Marionette:SetContext",{"value":"chrome"}] | |
| 20:48:45 INFO - 1576615725585 Marionette DEBUG 0 <- [1,80,null,{"value":null}] | |
| 20:48:45 INFO - 1576615725586 webdriver::server DEBUG <- 200 OK {"value":null} | |
| 20:48:45 INFO - 1576615725587 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"return (function() {\n const w = window,\n d = document,\n e = d.documentElement,\n g = d.getElementsByTagName('body')[0],\n x = w.innerWidth || e.clientWidth || g.clientWidth,\n y = w.innerHeight || e.clientHeight || g.clientHeight;\n return x + 'x' + y;\n})();\n","args":[null]} | |
| 20:48:45 INFO - 1576615725588 Marionette DEBUG 0 -> [0,81,"WebDriver:ExecuteScript",{"args":[null],"script":"return (function() {\n const w = window,\n d = document,\n e ... .clientWidth || g.clientWidth,\n y = w.innerHeight || e.clientHeight || g.clientHeight;\n return x + 'x' + y;\n})();\n"}] | |
| 20:48:45 INFO - 1576615725589 Marionette DEBUG 0 <- [1,81,null,{"value":"1366x768"}] | |
| 20:48:45 INFO - 1576615725589 webdriver::server DEBUG <- 200 OK {"value":"1366x768"} | |
| 20:48:45 INFO - 1576615725590 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/moz/context {"context":"content"} | |
| 20:48:45 INFO - 1576615725591 Marionette DEBUG 0 -> [0,82,"Marionette:SetContext",{"value":"content"}] | |
| 20:48:45 INFO - 1576615725591 Marionette DEBUG 0 <- [1,82,null,{"value":null}] | |
| 20:48:45 INFO - 1576615725591 webdriver::server DEBUG <- 200 OK {"value":null} | |
| 20:48:45 INFO - [2019-12-17 12:48:45] VERBOSE: [browsertime] Executing script return (function() { | |
| 20:48:45 INFO - function docHeight(doc) { | |
| 20:48:45 INFO - const body = doc.body, | |
| 20:48:45 INFO - docelem = doc.documentElement; | |
| 20:48:45 INFO - return Math.max( | |
| 20:48:45 INFO - body.scrollHeight, | |
| 20:48:45 INFO - body.offsetHeight, | |
| 20:48:45 INFO - docelem.clientHeight, | |
| 20:48:45 INFO - docelem.scrollHeight, | |
| 20:48:45 INFO - docelem.offsetHeight | |
| 20:48:45 INFO - ); | |
| 20:48:45 INFO - } | |
| 20:48:45 INFO - return docHeight(document); | |
| 20:48:45 INFO - })(); | |
| 20:48:45 INFO - 1576615725592 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"return (function() {\n function docHeight(doc) {\n const body = doc.body,\n docelem = doc.documentElement;\n return Math.max(\n body.scrollHeight,\n body.offsetHeight,\n docelem.clientHeight,\n docelem.scrollHeight,\n docelem.offsetHeight\n );\n }\n\n return docHeight(document);\n})();\n","args":[null]} | |
| 20:48:45 INFO - 1576615725593 Marionette DEBUG 0 -> [0,83,"WebDriver:ExecuteScript",{"args":[null],"script":"return (function() {\n function docHeight(doc) {\n const body = ... entHeight,\n docelem.scrollHeight,\n docelem.offsetHeight\n );\n }\n\n return docHeight(document);\n})();\n"}] | |
| 20:48:45 INFO - 1576615725595 Marionette DEBUG 0 <- [1,83,null,{"value":9099}] | |
| 20:48:45 INFO - 1576615725596 webdriver::server DEBUG <- 200 OK {"value":9099} | |
| 20:48:45 INFO - [2019-12-17 12:48:45] VERBOSE: [browsertime] Executing script return (function() { | |
| 20:48:45 INFO - const t = window.performance.getEntriesByType('navigation')[0]; | |
| 20:48:45 INFO - return { | |
| 20:48:45 INFO - decodedBodySize: t.decodedBodySize, | |
| 20:48:45 INFO - encodedBodySize: t.encodedBodySize, | |
| 20:48:45 INFO - transferSize: t.transferSize | |
| 20:48:45 INFO - }; | |
| 20:48:45 INFO - })(); | |
| 20:48:45 INFO - 1576615725597 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"return (function() {\n const t = window.performance.getEntriesByType('navigation')[0];\n return {\n decodedBodySize: t.decodedBodySize,\n encodedBodySize: t.encodedBodySize,\n transferSize: t.transferSize\n };\n})();\n","args":[null]} | |
| 20:48:45 INFO - 1576615725597 Marionette DEBUG 0 -> [0,84,"WebDriver:ExecuteScript",{"args":[null],"script":"return (function() {\n const t = window.performance.getEntriesByTyp ... odedBodySize: t.decodedBodySize,\n encodedBodySize: t.encodedBodySize,\n transferSize: t.transferSize\n };\n})();\n"}] | |
| 20:48:45 INFO - 1576615725600 Marionette DEBUG 0 <- [1,84,null,{"value":{"decodedBodySize":1030003,"encodedBodySize":1030003,"transferSize":1031006}}] | |
| 20:48:45 INFO - 1576615725600 webdriver::server DEBUG <- 200 OK {"value":{"decodedBodySize":1030003,"encodedBodySize":1030003,"transferSize":1031006}} | |
| 20:48:45 INFO - [2019-12-17 12:48:45] VERBOSE: [browsertime] Executing script return (function() { | |
| 20:48:45 INFO - return document.title; | |
| 20:48:45 INFO - })(); | |
| 20:48:45 INFO - 1576615725601 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"return (function() {\n return document.title;\n})();\n","args":[null]} | |
| 20:48:45 INFO - 1576615725602 Marionette DEBUG 0 -> [0,85,"WebDriver:ExecuteScript",{"args":[null],"script":"return (function() {\n return document.title;\n})();\n"}] | |
| 20:48:45 INFO - 1576615725603 Marionette DEBUG 0 <- [1,85,null,{"value":"Amazon.com: laptop"}] | |
| 20:48:45 INFO - 1576615725603 webdriver::server DEBUG <- 200 OK {"value":"Amazon.com: laptop"} | |
| 20:48:45 INFO - [2019-12-17 12:48:45] VERBOSE: [browsertime] Executing script return (function() { | |
| 20:48:45 INFO - function docWidth(doc) { | |
| 20:48:45 INFO - const body = doc.body, | |
| 20:48:45 INFO - docelem = doc.documentElement; | |
| 20:48:45 INFO - return Math.max( | |
| 20:48:45 INFO - body.scrollWidth, | |
| 20:48:45 INFO - body.offsetWidth, | |
| 20:48:45 INFO - docelem.clientWidth, | |
| 20:48:45 INFO - docelem.scrollWidth, | |
| 20:48:45 INFO - docelem.offsetWidth | |
| 20:48:45 INFO - ); | |
| 20:48:45 INFO - } | |
| 20:48:45 INFO - return docWidth(document); | |
| 20:48:45 INFO - })(); | |
| 20:48:45 INFO - 1576615725604 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"return (function() {\n function docWidth(doc) {\n const body = doc.body,\n docelem = doc.documentElement;\n return Math.max(\n body.scrollWidth,\n body.offsetWidth,\n docelem.clientWidth,\n docelem.scrollWidth,\n docelem.offsetWidth\n );\n }\n\n return docWidth(document);\n})();\n","args":[null]} | |
| 20:48:45 INFO - 1576615725605 Marionette DEBUG 0 -> [0,86,"WebDriver:ExecuteScript",{"args":[null],"script":"return (function() {\n function docWidth(doc) {\n const body = d ... .clientWidth,\n docelem.scrollWidth,\n docelem.offsetWidth\n );\n }\n\n return docWidth(document);\n})();\n"}] | |
| 20:48:45 INFO - 1576615725607 Marionette DEBUG 0 <- [1,86,null,{"value":1366}] | |
| 20:48:45 INFO - 1576615725607 webdriver::server DEBUG <- 200 OK {"value":1366} | |
| 20:48:45 INFO - [2019-12-17 12:48:45] VERBOSE: [browsertime] Executing script return (function () { | |
| 20:48:45 INFO - if (window.performance.timeOrigin) { | |
| 20:48:45 INFO - return Number(window.performance.timeOrigin.toFixed(0)); | |
| 20:48:45 INFO - } | |
| 20:48:45 INFO - if (window.performance.timing.navigationStart) { | |
| 20:48:45 INFO - return Number(window.performance.timing.navigationStart.toFixed(0)); | |
| 20:48:45 INFO - } | |
| 20:48:45 INFO - return undefined; | |
| 20:48:45 INFO - })(); | |
| 20:48:45 INFO - 1576615725609 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"return (function () {\n if (window.performance.timeOrigin) {\n return Number(window.performance.timeOrigin.toFixed(0));\n }\n if (window.performance.timing.navigationStart) {\n return Number(window.performance.timing.navigationStart.toFixed(0));\n }\n return undefined;\n})();\n","args":[null]} | |
| 20:48:45 INFO - 1576615725610 Marionette DEBUG 0 -> [0,87,"WebDriver:ExecuteScript",{"args":[null],"script":"return (function () {\n if (window.performance.timeOrigin) {\n r ... ationStart) {\n return Number(window.performance.timing.navigationStart.toFixed(0));\n }\n return undefined;\n})();\n"}] | |
| 20:48:45 INFO - 1576615725612 Marionette DEBUG 0 <- [1,87,null,{"value":1576615718560}] | |
| 20:48:45 INFO - 1576615725612 webdriver::server DEBUG <- 200 OK {"value":1576615718560} | |
| 20:48:45 INFO - [2019-12-17 12:48:45] VERBOSE: [browsertime] Executing script return (function() { | |
| 20:48:45 INFO - const t = window.performance.getEntriesByType('navigation')[0]; | |
| 20:48:45 INFO - return t.nextHopProtocol; | |
| 20:48:45 INFO - })(); | |
| 20:48:45 INFO - 1576615725614 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"return (function() {\n const t = window.performance.getEntriesByType('navigation')[0];\n return t.nextHopProtocol;\n})();\n","args":[null]} | |
| 20:48:45 INFO - 1576615725615 Marionette DEBUG 0 -> [0,88,"WebDriver:ExecuteScript",{"args":[null],"script":"return (function() {\n const t = window.performance.getEntriesByType('navigation')[0];\n return t.nextHopProtocol;\n})();\n"}] | |
| 20:48:45 INFO - 1576615725617 Marionette DEBUG 0 <- [1,88,null,{"value":"h2"}] | |
| 20:48:45 INFO - 1576615725617 webdriver::server DEBUG <- 200 OK {"value":"h2"} | |
| 20:48:45 INFO - [2019-12-17 12:48:45] VERBOSE: [browsertime] Executing script return (function() { | |
| 20:48:45 INFO - return document.documentElement.scrollWidth <= window.innerWidth; | |
| 20:48:45 INFO - })(); | |
| 20:48:45 INFO - 1576615725619 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"return (function() {\n return document.documentElement.scrollWidth <= window.innerWidth;\n})();\n","args":[null]} | |
| 20:48:45 INFO - 1576615725620 Marionette DEBUG 0 -> [0,89,"WebDriver:ExecuteScript",{"args":[null],"script":"return (function() {\n return document.documentElement.scrollWidth <= window.innerWidth;\n})();\n"}] | |
| 20:48:45 INFO - 1576615725621 Marionette DEBUG 0 <- [1,89,null,{"value":true}] | |
| 20:48:45 INFO - 1576615725622 webdriver::server DEBUG <- 200 OK {"value":true} | |
| 20:48:45 INFO - [2019-12-17 12:48:45] VERBOSE: [browsertime] Executing script return (function() { | |
| 20:48:45 INFO - return document.URL; | |
| 20:48:45 INFO - })(); | |
| 20:48:45 INFO - 1576615725623 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"return (function() {\n return document.URL;\n })();","args":[null]} | |
| 20:48:45 INFO - 1576615725623 Marionette DEBUG 0 -> [0,90,"WebDriver:ExecuteScript",{"args":[null],"script":"return (function() {\n return document.URL;\n })();"}] | |
| 20:48:45 INFO - 1576615725625 Marionette DEBUG 0 <- [1,90,null,{"value":"https://www.amazon.com/s?k=laptop&ref=nb_sb_noss_1"}] | |
| 20:48:45 INFO - 1576615725625 webdriver::server DEBUG <- 200 OK {"value":"https://www.amazon.com/s?k=laptop&ref=nb_sb_noss_1"} | |
| 20:48:45 INFO - [2019-12-17 12:48:45] VERBOSE: [browsertime] Executing script return (function (custom) { | |
| 20:48:45 INFO - /** | |
| 20:48:45 INFO - * Collect visual elements from a page and feed the size back in the | |
| 20:48:45 INFO - * format for Visual Metrics. | |
| 20:48:45 INFO - */ | |
| 20:48:45 INFO - const elementByType = {}; | |
| 20:48:45 INFO - const areaByType = {}; | |
| 20:48:45 INFO - const imageTags = [].slice.call(document.body.getElementsByTagName('img')); | |
| 20:48:45 INFO - const h1Tags = [].slice.call(document.body.getElementsByTagName('h1')); | |
| 20:48:45 INFO - // When we feed options from the CLI it can be a String or an | |
| 20:48:45 INFO - // Array with Strings. Make it easy to treat everything the same. | |
| 20:48:45 INFO - function toArray(arrayLike) { | |
| 20:48:45 INFO - if (arrayLike === undefined || arrayLike === null) { | |
| 20:48:45 INFO - return []; | |
| 20:48:45 INFO - } | |
| 20:48:45 INFO - if (Array.isArray(arrayLike)) { | |
| 20:48:45 INFO - return arrayLike; | |
| 20:48:45 INFO - } | |
| 20:48:45 INFO - return [arrayLike]; | |
| 20:48:45 INFO - } | |
| 20:48:45 INFO - function isLargest(type, area) { | |
| 20:48:45 INFO - if (!areaByType[type]) { | |
| 20:48:45 INFO - return true; | |
| 20:48:45 INFO - } else return areaByType[type] < area; | |
| 20:48:45 INFO - } | |
| 20:48:45 INFO - function isElementPartlyInViewportAndVisible (el) { | |
| 20:48:45 INFO - const rect = el.getBoundingClientRect(); | |
| 20:48:45 INFO - return !(rect.bottom < 0 || rect.right < 0 || rect.left > window.innerWidth || rect.top > window.innerHeight || rect.height === 0) | |
| 20:48:45 INFO - } | |
| 20:48:45 INFO - function visibleArea(el) { | |
| 20:48:45 INFO - const rect = el.getBoundingClientRect(); | |
| 20:48:45 INFO - const viewportWidth = document.documentElement.clientWidth; | |
| 20:48:45 INFO - const viewportHeight = document.documentElement.clientHeight; | |
| 20:48:45 INFO - // TODO make this more readable | |
| 20:48:45 INFO - const width = rect.left < 0 ? rect.width + rect.left : (viewportWidth < rect.left + rect.width) ? viewportWidth - rect.left : rect.width; | |
| 20:48:45 INFO - const height = rect.top < 0 ? rect.height + rect.top : (viewportHeight < rect.top + rect.height) ? viewportHeight - rect.top : rect.height; | |
| 20:48:45 INFO - return width * height; | |
| 20:48:45 INFO - } | |
| 20:48:45 INFO - function keepLargestElementByType(type, element) { | |
| 20:48:45 INFO - const area = visibleArea(element); | |
| 20:48:45 INFO - if (isLargest(type, area)) { | |
| 20:48:45 INFO - const filename = element.src ? element.src.substring(element.src.lastIndexOf('/') + 1) : undefined; | |
| 20:48:45 INFO - const rect = element.getBoundingClientRect(); | |
| 20:48:45 INFO - elementByType[type] = { | |
| 20:48:45 INFO - name: type, | |
| 20:48:45 INFO - x: Math.round(rect.left), | |
| 20:48:45 INFO - y: Math.round(rect.top), | |
| 20:48:45 INFO - width: Math.round(rect.width), | |
| 20:48:45 INFO - height: Math.round(rect.height), | |
| 20:48:45 INFO - filename | |
| 20:48:45 INFO - }; | |
| 20:48:45 INFO - areaByType[type] = area; | |
| 20:48:45 INFO - } | |
| 20:48:45 INFO - } | |
| 20:48:45 INFO - if (custom) { | |
| 20:48:45 INFO - // Input could be a String or an Array of Strings so convert it | |
| 20:48:45 INFO - const customArray = toArray(custom); | |
| 20:48:45 INFO - for (const nameAndSelector of customArray) { | |
| 20:48:45 INFO - const parts = nameAndSelector.split(':'); | |
| 20:48:45 INFO - const type = parts[0]; | |
| 20:48:45 INFO - const selector = parts[1]; | |
| 20:48:45 INFO - const element = document.body.querySelector(selector); | |
| 20:48:45 INFO - try { | |
| 20:48:45 INFO - if (isElementPartlyInViewportAndVisible(element)) { | |
| 20:48:45 INFO - keepLargestElementByType(type, element); | |
| 20:48:45 INFO - } | |
| 20:48:45 INFO - } catch (e) { | |
| 20:48:45 INFO - console.log('Could not find matching element for selector:' + selector + ' using document.body.querySelector. Do that element exist on the page?'); | |
| 20:48:45 INFO - } | |
| 20:48:45 INFO - } | |
| 20:48:45 INFO - } | |
| 20:48:45 INFO - imageTags.forEach(function (element) { | |
| 20:48:45 INFO - if (isElementPartlyInViewportAndVisible(element)) { | |
| 20:48:45 INFO - keepLargestElementByType('LargestImage', element); | |
| 20:48:45 INFO - } | |
| 20:48:45 INFO - }); | |
| 20:48:45 INFO - h1Tags.forEach(function (element) { | |
| 20:48:45 INFO - if (isElementPartlyInViewportAndVisible(element)) { | |
| 20:48:45 INFO - keepLargestElementByType('Heading', element); | |
| 20:48:45 INFO - } | |
| 20:48:45 INFO - }); | |
| 20:48:45 INFO - // We need to follow the standard for VisualMetrics | |
| 20:48:45 INFO - return { | |
| 20:48:45 INFO - viewport: { | |
| 20:48:45 INFO - width: document.documentElement.clientWidth, | |
| 20:48:45 INFO - height: document.documentElement.clientHeight | |
| 20:48:45 INFO - }, | |
| 20:48:45 INFO - // "heroes" :D https://github.com/sitespeedio/logo/blob/master/png/heroes/Pippi-Sitespeed.io.png | |
| 20:48:45 INFO - heroes: Object.keys(elementByType).map(function (type) { | |
| 20:48:45 INFO - return elementByType[type]; | |
| 20:48:45 INFO - }) | |
| 20:48:45 INFO - }; | |
| 20:48:45 INFO - })(arguments[arguments.length - 1]); | |
| 20:48:45 INFO - 1576615725626 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"return (function (custom) {\n /**\n * Collect visual elements from a page and feed the size back in the \n * format for Visual Metrics.\n */\n\n const elementByType = {};\n const areaByType = {};\n const imageTags = [].slice.call(document.body.getElementsByTagName('img'));\n const h1Tags = [].slice.call(document.body.getElementsByTagName('h1'));\n\n // When we feed options from the CLI it can be a String or an \n // Array with Strings. Make it easy to treat everything the same. \n function toArray(arrayLike) {\n if (arrayLike === undefined || arrayLike === null) {\n return [];\n }\n if (Array.isArray(arrayLike)) {\n return arrayLike;\n }\n return [arrayLike];\n }\n\n function isLargest(type, area) {\n if (!areaByType[type]) {\n return true;\n } else return areaByType[type] < area;\n }\n\n function isElementPartlyInViewportAndVisible (el) {\n const rect = el.getBoundingClientRect();\n return !(rect.bottom < 0 || rect.right < 0 || rect.left > window.innerWidth || rect.top > window.innerHeight || rect.height === 0)\n }\n\n function visibleArea(el) {\n const rect = el.getBoundingClientRect();\n const viewportWidth = document.documentElement.clientWidth;\n const viewportHeight = document.documentElement.clientHeight;\n\n // TODO make this more readable\n const width = rect.left < 0 ? rect.width + rect.left : (viewportWidth < rect.left + rect.width) ? viewportWidth - rect.left : rect.width;\n const height = rect.top < 0 ? rect.height + rect.top : (viewportHeight < rect.top + rect.height) ? viewportHeight - rect.top : rect.height;\n\n return width * height;\n }\n\n function keepLargestElementByType(type, element) {\n const area = visibleArea(element);\n if (isLargest(type, area)) {\n const filename = element.src ? element.src.substring(element.src.lastIndexOf('/') + 1) : undefined;\n const rect = element.getBoundingClientRect();\n elementByType[type] = {\n name: type,\n x: Math.round(rect.left),\n y: Math.round(rect.top),\n width: Math.round(rect.width),\n height: Math.round(rect.height),\n filename\n };\n areaByType[type] = area;\n }\n }\n\n if (custom) {\n // Input could be a String or an Array of Strings so convert it\n const customArray = toArray(custom);\n for (const nameAndSelector of customArray) {\n const parts = nameAndSelector.split(':');\n const type = parts[0];\n const selector = parts[1];\n const element = document.body.querySelector(selector);\n try {\n if (isElementPartlyInViewportAndVisible(element)) {\n keepLargestElementByType(type, element);\n }\n } catch (e) {\n console.log('Could not find matching element for selector:' + selector + ' using document.body.querySelector. Do that element exist on the page?');\n }\n }\n }\n\n imageTags.forEach(function (element) { \n if (isElementPartlyInViewportAndVisible(element)) {\n keepLargestElementByType('LargestImage', element);\n }\n });\n\n h1Tags.forEach(function (element) {\n if (isElementPartlyInViewportAndVisible(element)) {\n keepLargestElementByType('Heading', element);\n }\n });\n\n // We need to follow the standard for VisualMetrics\n return {\n viewport: {\n width: document.documentElement.clientWidth,\n height: document.documentElement.clientHeight\n },\n // \"heroes\" :D https://github.com/sitespeedio/logo/blob/master/png/heroes/Pippi-Sitespeed.io.png\n heroes: Object.keys(elementByType).map(function (type) {\n return elementByType[type];\n })\n };\n})(arguments[arguments.length - 1]);","args":[null]} | |
| 20:48:45 INFO - 1576615725627 Marionette DEBUG 0 -> [0,91,"WebDriver:ExecuteScript",{"args":[null],"script":"return (function (custom) {\n /**\n * Collect visual elements ... ).map(function (type) {\n return elementByType[type];\n })\n };\n})(arguments[arguments.length - 1]);"}] | |
| 20:48:45 INFO - 1576615725633 Marionette DEBUG 0 <- [1,91,null,{"value":{"viewport":{"width":1366,"height":694},"heroes":[{"name":"LargestImage","x":292,"y":415,"width":244,"hei ... ht":218,"filename":"413clmDR2cL._AC_UY218_.jpg"},{"name":"Heading","x":0,"y":99,"width":1366,"height":44,"filename":null}]}}] | |
| 20:48:45 INFO - 1576615725633 webdriver::server DEBUG <- 200 OK {"value":{"heroes":[{"filename":"413clmDR2cL._AC_UY218_.jpg","height":218,"name":"LargestImage","width":244,"x":292,"y":415},{"filename":null,"height":44,"name":"Heading","width":1366,"x":0,"y":99}],"viewport":{"height":694,"width":1366}}} | |
| 20:48:45 INFO - [2019-12-17 12:48:45] VERBOSE: [browsertime] Executing script return (function() { | |
| 20:48:45 INFO - let p = window.performance, | |
| 20:48:45 INFO - timing = p.timing, | |
| 20:48:45 INFO - entries = p.getEntriesByType('paint'); | |
| 20:48:45 INFO - if (entries.length > 0) { | |
| 20:48:45 INFO - for (const entry of entries) { | |
| 20:48:45 INFO - if (entry.name === 'first-paint') | |
| 20:48:45 INFO - return Number(entry.startTime.toFixed(0)); | |
| 20:48:45 INFO - } | |
| 20:48:45 INFO - } else if (timing.timeToNonBlankPaint) { | |
| 20:48:45 INFO - return Number( | |
| 20:48:45 INFO - (timing.timeToNonBlankPaint - timing.navigationStart).toFixed(0) | |
| 20:48:45 INFO - ); | |
| 20:48:45 INFO - } | |
| 20:48:45 INFO - return undefined; | |
| 20:48:45 INFO - })(); | |
| 20:48:45 INFO - 1576615725634 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"return (function() {\n let p = window.performance,\n timing = p.timing,\n entries = p.getEntriesByType('paint');\n\n if (entries.length > 0) {\n for (const entry of entries) {\n if (entry.name === 'first-paint')\n return Number(entry.startTime.toFixed(0));\n }\n } else if (timing.timeToNonBlankPaint) {\n return Number(\n (timing.timeToNonBlankPaint - timing.navigationStart).toFixed(0)\n );\n }\n return undefined;\n})();\n","args":[null]} | |
| 20:48:45 INFO - 1576615725635 Marionette DEBUG 0 -> [0,92,"WebDriver:ExecuteScript",{"args":[null],"script":"return (function() {\n let p = window.performance,\n timing = p. ... Number(\n (timing.timeToNonBlankPaint - timing.navigationStart).toFixed(0)\n );\n }\n return undefined;\n})();\n"}] | |
| 20:48:45 INFO - 1576615725637 Marionette DEBUG 0 <- [1,92,null,{"value":804}] | |
| 20:48:45 INFO - 1576615725638 webdriver::server DEBUG <- 200 OK {"value":804} | |
| 20:48:45 INFO - [2019-12-17 12:48:45] VERBOSE: [browsertime] Executing script return (function() { | |
| 20:48:45 INFO - return Number( | |
| 20:48:45 INFO - window.performance.getEntriesByType('navigation')[0].loadEventEnd.toFixed(0) | |
| 20:48:45 INFO - ); | |
| 20:48:45 INFO - })(); | |
| 20:48:45 INFO - 1576615725639 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"return (function() {\n return Number(\n window.performance.getEntriesByType('navigation')[0].loadEventEnd.toFixed(0)\n );\n})();\n","args":[null]} | |
| 20:48:45 INFO - 1576615725640 Marionette DEBUG 0 -> [0,93,"WebDriver:ExecuteScript",{"args":[null],"script":"return (function() {\n return Number(\n window.performance.getEntriesByType('navigation')[0].loadEventEnd.toFixed(0)\n );\n})();\n"}] | |
| 20:48:45 INFO - 1576615725641 Marionette DEBUG 0 <- [1,93,null,{"value":1941}] | |
| 20:48:45 INFO - 1576615725642 webdriver::server DEBUG <- 200 OK {"value":1941} | |
| 20:48:45 INFO - [2019-12-17 12:48:45] VERBOSE: [browsertime] Executing script return (function() { | |
| 20:48:45 INFO - const t = window.performance.getEntriesByType('navigation')[0]; | |
| 20:48:45 INFO - const d = 0; | |
| 20:48:45 INFO - return { | |
| 20:48:45 INFO - connectStart: Number(t.connectStart.toFixed(d)), | |
| 20:48:45 INFO - domComplete: Number(t.domComplete.toFixed(d)), | |
| 20:48:45 INFO - domContentLoadedEventEnd: Number(t.domContentLoadedEventEnd.toFixed(d)), | |
| 20:48:45 INFO - domContentLoadedEventStart: Number(t.domContentLoadedEventStart.toFixed(d)), | |
| 20:48:45 INFO - domInteractive: Number(t.domInteractive.toFixed(d)), | |
| 20:48:45 INFO - domainLookupEnd: Number(t.domainLookupEnd.toFixed(d)), | |
| 20:48:45 INFO - domainLookupStart: Number(t.domainLookupStart.toFixed(d)), | |
| 20:48:45 INFO - duration: Number(t.duration.toFixed(d)), | |
| 20:48:45 INFO - fetchStart: Number(t.fetchStart.toFixed(d)), | |
| 20:48:45 INFO - loadEventEnd: Number(t.loadEventEnd.toFixed(d)), | |
| 20:48:45 INFO - loadEventStart: Number(t.loadEventStart.toFixed(d)), | |
| 20:48:45 INFO - redirectEnd: Number(t.redirectEnd.toFixed(d)), | |
| 20:48:45 INFO - redirectStart: Number(t.redirectStart.toFixed(d)), | |
| 20:48:45 INFO - requestStart: Number(t.requestStart.toFixed(d)), | |
| 20:48:45 INFO - responseEnd: Number(t.responseEnd.toFixed(d)), | |
| 20:48:45 INFO - responseStart: Number(t.responseStart.toFixed(d)), | |
| 20:48:45 INFO - secureConnectionStart: Number(t.secureConnectionStart.toFixed(d)), | |
| 20:48:45 INFO - startTime: Number(t.startTime.toFixed(d)), | |
| 20:48:45 INFO - unloadEventEnd: Number(t.unloadEventEnd.toFixed(d)), | |
| 20:48:45 INFO - unloadEventStart: Number(t.unloadEventStart.toFixed(d)), | |
| 20:48:45 INFO - workerStart: Number(t.workerStart.toFixed(d)) | |
| 20:48:45 INFO - }; | |
| 20:48:45 INFO - })(); | |
| 20:48:45 INFO - 1576615725643 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"return (function() {\n const t = window.performance.getEntriesByType('navigation')[0];\n const d = 0;\n return {\n connectStart: Number(t.connectStart.toFixed(d)),\n domComplete: Number(t.domComplete.toFixed(d)),\n domContentLoadedEventEnd: Number(t.domContentLoadedEventEnd.toFixed(d)),\n domContentLoadedEventStart: Number(t.domContentLoadedEventStart.toFixed(d)),\n domInteractive: Number(t.domInteractive.toFixed(d)),\n domainLookupEnd: Number(t.domainLookupEnd.toFixed(d)),\n domainLookupStart: Number(t.domainLookupStart.toFixed(d)),\n duration: Number(t.duration.toFixed(d)),\n fetchStart: Number(t.fetchStart.toFixed(d)),\n loadEventEnd: Number(t.loadEventEnd.toFixed(d)),\n loadEventStart: Number(t.loadEventStart.toFixed(d)),\n redirectEnd: Number(t.redirectEnd.toFixed(d)),\n redirectStart: Number(t.redirectStart.toFixed(d)),\n requestStart: Number(t.requestStart.toFixed(d)),\n responseEnd: Number(t.responseEnd.toFixed(d)),\n responseStart: Number(t.responseStart.toFixed(d)),\n secureConnectionStart: Number(t.secureConnectionStart.toFixed(d)),\n startTime: Number(t.startTime.toFixed(d)),\n unloadEventEnd: Number(t.unloadEventEnd.toFixed(d)),\n unloadEventStart: Number(t.unloadEventStart.toFixed(d)),\n workerStart: Number(t.workerStart.toFixed(d))\n };\n})();\n","args":[null]} | |
| 20:48:45 INFO - 1576615725643 Marionette DEBUG 0 -> [0,94,"WebDriver:ExecuteScript",{"args":[null],"script":"return (function() {\n const t = window.performance.getEntriesByTyp ... unloadEventStart: Number(t.unloadEventStart.toFixed(d)),\n workerStart: Number(t.workerStart.toFixed(d))\n };\n})();\n"}] | |
| 20:48:45 INFO - 1576615725646 Marionette DEBUG 0 <- [1,94,null,{"value":{"connectStart":2,"domComplete":1935,"domContentLoadedEventEnd":1112,"domContentLoadedEventStart":1107,"d ... seEnd":5,"responseStart":5,"secureConnectionStart":0,"startTime":0,"unloadEventEnd":0,"unloadEventStart":0,"workerStart":0}}] | |
| 20:48:45 INFO - 1576615725646 webdriver::server DEBUG <- 200 OK {"value":{"connectStart":2,"domComplete":1935,"domContentLoadedEventEnd":1112,"domContentLoadedEventStart":1107,"domInteractive":1044,"domainLookupEnd":2,"domainLookupStart":2,"duration":1941,"fetchStart":0,"loadEventEnd":1941,"loadEventStart":1935,"redirectEnd":0,"redirectStart":0,"requestStart":2,"responseEnd":5,"responseStart":5,"secureConnectionStart":0,"startTime":0,"unloadEventEnd":0,"unloadEventStart":0,"workerStart":0}} | |
| 20:48:45 INFO - [2019-12-17 12:48:45] VERBOSE: [browsertime] Executing script return (function() { | |
| 20:48:45 INFO - const t = window.performance.getEntriesByType('navigation')[0]; | |
| 20:48:45 INFO - const d = 0; | |
| 20:48:45 INFO - return { | |
| 20:48:45 INFO - domainLookupTime: Number( | |
| 20:48:45 INFO - (t.domainLookupEnd - t.domainLookupStart).toFixed(d) | |
| 20:48:45 INFO - ), | |
| 20:48:45 INFO - redirectionTime: Number((t.redirectEnd - t.redirectStart).toFixed(d)), | |
| 20:48:45 INFO - serverConnectionTime: Number((t.connectEnd - t.connectStart).toFixed(d)), | |
| 20:48:45 INFO - serverResponseTime: Number((t.responseEnd - t.requestStart).toFixed(d)), | |
| 20:48:45 INFO - pageDownloadTime: Number((t.responseEnd - t.responseStart).toFixed(d)), | |
| 20:48:45 INFO - domInteractiveTime: Number(t.domInteractive.toFixed(d)), | |
| 20:48:45 INFO - domContentLoadedTime: Number(t.domContentLoadedEventStart.toFixed(d)), | |
| 20:48:45 INFO - pageLoadTime: Number(t.loadEventStart.toFixed(d)), | |
| 20:48:45 INFO - frontEndTime: Number((t.loadEventStart - t.responseEnd).toFixed(d)), | |
| 20:48:45 INFO - backEndTime: Number(t.responseStart.toFixed(d)) | |
| 20:48:45 INFO - }; | |
| 20:48:45 INFO - })(); | |
| 20:48:45 INFO - 1576615725648 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"return (function() {\n const t = window.performance.getEntriesByType('navigation')[0];\n const d = 0;\n return {\n domainLookupTime: Number(\n (t.domainLookupEnd - t.domainLookupStart).toFixed(d)\n ),\n redirectionTime: Number((t.redirectEnd - t.redirectStart).toFixed(d)),\n serverConnectionTime: Number((t.connectEnd - t.connectStart).toFixed(d)),\n serverResponseTime: Number((t.responseEnd - t.requestStart).toFixed(d)),\n pageDownloadTime: Number((t.responseEnd - t.responseStart).toFixed(d)),\n domInteractiveTime: Number(t.domInteractive.toFixed(d)),\n domContentLoadedTime: Number(t.domContentLoadedEventStart.toFixed(d)),\n pageLoadTime: Number(t.loadEventStart.toFixed(d)),\n frontEndTime: Number((t.loadEventStart - t.responseEnd).toFixed(d)),\n backEndTime: Number(t.responseStart.toFixed(d))\n };\n})();\n","args":[null]} | |
| 20:48:45 INFO - 1576615725648 Marionette DEBUG 0 -> [0,95,"WebDriver:ExecuteScript",{"args":[null],"script":"return (function() {\n const t = window.performance.getEntriesByTyp ... Number((t.loadEventStart - t.responseEnd).toFixed(d)),\n backEndTime: Number(t.responseStart.toFixed(d))\n };\n})();\n"}] | |
| 20:48:45 INFO - 1576615725650 Marionette DEBUG 0 <- [1,95,null,{"value":{"domainLookupTime":0,"redirectionTime":0,"serverConnectionTime":0,"serverResponseTime":3,"pageDownloadTime":0,"domInteractiveTime":1044,"domContentLoadedTime":1107,"pageLoadTime":1935,"frontEndTime":1929,"backEndTime":5}}] | |
| 20:48:45 INFO - 1576615725650 webdriver::server DEBUG <- 200 OK {"value":{"backEndTime":5,"domContentLoadedTime":1107,"domInteractiveTime":1044,"domainLookupTime":0,"frontEndTime":1929,"pageDownloadTime":0,"pageLoadTime":1935,"redirectionTime":0,"serverConnectionTime":0,"serverResponseTime":3}} | |
| 20:48:45 INFO - [2019-12-17 12:48:45] VERBOSE: [browsertime] Executing script return (function() { | |
| 20:48:45 INFO - let p = window.performance, | |
| 20:48:45 INFO - entries, | |
| 20:48:45 INFO - values = {}; | |
| 20:48:45 INFO - entries = p.getEntriesByType('paint'); | |
| 20:48:45 INFO - if (entries.length > 0) { | |
| 20:48:45 INFO - for (const entry of entries) { | |
| 20:48:45 INFO - values[entry.name] = Number(entry.startTime.toFixed(0)); | |
| 20:48:45 INFO - } | |
| 20:48:45 INFO - return values; | |
| 20:48:45 INFO - } else return undefined; | |
| 20:48:45 INFO - })(); | |
| 20:48:45 INFO - 1576615725651 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"return (function() {\n let p = window.performance,\n entries,\n values = {};\n\n entries = p.getEntriesByType('paint');\n\n if (entries.length > 0) {\n for (const entry of entries) {\n values[entry.name] = Number(entry.startTime.toFixed(0));\n }\n return values;\n } else return undefined;\n})();\n","args":[null]} | |
| 20:48:45 INFO - 1576615725652 Marionette DEBUG 0 -> [0,96,"WebDriver:ExecuteScript",{"args":[null],"script":"return (function() {\n let p = window.performance,\n entries,\n ... values[entry.name] = Number(entry.startTime.toFixed(0));\n }\n return values;\n } else return undefined;\n})();\n"}] | |
| 20:48:45 INFO - 1576615725653 Marionette DEBUG 0 <- [1,96,null,{"value":null}] | |
| 20:48:45 INFO - 1576615725654 webdriver::server DEBUG <- 200 OK {"value":null} | |
| 20:48:45 INFO - [2019-12-17 12:48:45] VERBOSE: [browsertime] Executing script return (function() { | |
| 20:48:45 INFO - /****************************************************************************** | |
| 20:48:45 INFO - Copyright (c) 2014, Google Inc. | |
| 20:48:45 INFO - All rights reserved. | |
| 20:48:45 INFO - Redistribution and use in source and binary forms, with or without | |
| 20:48:45 INFO - modification, are permitted provided that the following conditions are met: | |
| 20:48:45 INFO - * Redistributions of source code must retain the above copyright notice, | |
| 20:48:45 INFO - this list of conditions and the following disclaimer. | |
| 20:48:45 INFO - * Redistributions in binary form must reproduce the above copyright notice, | |
| 20:48:45 INFO - this list of conditions and the following disclaimer in the documentation | |
| 20:48:45 INFO - and/or other materials provided with the distribution. | |
| 20:48:45 INFO - * Neither the name of the <ORGANIZATION> nor the names of its contributors | |
| 20:48:45 INFO - may be used to endorse or promote products derived from this software | |
| 20:48:45 INFO - without specific prior written permission. | |
| 20:48:45 INFO - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |
| 20:48:45 INFO - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
| 20:48:45 INFO - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |
| 20:48:45 INFO - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE | |
| 20:48:45 INFO - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |
| 20:48:45 INFO - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | |
| 20:48:45 INFO - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |
| 20:48:45 INFO - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |
| 20:48:45 INFO - OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |
| 20:48:45 INFO - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
| 20:48:45 INFO - ******************************************************************************/ | |
| 20:48:45 INFO - /****************************************************************************** | |
| 20:48:45 INFO - ******************************************************************************* | |
| 20:48:45 INFO - Calculates the Speed Index for a page by: | |
| 20:48:45 INFO - - Collecting a list of visible rectangles for elements that loaded | |
| 20:48:45 INFO - external resources (images, background images, fonts) | |
| 20:48:45 INFO - - Gets the time when the external resource for those elements loaded | |
| 20:48:45 INFO - through Resource Timing | |
| 20:48:45 INFO - - Calculates the likely time that the background painted | |
| 20:48:45 INFO - - Runs the various paint rectangles through the SpeedIndex calculation: | |
| 20:48:45 INFO - https://sites.google.com/a/webpagetest.org/docs/using-webpagetest/metrics/speed-index | |
| 20:48:45 INFO - TODO: | |
| 20:48:45 INFO - - Improve the start render estimate | |
| 20:48:45 INFO - - Handle overlapping rects (though maybe counting the area as multiple paints | |
| 20:48:45 INFO - will work out well) | |
| 20:48:45 INFO - - Detect elements with Custom fonts and the time that the respective font | |
| 20:48:45 INFO - loaded | |
| 20:48:45 INFO - - Better error handling for browsers that don't support resource timing | |
| 20:48:45 INFO - ******************************************************************************* | |
| 20:48:45 INFO - ******************************************************************************/ | |
| 20:48:45 INFO - var RUMSpeedIndex = function(win) { | |
| 20:48:45 INFO - win = win || window; | |
| 20:48:45 INFO - var doc = win.document; | |
| 20:48:45 INFO - /**************************************************************************** | |
| 20:48:45 INFO - Support Routines | |
| 20:48:45 INFO - ****************************************************************************/ | |
| 20:48:45 INFO - // Get the rect for the visible portion of the provided DOM element | |
| 20:48:45 INFO - var GetElementViewportRect = function(el) { | |
| 20:48:45 INFO - var intersect = false; | |
| 20:48:45 INFO - if (el.getBoundingClientRect) { | |
| 20:48:45 INFO - var elRect = el.getBoundingClientRect(); | |
| 20:48:45 INFO - intersect = {'top': Math.max(elRect.top, 0), | |
| 20:48:45 INFO - 'left': Math.max(elRect.left, 0), | |
| 20:48:45 INFO - 'bottom': Math.min(elRect.bottom, (win.innerHeight || doc.documentElement.clientHeight)), | |
| 20:48:45 INFO - 'right': Math.min(elRect.right, (win.innerWidth || doc.documentElement.clientWidth))}; | |
| 20:48:45 INFO - if (intersect.bottom <= intersect.top || | |
| 20:48:45 INFO - intersect.right <= intersect.left) { | |
| 20:48:45 INFO - intersect = false; | |
| 20:48:45 INFO - } else { | |
| 20:48:45 INFO - intersect.area = (intersect.bottom - intersect.top) * (intersect.right - intersect.left); | |
| 20:48:45 INFO - } | |
| 20:48:45 INFO - } | |
| 20:48:45 INFO - return intersect; | |
| 20:48:45 INFO - }; | |
| 20:48:45 INFO - // Check a given element to see if it is visible | |
| 20:48:45 INFO - var CheckElement = function(el, url) { | |
| 20:48:45 INFO - if (url) { | |
| 20:48:45 INFO - var rect = GetElementViewportRect(el); | |
| 20:48:45 INFO - if (rect) { | |
| 20:48:45 INFO - rects.push({'url': url, | |
| 20:48:45 INFO - 'area': rect.area, | |
| 20:48:45 INFO - 'rect': rect}); | |
| 20:48:45 INFO - } | |
| 20:48:45 INFO - } | |
| 20:48:45 INFO - }; | |
| 20:48:45 INFO - // Get the visible rectangles for elements that we care about | |
| 20:48:45 INFO - var GetRects = function() { | |
| 20:48:45 INFO - // Walk all of the elements in the DOM (try to only do this once) | |
| 20:48:45 INFO - var elements = doc.getElementsByTagName('*'); | |
| 20:48:45 INFO - var re = /url\(.*(http.*)\)/ig; | |
| 20:48:45 INFO - for (var i = 0; i < elements.length; i++) { | |
| 20:48:45 INFO - var el = elements[i]; | |
| 20:48:45 INFO - var style = win.getComputedStyle(el); | |
| 20:48:45 INFO - // check for Images | |
| 20:48:45 INFO - if (el.tagName == 'IMG') { | |
| 20:48:45 INFO - CheckElement(el, el.currentSrc || el.src); | |
| 20:48:45 INFO - } | |
| 20:48:45 INFO - // Check for background images | |
| 20:48:45 INFO - if (style['background-image']) { | |
| 20:48:45 INFO - re.lastIndex = 0; | |
| 20:48:45 INFO - var matches = re.exec(style['background-image']); | |
| 20:48:45 INFO - if (matches && matches.length > 1) | |
| 20:48:45 INFO - CheckElement(el, matches[1].replace('"', '')); | |
| 20:48:45 INFO - } | |
| 20:48:45 INFO - // recursively walk any iFrames | |
| 20:48:45 INFO - if (el.tagName == 'IFRAME') { | |
| 20:48:45 INFO - try { | |
| 20:48:45 INFO - var rect = GetElementViewportRect(el); | |
| 20:48:45 INFO - if (rect) { | |
| 20:48:45 INFO - var tm = RUMSpeedIndex(el.contentWindow); | |
| 20:48:45 INFO - if (tm) { | |
| 20:48:45 INFO - rects.push({'tm': tm, | |
| 20:48:45 INFO - 'area': rect.area, | |
| 20:48:45 INFO - 'rect': rect}); | |
| 20:48:45 INFO - } | |
| 20:48:45 INFO - } | |
| 20:48:45 INFO - } catch(e) { | |
| 20:48:45 INFO - } | |
| 20:48:45 INFO - } | |
| 20:48:45 INFO - } | |
| 20:48:45 INFO - }; | |
| 20:48:45 INFO - // Get the time at which each external resource loaded | |
| 20:48:45 INFO - var GetRectTimings = function() { | |
| 20:48:45 INFO - var timings = {}; | |
| 20:48:45 INFO - var requests = win.performance.getEntriesByType("resource"); | |
| 20:48:45 INFO - for (var i = 0; i < requests.length; i++) | |
| 20:48:45 INFO - timings[requests[i].name] = requests[i].responseEnd; | |
| 20:48:45 INFO - for (var j = 0; j < rects.length; j++) { | |
| 20:48:45 INFO - if (!('tm' in rects[j])) | |
| 20:48:45 INFO - rects[j].tm = timings[rects[j].url] !== undefined ? timings[rects[j].url] : 0; | |
| 20:48:45 INFO - } | |
| 20:48:45 INFO - }; | |
| 20:48:45 INFO - // Get the first paint time. | |
| 20:48:45 INFO - var GetFirstPaint = function() { | |
| 20:48:45 INFO - // Try the standardized paint timing api | |
| 20:48:45 INFO - try { | |
| 20:48:45 INFO - var entries = performance.getEntriesByType('paint'); | |
| 20:48:45 INFO - for (var i = 0; i < entries.length; i++) { | |
| 20:48:45 INFO - if (entries[i]['name'] == 'first-paint') { | |
| 20:48:45 INFO - navStart = performance.getEntriesByType("navigation")[0].startTime; | |
| 20:48:45 INFO - firstPaint = entries[i].startTime - navStart; | |
| 20:48:45 INFO - break; | |
| 20:48:45 INFO - } | |
| 20:48:45 INFO - } | |
| 20:48:45 INFO - } catch(e) { | |
| 20:48:45 INFO - } | |
| 20:48:45 INFO - // If the browser supports a first paint event, just use what the browser reports | |
| 20:48:45 INFO - if (firstPaint === undefined && 'msFirstPaint' in win.performance.timing) | |
| 20:48:45 INFO - firstPaint = win.performance.timing.msFirstPaint - navStart; | |
| 20:48:45 INFO - // For browsers that don't support first-paint or where we get insane values, | |
| 20:48:45 INFO - // use the time of the last non-async script or css from the head. | |
| 20:48:45 INFO - if (firstPaint === undefined || firstPaint < 0 || firstPaint > 120000) { | |
| 20:48:45 INFO - firstPaint = win.performance.timing.responseStart - navStart; | |
| 20:48:45 INFO - var headURLs = {}; | |
| 20:48:45 INFO - var headElements = doc.getElementsByTagName('head')[0].children; | |
| 20:48:45 INFO - for (var i = 0; i < headElements.length; i++) { | |
| 20:48:45 INFO - var el = headElements[i]; | |
| 20:48:45 INFO - if (el.tagName == 'SCRIPT' && el.src && !el.async) | |
| 20:48:45 INFO - headURLs[el.src] = true; | |
| 20:48:45 INFO - if (el.tagName == 'LINK' && el.rel == 'stylesheet' && el.href) | |
| 20:48:45 INFO - headURLs[el.href] = true; | |
| 20:48:45 INFO - } | |
| 20:48:45 INFO - var requests = win.performance.getEntriesByType("resource"); | |
| 20:48:45 INFO - var doneCritical = false; | |
| 20:48:45 INFO - for (var j = 0; j < requests.length; j++) { | |
| 20:48:45 INFO - if (!doneCritical && | |
| 20:48:45 INFO - headURLs[requests[j].name] && | |
| 20:48:45 INFO - (requests[j].initiatorType == 'script' || requests[j].initiatorType == 'link')) { | |
| 20:48:45 INFO - var requestEnd = requests[j].responseEnd; | |
| 20:48:45 INFO - if (firstPaint === undefined || requestEnd > firstPaint) | |
| 20:48:45 INFO - firstPaint = requestEnd; | |
| 20:48:45 INFO - } else { | |
| 20:48:45 INFO - doneCritical = true; | |
| 20:48:45 INFO - } | |
| 20:48:45 INFO - } | |
| 20:48:45 INFO - } | |
| 20:48:45 INFO - firstPaint = Math.max(firstPaint, 0); | |
| 20:48:45 INFO - }; | |
| 20:48:45 INFO - // Sort and group all of the paint rects by time and use them to | |
| 20:48:45 INFO - // calculate the visual progress | |
| 20:48:45 INFO - var CalculateVisualProgress = function() { | |
| 20:48:45 INFO - var paints = {'0':0}; | |
| 20:48:45 INFO - var total = 0; | |
| 20:48:45 INFO - for (var i = 0; i < rects.length; i++) { | |
| 20:48:45 INFO - var tm = firstPaint; | |
| 20:48:45 INFO - if ('tm' in rects[i] && rects[i].tm > firstPaint) | |
| 20:48:45 INFO - tm = rects[i].tm; | |
| 20:48:45 INFO - if (paints[tm] === undefined) | |
| 20:48:45 INFO - paints[tm] = 0; | |
| 20:48:45 INFO - paints[tm] += rects[i].area; | |
| 20:48:45 INFO - total += rects[i].area; | |
| 20:48:45 INFO - } | |
| 20:48:45 INFO - // Add a paint area for the page background (count 10% of the pixels not | |
| 20:48:45 INFO - // covered by existing paint rects. | |
| 20:48:45 INFO - var pixels = Math.max(doc.documentElement.clientWidth, win.innerWidth || 0) * | |
| 20:48:45 INFO - Math.max(doc.documentElement.clientHeight, win.innerHeight || 0); | |
| 20:48:45 INFO - if (pixels > 0 ) { | |
| 20:48:45 INFO - pixels = Math.max(pixels - total, 0) * pageBackgroundWeight; | |
| 20:48:45 INFO - if (paints[firstPaint] === undefined) | |
| 20:48:45 INFO - paints[firstPaint] = 0; | |
| 20:48:45 INFO - paints[firstPaint] += pixels; | |
| 20:48:45 INFO - total += pixels; | |
| 20:48:45 INFO - } | |
| 20:48:45 INFO - // Calculate the visual progress | |
| 20:48:45 INFO - if (total) { | |
| 20:48:45 INFO - for (var time in paints) { | |
| 20:48:45 INFO - if (paints.hasOwnProperty(time)) { | |
| 20:48:45 INFO - progress.push({'tm': time, 'area': paints[time]}); | |
| 20:48:45 INFO - } | |
| 20:48:45 INFO - } | |
| 20:48:45 INFO - progress.sort(function(a,b){return a.tm - b.tm;}); | |
| 20:48:45 INFO - var accumulated = 0; | |
| 20:48:45 INFO - for (var j = 0; j < progress.length; j++) { | |
| 20:48:45 INFO - accumulated += progress[j].area; | |
| 20:48:45 INFO - progress[j].progress = accumulated / total; | |
| 20:48:45 INFO - } | |
| 20:48:45 INFO - } | |
| 20:48:45 INFO - }; | |
| 20:48:45 INFO - // Given the visual progress information, Calculate the speed index. | |
| 20:48:45 INFO - var CalculateSpeedIndex = function() { | |
| 20:48:45 INFO - if (progress.length) { | |
| 20:48:45 INFO - SpeedIndex = 0; | |
| 20:48:45 INFO - var lastTime = 0; | |
| 20:48:45 INFO - var lastProgress = 0; | |
| 20:48:45 INFO - for (var i = 0; i < progress.length; i++) { | |
| 20:48:45 INFO - var elapsed = progress[i].tm - lastTime; | |
| 20:48:45 INFO - if (elapsed > 0 && lastProgress < 1) | |
| 20:48:45 INFO - SpeedIndex += (1 - lastProgress) * elapsed; | |
| 20:48:45 INFO - lastTime = progress[i].tm; | |
| 20:48:45 INFO - lastProgress = progress[i].progress; | |
| 20:48:45 INFO - } | |
| 20:48:45 INFO - } else { | |
| 20:48:45 INFO - SpeedIndex = firstPaint; | |
| 20:48:45 INFO - } | |
| 20:48:45 INFO - }; | |
| 20:48:45 INFO - /**************************************************************************** | |
| 20:48:45 INFO - Main flow | |
| 20:48:45 INFO - ****************************************************************************/ | |
| 20:48:45 INFO - var rects = []; | |
| 20:48:45 INFO - var progress = []; | |
| 20:48:45 INFO - var firstPaint; | |
| 20:48:45 INFO - var SpeedIndex; | |
| 20:48:45 INFO - var pageBackgroundWeight = 0.1; | |
| 20:48:45 INFO - try { | |
| 20:48:45 INFO - var navStart = win.performance.timing.navigationStart; | |
| 20:48:45 INFO - GetRects(); | |
| 20:48:45 INFO - GetRectTimings(); | |
| 20:48:45 INFO - GetFirstPaint(); | |
| 20:48:45 INFO - CalculateVisualProgress(); | |
| 20:48:45 INFO - CalculateSpeedIndex(); | |
| 20:48:45 INFO - } catch(e) { | |
| 20:48:45 INFO - } | |
| 20:48:45 INFO - /* Debug output for testing | |
| 20:48:45 INFO - var dbg = ''; | |
| 20:48:45 INFO - dbg += "Paint Rects\n"; | |
| 20:48:45 INFO - for (var i = 0; i < rects.length; i++) | |
| 20:48:45 INFO - dbg += '(' + rects[i].area + ') ' + rects[i].tm + ' - ' + rects[i].url + "\n"; | |
| 20:48:45 INFO - dbg += "Visual Progress\n"; | |
| 20:48:45 INFO - for (var i = 0; i < progress.length; i++) | |
| 20:48:45 INFO - dbg += '(' + progress[i].area + ') ' + progress[i].tm + ' - ' + progress[i].progress + "\n"; | |
| 20:48:45 INFO - dbg += 'First Paint: ' + firstPaint + "\n"; | |
| 20:48:45 INFO - dbg += 'Speed Index: ' + SpeedIndex + "\n"; | |
| 20:48:45 INFO - console.log(dbg); | |
| 20:48:45 INFO - */ | |
| 20:48:45 INFO - return Number(SpeedIndex.toFixed(0)); | |
| 20:48:45 INFO - }; | |
| 20:48:45 INFO - return RUMSpeedIndex()|| -1; | |
| 20:48:45 INFO - })(); | |
| 20:48:45 INFO - 1576615725656 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"return (function() {\n /******************************************************************************\n Copyright (c) 2014, Google Inc.\n All rights reserved.\n \n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n \n * Redistributions of source code must retain the above copyright notice,\n this list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n * Neither the name of the <ORGANIZATION> nor the names of its contributors\n may be used to endorse or promote products derived from this software\n without specific prior written permission.\n \n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n ******************************************************************************/\n \n /******************************************************************************\n *******************************************************************************\n Calculates the Speed Index for a page by:\n - Collecting a list of visible rectangles for elements that loaded\n external resources (images, background images, fonts)\n - Gets the time when the external resource for those elements loaded\n through Resource Timing\n - Calculates the likely time that the background painted\n - Runs the various paint rectangles through the SpeedIndex calculation:\n https://sites.google.com/a/webpagetest.org/docs/using-webpagetest/metrics/speed-index\n \n TODO:\n - Improve the start render estimate\n - Handle overlapping rects (though maybe counting the area as multiple paints\n will work out well)\n - Detect elements with Custom fonts and the time that the respective font\n loaded\n - Better error handling for browsers that don't support resource timing\n *******************************************************************************\n ******************************************************************************/\n \n var RUMSpeedIndex = function(win) {\n win = win || window;\n var doc = win.document;\n \n /****************************************************************************\n Support Routines\n ****************************************************************************/\n // Get the rect for the visible portion of the provided DOM element\n var GetElementViewportRect = function(el) {\n var intersect = false;\n if (el.getBoundingClientRect) {\n var elRect = el.getBoundingClientRect();\n intersect = {'top': Math.max(elRect.top, 0),\n 'left': Math.max(elRect.left, 0),\n 'bottom': Math.min(elRect.bottom, (win.innerHeight || doc.documentElement.clientHeight)),\n 'right': Math.min(elRect.right, (win.innerWidth || doc.documentElement.clientWidth))};\n if (intersect.bottom <= intersect.top ||\n intersect.right <= intersect.left) {\n intersect = false;\n } else {\n intersect.area = (intersect.bottom - intersect.top) * (intersect.right - intersect.left);\n }\n }\n return intersect;\n };\n \n // Check a given element to see if it is visible\n var CheckElement = function(el, url) {\n if (url) {\n var rect = GetElementViewportRect(el);\n if (rect) {\n rects.push({'url': url,\n 'area': rect.area,\n 'rect': rect});\n }\n }\n };\n \n // Get the visible rectangles for elements that we care about\n var GetRects = function() {\n // Walk all of the elements in the DOM (try to only do this once)\n var elements = doc.getElementsByTagName('*');\n var re = /url\\(.*(http.*)\\)/ig;\n for (var i = 0; i < elements.length; i++) {\n var el = elements[i];\n var style = win.getComputedStyle(el);\n \n // check for Images\n if (el.tagName == 'IMG') {\n CheckElement(el, el.currentSrc || el.src);\n }\n // Check for background images\n if (style['background-image']) {\n re.lastIndex = 0;\n var matches = re.exec(style['background-image']);\n if (matches && matches.length > 1)\n CheckElement(el, matches[1].replace('\"', ''));\n }\n // recursively walk any iFrames\n if (el.tagName == 'IFRAME') {\n try {\n var rect = GetElementViewportRect(el);\n if (rect) {\n var tm = RUMSpeedIndex(el.contentWindow);\n if (tm) {\n rects.push({'tm': tm,\n 'area': rect.area,\n 'rect': rect});\n }\n }\n } catch(e) {\n }\n }\n }\n };\n \n // Get the time at which each external resource loaded\n var GetRectTimings = function() {\n var timings = {};\n var requests = win.performance.getEntriesByType(\"resource\");\n for (var i = 0; i < requests.length; i++)\n timings[requests[i].name] = requests[i].responseEnd;\n for (var j = 0; j < rects.length; j++) {\n if (!('tm' in rects[j]))\n rects[j].tm = timings[rects[j].url] !== undefined ? timings[rects[j].url] : 0;\n }\n };\n \n // Get the first paint time.\n var GetFirstPaint = function() {\n // Try the standardized paint timing api\n try {\n var entries = performance.getEntriesByType('paint');\n for (var i = 0; i < entries.length; i++) {\n if (entries[i]['name'] == 'first-paint') {\n navStart = performance.getEntriesByType(\"navigation\")[0].startTime;\n firstPaint = entries[i].startTime - navStart;\n break;\n }\n }\n } catch(e) {\n }\n // If the browser supports a first paint event, just use what the browser reports\n if (firstPaint === undefined && 'msFirstPaint' in win.performance.timing)\n firstPaint = win.performance.timing.msFirstPaint - navStart;\n // For browsers that don't support first-paint or where we get insane values,\n // use the time of the last non-async script or css from the head.\n if (firstPaint === undefined || firstPaint < 0 || firstPaint > 120000) {\n firstPaint = win.performance.timing.responseStart - navStart;\n var headURLs = {};\n var headElements = doc.getElementsByTagName('head')[0].children;\n for (var i = 0; i < headElements.length; i++) {\n var el = headElements[i];\n if (el.tagName == 'SCRIPT' && el.src && !el.async)\n headURLs[el.src] = true;\n if (el.tagName == 'LINK' && el.rel == 'stylesheet' && el.href)\n headURLs[el.href] = true;\n }\n var requests = win.performance.getEntriesByType(\"resource\");\n var doneCritical = false;\n for (var j = 0; j < requests.length; j++) {\n if (!doneCritical &&\n headURLs[requests[j].name] &&\n (requests[j].initiatorType == 'script' || requests[j].initiatorType == 'link')) {\n var requestEnd = requests[j].responseEnd;\n if (firstPaint === undefined || requestEnd > firstPaint)\n firstPaint = requestEnd;\n } else {\n doneCritical = true;\n }\n }\n }\n firstPaint = Math.max(firstPaint, 0);\n };\n \n // Sort and group all of the paint rects by time and use them to\n // calculate the visual progress\n var CalculateVisualProgress = function() {\n var paints = {'0':0};\n var total = 0;\n for (var i = 0; i < rects.length; i++) {\n var tm = firstPaint;\n if ('tm' in rects[i] && rects[i].tm > firstPaint)\n tm = rects[i].tm;\n if (paints[tm] === undefined)\n paints[tm] = 0;\n paints[tm] += rects[i].area;\n total += rects[i].area;\n }\n // Add a paint area for the page background (count 10% of the pixels not\n // covered by existing paint rects.\n var pixels = Math.max(doc.documentElement.clientWidth, win.innerWidth || 0) *\n Math.max(doc.documentElement.clientHeight, win.innerHeight || 0);\n if (pixels > 0 ) {\n pixels = Math.max(pixels - total, 0) * pageBackgroundWeight;\n if (paints[firstPaint] === undefined)\n paints[firstPaint] = 0;\n paints[firstPaint] += pixels;\n total += pixels;\n }\n // Calculate the visual progress\n if (total) {\n for (var time in paints) {\n if (paints.hasOwnProperty(time)) {\n progress.push({'tm': time, 'area': paints[time]});\n }\n }\n progress.sort(function(a,b){return a.tm - b.tm;});\n var accumulated = 0;\n for (var j = 0; j < progress.length; j++) {\n accumulated += progress[j].area;\n progress[j].progress = accumulated / total;\n }\n }\n };\n \n // Given the visual progress information, Calculate the speed index.\n var CalculateSpeedIndex = function() {\n if (progress.length) {\n SpeedIndex = 0;\n var lastTime = 0;\n var lastProgress = 0;\n for (var i = 0; i < progress.length; i++) {\n var elapsed = progress[i].tm - lastTime;\n if (elapsed > 0 && lastProgress < 1)\n SpeedIndex += (1 - lastProgress) * elapsed;\n lastTime = progress[i].tm;\n lastProgress = progress[i].progress;\n }\n } else {\n SpeedIndex = firstPaint;\n }\n };\n \n /****************************************************************************\n Main flow\n ****************************************************************************/\n var rects = [];\n var progress = [];\n var firstPaint;\n var SpeedIndex;\n var pageBackgroundWeight = 0.1;\n try {\n var navStart = win.performance.timing.navigationStart;\n GetRects();\n GetRectTimings();\n GetFirstPaint();\n CalculateVisualProgress();\n CalculateSpeedIndex();\n } catch(e) {\n }\n /* Debug output for testing\n var dbg = '';\n dbg += \"Paint Rects\\n\";\n for (var i = 0; i < rects.length; i++)\n dbg += '(' + rects[i].area + ') ' + rects[i].tm + ' - ' + rects[i].url + \"\\n\";\n dbg += \"Visual Progress\\n\";\n for (var i = 0; i < progress.length; i++)\n dbg += '(' + progress[i].area + ') ' + progress[i].tm + ' - ' + progress[i].progress + \"\\n\";\n dbg += 'First Paint: ' + firstPaint + \"\\n\";\n dbg += 'Speed Index: ' + SpeedIndex + \"\\n\";\n console.log(dbg);\n */\n return Number(SpeedIndex.toFixed(0));\n };\n \n return RUMSpeedIndex()|| -1;\n })();","args":[null]} | |
| 20:48:45 INFO - 1576615725657 Marionette DEBUG 0 -> [0,97,"WebDriver:ExecuteScript",{"args":[null],"script":"return (function() {\n /******************************************* ... console.log(dbg);\n */\n return Number(SpeedIndex.toFixed(0));\n };\n \n return RUMSpeedIndex()|| -1;\n })();"}] | |
| 20:48:45 INFO - 1576615725851 Marionette DEBUG 0 <- [1,97,null,{"value":413}] | |
| 20:48:45 INFO - 1576615725851 webdriver::server DEBUG <- 200 OK {"value":413} | |
| 20:48:45 INFO - [2019-12-17 12:48:45] VERBOSE: [browsertime] Executing script return (function () { | |
| 20:48:45 INFO - // https://developer.mozilla.org/en-US/docs/Web/API/PerformanceServerTiming | |
| 20:48:45 INFO - const entries = window.performance.getEntriesByType('resource'); | |
| 20:48:45 INFO - if (entries.length > 0 && entries[0].serverTiming) { | |
| 20:48:45 INFO - const timings = entries[0].serverTiming; | |
| 20:48:45 INFO - const serverTimings = []; | |
| 20:48:45 INFO - for (let timing of timings) { | |
| 20:48:45 INFO - serverTimings.push({ | |
| 20:48:45 INFO - name: timing.name, | |
| 20:48:45 INFO - duration: timing.duration, | |
| 20:48:45 INFO - description: timing.description | |
| 20:48:45 INFO - }); | |
| 20:48:45 INFO - } | |
| 20:48:45 INFO - return serverTimings; | |
| 20:48:45 INFO - } else return undefined; | |
| 20:48:45 INFO - })(); | |
| 20:48:45 INFO - 1576615725853 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"return (function () {\n // https://developer.mozilla.org/en-US/docs/Web/API/PerformanceServerTiming\n const entries = window.performance.getEntriesByType('resource');\n if (entries.length > 0 && entries[0].serverTiming) {\n const timings = entries[0].serverTiming;\n const serverTimings = [];\n for (let timing of timings) {\n serverTimings.push({\n name: timing.name,\n duration: timing.duration,\n description: timing.description\n });\n }\n return serverTimings;\n } else return undefined;\n})();\n","args":[null]} | |
| 20:48:45 INFO - 1576615725853 Marionette DEBUG 0 -> [0,98,"WebDriver:ExecuteScript",{"args":[null],"script":"return (function () {\n // https://developer.mozilla.org/en-US/do ... ion: timing.description\n });\n }\n return serverTimings;\n } else return undefined;\n})();\n"}] | |
| 20:48:45 INFO - 1576615725855 Marionette DEBUG 0 <- [1,98,null,{"value":[]}] | |
| 20:48:45 INFO - 1576615725855 webdriver::server DEBUG <- 200 OK {"value":[]} | |
| 20:48:45 INFO - [2019-12-17 12:48:45] VERBOSE: [browsertime] Executing script return (function () { | |
| 20:48:45 INFO - // Firefox only timeToContentfulPaint | |
| 20:48:45 INFO - // need pref to be activated | |
| 20:48:45 INFO - const timing = window.performance.timing; | |
| 20:48:45 INFO - if (timing.timeToContentfulPaint) { | |
| 20:48:45 INFO - return Number( | |
| 20:48:45 INFO - (timing.timeToContentfulPaint - timing.navigationStart).toFixed(0) | |
| 20:48:45 INFO - ); | |
| 20:48:45 INFO - } | |
| 20:48:45 INFO - else return undefined; | |
| 20:48:45 INFO - })(); | |
| 20:48:45 INFO - 1576615725856 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"return (function () {\n // Firefox only timeToContentfulPaint\n // need pref to be activated\n const timing = window.performance.timing;\n if (timing.timeToContentfulPaint) {\n return Number(\n (timing.timeToContentfulPaint - timing.navigationStart).toFixed(0)\n );\n }\n else return undefined;\n})();\n","args":[null]} | |
| 20:48:45 INFO - 1576615725857 Marionette DEBUG 0 -> [0,99,"WebDriver:ExecuteScript",{"args":[null],"script":"return (function () {\n // Firefox only timeToContentfulPaint\n ... timeToContentfulPaint - timing.navigationStart).toFixed(0)\n );\n }\n else return undefined;\n})();\n"}] | |
| 20:48:45 INFO - 1576615725858 Marionette DEBUG 0 <- [1,99,null,{"value":959}] | |
| 20:48:45 INFO - 1576615725859 webdriver::server DEBUG <- 200 OK {"value":959} | |
| 20:48:45 INFO - [2019-12-17 12:48:45] VERBOSE: [browsertime] Executing script return (function () { | |
| 20:48:45 INFO - // Firefox only timeToDOMContentFlushed | |
| 20:48:45 INFO - // need pref to be activated | |
| 20:48:45 INFO - const timing = window.performance.timing; | |
| 20:48:45 INFO - if (timing.timeToDOMContentFlushed) { | |
| 20:48:45 INFO - return Number( | |
| 20:48:45 INFO - (timing.timeToDOMContentFlushed - timing.navigationStart).toFixed(0) | |
| 20:48:45 INFO - ); | |
| 20:48:45 INFO - } | |
| 20:48:45 INFO - else return undefined; | |
| 20:48:45 INFO - })(); | |
| 20:48:45 INFO - 1576615725860 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"return (function () {\n // Firefox only timeToDOMContentFlushed\n // need pref to be activated\n const timing = window.performance.timing;\n if (timing.timeToDOMContentFlushed) {\n return Number(\n (timing.timeToDOMContentFlushed - timing.navigationStart).toFixed(0)\n );\n }\n else return undefined;\n})();\n","args":[null]} | |
| 20:48:45 INFO - 1576615725860 Marionette DEBUG 0 -> [0,100,"WebDriver:ExecuteScript",{"args":[null],"script":"return (function () {\n // Firefox only timeToDOMContentFlushed\ ... meToDOMContentFlushed - timing.navigationStart).toFixed(0)\n );\n }\n else return undefined;\n})();\n"}] | |
| 20:48:45 INFO - 1576615725862 Marionette DEBUG 0 <- [1,100,null,{"value":1104}] | |
| 20:48:45 INFO - 1576615725862 webdriver::server DEBUG <- 200 OK {"value":1104} | |
| 20:48:45 INFO - [2019-12-17 12:48:45] VERBOSE: [browsertime] Executing script return (function () { | |
| 20:48:45 INFO - // Firefox only TTFI | |
| 20:48:45 INFO - // need pref to be activated | |
| 20:48:45 INFO - // If the "event" has happend, it will return 0 | |
| 20:48:45 INFO - const timing = window.performance.timing; | |
| 20:48:45 INFO - if (timing.timeToFirstInteractive && timing.timeToFirstInteractive > 0) { | |
| 20:48:45 INFO - return Number( | |
| 20:48:45 INFO - (timing.timeToFirstInteractive - timing.navigationStart).toFixed(0) | |
| 20:48:45 INFO - ); | |
| 20:48:45 INFO - } else return undefined; | |
| 20:48:45 INFO - })(); | |
| 20:48:45 INFO - 1576615725863 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"return (function () {\n // Firefox only TTFI\n // need pref to be activated\n // If the \"event\" has happend, it will return 0\n const timing = window.performance.timing;\n if (timing.timeToFirstInteractive && timing.timeToFirstInteractive > 0) {\n return Number(\n (timing.timeToFirstInteractive - timing.navigationStart).toFixed(0)\n );\n } else return undefined;\n})();\n","args":[null]} | |
| 20:48:45 INFO - 1576615725864 Marionette DEBUG 0 -> [0,101,"WebDriver:ExecuteScript",{"args":[null],"script":"return (function () {\n // Firefox only TTFI\n // need pref t ... (timing.timeToFirstInteractive - timing.navigationStart).toFixed(0)\n );\n } else return undefined;\n})();\n"}] | |
| 20:48:45 INFO - 1576615725865 Marionette DEBUG 0 <- [1,101,null,{"value":1640}] | |
| 20:48:45 INFO - 1576615725865 webdriver::server DEBUG <- 200 OK {"value":1640} | |
| 20:48:45 INFO - [2019-12-17 12:48:45] VERBOSE: [browsertime] Executing script return (function() { | |
| 20:48:45 INFO - const measures = []; | |
| 20:48:45 INFO - const marks = []; | |
| 20:48:45 INFO - if (window.performance && window.performance.getEntriesByType) { | |
| 20:48:45 INFO - const myMarks = Array.prototype.slice.call( | |
| 20:48:45 INFO - window.performance.getEntriesByType('mark') | |
| 20:48:45 INFO - ); | |
| 20:48:45 INFO - for (const mark of myMarks) { | |
| 20:48:45 INFO - marks.push({ | |
| 20:48:45 INFO - name: mark.name, | |
| 20:48:45 INFO - startTime: mark.startTime | |
| 20:48:45 INFO - }); | |
| 20:48:45 INFO - } | |
| 20:48:45 INFO - const myMeasures = Array.prototype.slice.call( | |
| 20:48:45 INFO - window.performance.getEntriesByType('measure') | |
| 20:48:45 INFO - ); | |
| 20:48:45 INFO - for (const measure of myMeasures) { | |
| 20:48:45 INFO - measures.push({ | |
| 20:48:45 INFO - name: measure.name, | |
| 20:48:45 INFO - duration: measure.duration, | |
| 20:48:45 INFO - startTime: measure.startTime | |
| 20:48:45 INFO - }); | |
| 20:48:45 INFO - } | |
| 20:48:45 INFO - } | |
| 20:48:45 INFO - return { | |
| 20:48:45 INFO - marks: marks, | |
| 20:48:45 INFO - measures: measures | |
| 20:48:45 INFO - }; | |
| 20:48:45 INFO - })(); | |
| 20:48:45 INFO - 1576615725866 webdriver::server DEBUG -> POST /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc/execute/sync {"script":"return (function() {\n const measures = [];\n const marks = [];\n\n if (window.performance && window.performance.getEntriesByType) {\n const myMarks = Array.prototype.slice.call(\n window.performance.getEntriesByType('mark')\n );\n\n for (const mark of myMarks) {\n marks.push({\n name: mark.name,\n startTime: mark.startTime\n });\n }\n\n const myMeasures = Array.prototype.slice.call(\n window.performance.getEntriesByType('measure')\n );\n\n for (const measure of myMeasures) {\n measures.push({\n name: measure.name,\n duration: measure.duration,\n startTime: measure.startTime\n });\n }\n }\n\n return {\n marks: marks,\n measures: measures\n };\n})();\n","args":[null]} | |
| 20:48:45 INFO - 1576615725867 Marionette DEBUG 0 -> [0,102,"WebDriver:ExecuteScript",{"args":[null],"script":"return (function() {\n const measures = [];\n const marks = [];\n ... tartTime: measure.startTime\n });\n }\n }\n\n return {\n marks: marks,\n measures: measures\n };\n})();\n"}] | |
| 20:48:45 INFO - 1576615725868 Marionette DEBUG 0 <- [1,102,null,{"value":{"marks":[],"measures":[]}}] | |
| 20:48:45 INFO - 1576615725869 webdriver::server DEBUG <- 200 OK {"value":{"marks":[],"measures":[]}} | |
| 20:48:45 INFO - [2019-12-17 12:48:45] INFO: [browsertime] Browsertime pageload ended. | |
| 20:48:45 INFO - [2019-12-17 12:48:45] DEBUG: [browsertime] Telling browser to quit. | |
| 20:48:45 INFO - 1576615725870 webdriver::server DEBUG -> DELETE /session/aebf1f89-3333-0444-b20a-6cc5376bb7bc | |
| 20:48:45 INFO - 1576615725871 Marionette DEBUG 0 -> [0,103,"Marionette:Quit",{"flags":["eForceQuit"]}] | |
| 20:48:45 INFO - 1576615725871 Marionette INFO Stopped listening on port 55221 | |
| 20:48:45 INFO - 1576615725904 Marionette DEBUG 0 <- [1,103,null,{"cause":"shutdown"}] | |
| 20:48:45 INFO - 1576615725945 webdriver::server DEBUG Deleting session | |
| 20:48:45 INFO - 1576615725945 geckodriver::marionette WARN delete_session called Some(Session { id: "aebf1f89-3333-0444-b20a-6cc5376bb7bc" }) | |
| 20:48:45 INFO - 1576615725953 Marionette DEBUG 0 -> [0,104,"Marionette:Quit",{"flags":["eForceQuit"]}] | |
| 20:48:45 INFO - 1576615725953 Marionette DEBUG 0 <- [1,104,{"error":"invalid session id","message":"Tried to run command without establishing a connection","stacktrace":"WebDriv ... t@chrome://marionette/content/server.js:249:9\n_onJSONObjectReady/<@chrome://marionette/content/transport.js:501:20\n"},null] | |
| 20:48:45 INFO - 1576615725958 Marionette DEBUG Closed connection 0 | |
| 20:48:46 INFO - 1576615726064 Marionette DEBUG Resetting recommended pref apz.content_response_timeout | |
| 20:48:46 INFO - 1576615726064 Marionette DEBUG Resetting recommended pref browser.contentblocking.introCount | |
| 20:48:46 INFO - 1576615726064 Marionette DEBUG Resetting recommended pref browser.download.panel.shown | |
| 20:48:46 INFO - 1576615726064 Marionette DEBUG Resetting recommended pref browser.tabs.disableBackgroundZombification | |
| 20:48:46 INFO - 1576615726064 Marionette DEBUG Resetting recommended pref browser.tabs.remote.separatePrivilegedContentProcess | |
| 20:48:46 INFO - 1576615726064 Marionette DEBUG Resetting recommended pref browser.tabs.unloadOnLowMemory | |
| 20:48:46 INFO - 1576615726064 Marionette DEBUG Resetting recommended pref browser.tabs.warnOnCloseOtherTabs | |
| 20:48:46 INFO - 1576615726064 Marionette DEBUG Resetting recommended pref browser.tabs.warnOnOpen | |
| 20:48:46 INFO - 1576615726064 Marionette DEBUG Resetting recommended pref browser.usedOnWindows10.introURL | |
| 20:48:46 INFO - 1576615726064 Marionette DEBUG Resetting recommended pref browser.urlbar.suggest.searches | |
| 20:48:46 INFO - 1576615726065 Marionette DEBUG Resetting recommended pref datareporting.policy.dataSubmissionPolicyAccepted | |
| 20:48:46 INFO - 1576615726065 Marionette DEBUG Resetting recommended pref dom.disable_beforeunload | |
| 20:48:46 INFO - 1576615726065 Marionette DEBUG Resetting recommended pref dom.file.createInChild | |
| 20:48:46 INFO - 1576615726065 Marionette DEBUG Resetting recommended pref extensions.getAddons.cache.enabled | |
| 20:48:46 INFO - 1576615726065 Marionette DEBUG Resetting recommended pref network.http.prompt-temp-redirect | |
| 20:48:46 INFO - 1576615726065 Marionette DEBUG Resetting recommended pref security.notification_enable_delay | |
| 20:48:46 INFO - 1576615726065 Marionette DEBUG Resetting recommended pref signon.autofillForms | |
| 20:48:46 INFO - 1576615726065 Marionette DEBUG Resetting recommended pref toolkit.cosmeticAnimations.enabled | |
| 20:48:46 INFO - 1576615726065 Marionette DEBUG Marionette stopped listening | |
| 20:48:46 INFO - 1576615726462 geckodriver::marionette DEBUG Browser process stopped: exit code: 0 | |
| 20:48:46 INFO - 1576615726478 webdriver::server DEBUG <- 200 OK {"value":null} | |
| 20:48:46 INFO - [2019-12-17 12:48:46] DEBUG: [browsertime] Telling browser to quit. | |
| 20:48:46 INFO - [2019-12-17 12:48:46] INFO: [browsertime] https://www.amazon.com/s?k=laptop&ref=nb_sb_noss_1 BackEndTime: 5 DomInteractiveTime: 1044 DomContentLoadedTime: 1107 FirstPaint: 804 PageLoadTime: 1935 | |
| 20:48:46 INFO - [2019-12-17 12:48:46] INFO: [browsertime] https://www.amazon.com/s?k=laptop&ref=nb_sb_noss_1 0, backEndTime: 6ms (±0.35ms), firstPaint: 813ms (±6.36ms), DOMContentLoaded: 1.13s (±14.50ms), Load: 1.64s (±206.83ms), rumSpeedIndex: 434 (±14.50) (2 runs) | |
| 20:48:46 INFO - [2019-12-17 12:48:46] INFO: [browsertime] Wrote data to blobber_upload_dir/browsertime-results/amazon-cold | |
| 20:48:46 INFO - [2019-12-17 12:48:46] DEBUG: [browsertime] Stopping Browsertime | |
| 20:48:46 INFO - [2019-12-17 12:48:46] DEBUG: [browsertime] Stopped Browsertime | |
| 20:48:46 INFO - raptor-mitmproxy Info: Stopping mitmproxy playback, killing process 19358 | |
| 20:48:46 INFO - raptor-mitmproxy Info: Successfully killed the mitmproxy playback process | |
| 20:48:46 INFO - raptor-mitmproxy Info: Turning off the browser proxy | |
| 20:48:46 INFO - raptor-mitmproxy Info: writing: /Users/sdonner/mozilla-source/mozilla-unified/obj-x86_64-apple-darwin19.2.0/dist/Nightly.app/Contents/Resources/distribution/policies.json | |
| 20:48:46 INFO - perftest-results-handler Info: retrieving browsertime test results | |
| 20:48:46 INFO - perftest-results-handler Info: found browsertime results at /Users/sdonner/mozilla-source/mozilla-unified/testing/mozharness/build/blobber_upload_dir/browsertime-results/amazon-cold/browsertime.json | |
| 20:48:46 INFO - perftest-results-handler Info: parsing results from browsertime json | |
| 20:48:46 INFO - perftest-results-handler Info: parsed new result: {'statistics': {'fcp': {u'p99': 975, u'mdev': 5.6569, u'min': 959, u'p90': 975, u'max': 975, u'median': 967, u'p10': 959, u'stddev': 8, u'mean': 967}, 'dcf': {u'p99': 1104, u'mdev': 6.0104, u'min': 1087, u'p90': 1104, u'max': 1104, u'median': 1096, u'p10': 1087, u'stddev': 9, u'mean': 1096}, 'fnbpaint': {u'p99': 822, u'mdev': 6.364, u'min': 804, u'p90': 822, u'max': 822, u'median': 813, u'p10': 804, u'stddev': 9, u'mean': 813}, 'loadtime': {u'p99': 1941, u'mdev': 207.8894, u'min': 1353, u'p90': 1941, u'max': 1941, u'median': 1647, u'p10': 1353, u'stddev': 294, u'mean': 1647}}, 'name': 'amazon-cold', 'url': (u'https://www.amazon.com/s?k=laptop&ref=nb_sb_noss_1',), 'type': 'browsertime-pageload', 'measurements': {'fcp': [975, 959], 'dcf': [1087, 1104], 'fnbpaint': [822, 804], 'loadtime': [1353, 1941]}, 'subtest_unit': 'ms', 'bt_ver': u'4.9.2-android', 'alert_threshold': '2.0', 'subtest_lower_is_better': True, 'cold': True, 'lower_is_better': True, 'unit': 'ms', 'browser': {u'appConstants': {u'MOZ_APP_VERSION': u'73.0a1', u'MOZ_CRASHREPORTER': True, u'RELEASE_OR_BETA': False, u'MOZ_TELEMETRY_REPORTING': False, u'MOZ_TELEMETRY_ON_BY_DEFAULT': False, u'MOZ_WIDGET_TOOLKIT': u'cocoa', u'MOZ_REQUIRE_SIGNING': False, u'MOZ_ANDROID_HISTORY': False, u'MOZ_BING_API_CLIENTID': u'no-bing-api-clientid', u'MOZ_NEW_CERT_STORAGE': True, u'platform': u'macosx', u'FENNEC_NIGHTLY': False, u'ASAN': False, u'DLL_SUFFIX': u'.dylib', u'MOZ_APP_VERSION_DISPLAY': u'73.0a1', u'MOZ_DATA_REPORTING': True, u'DLL_PREFIX': u'lib', u'MOZ_SYSTEM_NSS': False, u'SOURCE_REVISION_URL': u'', u'MOZ_GOOGLE_LOCATION_SERVICE_API_KEY': u'no-google-location-service-api-key', u'XP_UNIX': True, u'ANDROID_PACKAGE_NAME': u'org.mozilla.firefox', u'MOZ_GRAPHENE': False, u'isPlatformAndVersionAtLeast': {}, u'ASAN_REPORTER': False, u'ACCESSIBILITY': True, u'MOZ_SERVICES_HEALTHREPORT': True, u'MOZ_OFFICIAL_BRANDING': False, u'isPlatformAndVersionAtMost': {}, u'HAVE_SHELL_SERVICE': True, u'OMNIJAR_NAME': u'omni.ja', u'MENUBAR_CAN_AUTOHIDE': False, u'EARLY_BETA_OR_EARLIER': True, u'BROWSER_CHROME_URL': u'chrome://browser/content/browser.xhtml', u'MOZ_APP_NAME': u'firefox', u'MOZ_ALLOW_LEGACY_EXTENSIONS': True, u'MOZ_BITS_DOWNLOAD': False, u'MOZ_SERVICES_SYNC': False, u'MOZ_NEW_XULSTORE': True, u'DEBUG_JS_MODULES': u'', u'MOZ_GOOGLE_SAFEBROWSING_API_KEY': u'no-google-safebrowsing-api-key', u'MOZ_MOZILLA_API_KEY': u'no-mozilla-api-key', u'MOZ_WIDGET_GTK': False, u'MOZ_UNSIGNED_SCOPES': 0, u'MOZILLA_OFFICIAL': False, u'DEBUG': False, u'MOZ_SWITCHBOARD': False, u'MOZ_BING_API_KEY': u'no-bing-api-key', u'MOZ_NEW_NOTIFICATION_STORE': True, u'HAVE_USR_LIB64_DIR': False, u'MOZ_DEV_EDITION': False, u'MOZ_UPDATE_CHANNEL': u'default', u'MOZ_PLACES': True, u'MOZ_WEBRTC': True, u'NIGHTLY_BUILD': True, u'MOZ_NORMANDY': True, u'MOZ_GECKO_PROFILER': True, u'MOZ_SANDBOX': True, u'MOZ_UPDATER': True, u'unixstyle': u'other', u'TELEMETRY_PING_FORMAT_VERSION': 4, u'MOZ_MACBUNDLE_NAME': u'Nightly.app', u'MOZ_MAINTENANCE_SERVICE': False, u'ENABLE_REMOTE_AGENT': True, u'MOZ_CODE_COVERAGE': False, u'MOZ_BUILD_APP': u'browser'}, u'asyncAppConstants': {u'MOZ_APP_VERSION': u'73.0a1', u'MOZ_CRASHREPORTER': True, u'RELEASE_OR_BETA': False, u'MOZ_TELEMETRY_REPORTING': False, u'MOZ_TELEMETRY_ON_BY_DEFAULT': False, u'MOZ_WIDGET_TOOLKIT': u'cocoa', u'MOZ_REQUIRE_SIGNING': False, u'MOZ_ANDROID_HISTORY': False, u'MOZ_BING_API_CLIENTID': u'no-bing-api-clientid', u'MOZ_NEW_CERT_STORAGE': True, u'platform': u'macosx', u'FENNEC_NIGHTLY': False, u'ASAN': False, u'DLL_SUFFIX': u'.dylib', u'MOZ_APP_VERSION_DISPLAY': u'73.0a1', u'MOZ_DATA_REPORTING': True, u'DLL_PREFIX': u'lib', u'MOZ_SYSTEM_NSS': False, u'SOURCE_REVISION_URL': u'', u'MOZ_GOOGLE_LOCATION_SERVICE_API_KEY': u'no-google-location-service-api-key', u'XP_UNIX': True, u'ANDROID_PACKAGE_NAME': u'org.mozilla.firefox', u'MOZ_GRAPHENE': False, u'isPlatformAndVersionAtLeast': {}, u'ASAN_REPORTER': False, u'ACCESSIBILITY': True, u'MOZ_SERVICES_HEALTHREPORT': True, u'MOZ_OFFICIAL_BRANDING': False, u'isPlatformAndVersionAtMost': {}, u'HAVE_SHELL_SERVICE': True, u'OMNIJAR_NAME': u'omni.ja', u'MENUBAR_CAN_AUTOHIDE': False, u'EARLY_BETA_OR_EARLIER': True, u'BROWSER_CHROME_URL': u'chrome://browser/content/browser.xhtml', u'MOZ_APP_NAME': u'firefox', u'MOZ_ALLOW_LEGACY_EXTENSIONS': True, u'MOZ_BITS_DOWNLOAD': False, u'MOZ_SERVICES_SYNC': False, u'MOZ_NEW_XULSTORE': True, u'DEBUG_JS_MODULES': u'', u'MOZ_GOOGLE_SAFEBROWSING_API_KEY': u'no-google-safebrowsing-api-key', u'MOZ_MOZILLA_API_KEY': u'no-mozilla-api-key', u'MOZ_WIDGET_GTK': False, u'MOZ_UNSIGNED_SCOPES': 0, u'MOZILLA_OFFICIAL': False, u'DEBUG': False, u'MOZ_SWITCHBOARD': False, u'MOZ_BING_API_KEY': u'no-bing-api-key', u'MOZ_NEW_NOTIFICATION_STORE': True, u'HAVE_USR_LIB64_DIR': False, u'MOZ_DEV_EDITION': False, u'MOZ_UPDATE_CHANNEL': u'default', u'MOZ_PLACES': True, u'MOZ_WEBRTC': True, u'NIGHTLY_BUILD': True, u'MOZ_NORMANDY': True, u'MOZ_GECKO_PROFILER': True, u'MOZ_SANDBOX': True, u'MOZ_UPDATER': True, u'unixstyle': u'other', u'TELEMETRY_PING_FORMAT_VERSION': 4, u'MOZ_MACBUNDLE_NAME': u'Nightly.app', u'MOZ_MAINTENANCE_SERVICE': False, u'ENABLE_REMOTE_AGENT': True, u'MOZ_CODE_COVERAGE': False, u'MOZ_BUILD_APP': u'browser'}, u'windowSize': u'1366x768', u'userAgent': u'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:73.0) Gecko/20100101 Firefox/73.0'}} | |
| 20:48:46 INFO - perftest-output Info: preparing browsertime results for output | |
| 20:48:46 INFO - perftest-output Info: turning on subtest alerting for measurement type: fcp | |
| 20:48:46 INFO - perftest-output Info: turning on subtest alerting for measurement type: loadtime | |
| 20:48:46 INFO - perftest-output Info: PERFHERDER_DATA: {"framework": {"name": "browsertime"}, "application": {"version": "73.0a1", "name": "firefox"}, "suites": [{"extraOptions": [], "name": "amazon-cold", "lowerIsBetter": true, "alertThreshold": 2.0, "value": 1133.8, "subtests": [{"name": "dcf", "lowerIsBetter": true, "alertThreshold": 2.0, "replicates": [1087, 1104], "value": 1104, "unit": "ms"}, {"value": 959, "name": "fcp", "lowerIsBetter": true, "alertThreshold": 2.0, "replicates": [975, 959], "shouldAlert": true, "unit": "ms"}, {"name": "fnbpaint", "lowerIsBetter": true, "alertThreshold": 2.0, "replicates": [822, 804], "value": 804, "unit": "ms"}, {"value": 1941, "name": "loadtime", "lowerIsBetter": true, "alertThreshold": 2.0, "replicates": [1353, 1941], "shouldAlert": true, "unit": "ms"}], "type": "browsertime-pageload", "unit": "ms"}]} | |
| 20:48:46 INFO - perftest-output Info: results can also be found locally at: /Users/sdonner/mozilla-source/mozilla-unified/testing/mozharness/build/raptor.json | |
| 20:48:46 INFO - perftest-results-handler Info: Validating PERFHERDER_DATA against /Users/sdonner/mozilla-source/mozilla-unified/testing/mozharness/external_tools/performance-artifact-schema.json | |
| 20:48:46 INFO - Return code: 0 | |
| 20:48:46 INFO - Running post-action listener: _package_coverage_data | |
| 20:48:46 INFO - Running post-action listener: _resource_record_post_action | |
| 20:48:46 INFO - Running post-action listener: process_java_coverage_data | |
| 20:48:46 INFO - Running post-action listener: stop_device | |
| 20:48:46 INFO - [mozharness: 2019-12-17 20:48:46.819374Z] Finished run-tests step (success) | |
| 20:48:46 INFO - Running post-run listener: _resource_record_post_run | |
| 20:48:46 INFO - Total resource usage - Wall time: 26s; CPU: 15.0%; Read bytes: 8802304; Write bytes: 152748032; Read time: 361; Write time: 377 | |
| 20:48:46 INFO - TinderboxPrint: CPU usage<br/>15.0% | |
| 20:48:46 INFO - TinderboxPrint: I/O read bytes / time<br/>8,802,304 / 361 | |
| 20:48:46 INFO - TinderboxPrint: I/O write bytes / time<br/>152,748,032 / 377 | |
| 20:48:46 INFO - TinderboxPrint: CPU idle<br/>353.8 (85.0%) | |
| 20:48:46 INFO - TinderboxPrint: CPU system<br/>9.5 (2.3%) | |
| 20:48:46 INFO - TinderboxPrint: CPU user<br/>52.9 (12.7%) | |
| 20:48:46 INFO - TinderboxPrint: Swap in / out<br/>2,842,624 / 0 | |
| 20:48:46 INFO - run-tests - Wall time: 27s; CPU: 15.0%; Read bytes: 8802304; Write bytes: 152748032; Read time: 361; Write time: 377 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment