profile
viewpoint
If you are wondering where the data of this site comes from, please visit https://api.github.com/users/patrickhulce/events. GitMemory does not store any data, but only uses NGINX to cache data for a period of time. The idea behind GitMemory is simply to give users a better reading experience.

GoogleChrome/lighthouse 23172

Automated auditing, performance metrics, and best practices for the web.

GoogleChrome/lighthouse-ci 4562

Automate running Lighthouse for every commit, viewing the changes, and preventing regressions

GoogleChrome/chrome-launcher 811

Launch Google Chrome with ease from node.

jpeg-js/jpeg-js 468

A pure javascript JPEG encoder and decoder for node.js

aslushnikov/tracium 68

A blessed Chrome Trace parser.

patrickhulce/cuzillion 9

'cuz there are still a zillion pages to check in 2020

patrickhulce/destiny-gun-damage 3

Calculator and database for destiny gun damage.

kumquatexpress/YelpHelp 1

Cool project that does cool things over the Yelp dataset.

patrickhulce/codereview 1

Web application to assist with grading homeworks and assessing code style.

patrickhulce/electron-performance-examples 1

Collection of electron performance examples.

issue commentGoogleChrome/lighthouse

WPT started getting a lot of PROTOCOL_TIMEOUT errors

I've been unsuccessful at securing the crash ID of this case, and this time around in that VM the chrome log is very unhelpful without any signs of a crash despite the Lighthouse logs indicating there was one :/ Here are the logs of what I discovered so far. Unclear what the next steps would be to try and get a crash ID to file upstream at this point (perhaps whip out the linux debugging tools and get raw crash details?) It's crippling our test suite though, so I'll definitely look into it more next week 👍

<details> <summary>Chrome Logs During Crash Run</summary>


DevTools listening on ws://127.0.0.1:34061/devtools/browser/df0a6073-9f8f-4ca7-8a50-c7e3649c01e1
[30807:30857:0730/184916.908570:ERROR:bus.cc(393)] Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are "tcp" and on UNIX "unix")
[30807:30857:0730/184916.908624:ERROR:bus.cc(393)] Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are "tcp" and on UNIX "unix")
[30856:30872:0730/184916.927314:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: Google 'Argon2021' log
[30856:30872:0730/184916.927401:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: Google 'Argon2022' log
[30856:30872:0730/184916.927416:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: Google 'Argon2023' log
[30856:30872:0730/184916.927429:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: Google 'Xenon2021' log
[30856:30872:0730/184916.927441:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: Google 'Xenon2022' log
[30856:30872:0730/184916.927453:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: Google 'Xenon2023' log
[30856:30872:0730/184916.927465:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: Google 'Aviator' log
[30856:30872:0730/184916.927487:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: Google 'Icarus' log
[30856:30872:0730/184916.927499:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: Google 'Pilot' log
[30856:30872:0730/184916.927510:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: Google 'Rocketeer' log
[30856:30872:0730/184916.927523:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: Google 'Skydiver' log
[30856:30872:0730/184916.927535:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: Cloudflare 'Nimbus2021' Log
[30856:30872:0730/184916.927546:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: Cloudflare 'Nimbus2022' Log
[30856:30872:0730/184916.927557:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: Cloudflare 'Nimbus2023' Log
[30856:30872:0730/184916.927568:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: DigiCert Log Server
[30856:30872:0730/184916.927580:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: DigiCert Yeti2021 Log
[30856:30872:0730/184916.927591:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: DigiCert Yeti2022 Log
[30856:30872:0730/184916.927603:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: DigiCert Yeti2023 Log
[30856:30872:0730/184916.927619:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: DigiCert Nessie2021 Log
[30856:30872:0730/184916.927630:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: DigiCert Nessie2022 Log
[30856:30872:0730/184916.927642:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: DigiCert Nessie2023 Log
[30856:30872:0730/184916.927653:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: Sectigo 'Sabre' CT log
[30856:30872:0730/184916.927668:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: Sectigo 'Mammoth' CT log
[30856:30872:0730/184916.927680:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: Let's Encrypt 'Oak2021' log
[30856:30872:0730/184916.927692:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: Let's Encrypt 'Oak2022' log
[30856:30872:0730/184916.927703:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: Let's Encrypt 'Oak2023' log
[30856:30872:0730/184916.927714:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: Trust Asia CT2021
[30856:30872:0730/184916.927725:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: Trust Asia Log2022
[30856:30872:0730/184916.927737:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: Trust Asia Log2023
[30856:30872:0730/184916.927748:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: Symantec 'Sirius' log
[30856:30872:0730/184916.927760:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: StartCom log
[30856:30872:0730/184916.927772:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: WoSign log
[30856:30872:0730/184916.927784:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: Trust Asia Log2021
[30856:30872:0730/184916.927796:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: Izenpe log
[30856:30872:0730/184916.927809:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: DigiCert Log Server 2
[30856:30872:0730/184916.927822:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: CNNIC CT log
[30856:30872:0730/184916.927834:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: Venafi log
[30856:30872:0730/184916.927847:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: Symantec 'Vega' log
[30856:30872:0730/184916.927860:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: Certly.IO log
[30856:30872:0730/184916.927872:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: Symantec log
[30856:30872:0730/184916.932246:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: Google 'Argon2021' log
[30856:30872:0730/184916.932285:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: Google 'Argon2022' log
[30856:30872:0730/184916.932302:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: Google 'Argon2023' log
[30856:30872:0730/184916.932316:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: Google 'Xenon2021' log
[30856:30872:0730/184916.932329:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: Google 'Xenon2022' log
[30856:30872:0730/184916.932350:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: Google 'Xenon2023' log
[30856:30872:0730/184916.932364:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: Google 'Aviator' log
[30856:30872:0730/184916.932378:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: Google 'Icarus' log
[30856:30872:0730/184916.932390:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: Google 'Pilot' log
[30856:30872:0730/184916.932403:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: Google 'Rocketeer' log
[30856:30872:0730/184916.932416:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: Google 'Skydiver' log
[30856:30872:0730/184916.932430:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: Cloudflare 'Nimbus2021' Log
[30856:30872:0730/184916.932444:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: Cloudflare 'Nimbus2022' Log
[30856:30872:0730/184916.932458:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: Cloudflare 'Nimbus2023' Log
[30856:30872:0730/184916.932471:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: DigiCert Log Server
[30856:30872:0730/184916.932484:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: DigiCert Yeti2021 Log
[30856:30872:0730/184916.932497:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: DigiCert Yeti2022 Log
[30856:30872:0730/184916.932539:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: DigiCert Yeti2023 Log
[30856:30872:0730/184916.932555:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: DigiCert Nessie2021 Log
[30856:30872:0730/184916.932568:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: DigiCert Nessie2022 Log
[30856:30872:0730/184916.932583:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: DigiCert Nessie2023 Log
[30856:30872:0730/184916.932596:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: Sectigo 'Sabre' CT log
[30856:30872:0730/184916.932610:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: Sectigo 'Mammoth' CT log
[30856:30872:0730/184916.932623:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: Let's Encrypt 'Oak2021' log
[30856:30872:0730/184916.932636:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: Let's Encrypt 'Oak2022' log
[30856:30872:0730/184916.932649:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: Let's Encrypt 'Oak2023' log
[30856:30872:0730/184916.932663:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: Trust Asia CT2021
[30856:30872:0730/184916.932676:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: Trust Asia Log2022
[30856:30872:0730/184916.932689:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: Trust Asia Log2023
[30856:30872:0730/184916.932702:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: Symantec 'Sirius' log
[30856:30872:0730/184916.932716:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: StartCom log
[30856:30872:0730/184916.932729:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: WoSign log
[30856:30872:0730/184916.932742:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: Trust Asia Log2021
[30856:30872:0730/184916.932756:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: Izenpe log
[30856:30872:0730/184916.932768:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: DigiCert Log Server 2
[30856:30872:0730/184916.932780:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: CNNIC CT log
[30856:30872:0730/184916.932793:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: Venafi log
[30856:30872:0730/184916.932805:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: Symantec 'Vega' log
[30856:30872:0730/184916.932817:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: Certly.IO log
[30856:30872:0730/184916.932830:VERBOSE1:multi_log_ct_verifier.cc(62)] Adding CT log: Symantec log
libva error: va_getDriverName() failed with unknown libva error,driver_name=(null)
[30855:30855:0730/184916.953997:VERBOSE1:vaapi_wrapper.cc(607)] InitializeVaDriver_Locked(): vaInitialize failed: unknown libva error
[30877:1:0730/184916.954992:VERBOSE1:sandbox_linux.cc(69)] Activated seccomp-bpf sandbox for process type: renderer.
[30876:1:0730/184916.956309:VERBOSE1:sandbox_linux.cc(69)] Activated seccomp-bpf sandbox for process type: renderer.
[30876:1:0730/184916.959408:VERBOSE2:thread_state.cc(470)] [state:0x5609579a23f0] ScheduleGCIfNeeded
[30855:30855:0730/184916.960606:VERBOSE1:gpu_init.cc(463)] Quit GPU process launch to fallback to SwiftShader cleanly on Linux
[30877:1:0730/184916.961284:VERBOSE2:thread_state.cc(470)] [state:0x5609579a23f0] ScheduleGCIfNeeded
[30807:30807:0730/184916.966358:VERBOSE1:mutable_profile_oauth2_token_service_delegate.cc(412)] MutablePO2TS::OnWebDataServiceRequestDone. Result type: 5
[30807:30807:0730/184916.966395:VERBOSE1:mutable_profile_oauth2_token_service_delegate.cc(472)] MutablePO2TS::LoadAllCredentialsIntoMemory; 0 Credential(s).
[30807:30807:0730/184916.966421:VERBOSE1:account_reconcilor.cc(376)] AccountReconcilor::OnEndBatchOfRefreshTokenStateChanges. Reconcilor state: 0
[30807:30807:0730/184916.966468:VERBOSE1:account_reconcilor.cc(453)] AccountReconcilor::StartReconcile: token service *not* ready yet.
[30855:30855:0730/184916.967096:ERROR:viz_main_impl.cc(162)] Exiting GPU process due to errors during initialization
[30807:30807:0730/184916.970188:VERBOSE1:gaia_cookie_manager_service.cc(1052)] GaiaCookieManagerService::ListAccounts
[30807:30807:0730/184916.970247:VERBOSE2:gaia_auth_fetcher.cc(337)] Gaia fetcher URL: https://accounts.google.com/ListAccounts?gpsia=1&source=ChromiumBrowser&json=standard
[30807:30807:0730/184916.970255:VERBOSE2:gaia_auth_fetcher.cc(338)] Gaia fetcher headers: Origin: https://www.google.com
[30807:30807:0730/184916.970261:VERBOSE2:gaia_auth_fetcher.cc(339)] Gaia fetcher body:
[30856:30872:0730/184916.970881:VERBOSE1:network_delegate.cc(32)] NetworkDelegate::NotifyBeforeURLRequest: https://accounts.google.com/ListAccounts?gpsia=1&source=ChromiumBrowser&json=standard
[30856:30872:0730/184916.975356:VERBOSE1:tls_handshaker.cc(106)] TlsClient: Continuing handshake
[30856:30872:0730/184916.976845:VERBOSE1:tls_handshaker.cc(106)] TlsClient: Continuing handshake
[30856:30872:0730/184916.977511:VERBOSE1:tls_handshaker.cc(106)] TlsClient: Continuing handshake
[30856:30872:0730/184916.977560:VERBOSE1:tls_handshaker.cc(106)] TlsClient: Continuing handshake
[30856:30872:0730/184916.977624:VERBOSE1:tls_handshaker.cc(106)] TlsClient: Continuing handshake
[30856:30872:0730/184916.977648:VERBOSE1:tls_handshaker.cc(106)] TlsClient: Continuing handshake
[30856:30872:0730/184916.978441:VERBOSE1:tls_handshaker.cc(106)] TlsClient: Continuing handshake
[30877:1:0730/184916.979228:VERBOSE2:thread_state.cc(470)] [state:0x5609579a23f0] ScheduleGCIfNeeded
[30876:1:0730/184916.981601:VERBOSE2:thread_state.cc(470)] [state:0x5609579a23f0] ScheduleGCIfNeeded
[30876:1:0730/184916.982669:VERBOSE2:thread_state.cc(470)] [state:0x5609579a23f0] ScheduleGCIfNeeded
[30877:1:0730/184916.982953:VERBOSE2:thread_state.cc(470)] [state:0x5609579a23f0] ScheduleGCIfNeeded
[30807:30896:0730/184916.989748:VERBOSE1:bus.cc(884)] Method call: message_type: MESSAGE_METHOD_CALL
interface: org.freedesktop.DBus
member: GetNameOwner
signature: s

string "org.freedesktop.UPower"

[30807:30896:0730/184916.990502:VERBOSE1:bus.cc(681)] Filter function already exists: 1 with associated data: 0x32ce003a9990
[30807:30896:0730/184916.990531:VERBOSE1:bus.cc(884)] Method call: message_type: MESSAGE_METHOD_CALL
interface: org.freedesktop.DBus
member: GetNameOwner
signature: s

string "org.freedesktop.UPower"

[30807:30896:0730/184916.990847:ERROR:object_proxy.cc(622)] Failed to call method: org.freedesktop.DBus.Properties.Get: object_path= /org/freedesktop/UPower: org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.UPower was not provided by any .service files
[30807:30896:0730/184916.990866:WARNING:property.cc(144)] DaemonVersion: GetAndBlock: failed.
[30877:1:0730/184916.992877:VERBOSE2:thread_state.cc(470)] [state:0x5609579a23f0] ScheduleGCIfNeeded
[30877:1:0730/184916.994253:VERBOSE2:thread_state.cc(470)] [state:0x5609579a23f0] ScheduleGCIfNeeded
[30877:1:0730/184916.994357:VERBOSE2:thread_state.cc(470)] [state:0x5609579a23f0] ScheduleGCIfNeeded
[30877:1:0730/184916.995670:VERBOSE2:thread_state.cc(470)] [state:0x5609579a23f0] ScheduleGCIfNeeded
[30807:30896:0730/184916.998757:ERROR:object_proxy.cc(622)] Failed to call method: org.freedesktop.UPower.GetDisplayDevice: object_path= /org/freedesktop/UPower: org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.UPower was not provided by any .service files
[30807:30896:0730/184916.999040:ERROR:object_proxy.cc(622)] Failed to call method: org.freedesktop.UPower.EnumerateDevices: object_path= /org/freedesktop/UPower: org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.UPower was not provided by any .service files
[30856:30872:0730/184917.000892:VERBOSE1:tls_handshaker.cc(106)] TlsClient: Continuing handshake
[30856:30872:0730/184917.001392:VERBOSE1:tls_client_handshaker.cc(463)] Client: handshake finished
[30807:30840:0730/184917.002930:VERBOSE1:media_stream_manager.cc(705)] RFAOSF::Core() [process_id=5, frame_id=1]
[30877:1:0730/184917.003907:VERBOSE1:document.cc(3712)] Document::DispatchUnloadEvents() URL = <null>
[30877:1:0730/184917.004051:VERBOSE1:document.cc(3792)] Actually dispatching an UnloadEvent: URL = <null>
[30807:30840:0730/184917.008195:VERBOSE1:media_stream_manager.cc(705)] RFAOSF::Core() [process_id=5, frame_id=1]
[30897:30897:0730/184917.010183:WARNING:vaapi_wrapper.cc(588)] VAAPI video acceleration not available for swiftshader
[30897:30897:0730/184917.010318:ERROR:gpu_init.cc(441)] Passthrough is not supported, GL is swiftshader
[30877:1:0730/184917.011330:VERBOSE1:script_context.cc(189)] Created context:
  extension id:           (none)
  frame:                  0x10e4e54c2348
  URL:
  context_type:           WEB_PAGE
  effective extension id: (none)
  effective context type: WEB_PAGE
[30877:1:0730/184917.012108:VERBOSE1:script_context.cc(189)] Created context:
  extension id:           (none)
  frame:                  (nil)
  URL:
  context_type:           UNSPECIFIED
  effective extension id: (none)
  effective context type: UNSPECIFIED
[30877:1:0730/184917.012273:VERBOSE1:dispatcher.cc(434)] Num tracked contexts: 1
[30877:1:0730/184917.014194:VERBOSE2:thread_state.cc(470)] [state:0x5609579a23f0] ScheduleGCIfNeeded
[30897:30897:0730/184917.017762:VERBOSE1:sandbox_linux.cc(69)] Activated seccomp-bpf sandbox for process type: gpu-process.
[30807:30807:0730/184917.020809:VERBOSE1:gaia_cookie_manager_service.cc(890)] ListAccounts successful
[30807:30807:0730/184917.020842:VERBOSE1:gaia_cookie_manager_service.cc(1088)] GaiaCookieManagerService::HandleNextRequest
[30807:30807:0730/184917.020875:VERBOSE1:gaia_cookie_manager_service.cc(1104)] GaiaCookieManagerService::HandleNextRequest: no more
[30807:30807:0730/184917.020910:VERBOSE1:account_reconcilor.cc(592)] AccountReconcilor::OnAccountsInCookieUpdated: CookieJar 0 accounts, Reconcilor's state is 1, Error was
[30807:30807:0730/184917.020925:VERBOSE1:account_reconcilor.cc(721)] AccountReconcilor::LoadValidAccountsFromTokenService: Chrome 0 accounts
[30807:30807:0730/184917.020949:VERBOSE1:account_reconcilor.cc(800)] AccountReconcilor::CalculateIfMultiloginReconcileIsDone: Error was
[30807:30807:0730/184917.020976:VERBOSE1:account_reconcilor.cc(751)] AccountReconcilor::StartReconcileIfChromeAccountsChanged
[30877:8:0730/184917.030930:ERROR:command_buffer_proxy_impl.cc(126)] ContextResult::kTransientFailure: Failed to send GpuControl.CreateCommandBuffer.
[30897:30897:0730/184917.039738:VERBOSE1:gles2_cmd_decoder.cc(3835)] GL_OES_packed_depth_stencil supported.
[30897:30897:0730/184917.040397:WARNING:ipc_message_attachment_set.cc(49)] MessageAttachmentSet destroyed with unconsumed attachments: 0/1
[30876:1:0730/184917.777346:VERBOSE2:thread_state.cc(470)] [state:0x5609579a23f0] ScheduleGCIfNeeded
[30876:1:0730/184917.777488:VERBOSE2:thread_state.cc(470)] [state:0x5609579a23f0] ScheduleGCIfNeeded
[30876:1:0730/184917.777646:VERBOSE2:thread_state.cc(470)] [state:0x5609579a23f0] ScheduleGCIfNeeded
[30876:1:0730/184917.778296:VERBOSE2:thread_state.cc(470)] [state:0x5609579a23f0] ScheduleGCIfNeeded
[30876:1:0730/184917.782681:VERBOSE1:document.cc(3712)] Document::DispatchUnloadEvents() URL = <null>
[30876:1:0730/184917.782824:VERBOSE1:document.cc(3792)] Actually dispatching an UnloadEvent: URL = <null>
[30807:30840:0730/184917.784235:VERBOSE1:media_stream_manager.cc(705)] RFAOSF::Core() [process_id=6, frame_id=1]
[30876:1:0730/184917.788641:VERBOSE1:script_context.cc(189)] Created context:
  extension id:           (none)
  frame:                  0x10e4e54c2348
  URL:
  context_type:           WEB_PAGE
  effective extension id: (none)
  effective context type: WEB_PAGE
[30876:1:0730/184917.789740:VERBOSE1:script_context.cc(189)] Created context:
  extension id:           (none)
  frame:                  (nil)
  URL:
  context_type:           UNSPECIFIED
  effective extension id: (none)
  effective context type: UNSPECIFIED
[30876:1:0730/184917.790493:VERBOSE1:dispatcher.cc(434)] Num tracked contexts: 1
[30924:1:0730/184917.788291:VERBOSE1:sandbox_linux.cc(69)] Activated seccomp-bpf sandbox for process type: renderer.
[30807:30840:0730/184917.793701:VERBOSE1:media_stream_manager.cc(705)] RFAOSF::Core() [process_id=6, frame_id=1]
[30876:1:0730/184917.793792:VERBOSE2:thread_state.cc(470)] [state:0x5609579a23f0] ScheduleGCIfNeeded
[30924:1:0730/184917.793637:VERBOSE2:thread_state.cc(470)] [state:0x5609579a23f0] ScheduleGCIfNeeded
[30924:1:0730/184917.806812:VERBOSE2:thread_state.cc(470)] [state:0x5609579a23f0] ScheduleGCIfNeeded
[30924:1:0730/184917.806958:VERBOSE2:thread_state.cc(470)] [state:0x5609579a23f0] ScheduleGCIfNeeded
[30876:1:0730/184917.816721:VERBOSE1:document.cc(3712)] Document::DispatchUnloadEvents() URL = "about:blank"
[30876:1:0730/184917.816917:VERBOSE1:document.cc(3792)] Actually dispatching an UnloadEvent: URL = "about:blank"
[30876:1:0730/184917.817584:VERBOSE1:dispatcher.cc(614)] Num tracked contexts: 0
[30876:1:0730/184917.819430:VERBOSE1:script_context.cc(189)] Created context:
  extension id:           (none)
  frame:                  0x10e4e54c2348
  URL:
  context_type:           WEB_PAGE
  effective extension id: (none)
  effective context type: WEB_PAGE
[30876:1:0730/184917.819513:VERBOSE1:script_context.cc(189)] Created context:
  extension id:           (none)
  frame:                  (nil)
  URL:
  context_type:           UNSPECIFIED
  effective extension id: (none)
  effective context type: UNSPECIFIED
[30876:1:0730/184917.819595:VERBOSE1:dispatcher.cc(434)] Num tracked contexts: 1
[30876:1:0730/184917.821499:VERBOSE1:script_context.cc(196)] Destroyed context for extension
  extension id:
  effective extension id:
[30876:1:0730/184917.821582:VERBOSE1:script_context.cc(196)] Destroyed context for extension
  extension id:
  effective extension id:
[30807:30840:0730/184917.822677:VERBOSE1:media_stream_manager.cc(705)] RFAOSF::Core() [process_id=6, frame_id=1]
[30876:1:0730/184918.849681:VERBOSE1:document.cc(3712)] Document::DispatchUnloadEvents() URL = "about:blank"
[30876:1:0730/184918.849863:VERBOSE1:document.cc(3792)] Actually dispatching an UnloadEvent: URL = "about:blank"
[30876:1:0730/184918.850185:VERBOSE2:thread_state.cc(470)] [state:0x5609579a23f0] ScheduleGCIfNeeded
[30876:1:0730/184918.850445:VERBOSE1:dispatcher.cc(614)] Num tracked contexts: 0
[30876:1:0730/184918.852274:VERBOSE1:script_context.cc(189)] Created context:
  extension id:           (none)
  frame:                  0x10e4e54c2348
  URL:
  context_type:           WEB_PAGE
  effective extension id: (none)
  effective context type: WEB_PAGE
[30876:1:0730/184918.852355:VERBOSE1:script_context.cc(189)] Created context:
  extension id:           (none)
  frame:                  (nil)
  URL:
  context_type:           UNSPECIFIED
  effective extension id: (none)
  effective context type: UNSPECIFIED
[30876:1:0730/184918.852438:VERBOSE1:dispatcher.cc(434)] Num tracked contexts: 1
[30876:1:0730/184918.855136:VERBOSE1:script_context.cc(196)] Destroyed context for extension
  extension id:
  effective extension id:
[30876:1:0730/184918.855226:VERBOSE1:script_context.cc(196)] Destroyed context for extension
  extension id:
  effective extension id:
[30807:30840:0730/184918.856066:VERBOSE1:media_stream_manager.cc(705)] RFAOSF::Core() [process_id=6, frame_id=1]
[30948:1:0730/184918.923164:VERBOSE1:sandbox_linux.cc(69)] Activated seccomp-bpf sandbox for process type: utility.
[30897:30912:0730/184918.949477:VERBOSE1:video_capture_oracle.cc(96)] Capture size auto-throttling is now enabled.
[30897:30912:0730/184918.949863:VERBOSE1:capture_resolution_chooser.cc(205)] Recomputed snapped frame sizes: 19x11 <--> 179x101 <--> 339x191 <--> 500x281
[30897:30912:0730/184918.949928:VERBOSE1:capture_resolution_chooser.cc(157)] Recomputed capture size from 640x360 to 500x281 (100% of ideal size)
[30897:30912:0730/184918.950077:VERBOSE1:capture_resolution_chooser.cc(205)] Recomputed snapped frame sizes: 28x50 <--> 78x140 <--> 129x230 <--> 179x320 <--> 230x410 <--> 281x500
[30897:30912:0730/184918.950131:VERBOSE1:capture_resolution_chooser.cc(157)] Recomputed capture size from 500x281 to 281x500 (100% of ideal size)
[30897:30912:0730/184918.950185:VERBOSE2:video_capture_oracle.cc(452)] Now proposing a capture size of 281x500
[30807:30807:0730/184918.962532:VERBOSE1:mutable_profile_oauth2_token_service_delegate.cc(326)] MutablePO2TS::RefreshTokenIsAvailable
[30807:30807:0730/184918.962915:VERBOSE2:browser_switcher_service.cc(374)] Done parsing external SiteList for sitelist rules. Applying rules to future navigations.
[30807:30807:0730/184918.962964:VERBOSE2:browser_switcher_service.cc(388)] Done parsing external SiteList for greylist rules. Applying rules to future navigations.
[30856:30872:0730/184918.964150:VERBOSE1:network_delegate.cc(32)] NetworkDelegate::NotifyBeforeURLRequest: https://www.webpagetest.org/
[30876:1:0730/184919.561547:VERBOSE1:document.cc(3712)] Document::DispatchUnloadEvents() URL = "about:blank"
[30876:1:0730/184919.562364:VERBOSE1:document.cc(3792)] Actually dispatching an UnloadEvent: URL = "about:blank"
[30876:1:0730/184919.565753:VERBOSE1:dispatcher.cc(614)] Num tracked contexts: 0
[30876:1:0730/184919.592853:VERBOSE1:script_context.cc(189)] Created context:
  extension id:           (none)
  frame:                  0x10e4e54c2348
  URL:
  context_type:           WEB_PAGE
  effective extension id: (none)
  effective context type: WEB_PAGE
[30876:1:0730/184919.592957:VERBOSE1:script_context.cc(189)] Created context:
  extension id:           (none)
  frame:                  (nil)
  URL:
  context_type:           UNSPECIFIED
  effective extension id: (none)
  effective context type: UNSPECIFIED
[30876:1:0730/184919.593745:VERBOSE1:dispatcher.cc(434)] Num tracked contexts: 1
[30807:30840:0730/184919.606442:VERBOSE1:media_stream_manager.cc(705)] RFAOSF::Core() [process_id=6, frame_id=1]
[30876:1:0730/184919.610187:VERBOSE1:script_context.cc(196)] Destroyed context for extension
  extension id:
  effective extension id:
[30876:1:0730/184919.614422:VERBOSE1:script_context.cc(196)] Destroyed context for extension
  extension id:
  effective extension id:
[30856:30872:0730/184919.661556:VERBOSE1:network_delegate.cc(32)] NetworkDelegate::NotifyBeforeURLRequest: https://www.webpagetest.org/pagestyle2.css?v=138
[30856:30872:0730/184919.663517:VERBOSE1:network_delegate.cc(32)] NetworkDelegate::NotifyBeforeURLRequest: https://www.webpagetest.org/images/wpt-logo.svg
[30856:30872:0730/184920.270870:VERBOSE1:network_delegate.cc(32)] NetworkDelegate::NotifyBeforeURLRequest: https://www.webpagetest.org/js/site.js?v=40
[30856:30872:0730/184920.293730:VERBOSE1:network_delegate.cc(32)] NetworkDelegate::NotifyBeforeURLRequest: https://www.webpagetest.org/js/test.js?v=47

</details>

<details> <summary>Lighthouse Logs During Crash Run</summary>

xvfb-run --auto-servernum lighthouse https://www.webpagetest.org --chrome-flags="--user-data-dir=/tmp/protocol_timeout --enable-logging=stderr --v=2" --verbose --throttling-method=devtools --chrome-ignore-default-flags
  LH:ChromeLauncher:verbose created /tmp/protocol_timeout +0ms
  LH:ChromeLauncher:verbose Launching with command:
  LH:ChromeLauncher:verbose "/usr/bin/google-chrome-stable" --remote-debugging-port=36693 --user-data-dir=/tmp/protocol_timeout --user-data-dir=/tmp/protocol_timeout --enable-logging=stderr --v=2 about:blank +3ms
  LH:ChromeLauncher:verbose Chrome running with pid 4290 on port 36693. +3ms
  LH:ChromeLauncher Waiting for browser. +0ms
  LH:ChromeLauncher Waiting for browser... +0ms
  LH:ChromeLauncher Waiting for browser..... +510ms
  LH:ChromeLauncher Waiting for browser.....✓ +1ms
  LH:status:verbose Create config +1ms
  LH:status:verbose Requiring gatherers +2ms
  LH:statusEnd:verbose Requiring gatherers +57ms
  LH:status:verbose Requiring audits +0ms
  LH:statusEnd:verbose Requiring audits +442ms
  LH:config:warn IFrameElements gatherer requested, however no audit requires it. +22ms
  LH:config:warn FormElements gatherer requested, however no audit requires it. +0ms
  LH:statusEnd:verbose Create config +45ms
  LH:status:verbose Runner setup +0ms
  LH:listen for event =>:verbose Page.frameNavigated  +1ms
  LH:listen for event =>:verbose Runtime.executionContextDestroyed  +0ms
  LH:listen for event =>:verbose Target.attachedToTarget  +0ms
  LH:listen for event =>:verbose Page.frameNavigated  +0ms
  LH:status Connecting to browser +0ms
  LH:statusEnd:verbose Connecting to browser +32ms
  LH:status Resetting state with about:blank +3ms
  LH:listen for event =>:verbose Page.frameNavigated  +1ms
  LH:Driver:verbose Page.enable +1ms
  LH:method => browser:verbose Page.enable  +0ms
  LH:method <= browser OK:verbose Page.enable {} +9ms
  LH:Driver:verbose Network.enable +0ms
  LH:method => browser:verbose Network.enable  +0ms
  LH:method <= browser OK:verbose Network.enable {} +1ms
  LH:method => browser:verbose Page.setLifecycleEventsEnabled {"enabled":true} +0ms
  LH:<= event:verbose Page.lifecycleEvent {"frameId":"08C3D886293E020EC6BC8D08F746440A","loaderId":"3F36B47427160157AF9F822 +0ms
  LH:<= event:verbose Page.lifecycleEvent {"frameId":"08C3D886293E020EC6BC8D08F746440A","loaderId":"3F36B47427160157AF9F822 +1ms
  LH:<= event:verbose Page.lifecycleEvent {"frameId":"08C3D886293E020EC6BC8D08F746440A","loaderId":"3F36B47427160157AF9F822 +0ms
  LH:<= event:verbose Page.lifecycleEvent {"frameId":"08C3D886293E020EC6BC8D08F746440A","loaderId":"3F36B47427160157AF9F822 +0ms
  LH:<= event:verbose Page.lifecycleEvent {"frameId":"08C3D886293E020EC6BC8D08F746440A","loaderId":"3F36B47427160157AF9F822 +0ms
  LH:method <= browser OK:verbose Page.setLifecycleEventsEnabled {} +0ms
  LH:method => browser:verbose Page.navigate {"url":"about:blank"} +0ms
  LH:listen once for event =>:verbose Page.frameNavigated  +1ms
  LH:method <= browser OK:verbose Page.navigate {"frameId":"08C3D886293E020EC6BC8D08F746440A","loaderId":"7B38E9927F1A62B31 +1ms
  LH:<= event:verbose Page.frameStartedLoading {"frameId":"08C3D886293E020EC6BC8D08F746440A"} +1ms
  LH:<= event:verbose Page.lifecycleEvent {"frameId":"08C3D886293E020EC6BC8D08F746440A","loaderId":"7B38E9927F1A62B3147C5D3 +2ms
  LH:<= event:verbose Page.frameNavigated {"frame":{"id":"08C3D886293E020EC6BC8D08F746440A","loaderId":"7B38E9927F1A62B3147 +5ms
  LH:method => browser:verbose Target.setAutoAttach {"flatten":true,"autoAttach":true,"waitForDebuggerOnStart":true} +0ms
  LH:<= event:verbose Page.loadEventFired {"timestamp":9746.123155} +0ms
  LH:method => browser:verbose Page.getResourceTree  +0ms
  LH:<= event:verbose Page.lifecycleEvent {"frameId":"08C3D886293E020EC6BC8D08F746440A","loaderId":"7B38E9927F1A62B3147C5D3 +1ms
  LH:<= event:verbose Page.frameStoppedLoading {"frameId":"08C3D886293E020EC6BC8D08F746440A"} +0ms
  LH:<= event:verbose Page.domContentEventFired {"timestamp":9746.123623} +0ms
  LH:<= event:verbose Page.lifecycleEvent {"frameId":"08C3D886293E020EC6BC8D08F746440A","loaderId":"7B38E9927F1A62B3147C5D3 +1ms
  LH:method <= browser OK:verbose Target.setAutoAttach {} +1ms
  LH:method <= browser OK:verbose Page.getResourceTree {"frameTree":{"frame":{"id":"08C3D886293E020EC6BC8D08F746440A","load +0ms
  LH:statusEnd:verbose Resetting state with about:blank +1ms
  LH:status:verbose Getting browser version +0ms
  LH:method => browser:verbose Browser.getVersion  +0ms
  LH:method <= browser OK:verbose Browser.getVersion {"protocolVersion":"1.3","product":"Chrome/92.0.4515.107","revision":" +0ms
  LH:statusEnd:verbose Getting browser version +1ms
  LH:status Benchmarking machine +0ms
  LH:method => browser:verbose Runtime.evaluate {"expression":"(function wrapInNativePromise() {\n        const Promise = g +0ms
  LH:method <= browser OK:verbose Runtime.evaluate {"result":{"type":"number","value":1549,"description":"1549"}} +1s
  LH:statusEnd:verbose Benchmarking machine +0ms
  LH:status Initializing… +1ms
  LH:listen once for event =>:verbose ServiceWorker.workerRegistrationUpdated  +0ms
  LH:Driver:verbose ServiceWorker.enable +0ms
  LH:method => browser:verbose ServiceWorker.enable  +0ms
  LH:method <= browser OK:verbose ServiceWorker.enable {} +0ms
  LH:<= event:verbose ServiceWorker.workerRegistrationUpdated {"registrations":[]} +1ms
  LH:Driver:verbose ServiceWorker.disable +0ms
  LH:method => browser:verbose ServiceWorker.disable  +0ms
  LH:<= event:verbose ServiceWorker.workerVersionUpdated {"versions":[]} +0ms
  LH:method <= browser OK:verbose ServiceWorker.disable {} +0ms
  LH:listen for event =>:verbose ServiceWorker.workerVersionUpdated  +0ms
  LH:Driver:verbose ServiceWorker.enable +0ms
  LH:method => browser:verbose ServiceWorker.enable  +0ms
  LH:method <= browser OK:verbose ServiceWorker.enable {} +1ms
  LH:<= event:verbose ServiceWorker.workerRegistrationUpdated {"registrations":[]} +0ms
  LH:<= event:verbose ServiceWorker.workerVersionUpdated {"versions":[]} +0ms
  LH:Driver:verbose ServiceWorker.disable +0ms
  LH:method => browser:verbose ServiceWorker.disable  +0ms
  LH:method <= browser OK:verbose ServiceWorker.disable {} +0ms
  LH:method => browser:verbose Network.setUserAgentOverride {"userAgent":"Mozilla/5.0 (Linux; Android 7.0; Moto G (4)) Appl +1ms
  LH:method <= browser OK:verbose Network.setUserAgentOverride {} +0ms
  LH:method => browser:verbose Emulation.setDeviceMetricsOverride {"width":360,"height":640,"deviceScaleFactor":2.625,"mobi +0ms
  LH:<= event:verbose Page.frameResized {} +3ms
  LH:<= event:verbose Page.frameResized {} +0ms
  LH:method <= browser OK:verbose Emulation.setDeviceMetricsOverride {} +0ms
  LH:method => browser:verbose Emulation.setTouchEmulationEnabled {"enabled":true} +0ms
  LH:method <= browser OK:verbose Emulation.setTouchEmulationEnabled {} +1ms
  LH:listen for event =>:verbose Debugger.paused  +0ms
  LH:listen for event =>:verbose Page.frameNavigated  +0ms
  LH:Driver:verbose Debugger.enable +1ms
  LH:method => browser:verbose Debugger.enable  +0ms
  LH:<= event:verbose Debugger.scriptParsed {"scriptId":"5","url":"","startLine":0,"startColumn":0,"endLine":0,"endColumn": +0ms
  LH:<= event:verbose Debugger.scriptParsed {"scriptId":"6","url":"","startLine":0,"startColumn":0,"endLine":79,"endColumn" +0ms
  LH:method <= browser OK:verbose Debugger.enable {"debuggerId":"8966013685038082926.7238982223048219254"} +0ms
  LH:method => browser:verbose Debugger.setSkipAllPauses {"skip":true} +1ms
  LH:method <= browser OK:verbose Debugger.setSkipAllPauses {} +0ms
  LH:method => browser:verbose Debugger.setAsyncCallStackDepth {"maxDepth":8} +0ms
  LH:method <= browser OK:verbose Debugger.setAsyncCallStackDepth {} +0ms
  LH:listen for event =>:verbose Page.javascriptDialogOpening  +1ms
  LH:method => browser:verbose Page.addScriptToEvaluateOnNewDocument {"source":"(() => {\n      const Promise = globalThis. +0ms
  LH:method <= browser OK:verbose Page.addScriptToEvaluateOnNewDocument {"identifier":"1"} +0ms
  LH:statusEnd:verbose Initializing… +0ms
  LH:status Running defaultPass pass CSSUsage, JsUsage, ViewportDimensions, ConsoleMessages, AnchorElements, ImageElements, LinkElements, MetaElements, ScriptElements, IFrameElements, FormElements, MainDocumentContent, GatherContext, GlobalListeners, AppCacheManifest, Doctype, DOMStats, OptimizedImages, PasswordInputsWithPreventedPaste, ResponseCompression, TagsBlockingFirstPaint, FontSize, EmbeddedContent, RobotsTxt, TapTargets, Accessibility, TraceElements, InspectorIssues, SourceMaps, FullPageScreenshot +1ms
  LH:status Resetting state with about:blank +0ms
  LH:listen for event =>:verbose Page.frameNavigated  +0ms
  LH:method => browser:verbose Page.setLifecycleEventsEnabled {"enabled":true} +0ms
  LH:<= event:verbose Page.lifecycleEvent {"frameId":"08C3D886293E020EC6BC8D08F746440A","loaderId":"7B38E9927F1A62B3147C5D3 +1ms
  LH:<= event:verbose Page.lifecycleEvent {"frameId":"08C3D886293E020EC6BC8D08F746440A","loaderId":"7B38E9927F1A62B3147C5D3 +0ms
  LH:<= event:verbose Page.lifecycleEvent {"frameId":"08C3D886293E020EC6BC8D08F746440A","loaderId":"7B38E9927F1A62B3147C5D3 +0ms
  LH:<= event:verbose Page.lifecycleEvent {"frameId":"08C3D886293E020EC6BC8D08F746440A","loaderId":"7B38E9927F1A62B3147C5D3 +0ms
  LH:<= event:verbose Page.lifecycleEvent {"frameId":"08C3D886293E020EC6BC8D08F746440A","loaderId":"7B38E9927F1A62B3147C5D3 +0ms
  LH:method <= browser OK:verbose Page.setLifecycleEventsEnabled {} +0ms
  LH:method => browser:verbose Page.navigate {"url":"about:blank"} +0ms
  LH:listen once for event =>:verbose Page.frameNavigated  +0ms
  LH:method <= browser OK:verbose Page.navigate {"frameId":"08C3D886293E020EC6BC8D08F746440A","loaderId":"6C4749344693A0B0F +4ms
  LH:<= event:verbose Page.frameStartedLoading {"frameId":"08C3D886293E020EC6BC8D08F746440A"} +1ms
  LH:<= event:verbose Page.lifecycleEvent {"frameId":"08C3D886293E020EC6BC8D08F746440A","loaderId":"6C4749344693A0B0FCC4961 +0ms
  LH:<= event:verbose Page.frameNavigated {"frame":{"id":"08C3D886293E020EC6BC8D08F746440A","loaderId":"6C4749344693A0B0FCC +7ms
  LH:method => browser:verbose Target.setAutoAttach {"flatten":true,"autoAttach":true,"waitForDebuggerOnStart":true} +1ms
  LH:<= event:verbose Page.frameResized {} +0ms
  LH:<= event:verbose Debugger.scriptParsed {"scriptId":"7","url":"","startLine":0,"startColumn":0,"endLine":20,"endColumn" +0ms
  LH:method => browser:verbose Page.getResourceTree  +0ms
  LH:method => browser:verbose Debugger.setSkipAllPauses {"skip":true} +0ms
  LH:<= event:verbose Page.frameResized {} +0ms
  LH:<= event:verbose Page.loadEventFired {"timestamp":9747.159869} +1ms
  LH:<= event:verbose Page.lifecycleEvent {"frameId":"08C3D886293E020EC6BC8D08F746440A","loaderId":"6C4749344693A0B0FCC4961 +0ms
  LH:<= event:verbose Page.frameStoppedLoading {"frameId":"08C3D886293E020EC6BC8D08F746440A"} +1ms
  LH:<= event:verbose Page.domContentEventFired {"timestamp":9747.160294} +0ms
  LH:<= event:verbose Page.lifecycleEvent {"frameId":"08C3D886293E020EC6BC8D08F746440A","loaderId":"6C4749344693A0B0FCC4961 +0ms
  LH:method <= browser OK:verbose Target.setAutoAttach {} +1ms
  LH:method <= browser OK:verbose Page.getResourceTree {"frameTree":{"frame":{"id":"08C3D886293E020EC6BC8D08F746440A","load +0ms
  LH:method <= browser OK:verbose Debugger.setSkipAllPauses {} +0ms
  LH:method => browser:verbose Debugger.setAsyncCallStackDepth {"maxDepth":8} +0ms
  LH:statusEnd:verbose Resetting state with about:blank +0ms
  LH:method => browser:verbose Storage.getUsageAndQuota {"origin":"https://www.webpagetest.org/"} +0ms
  LH:method <= browser OK:verbose Debugger.setAsyncCallStackDepth {} +2ms
  LH:method <= browser OK:verbose Storage.getUsageAndQuota {"usage":0,"quota":24940715212,"overrideActive":false,"usageBrea +0ms
  LH:method => browser:verbose Storage.clearDataForOrigin {"origin":"https://www.webpagetest.org","storageTypes":"appcache, +1ms
  LH:method <= browser OK:verbose Storage.clearDataForOrigin {} +1ms
  LH:status Cleaning browser cache +0ms
  LH:method => browser:verbose Network.clearBrowserCache  +0ms
  LH:method <= browser OK:verbose Network.clearBrowserCache {} +22ms
  LH:method => browser:verbose Network.setCacheDisabled {"cacheDisabled":true} +0ms
  LH:method <= browser OK:verbose Network.setCacheDisabled {} +1ms
  LH:method => browser:verbose Network.setCacheDisabled {"cacheDisabled":false} +0ms
  LH:method <= browser OK:verbose Network.setCacheDisabled {} +1ms
  LH:statusEnd:verbose Cleaning browser cache +0ms
  LH:status Preparing network conditions +0ms
  LH:method => browser:verbose Network.emulateNetworkConditions {"offline":false,"latency":562.5,"downloadThroughput":18874 +0ms
  LH:method => browser:verbose Emulation.setCPUThrottlingRate {"rate":4} +1ms
  LH:method <= browser OK:verbose Network.emulateNetworkConditions {} +0ms
  LH:method <= browser OK:verbose Emulation.setCPUThrottlingRate {} +6ms
  LH:method => browser:verbose Network.setBlockedURLs {"urls":[]} +0ms
  LH:method <= browser OK:verbose Network.setBlockedURLs {} +1ms
  LH:statusEnd:verbose Preparing network conditions +0ms
  LH:status:verbose Running beforePass methods +0ms
  LH:status:verbose Gathering setup: CSSUsage +0ms
  LH:statusEnd:verbose Gathering setup: CSSUsage +0ms
  LH:status:verbose Gathering setup: JsUsage +0ms
  LH:Driver:verbose Profiler.enable +1ms
  LH:method => browser:verbose Profiler.enable  +0ms
  LH:method <= browser OK:verbose Profiler.enable {} +0ms
  LH:method => browser:verbose Profiler.startPreciseCoverage {"detailed":false} +0ms
  LH:method <= browser OK:verbose Profiler.startPreciseCoverage {"timestamp":9747.204279} +9ms
  LH:listen for event =>:verbose Debugger.scriptParsed  +0ms
  LH:statusEnd:verbose Gathering setup: JsUsage +0ms
  LH:status:verbose Gathering setup: ViewportDimensions +1ms
  LH:statusEnd:verbose Gathering setup: ViewportDimensions +0ms
  LH:status:verbose Gathering setup: ConsoleMessages +0ms
  LH:listen for event =>:verbose Log.entryAdded  +0ms
  LH:Driver:verbose Log.enable +0ms
  LH:method => browser:verbose Log.enable  +0ms
  LH:method <= browser OK:verbose Log.enable {} +3ms
  LH:method => browser:verbose Log.startViolationsReport {"config":[{"name":"discouragedAPIUse","threshold":-1}]} +1ms
  LH:method <= browser OK:verbose Log.startViolationsReport {} +2ms
  LH:listen for event =>:verbose Runtime.consoleAPICalled  +0ms
  LH:listen for event =>:verbose Runtime.exceptionThrown  +0ms
  LH:Driver:verbose Runtime.enable +0ms
  LH:method => browser:verbose Runtime.enable  +0ms
  LH:<= event:verbose Runtime.executionContextCreated {"context":{"id":3,"origin":"://","name":"","uniqueId":"-759764602813 +2ms
  LH:method <= browser OK:verbose Runtime.enable {} +0ms
  LH:statusEnd:verbose Gathering setup: ConsoleMessages +1ms
  LH:status:verbose Gathering setup: AnchorElements +0ms
  LH:statusEnd:verbose Gathering setup: AnchorElements +0ms
  LH:status:verbose Gathering setup: ImageElements +0ms
  LH:statusEnd:verbose Gathering setup: ImageElements +0ms
  LH:status:verbose Gathering setup: LinkElements +0ms
  LH:statusEnd:verbose Gathering setup: LinkElements +0ms
  LH:status:verbose Gathering setup: MetaElements +0ms
  LH:statusEnd:verbose Gathering setup: MetaElements +0ms
  LH:status:verbose Gathering setup: ScriptElements +0ms
  LH:statusEnd:verbose Gathering setup: ScriptElements +0ms
  LH:status:verbose Gathering setup: IFrameElements +0ms
  LH:statusEnd:verbose Gathering setup: IFrameElements +0ms
  LH:status:verbose Gathering setup: FormElements +0ms
  LH:statusEnd:verbose Gathering setup: FormElements +0ms
  LH:status:verbose Gathering setup: MainDocumentContent +0ms
  LH:statusEnd:verbose Gathering setup: MainDocumentContent +0ms
  LH:status:verbose Gathering setup: GatherContext +0ms
  LH:statusEnd:verbose Gathering setup: GatherContext +0ms
  LH:status:verbose Gathering setup: GlobalListeners +0ms
  LH:statusEnd:verbose Gathering setup: GlobalListeners +0ms
  LH:status:verbose Gathering setup: AppCacheManifest +1ms
  LH:statusEnd:verbose Gathering setup: AppCacheManifest +0ms
  LH:status:verbose Gathering setup: Doctype +0ms
  LH:statusEnd:verbose Gathering setup: Doctype +0ms
  LH:status:verbose Gathering setup: DOMStats +0ms
  LH:statusEnd:verbose Gathering setup: DOMStats +0ms
  LH:status:verbose Gathering setup: OptimizedImages +0ms
  LH:statusEnd:verbose Gathering setup: OptimizedImages +0ms
  LH:status:verbose Gathering setup: PasswordInputsWithPreventedPaste +0ms
  LH:statusEnd:verbose Gathering setup: PasswordInputsWithPreventedPaste +0ms
  LH:status:verbose Gathering setup: ResponseCompression +0ms
  LH:statusEnd:verbose Gathering setup: ResponseCompression +0ms
  LH:status:verbose Gathering setup: TagsBlockingFirstPaint +0ms
  LH:method => browser:verbose Page.addScriptToEvaluateOnNewDocument {"source":"(() => {\n      const Promise = globalThis. +0ms
  LH:method <= browser OK:verbose Page.addScriptToEvaluateOnNewDocument {"identifier":"2"} +1ms
  LH:statusEnd:verbose Gathering setup: TagsBlockingFirstPaint +0ms
  LH:status:verbose Gathering setup: FontSize +0ms
  LH:statusEnd:verbose Gathering setup: FontSize +1ms
  LH:status:verbose Gathering setup: EmbeddedContent +0ms
  LH:statusEnd:verbose Gathering setup: EmbeddedContent +0ms
  LH:status:verbose Gathering setup: RobotsTxt +0ms
  LH:statusEnd:verbose Gathering setup: RobotsTxt +0ms
  LH:status:verbose Gathering setup: TapTargets +0ms
  LH:statusEnd:verbose Gathering setup: TapTargets +0ms
  LH:status:verbose Gathering setup: Accessibility +0ms
  LH:statusEnd:verbose Gathering setup: Accessibility +0ms
  LH:status:verbose Gathering setup: TraceElements +0ms
  LH:Driver:verbose Animation.enable +0ms
  LH:method => browser:verbose Animation.enable  +0ms
  LH:method <= browser OK:verbose Animation.enable {} +1ms
  LH:listen for event =>:verbose Animation.animationStarted  +0ms
  LH:statusEnd:verbose Gathering setup: TraceElements +0ms
  LH:status:verbose Gathering setup: InspectorIssues +0ms
  LH:listen for event =>:verbose Audits.issueAdded  +0ms
  LH:Driver:verbose Audits.enable +0ms
  LH:method => browser:verbose Audits.enable  +0ms
  LH:method <= browser OK:verbose Audits.enable {} +3ms
  LH:statusEnd:verbose Gathering setup: InspectorIssues +0ms
  LH:status:verbose Gathering setup: SourceMaps +0ms
  LH:listen for event =>:verbose Debugger.scriptParsed  +0ms
  LH:statusEnd:verbose Gathering setup: SourceMaps +0ms
  LH:status:verbose Gathering setup: FullPageScreenshot +0ms
  LH:statusEnd:verbose Gathering setup: FullPageScreenshot +0ms
  LH:statusEnd:verbose Running beforePass methods +0ms
  LH:status Beginning devtoolsLog and trace +0ms
  LH:method => browser:verbose Tracing.start {"categories":"-*,disabled-by-default-lighthouse,loading,v8,v8.execute,blink.u +0ms
  LH:method <= browser OK:verbose Tracing.start {} +43ms
  LH:statusEnd:verbose Beginning devtoolsLog and trace +0ms
  LH:status Loading page & waiting for onload +1ms
  LH:listen for event =>:verbose Page.frameNavigated  +0ms
  LH:method => browser:verbose Page.setLifecycleEventsEnabled {"enabled":true} +0ms
  LH:<= event:verbose Page.lifecycleEvent {"frameId":"08C3D886293E020EC6BC8D08F746440A","loaderId":"6C4749344693A0B0FCC4961 +6ms
  LH:<= event:verbose Page.lifecycleEvent {"frameId":"08C3D886293E020EC6BC8D08F746440A","loaderId":"6C4749344693A0B0FCC4961 +0ms
  LH:<= event:verbose Page.lifecycleEvent {"frameId":"08C3D886293E020EC6BC8D08F746440A","loaderId":"6C4749344693A0B0FCC4961 +0ms
  LH:<= event:verbose Page.lifecycleEvent {"frameId":"08C3D886293E020EC6BC8D08F746440A","loaderId":"6C4749344693A0B0FCC4961 +1ms
  LH:<= event:verbose Page.lifecycleEvent {"frameId":"08C3D886293E020EC6BC8D08F746440A","loaderId":"6C4749344693A0B0FCC4961 +0ms
  LH:method <= browser OK:verbose Page.setLifecycleEventsEnabled {} +2ms
  LH:method => browser:verbose Page.navigate {"url":"https://www.webpagetest.org/"} +0ms
  LH:listen for event =>:verbose Page.lifecycleEvent  +1ms
  LH:listen once for event =>:verbose Page.loadEventFired  +0ms
  LH:listen once for event =>:verbose Page.domContentEventFired  +0ms
  LH:listen once for event =>:verbose Page.domContentEventFired  +0ms
  LH:<= event:verbose Network.requestWillBeSent {"requestId":"BABD200387E5EB6C9E8A142D4BAD6EFC","loaderId":"BABD200387E5EB6 +5ms
  LH:waitFor:verbose Waiting on DomContentLoaded +1ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +1ms
  LH:NetworkRecorder:verbose network semi-quiet +0ms
  LH:<= event:verbose Network.requestWillBeSentExtraInfo {"requestId":"BABD200387E5EB6C9E8A142D4BAD6EFC","associatedCookies +12ms
  LH:<= event:verbose Page.lifecycleEvent {"frameId":"08C3D886293E020EC6BC8D08F746440A","loaderId":"6C4749344693A0B0FCC4961 +476ms
  LH:<= event:verbose Page.lifecycleEvent {"frameId":"08C3D886293E020EC6BC8D08F746440A","loaderId":"6C4749344693A0B0FCC4961 +1ms
  LH:<= event:verbose Network.responseReceivedExtraInfo {"requestId":"BABD200387E5EB6C9E8A142D4BAD6EFC","blockedCookies":[] +93ms
  LH:<= event:verbose Network.responseReceived {"requestId":"BABD200387E5EB6C9E8A142D4BAD6EFC","loaderId":"BABD200387E5EB6C +8ms
  LH:method <= browser OK:verbose Page.navigate {"frameId":"08C3D886293E020EC6BC8D08F746440A","loaderId":"BABD200387E5EB6C9 +3ms
  LH:<= event:verbose Page.frameStartedLoading {"frameId":"08C3D886293E020EC6BC8D08F746440A"} +110ms
  LH:<= event:verbose Page.lifecycleEvent {"frameId":"08C3D886293E020EC6BC8D08F746440A","loaderId":"BABD200387E5EB6C9E8A142 +4ms
  LH:<= event:verbose Network.requestWillBeSentExtraInfo {"requestId":"4349.2","associatedCookies":[{"blockedReasons":[],"c +260ms
  LH:<= event:verbose Network.requestWillBeSentExtraInfo {"requestId":"4349.3","associatedCookies":[{"blockedReasons":[],"c +10ms
  LH:<= event:verbose Runtime.executionContextsCleared {} +83ms
  LH:<= event:verbose Page.frameNavigated {"frame":{"id":"08C3D886293E020EC6BC8D08F746440A","loaderId":"BABD200387E5EB6C9E8 +0ms
  LH:method => browser:verbose Target.setAutoAttach {"flatten":true,"autoAttach":true,"waitForDebuggerOnStart":true} +0ms
  LH:<= event:verbose Runtime.executionContextCreated {"context":{"id":4,"origin":"https://www.webpagetest.org","name":""," +1ms
  LH:<= event:verbose Page.frameResized {} +0ms
  LH:<= event:verbose Debugger.scriptParsed {"scriptId":"8","url":"","startLine":0,"startColumn":0,"endLine":20,"endColumn" +0ms
  LH:<= event:verbose Debugger.scriptParsed {"scriptId":"9","url":"","startLine":0,"startColumn":0,"endLine":24,"endColumn" +0ms
  LH:<= event:verbose Network.dataReceived {"requestId":"BABD200387E5EB6C9E8A142D4BAD6EFC","timestamp":9748.212461,"dataLen +0ms
  LH:<= event:verbose Page.frameResized {} +0ms
  LH:method => browser:verbose Debugger.setSkipAllPauses {"skip":true} +0ms
  LH:<= event:verbose Network.dataReceived {"requestId":"BABD200387E5EB6C9E8A142D4BAD6EFC","timestamp":9748.248437,"dataLen +2ms
  LH:<= event:verbose Network.requestWillBeSent {"requestId":"4349.2","loaderId":"BABD200387E5EB6C9E8A142D4BAD6EFC","docume +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:NetworkRecorder:verbose network semi-quiet +1ms
  LH:<= event:verbose Network.requestWillBeSent {"requestId":"4349.3","loaderId":"BABD200387E5EB6C9E8A142D4BAD6EFC","docume +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:NetworkRecorder:verbose network busy +0ms
  LH:<= event:verbose Network.requestWillBeSent {"requestId":"4349.4","loaderId":"BABD200387E5EB6C9E8A142D4BAD6EFC","docume +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +1ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:NetworkRecorder:verbose network busy +0ms
  LH:<= event:verbose Network.requestWillBeSent {"requestId":"4349.5","loaderId":"BABD200387E5EB6C9E8A142D4BAD6EFC","docume +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +1ms
  LH:NetworkRecorder:verbose network busy +0ms
  LH:<= event:verbose Network.requestWillBeSent {"requestId":"4349.6","loaderId":"BABD200387E5EB6C9E8A142D4BAD6EFC","docume +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:NetworkRecorder:verbose network busy +0ms
  LH:<= event:verbose Network.requestWillBeSent {"requestId":"4349.7","loaderId":"BABD200387E5EB6C9E8A142D4BAD6EFC","docume +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +1ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:NetworkRecorder:verbose network busy +0ms
  LH:<= event:verbose Network.requestWillBeSent {"requestId":"4349.8","loaderId":"BABD200387E5EB6C9E8A142D4BAD6EFC","docume +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:NetworkRecorder:verbose network busy +0ms
  LH:<= event:verbose Network.requestWillBeSent {"requestId":"4349.9","loaderId":"BABD200387E5EB6C9E8A142D4BAD6EFC","docume +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:NetworkRecorder:verbose network busy +1ms
  LH:<= event:verbose Network.requestWillBeSent {"requestId":"4349.10","loaderId":"BABD200387E5EB6C9E8A142D4BAD6EFC","docum +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:NetworkRecorder:verbose network busy +0ms
  LH:<= event:verbose Network.requestWillBeSent {"requestId":"4349.11","loaderId":"BABD200387E5EB6C9E8A142D4BAD6EFC","docum +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +1ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:NetworkRecorder:verbose network busy +0ms
  LH:<= event:verbose Debugger.scriptParsed {"scriptId":"10","url":"https://www.webpagetest.org/","startLine":15,"startColu +0ms
  LH:<= event:verbose Network.dataReceived {"requestId":"BABD200387E5EB6C9E8A142D4BAD6EFC","timestamp":9748.307855,"dataLen +0ms
  LH:<= event:verbose Network.loadingFinished {"requestId":"BABD200387E5EB6C9E8A142D4BAD6EFC","timestamp":9747.97203,"encod +1ms
  LH:waitFor:verbose Waiting on DomContentLoaded +8ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:NetworkRecorder:verbose network busy +1ms
  LH:<= event:verbose Network.requestWillBeSent {"requestId":"4349.13","loaderId":"BABD200387E5EB6C9E8A142D4BAD6EFC","docum +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +1ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:NetworkRecorder:verbose network busy +0ms
  LH:method <= browser OK:verbose Target.setAutoAttach {} +18ms
  LH:method <= browser OK:verbose Debugger.setSkipAllPauses {} +24ms
  LH:method => browser:verbose Debugger.setAsyncCallStackDepth {"maxDepth":8} +0ms
  LH:method <= browser OK:verbose Debugger.setAsyncCallStackDepth {} +5ms
  LH:<= event:verbose Network.responseReceivedExtraInfo {"requestId":"4349.2","blockedCookies":[],"headers":{"server":"ngin +422ms
  LH:<= event:verbose Network.responseReceivedExtraInfo {"requestId":"4349.3","blockedCookies":[],"headers":{"server":"ngin +11ms
  LH:<= event:verbose Network.responseReceived {"requestId":"4349.2","loaderId":"BABD200387E5EB6C9E8A142D4BAD6EFC","timesta +30ms
  LH:<= event:verbose Network.requestWillBeSentExtraInfo {"requestId":"4349.11","associatedCookies":[{"blockedReasons":[]," +54ms
  LH:<= event:verbose Network.responseReceived {"requestId":"4349.3","loaderId":"BABD200387E5EB6C9E8A142D4BAD6EFC","timesta +27ms
  LH:<= event:verbose Network.dataReceived {"requestId":"4349.3","timestamp":9748.884676,"dataLength":10422,"encodedDataLen +43ms
  LH:<= event:verbose Network.loadingFinished {"requestId":"4349.3","timestamp":9748.882114,"encodedDataLength":3958,"shoul +3ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +1ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:NetworkRecorder:verbose network busy +0ms
  LH:<= event:verbose Network.dataReceived {"requestId":"4349.2","timestamp":9749.012197,"dataLength":36674,"encodedDataLen +11ms
  LH:<= event:verbose Network.requestWillBeSentExtraInfo {"requestId":"4349.13","associatedCookies":[{"blockedReasons":[]," +5ms
  LH:<= event:verbose Network.loadingFinished {"requestId":"4349.2","timestamp":9748.898,"encodedDataLength":8219,"shouldRe +18ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:NetworkRecorder:verbose network busy +0ms
  LH:<= event:verbose Network.requestWillBeSentExtraInfo {"requestId":"4349.5","associatedCookies":[{"blockedReasons":[],"c +23ms
  LH:<= event:verbose Network.requestWillBeSentExtraInfo {"requestId":"4349.4","associatedCookies":[],"headers":{":method": +7ms
  LH:<= event:verbose Network.requestWillBeSentExtraInfo {"requestId":"4349.6","associatedCookies":[{"blockedReasons":[],"c +5ms
  LH:<= event:verbose Network.requestWillBeSentExtraInfo {"requestId":"4349.7","associatedCookies":[{"blockedReasons":[],"c +7ms
  LH:<= event:verbose Network.requestWillBeSentExtraInfo {"requestId":"4349.8","associatedCookies":[{"blockedReasons":[],"c +9ms
  LH:<= event:verbose Network.requestWillBeSentExtraInfo {"requestId":"4349.9","associatedCookies":[{"blockedReasons":[],"c +9ms
  LH:<= event:verbose Network.requestWillBeSentExtraInfo {"requestId":"4349.10","associatedCookies":[{"blockedReasons":[]," +8ms
  LH:<= event:verbose Network.requestWillBeSentExtraInfo {"requestId":"4349.14","associatedCookies":[],"headers":{":method" +19ms
  LH:<= event:verbose Debugger.scriptParsed {"scriptId":"11","url":"https://www.webpagetest.org/","startLine":90,"startColu +7ms
  LH:<= event:verbose Network.requestWillBeSent {"requestId":"4349.14","loaderId":"BABD200387E5EB6C9E8A142D4BAD6EFC","docum +3ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:NetworkRecorder:verbose network busy +0ms
  LH:<= event:verbose Debugger.scriptParsed {"scriptId":"12","url":"https://www.webpagetest.org/","startLine":119,"startCol +115ms
  LH:<= event:verbose Debugger.scriptParsed {"scriptId":"13","url":"https://www.webpagetest.org/","startLine":125,"startCol +0ms
  LH:<= event:verbose Network.requestWillBeSentExtraInfo {"requestId":"4349.24","associatedCookies":[{"blockedReasons":[]," +35ms
  LH:<= event:verbose Network.requestWillBeSent {"requestId":"4349.23","loaderId":"BABD200387E5EB6C9E8A142D4BAD6EFC","docum +171ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:NetworkRecorder:verbose network busy +0ms
  LH:<= event:verbose Network.requestServedFromCache {"requestId":"4349.23"} +1ms
  LH:<= event:verbose Network.responseReceived {"requestId":"4349.23","loaderId":"BABD200387E5EB6C9E8A142D4BAD6EFC","timest +3ms
  LH:<= event:verbose Network.dataReceived {"requestId":"4349.23","timestamp":9749.285142,"dataLength":271,"encodedDataLeng +0ms
  LH:<= event:verbose Network.loadingFinished {"requestId":"4349.23","timestamp":9749.285147,"encodedDataLength":0,"shouldR +1ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:NetworkRecorder:verbose network busy +0ms
  LH:<= event:verbose Network.requestWillBeSent {"requestId":"4349.24","loaderId":"BABD200387E5EB6C9E8A142D4BAD6EFC","docum +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:NetworkRecorder:verbose network busy +0ms
  LH:<= event:verbose Network.resourceChangedPriority {"requestId":"4349.24","newPriority":"High","timestamp":9749.44082} +0ms
  LH:<= event:verbose Network.resourceChangedPriority {"requestId":"4349.5","newPriority":"High","timestamp":9749.440847} +0ms
  LH:<= event:verbose Network.resourceChangedPriority {"requestId":"4349.7","newPriority":"High","timestamp":9749.44086} +0ms
  LH:<= event:verbose Network.resourceChangedPriority {"requestId":"4349.6","newPriority":"High","timestamp":9749.440874} +0ms
  LH:<= event:verbose Page.lifecycleEvent {"frameId":"08C3D886293E020EC6BC8D08F746440A","loaderId":"BABD200387E5EB6C9E8A142 +0ms
  LH:<= event:verbose Page.lifecycleEvent {"frameId":"08C3D886293E020EC6BC8D08F746440A","loaderId":"BABD200387E5EB6C9E8A142 +1ms
  LH:<= event:verbose Page.lifecycleEvent {"frameId":"08C3D886293E020EC6BC8D08F746440A","loaderId":"BABD200387E5EB6C9E8A142 +117ms
  LH:<= event:verbose Page.lifecycleEvent {"frameId":"08C3D886293E020EC6BC8D08F746440A","loaderId":"BABD200387E5EB6C9E8A142 +5ms
  LH:<= event:verbose Network.responseReceivedExtraInfo {"requestId":"4349.11","blockedCookies":[],"headers":{"server":"ngi +0ms
  LH:<= event:verbose Network.responseReceived {"requestId":"4349.11","loaderId":"BABD200387E5EB6C9E8A142D4BAD6EFC","timest +15ms
  LH:<= event:verbose Page.lifecycleEvent {"frameId":"08C3D886293E020EC6BC8D08F746440A","loaderId":"BABD200387E5EB6C9E8A142 +1ms
  LH:<= event:verbose Network.responseReceivedExtraInfo {"requestId":"4349.13","blockedCookies":[],"headers":{"server":"ngi +1ms
  LH:<= event:verbose Network.responseReceived {"requestId":"4349.13","loaderId":"BABD200387E5EB6C9E8A142D4BAD6EFC","timest +5ms
  LH:<= event:verbose Network.dataReceived {"requestId":"4349.13","timestamp":9749.637136,"dataLength":15794,"encodedDataLe +27ms
  LH:<= event:verbose Network.loadingFinished {"requestId":"4349.13","timestamp":9749.636341,"encodedDataLength":4324,"shou +3ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:NetworkRecorder:verbose network busy +0ms
  LH:<= event:verbose Network.responseReceivedExtraInfo {"requestId":"4349.5","blockedCookies":[],"headers":{"server":"ngin +13ms
  LH:<= event:verbose Network.responseReceivedExtraInfo {"requestId":"4349.4","blockedCookies":[],"headers":{"expires":"Fri +7ms
  LH:<= event:verbose Network.responseReceived {"requestId":"4349.5","loaderId":"BABD200387E5EB6C9E8A142D4BAD6EFC","timesta +6ms
  LH:<= event:verbose Network.dataReceived {"requestId":"4349.5","timestamp":9749.656834,"dataLength":1647,"encodedDataLeng +0ms
  LH:<= event:verbose Network.loadingFinished {"requestId":"4349.5","timestamp":9749.652971,"encodedDataLength":851,"should +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:NetworkRecorder:verbose network busy +0ms
  LH:<= event:verbose Network.responseReceivedExtraInfo {"requestId":"4349.6","blockedCookies":[],"headers":{"server":"ngin +3ms
  LH:<= event:verbose Network.responseReceived {"requestId":"4349.4","loaderId":"BABD200387E5EB6C9E8A142D4BAD6EFC","timesta +2ms
  LH:<= event:verbose Network.dataReceived {"requestId":"4349.4","timestamp":9749.668775,"dataLength":850,"encodedDataLengt +1ms
  LH:<= event:verbose Network.loadingFinished {"requestId":"4349.4","timestamp":9749.660109,"encodedDataLength":987,"should +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:NetworkRecorder:verbose network busy +0ms
  LH:<= event:verbose Network.responseReceived {"requestId":"4349.6","loaderId":"BABD200387E5EB6C9E8A142D4BAD6EFC","timesta +9ms
  LH:<= event:verbose Network.dataReceived {"requestId":"4349.6","timestamp":9749.67238,"dataLength":2957,"encodedDataLengt +1ms
  LH:<= event:verbose Network.loadingFinished {"requestId":"4349.6","timestamp":9749.668638,"encodedDataLength":800,"should +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:NetworkRecorder:verbose network busy +1ms
  LH:<= event:verbose Debugger.scriptParsed {"scriptId":"15","url":"https://www.google.com/recaptcha/api.js","startLine":0, +1ms
  LH:<= event:verbose Network.requestWillBeSent {"requestId":"4349.26","loaderId":"BABD200387E5EB6C9E8A142D4BAD6EFC","docum +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:NetworkRecorder:verbose network busy +0ms
  LH:<= event:verbose Network.responseReceivedExtraInfo {"requestId":"4349.7","blockedCookies":[],"headers":{"server":"ngin +3ms
  LH:<= event:verbose Network.requestWillBeSentExtraInfo {"requestId":"4349.26","associatedCookies":[],"headers":{":method" +3ms
  LH:<= event:verbose Network.responseReceivedExtraInfo {"requestId":"4349.8","blockedCookies":[],"headers":{"server":"ngin +2ms
  LH:<= event:verbose Network.responseReceivedExtraInfo {"requestId":"4349.9","blockedCookies":[],"headers":{"server":"ngin +11ms
  LH:<= event:verbose Network.responseReceivedExtraInfo {"requestId":"4349.10","blockedCookies":[],"headers":{"server":"ngi +5ms
  LH:<= event:verbose Network.responseReceived {"requestId":"4349.7","loaderId":"BABD200387E5EB6C9E8A142D4BAD6EFC","timesta +5ms
  LH:<= event:verbose Network.dataReceived {"requestId":"4349.7","timestamp":9749.69433,"dataLength":1561,"encodedDataLengt +0ms
  LH:<= event:verbose Network.loadingFinished {"requestId":"4349.7","timestamp":9749.684205,"encodedDataLength":662,"should +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:NetworkRecorder:verbose network busy +0ms
  LH:<= event:verbose Network.responseReceivedExtraInfo {"requestId":"4349.14","blockedCookies":[],"headers":{"strict-trans +10ms
  LH:<= event:verbose Network.responseReceived {"requestId":"4349.8","loaderId":"BABD200387E5EB6C9E8A142D4BAD6EFC","timesta +27ms
  LH:<= event:verbose Network.responseReceived {"requestId":"4349.9","loaderId":"BABD200387E5EB6C9E8A142D4BAD6EFC","timesta +2ms
  LH:<= event:verbose Network.responseReceived {"requestId":"4349.10","loaderId":"BABD200387E5EB6C9E8A142D4BAD6EFC","timest +3ms
  LH:<= event:verbose Network.dataReceived {"requestId":"4349.9","timestamp":9749.819061,"dataLength":5744,"encodedDataLeng +67ms
  LH:<= event:verbose Network.loadingFinished {"requestId":"4349.9","timestamp":9749.8191,"encodedDataLength":5886,"shouldR +2ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:NetworkRecorder:verbose network busy +0ms
  LH:<= event:verbose Network.responseReceivedExtraInfo {"requestId":"4349.24","blockedCookies":[],"headers":{"server":"ngi +66ms
  LH:<= event:verbose Network.responseReceived {"requestId":"4349.24","loaderId":"BABD200387E5EB6C9E8A142D4BAD6EFC","timest +14ms
  LH:<= event:verbose Network.dataReceived {"requestId":"4349.24","timestamp":9749.893909,"dataLength":286,"encodedDataLeng +0ms
  LH:<= event:verbose Network.loadingFinished {"requestId":"4349.24","timestamp":9749.89161,"encodedDataLength":478,"should +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:NetworkRecorder:verbose network busy +0ms
  LH:<= event:verbose Network.dataReceived {"requestId":"4349.11","timestamp":9749.940535,"dataLength":92003,"encodedDataLe +44ms
  LH:<= event:verbose Network.dataReceived {"requestId":"4349.10","timestamp":9749.993056,"dataLength":12413,"encodedDataLe +48ms
  LH:<= event:verbose Network.loadingFinished {"requestId":"4349.10","timestamp":9749.993109,"encodedDataLength":12518,"sho +14ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:NetworkRecorder:verbose network busy +0ms
  LH:<= event:verbose Network.dataReceived {"requestId":"4349.8","timestamp":9750.04229,"dataLength":15629,"encodedDataLeng +34ms
  LH:<= event:verbose Network.loadingFinished {"requestId":"4349.8","timestamp":9750.041894,"encodedDataLength":15803,"shou +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:NetworkRecorder:verbose network busy +0ms
  LH:<= event:verbose Network.responseReceived {"requestId":"4349.14","loaderId":"BABD200387E5EB6C9E8A142D4BAD6EFC","timest +37ms
  LH:<= event:verbose Network.dataReceived {"requestId":"4349.14","timestamp":9750.079233,"dataLength":46274,"encodedDataLe +0ms
  LH:<= event:verbose Network.loadingFinished {"requestId":"4349.14","timestamp":9750.073626,"encodedDataLength":17586,"sho +4ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:waitFor:verbose Waiting on DomContentLoaded +0ms
  LH:NetworkRecorder:verbose network semi-quiet +0ms
  LH:<= event:verbose Inspector.targetCrashed {} +180ms

</details>

pmeenan

comment created time in 3 hours

PullRequestReviewEvent

Pull request review commentGoogleChrome/lighthouse

core(css-usage): ignore removed stylesheets

 class CSSUsage extends FRGatherer {     this._stylesheets = [];     /** @param {LH.Crdp.CSS.StyleSheetAddedEvent} sheet */     this._onStylesheetAdded = sheet => this._stylesheets.push(sheet);+    /** @param {LH.Crdp.CSS.StyleSheetRemovedEvent} sheet */+    this._onStylesheetRemoved = sheet => {+      const styleSheetId = sheet.styleSheetId;
      // We can't fetch the content of removed stylesheets, so we ignore them completely.
      // TODO(FR-COMPAT): Refactor use of CSSUsage artifact to not *always* rely on the content of stylesheets. 
      const styleSheetId = sheet.styleSheetId;
adamraine

comment created time in 3 hours

PullRequestReviewEvent

Pull request review commentGoogleChrome/lighthouse

core(byte-efficiency): mark n/a if no network records in timespan

 describe('Fraggle Rock API', () => {       const {auditResults, erroredAudits, notApplicableAudits} = getAuditsBreakdown(result.lhr);       expect(auditResults.length).toMatchInlineSnapshot(`50`); -      expect(notApplicableAudits.length).toMatchInlineSnapshot(`9`);+      expect(notApplicableAudits.length).toMatchInlineSnapshot(`22`);       expect(notApplicableAudits.map(audit => audit.id)).toContain('server-response-time');        // TODO(FR-COMPAT): Reduce this number by handling the error, making N/A, or removing timespan support.-      expect(erroredAudits.length).toMatchInlineSnapshot(`14`);+      expect(erroredAudits.length).toMatchInlineSnapshot(`1`);

nice! what's the final one?

adamraine

comment created time in 3 hours

Pull request review commentGoogleChrome/lighthouse

core(byte-efficiency): mark n/a if no network records in timespan

 class UnusedBytes extends Audit {       devtoolsLog,       settings,     };-     const networkRecords = await NetworkRecords.request(devtoolsLog, context);++    // Requesting load simulator requires non-empty network records.+    // Timespan is not guaranteed to generate network records, so mark N/A if empty.
    // Timespans are not guaranteed to have any network activity.
    // There are no bytes to be saved if no bytes were downloaded, so mark N/A if empty.

WDYT? just to make super clear it's the logical conclusion not a technical limitation :)

adamraine

comment created time in 3 hours

PullRequestReviewEvent
PullRequestReviewEvent

pull request commentGoogleChrome/lighthouse

misc(cli): improve error if invalid value for `--output` argument is passed

@svkrclg I restarted them for ya :)

svkrclg

comment created time in 3 hours

Pull request review commentGoogleChrome/lighthouse

new_audit:lcp-lazy-loaded

+/**+ * @license Copyright 2020 The Lighthouse Authors. All Rights Reserved.+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.+ */+'use strict';++const Audit = require('./audit.js');+const i18n = require('../lib/i18n/i18n.js');++const UIStrings = {+  /** Descriptive title of a diagnostic audit that provides */+  title: 'LCP element was lazy-loaded',+  /** Description of a Lighthouse audit that tells */+  description: '',+};++const str_ = i18n.createMessageInstanceIdFn(__filename, UIStrings);++class LargestContentfulPaintElement extends Audit {+  /**+   * @return {LH.Audit.Meta}+   */+  static get meta() {+    return {+      id: 'lcp-lazy-loaded',+      title: str_(UIStrings.title),+      description: str_(UIStrings.description),+      scoreDisplayMode: Audit.SCORING_MODES.ERROR,+      supportedModes: ['navigation'],+      requiredArtifacts: ['traces', 'TraceElements', 'ImageElements'],+    };+  }++  /**+   * @param {LH.Artifacts} artifacts+   * @return {LH.Audit.Product}+   */+  static audit(artifacts) {+    const images = artifacts.ImageElements;+    const lazyLoadedImages = images.filter(+      image => image.loading === 'lazy');+    const lcpElement = artifacts.TraceElements+      .find(element => element.traceEventType === 'largest-contentful-paint');++    const lcpElementDetails = [];+    if (lcpElement) {+      const lcpImageElement = lazyLoadedImages.find(elem => {+        return elem.node.devtoolsNodePath === lcpElement.node.devtoolsNodePath;+      });+      if (lcpImageElement) {+        lcpElementDetails.push({+          node: Audit.makeNodeItem(lcpImageElement.node),+        });+      }+    }++    /** @type {LH.Audit.Details.Table['headings']} */+    const headings = [+      {key: 'node', itemType: 'node', text: str_(i18n.UIStrings.columnElement)},+    ];++    const details = Audit.makeTableDetails(headings, lcpElementDetails);++    const displayValue = str_(i18n.UIStrings.displayValueElementsFound,+      {nodeCount: lcpElementDetails.length});++    return {+      score: 1,
      score: 0,
milutin

comment created time in 20 hours

Pull request review commentGoogleChrome/lighthouse

new_audit:lcp-lazy-loaded

 const defaultConfig = {         {id: 'duplicated-javascript', weight: 0, group: 'load-opportunities'},         {id: 'legacy-javascript', weight: 0, group: 'load-opportunities'},         {id: 'preload-lcp-image', weight: 0, group: 'load-opportunities'},+        {id: 'lcp-lazy-loaded', weight: 0, group: 'load-opportunities'},

we only put an audit into load-opportunities today if we can quantify the impact on resources, for now let's leave it as diagnostics

milutin

comment created time in 20 hours

Pull request review commentGoogleChrome/lighthouse

new_audit:lcp-lazy-loaded

+/**+ * @license Copyright 2020 The Lighthouse Authors. All Rights Reserved.+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.+ */+'use strict';++const Audit = require('./audit.js');+const i18n = require('../lib/i18n/i18n.js');++const UIStrings = {+  /** Descriptive title of a diagnostic audit that provides */+  title: 'LCP element was lazy-loaded',+  /** Description of a Lighthouse audit that tells */+  description: '',+};++const str_ = i18n.createMessageInstanceIdFn(__filename, UIStrings);++class LargestContentfulPaintElement extends Audit {+  /**+   * @return {LH.Audit.Meta}+   */+  static get meta() {+    return {+      id: 'lcp-lazy-loaded',+      title: str_(UIStrings.title),+      description: str_(UIStrings.description),+      scoreDisplayMode: Audit.SCORING_MODES.ERROR,+      supportedModes: ['navigation'],+      requiredArtifacts: ['traces', 'TraceElements', 'ImageElements'],+    };+  }++  /**+   * @param {LH.Artifacts} artifacts+   * @return {LH.Audit.Product}+   */+  static audit(artifacts) {+    const images = artifacts.ImageElements;+    const lazyLoadedImages = images.filter(+      image => image.loading === 'lazy');+    const lcpElement = artifacts.TraceElements+      .find(element => element.traceEventType === 'largest-contentful-paint');++    const lcpElementDetails = [];+    if (lcpElement) {+      const lcpImageElement = lazyLoadedImages.find(elem => {+        return elem.node.devtoolsNodePath === lcpElement.node.devtoolsNodePath;+      });+      if (lcpImageElement) {+        lcpElementDetails.push({+          node: Audit.makeNodeItem(lcpImageElement.node),+        });+      }+    }++    /** @type {LH.Audit.Details.Table['headings']} */+    const headings = [+      {key: 'node', itemType: 'node', text: str_(i18n.UIStrings.columnElement)},+    ];++    const details = Audit.makeTableDetails(headings, lcpElementDetails);++    const displayValue = str_(i18n.UIStrings.displayValueElementsFound,+      {nodeCount: lcpElementDetails.length});++    return {+      score: 1,+      notApplicable: lcpElementDetails.length === 0,

there are some good edge cases discussed in https://github.com/GoogleChrome/lighthouse/issues/12785 , we probably also want to mark this as notApplicable if the scroll position isn't at the top (in case we measured a URL with a fragment and out-of-viewport anchor)

I don't believe we currently capture this information anywhere in our artifacts, but I think it makes a lot of sense in ViewportDimensions, we might discuss in eng sync next week :)

FWIW, our notApplicable logic can also be a little confusing so we tend to have an explicit branch for it

if (isAuditNotApplicable()) {
  return {score: 1, notApplicable: true};
}

return {
  score: // the actual results...
}
milutin

comment created time in 20 hours

Pull request review commentGoogleChrome/lighthouse

new_audit:lcp-lazy-loaded

+/**+ * @license Copyright 2020 The Lighthouse Authors. All Rights Reserved.+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.+ */+'use strict';++const Audit = require('./audit.js');+const i18n = require('../lib/i18n/i18n.js');++const UIStrings = {+  /** Descriptive title of a diagnostic audit that provides */+  title: 'LCP element was lazy-loaded',+  /** Description of a Lighthouse audit that tells */+  description: '',+};++const str_ = i18n.createMessageInstanceIdFn(__filename, UIStrings);++class LargestContentfulPaintElement extends Audit {+  /**+   * @return {LH.Audit.Meta}+   */+  static get meta() {+    return {+      id: 'lcp-lazy-loaded',+      title: str_(UIStrings.title),+      description: str_(UIStrings.description),+      scoreDisplayMode: Audit.SCORING_MODES.ERROR,+      supportedModes: ['navigation'],+      requiredArtifacts: ['traces', 'TraceElements', 'ImageElements'],

I don't think we actually use traces anywhere

      requiredArtifacts: ['TraceElements', 'ImageElements'],
milutin

comment created time in 21 hours

Pull request review commentGoogleChrome/lighthouse

new_audit:lcp-lazy-loaded

+/**+ * @license Copyright 2020 The Lighthouse Authors. All Rights Reserved.+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.+ */+'use strict';++const Audit = require('./audit.js');+const i18n = require('../lib/i18n/i18n.js');++const UIStrings = {+  /** Descriptive title of a diagnostic audit that provides */+  title: 'LCP element was lazy-loaded',+  /** Description of a Lighthouse audit that tells */+  description: '',+};++const str_ = i18n.createMessageInstanceIdFn(__filename, UIStrings);++class LargestContentfulPaintElement extends Audit {+  /**+   * @return {LH.Audit.Meta}+   */+  static get meta() {+    return {+      id: 'lcp-lazy-loaded',+      title: str_(UIStrings.title),+      description: str_(UIStrings.description),+      scoreDisplayMode: Audit.SCORING_MODES.ERROR,+      supportedModes: ['navigation'],+      requiredArtifacts: ['traces', 'TraceElements', 'ImageElements'],+    };+  }++  /**+   * @param {LH.Artifacts} artifacts+   * @return {LH.Audit.Product}+   */+  static audit(artifacts) {+    const images = artifacts.ImageElements;+    const lazyLoadedImages = images.filter(+      image => image.loading === 'lazy');+    const lcpElement = artifacts.TraceElements+      .find(element => element.traceEventType === 'largest-contentful-paint');++    const lcpElementDetails = [];+    if (lcpElement) {+      const lcpImageElement = lazyLoadedImages.find(elem => {+        return elem.node.devtoolsNodePath === lcpElement.node.devtoolsNodePath;+      });+      if (lcpImageElement) {+        lcpElementDetails.push({+          node: Audit.makeNodeItem(lcpImageElement.node),+        });+      }+    }++    /** @type {LH.Audit.Details.Table['headings']} */+    const headings = [+      {key: 'node', itemType: 'node', text: str_(i18n.UIStrings.columnElement)},+    ];++    const details = Audit.makeTableDetails(headings, lcpElementDetails);++    const displayValue = str_(i18n.UIStrings.displayValueElementsFound,

there can only ever be 1 here, so I don't know if it's worth having a display value

milutin

comment created time in 20 hours

Pull request review commentGoogleChrome/lighthouse

new_audit:lcp-lazy-loaded

+/**+ * @license Copyright 2020 The Lighthouse Authors. All Rights Reserved.+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.+ */+'use strict';++const Audit = require('./audit.js');+const i18n = require('../lib/i18n/i18n.js');++const UIStrings = {+  /** Descriptive title of a diagnostic audit that provides */+  title: 'LCP element was lazy-loaded',+  /** Description of a Lighthouse audit that tells */+  description: '',+};++const str_ = i18n.createMessageInstanceIdFn(__filename, UIStrings);++class LargestContentfulPaintElement extends Audit {+  /**+   * @return {LH.Audit.Meta}+   */+  static get meta() {+    return {+      id: 'lcp-lazy-loaded',+      title: str_(UIStrings.title),+      description: str_(UIStrings.description),+      scoreDisplayMode: Audit.SCORING_MODES.ERROR,

binary is the default and that's what we want here :)

milutin

comment created time in 21 hours

Pull request review commentGoogleChrome/lighthouse

new_audit:lcp-lazy-loaded

+/**+ * @license Copyright 2020 The Lighthouse Authors. All Rights Reserved.
 * @license Copyright 2021 The Lighthouse Authors. All Rights Reserved.
milutin

comment created time in 21 hours

PullRequestReviewEvent
PullRequestReviewEvent

push eventGoogleChrome/lighthouse

Patrick Hulce

commit sha c085bbb722a1557f1e01704556f673bf1e4adcc5

add server crash reporting scripts

view details

push time in 21 hours

Pull request review commentGoogleChrome/lighthouse

tests(fr): add fraggle rock smoke tests

 jobs:     # Fail if any changes were written to source files.     - run: git diff --exit-code +  smoke-fr:+    runs-on: ubuntu-latest+    name: Fraggle Rock++    steps:+    - name: git clone+      uses: actions/checkout@v2++    - name: Use Node.js 12.x+      uses: actions/setup-node@v1+      with:+        node-version: 12.x++    - run: yarn install --frozen-lockfile --network-timeout 1000000+    - run: yarn build-report++    - run: sudo apt-get install xvfb+    - name: yarn smoke --fraggle-rock+      run: xvfb-run --auto-servernum yarn smoke --debug --fraggle-rock -j=1 --retries=2 a11y lantern seo-passing seo-failing csp

I suppose the burndown in the inverse of this smoke list? It'd be nice to use --invert here and list just the tests that are failing (the ones we need to fix).

Great call, I'll do that when the list is a smidge shorter :D

patrickhulce

comment created time in 21 hours

PullRequestReviewEvent

issue commentGoogleChrome/lighthouse

WPT started getting a lot of PROTOCOL_TIMEOUT errors

It looks like the Inspector.targetCrashed {} message came in but it still tried to gracefully continue.

Yeah that's the case until https://github.com/GoogleChrome/lighthouse/pull/11840 lands. We suspect most of our PROTOCOL_TIMEOUT issues today are crashes.

@paulirish was investigating the situation on Windows and found some GPU crashes that ultimately caused a timeout without a renderer crash, could be related to the situations without the targetCrashed message?

If you send me a public SSH key I can install it on the VM and provide information on how to debug in the WPT agent config

That'd be great! Finally having a repro environment is amazing. I think I just need to get chrome's stderr with the verbose logging to get some extra details? chrome://crashes and a crash ID would be ideal 😅

pmeenan

comment created time in 2 days

PullRequestReviewEvent

issue commentGoogleChrome/lighthouse

WPT started getting a lot of PROTOCOL_TIMEOUT errors

Does Chrome normally output stderr/out logging in the renderer crash case or is it something you instrumented for a local build?

I just turned on some verbose logging --enable-logging=stderr --v=2

pmeenan

comment created time in 2 days

issue commentGoogleChrome/lighthouse

WPT started getting a lot of PROTOCOL_TIMEOUT errors

Thanks @pmeenan! We started seeing this exact behavior on our test infrastructure, but only on ToT Chromium on GitHub actions and haven't been unable to reproduce in any local or Docker environment. (I'm not sure if our stable set has reached 92 yet)

AFAICT in my reproduction attempts with extra Chromium logging, the renderer is crashing but we're failing to get Target.targetDetached/Target.targetCrashed roughly half the time.

Sounds like if WPT is reliably reproing I might be able to spin up a WPT VM on ec2 and investigate directly?

pmeenan

comment created time in 2 days

IssuesEvent

pull request commentGoogleChrome/lighthouse

core(fr): timespan/snapshot specific audit groups

Are you referring to removing the load-opportunities and diagnostics groups?

Correct, in our recent opportunities discussions with jiwoong there are not two separate groups and the type of details determines how to display the impact. I was asking mostly to see if we're still OK with tabling this for the time being.

The points @brendankenny raises are good reasons to avoid the programmatic option I highlighted, so that's out 👍

adamraine

comment created time in 2 days

PR opened GoogleChrome/lighthouse

tests(fr): add fraggle rock smoke tests

Summary Adds a fraggle rock mode to our smoke tests and enables a subset of them in CI. Now we have a clean burndown of many of our FR-COMPAT issues too :)

Related Issues/PRs ref #11313

+76 -13

0 comment

6 changed files

pr created time in 3 days

create barnchGoogleChrome/lighthouse

branch : fr_smokes

created branch time in 3 days

pull request commentGoogleChrome/lighthouse

core(fr): timespan/snapshot specific audit groups

Nice! We'll definitely want gatherMode accessible somewhere on the LHR for the imminent flow report work so that's 👍

I kinda prefer your previous proposal of

Another option I've been thinking about, optionally return overrideGroup in the audit to dynamically change the group.

But did you run into a new case where this is necessary? If it's still opportunities only, I think this might be solved naturally by moving away from the hard line distinction.

adamraine

comment created time in 3 days