Skip to content

Instantly share code, notes, and snippets.

@stephendonner
Created December 17, 2019 20:53
Show Gist options
  • Select an option

  • Save stephendonner/e6799dfd2c932fc7d7b871293f0e3fd4 to your computer and use it in GitHub Desktop.

Select an option

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
./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