simdeck 0.1.3 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +41 -17
- package/build/simdeck-bin +0 -0
- package/client/dist/assets/index-D2-CFde1.css +1 -0
- package/client/dist/assets/index-E1gIgaOR.js +9 -0
- package/client/dist/chrome-devtools-ui/Images/3d-center.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/3d-pan.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/3d-rotate.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/Images.js +296 -0
- package/client/dist/chrome-devtools-ui/Images/accelerometer-back.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/accelerometer-bottom.png +0 -0
- package/client/dist/chrome-devtools-ui/Images/accelerometer-front.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/accelerometer-left.png +0 -0
- package/client/dist/chrome-devtools-ui/Images/accelerometer-right.png +0 -0
- package/client/dist/chrome-devtools-ui/Images/accelerometer-top.png +0 -0
- package/client/dist/chrome-devtools-ui/Images/account-tree.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/align-content-center.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/align-content-end.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/align-content-space-around.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/align-content-space-between.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/align-content-space-evenly.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/align-content-start.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/align-content-stretch.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/align-items-baseline.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/align-items-center.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/align-items-end.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/align-items-start.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/align-items-stretch.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/align-self-center.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/align-self-end.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/align-self-start.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/align-self-stretch.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/animation.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/arrow-back.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/arrow-collapse.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/arrow-down.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/arrow-drop-down-dark.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/arrow-drop-down-light.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/arrow-drop-down.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/arrow-forward.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/arrow-right-circle.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/arrow-up-down-circle.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/arrow-up-down.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/arrow-up.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/bell.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/bezier-curve-filled.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/bin.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/bottom-panel-close.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/bottom-panel-open.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/brackets.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/breakpoint-circle.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/breakpoint-crossed-filled.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/breakpoint-crossed.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/brush-2.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/brush-filled.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/brush.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/bug.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/bundle.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/button-magic.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/calendar-today.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/center-focus-weak.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/check-circle.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/check-double.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/checker.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/checkmark.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/chevron-double-right.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/chevron-down.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/chevron-left-dot.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/chevron-left.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/chevron-right.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/chevron-up.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/chromeLeft.avif +0 -0
- package/client/dist/chrome-devtools-ui/Images/chromeMiddle.avif +0 -0
- package/client/dist/chrome-devtools-ui/Images/chromeRight.avif +0 -0
- package/client/dist/chrome-devtools-ui/Images/class.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/clear-list.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/clear.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/cloud.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/code-circle.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/code.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/colon.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/color-picker-filled.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/color-picker.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/compress.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/console-conditional-breakpoint.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/console-logpoint.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/cookie.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/cookie_off.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/copy.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/corporate-fare.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/credit-card.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/cross-circle-filled.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/cross-circle.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/cross.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/cssoverview_icons_2x.avif +0 -0
- package/client/dist/chrome-devtools-ui/Images/custom-typography.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/database.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/deployed.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/device-fold.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/devices.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/devtools-thumbnail.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/devtools-tips.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/devtools.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/difference.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/dock-bottom.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/dock-left.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/dock-right.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/dock-window.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/document.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/dog-paw.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/domain.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/dots-horizontal.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/dots-vertical.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/download.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/edit.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/empty.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/errorWave.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/exclamation.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/experiment-check.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/experiment.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/extension.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/eye.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/favicon.ico +0 -0
- package/client/dist/chrome-devtools-ui/Images/file-document.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/file-fetch-xhr.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/file-font.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/file-generic.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/file-image.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/file-json.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/file-manifest.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/file-media.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/file-script.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/file-snippet.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/file-stylesheet.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/file-wasm.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/file-websocket.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/filter-clear.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/filter-filled.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/filter.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/flex-direction.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/flex-no-wrap.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/flex-wrap.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/flow.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/fold-more.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/folder.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/frame-crossed.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/frame-icon.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/frame.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/gear-filled.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/gear.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/gears.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/global.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/google.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/goto-filled.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/grid-on.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/group.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/heap-snapshot.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/heap-snapshots.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/help.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/history.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/home.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/hover.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/iframe-crossed.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/iframe.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/import.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/indeterminate-question-box.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/info-filled.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/info.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/issue-cross-filled.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/issue-exclamation-filled.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/issue-questionmark-filled.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/issue-text-filled.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/justify-content-center.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/justify-content-end.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/justify-content-space-around.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/justify-content-space-between.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/justify-content-space-evenly.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/justify-content-start.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/justify-items-center.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/justify-items-end.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/justify-items-start.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/justify-items-stretch.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/keyboard-arrow-right.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/keyboard-full.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/keyboard-pen.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/keyboard.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/label.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/large-arrow-right-filled.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/layers-filled.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/layers.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/left-panel-close.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/left-panel-open.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/lightbulb-spark.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/lightbulb.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/lighthouse_logo.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/list.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/location-on.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/lock.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/match-case.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/match-whole-word.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/memory.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/minus.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/mop.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/mouse.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/navigationControls.png +0 -0
- package/client/dist/chrome-devtools-ui/Images/navigationControls_2x.png +0 -0
- package/client/dist/chrome-devtools-ui/Images/network-settings.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/node-stack-icon.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/nodeIcon.avif +0 -0
- package/client/dist/chrome-devtools-ui/Images/open-externally.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/override.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/palette.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/pause-circle.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/pause.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/pen-spark.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/performance-panel-delete-annotation.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/performance-panel-diagram.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/performance-panel-entry-label.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/performance-panel-time-range.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/performance.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/person.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/photo-camera.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/play.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/plus.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/policy.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/popoverArrows.png +0 -0
- package/client/dist/chrome-devtools-ui/Images/popup.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/preview_feature_video_thumbnail.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/profile.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/psychiatry.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/react_native/learn-debugging-basics.jpg +0 -0
- package/client/dist/chrome-devtools-ui/Images/react_native/learn-native-debugging.jpg +0 -0
- package/client/dist/chrome-devtools-ui/Images/react_native/learn-react-native-devtools.jpg +0 -0
- package/client/dist/chrome-devtools-ui/Images/react_native/welcomeIcon.png +0 -0
- package/client/dist/chrome-devtools-ui/Images/record-start.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/record-stop.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/redo.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/refresh.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/regular-expression.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/replace.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/replay.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/report.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/resizeDiagonal.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/resizeHorizontal.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/resizeVertical.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/resume.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/review.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/right-panel-close.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/right-panel-open.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/scissors.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/screen-rotation.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/search.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/select-element.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/send.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/shadow.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/small-status-dot.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/smart-assistant.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/snippet.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/spark-info.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/star.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/step-into.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/step-out.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/step-over.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/step.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/stop.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/symbol.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/sync.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/table.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/terminal.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/thumb-down-filled.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/thumb-down.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/thumb-up-filled.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/thumb-up.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/tonality.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/toolbarResizerVertical.png +0 -0
- package/client/dist/chrome-devtools-ui/Images/top-panel-close.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/top-panel-open.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/touch-app.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/touchCursor.png +0 -0
- package/client/dist/chrome-devtools-ui/Images/touchCursor_2x.png +0 -0
- package/client/dist/chrome-devtools-ui/Images/triangle-bottom-right.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/triangle-down.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/triangle-left.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/triangle-right.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/triangle-up.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/tune.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/undo.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/warning-filled.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/warning.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/watch.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/whatsnew.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/width.svg +1 -0
- package/client/dist/chrome-devtools-ui/Images/zoom-in.svg +1 -0
- package/client/dist/chrome-devtools-ui/Tests.js +1700 -0
- package/client/dist/chrome-devtools-ui/application_tokens.css +407 -0
- package/client/dist/chrome-devtools-ui/core/common/common.js +1 -0
- package/client/dist/chrome-devtools-ui/core/dom_extension/dom_extension.js +1 -0
- package/client/dist/chrome-devtools-ui/core/host/host.js +1 -0
- package/client/dist/chrome-devtools-ui/core/i18n/i18n.js +1 -0
- package/client/dist/chrome-devtools-ui/core/i18n/locales/en-US.json +1 -0
- package/client/dist/chrome-devtools-ui/core/i18n/locales/zh.json +1 -0
- package/client/dist/chrome-devtools-ui/core/platform/platform.js +1 -0
- package/client/dist/chrome-devtools-ui/core/protocol_client/protocol_client.js +1 -0
- package/client/dist/chrome-devtools-ui/core/rn_experiments/rn_experiments.js +1 -0
- package/client/dist/chrome-devtools-ui/core/root/root.js +1 -0
- package/client/dist/chrome-devtools-ui/core/sdk/sdk-meta.js +1 -0
- package/client/dist/chrome-devtools-ui/core/sdk/sdk.js +1 -0
- package/client/dist/chrome-devtools-ui/design_system_tokens.css +782 -0
- package/client/dist/chrome-devtools-ui/device_mode_emulation_frame.html +24 -0
- package/client/dist/chrome-devtools-ui/devtools_app.html +24 -0
- package/client/dist/chrome-devtools-ui/devtools_compatibility.js +1741 -0
- package/client/dist/chrome-devtools-ui/emulated_devices/optimized/MotoG4-landscape.avif +0 -0
- package/client/dist/chrome-devtools-ui/emulated_devices/optimized/MotoG4-portrait.avif +0 -0
- package/client/dist/chrome-devtools-ui/emulated_devices/optimized/Nexus5X-landscape.avif +0 -0
- package/client/dist/chrome-devtools-ui/emulated_devices/optimized/Nexus5X-portrait.avif +0 -0
- package/client/dist/chrome-devtools-ui/emulated_devices/optimized/Nexus6P-landscape.avif +0 -0
- package/client/dist/chrome-devtools-ui/emulated_devices/optimized/Nexus6P-portrait.avif +0 -0
- package/client/dist/chrome-devtools-ui/emulated_devices/optimized/google-nest-hub-horizontal.avif +0 -0
- package/client/dist/chrome-devtools-ui/emulated_devices/optimized/google-nest-hub-max-horizontal.avif +0 -0
- package/client/dist/chrome-devtools-ui/emulated_devices/optimized/google-nexus-5-horizontal-default-1x.avif +0 -0
- package/client/dist/chrome-devtools-ui/emulated_devices/optimized/google-nexus-5-horizontal-default-2x.avif +0 -0
- package/client/dist/chrome-devtools-ui/emulated_devices/optimized/google-nexus-5-horizontal-keyboard-1x.avif +0 -0
- package/client/dist/chrome-devtools-ui/emulated_devices/optimized/google-nexus-5-horizontal-keyboard-2x.avif +0 -0
- package/client/dist/chrome-devtools-ui/emulated_devices/optimized/google-nexus-5-horizontal-navigation-1x.avif +0 -0
- package/client/dist/chrome-devtools-ui/emulated_devices/optimized/google-nexus-5-horizontal-navigation-2x.avif +0 -0
- package/client/dist/chrome-devtools-ui/emulated_devices/optimized/google-nexus-5-vertical-default-1x.avif +0 -0
- package/client/dist/chrome-devtools-ui/emulated_devices/optimized/google-nexus-5-vertical-default-2x.avif +0 -0
- package/client/dist/chrome-devtools-ui/emulated_devices/optimized/google-nexus-5-vertical-keyboard-1x.avif +0 -0
- package/client/dist/chrome-devtools-ui/emulated_devices/optimized/google-nexus-5-vertical-keyboard-2x.avif +0 -0
- package/client/dist/chrome-devtools-ui/emulated_devices/optimized/google-nexus-5-vertical-navigation-1x.avif +0 -0
- package/client/dist/chrome-devtools-ui/emulated_devices/optimized/google-nexus-5-vertical-navigation-2x.avif +0 -0
- package/client/dist/chrome-devtools-ui/emulated_devices/optimized/google-nexus-5x-horizontal-default-1x.avif +0 -0
- package/client/dist/chrome-devtools-ui/emulated_devices/optimized/google-nexus-5x-horizontal-default-2x.avif +0 -0
- package/client/dist/chrome-devtools-ui/emulated_devices/optimized/google-nexus-5x-horizontal-keyboard-1x.avif +0 -0
- package/client/dist/chrome-devtools-ui/emulated_devices/optimized/google-nexus-5x-horizontal-keyboard-2x.avif +0 -0
- package/client/dist/chrome-devtools-ui/emulated_devices/optimized/google-nexus-5x-horizontal-navigation-1x.avif +0 -0
- package/client/dist/chrome-devtools-ui/emulated_devices/optimized/google-nexus-5x-horizontal-navigation-2x.avif +0 -0
- package/client/dist/chrome-devtools-ui/emulated_devices/optimized/google-nexus-5x-vertical-default-1x.avif +0 -0
- package/client/dist/chrome-devtools-ui/emulated_devices/optimized/google-nexus-5x-vertical-default-2x.avif +0 -0
- package/client/dist/chrome-devtools-ui/emulated_devices/optimized/google-nexus-5x-vertical-keyboard-1x.avif +0 -0
- package/client/dist/chrome-devtools-ui/emulated_devices/optimized/google-nexus-5x-vertical-keyboard-2x.avif +0 -0
- package/client/dist/chrome-devtools-ui/emulated_devices/optimized/google-nexus-5x-vertical-navigation-1x.avif +0 -0
- package/client/dist/chrome-devtools-ui/emulated_devices/optimized/google-nexus-5x-vertical-navigation-2x.avif +0 -0
- package/client/dist/chrome-devtools-ui/emulated_devices/optimized/iPad-landscape.avif +0 -0
- package/client/dist/chrome-devtools-ui/emulated_devices/optimized/iPad-portrait.avif +0 -0
- package/client/dist/chrome-devtools-ui/emulated_devices/optimized/iPhone5-landscape.avif +0 -0
- package/client/dist/chrome-devtools-ui/emulated_devices/optimized/iPhone5-portrait.avif +0 -0
- package/client/dist/chrome-devtools-ui/emulated_devices/optimized/iPhone6-landscape.avif +0 -0
- package/client/dist/chrome-devtools-ui/emulated_devices/optimized/iPhone6-portrait.avif +0 -0
- package/client/dist/chrome-devtools-ui/emulated_devices/optimized/iPhone6Plus-landscape.avif +0 -0
- package/client/dist/chrome-devtools-ui/emulated_devices/optimized/iPhone6Plus-portrait.avif +0 -0
- package/client/dist/chrome-devtools-ui/entrypoints/device_mode_emulation_frame/device_mode_emulation_frame.js +1 -0
- package/client/dist/chrome-devtools-ui/entrypoints/devtools_app/devtools_app.js +1 -0
- package/client/dist/chrome-devtools-ui/entrypoints/formatter_worker/FormatterActions.js +1 -0
- package/client/dist/chrome-devtools-ui/entrypoints/formatter_worker/formatter_worker-entrypoint.js +1 -0
- package/client/dist/chrome-devtools-ui/entrypoints/formatter_worker/formatter_worker.js +1 -0
- package/client/dist/chrome-devtools-ui/entrypoints/heap_snapshot_worker/heap_snapshot_worker-entrypoint.js +1 -0
- package/client/dist/chrome-devtools-ui/entrypoints/heap_snapshot_worker/heap_snapshot_worker.js +1 -0
- package/client/dist/chrome-devtools-ui/entrypoints/inspector/inspector.js +1 -0
- package/client/dist/chrome-devtools-ui/entrypoints/inspector_main/inspector_main-meta.js +1 -0
- package/client/dist/chrome-devtools-ui/entrypoints/inspector_main/inspector_main.js +1 -0
- package/client/dist/chrome-devtools-ui/entrypoints/js_app/js_app.js +1 -0
- package/client/dist/chrome-devtools-ui/entrypoints/lighthouse_worker/lighthouse_worker.js +1 -0
- package/client/dist/chrome-devtools-ui/entrypoints/main/main-meta.js +1 -0
- package/client/dist/chrome-devtools-ui/entrypoints/main/main.js +48 -0
- package/client/dist/chrome-devtools-ui/entrypoints/ndb_app/ndb_app.js +1 -0
- package/client/dist/chrome-devtools-ui/entrypoints/node_app/node_app.js +1 -0
- package/client/dist/chrome-devtools-ui/entrypoints/rehydrated_devtools_app/rehydrated_devtools_app.js +1 -0
- package/client/dist/chrome-devtools-ui/entrypoints/rn_fusebox/rn_fusebox.js +24 -0
- package/client/dist/chrome-devtools-ui/entrypoints/shell/shell.js +1 -0
- package/client/dist/chrome-devtools-ui/entrypoints/wasmparser_worker/wasmparser_worker-entrypoint.js +1 -0
- package/client/dist/chrome-devtools-ui/entrypoints/wasmparser_worker/wasmparser_worker.js +1 -0
- package/client/dist/chrome-devtools-ui/entrypoints/worker_app/worker_app.js +1 -0
- package/client/dist/chrome-devtools-ui/inspector.html +24 -0
- package/client/dist/chrome-devtools-ui/integration_test_runner.html +40 -0
- package/client/dist/chrome-devtools-ui/js_app.html +24 -0
- package/client/dist/chrome-devtools-ui/legacy_test_runner/legacy_test_runner.js +13 -0
- package/client/dist/chrome-devtools-ui/legacy_test_runner/test_runner/test_runner.js +1 -0
- package/client/dist/chrome-devtools-ui/models/ai_assistance/ai_assistance.js +1 -0
- package/client/dist/chrome-devtools-ui/models/autofill_manager/autofill_manager.js +1 -0
- package/client/dist/chrome-devtools-ui/models/bindings/bindings.js +1 -0
- package/client/dist/chrome-devtools-ui/models/breakpoints/breakpoints.js +1 -0
- package/client/dist/chrome-devtools-ui/models/cpu_profile/cpu_profile.js +1 -0
- package/client/dist/chrome-devtools-ui/models/crux-manager/crux-manager.js +1 -0
- package/client/dist/chrome-devtools-ui/models/emulation/emulation.js +1 -0
- package/client/dist/chrome-devtools-ui/models/extensions/extensions.js +1 -0
- package/client/dist/chrome-devtools-ui/models/formatter/formatter.js +1 -0
- package/client/dist/chrome-devtools-ui/models/har/har.js +1 -0
- package/client/dist/chrome-devtools-ui/models/heap_snapshot_model/heap_snapshot_model.js +1 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/CoepCoopSandboxedIframeCannotNavigateToCoopPage.md +4 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/CoepCorpNotSameOrigin.md +8 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/CoepCorpNotSameOriginAfterDefaultedToSameOriginByCoep.md +18 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/CoepCorpNotSameSite.md +7 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/CoepFrameResourceNeedsCoepHeader.md +10 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/CompatibilityModeQuirks.md +5 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/CookieAttributeValueExceedsMaxSize.md +5 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/LowTextContrast.md +5 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/SameSiteExcludeContextDowngradeRead.md +8 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/SameSiteExcludeContextDowngradeSet.md +8 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/SameSiteExcludeNavigationContextDowngrade.md +8 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/SameSiteInvalidSameParty.md +8 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/SameSiteNoneInsecureErrorRead.md +8 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/SameSiteNoneInsecureErrorSet.md +8 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/SameSiteNoneInsecureWarnRead.md +8 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/SameSiteNoneInsecureWarnSet.md +8 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/SameSiteUnspecifiedLaxAllowUnsafeRead.md +9 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/SameSiteUnspecifiedLaxAllowUnsafeSet.md +9 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/SameSiteWarnCrossDowngradeRead.md +8 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/SameSiteWarnCrossDowngradeSet.md +8 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/SameSiteWarnStrictLaxDowngradeStrict.md +8 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/arInsecureContext.md +7 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/arInvalidInfoHeader.md +5 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/arInvalidRegisterOsSourceHeader.md +5 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/arInvalidRegisterOsTriggerHeader.md +5 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/arInvalidRegisterSourceHeader.md +5 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/arInvalidRegisterTriggerHeader.md +5 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/arNavigationRegistrationUniqueScopeAlreadySet.md +5 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/arNavigationRegistrationWithoutTransientUserActivation.md +6 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/arNoRegisterOsSourceHeader.md +5 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/arNoRegisterOsTriggerHeader.md +5 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/arNoRegisterSourceHeader.md +5 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/arNoRegisterTriggerHeader.md +5 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/arNoWebOrOsSupport.md +4 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/arOsSourceIgnored.md +18 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/arOsTriggerIgnored.md +19 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/arPermissionPolicyDisabled.md +8 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/arSourceAndTriggerHeaders.md +9 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/arSourceIgnored.md +13 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/arTriggerIgnored.md +12 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/arUntrustworthyReportingOrigin.md +10 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/arWebAndOsHeaders.md +11 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/bounceTrackingMitigations.md +3 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/clientHintMetaTagAllowListInvalidOrigin.md +4 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/clientHintMetaTagModifiedHTML.md +4 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/cookieCrossSiteRedirectDowngrade.md +12 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/cookieExcludeBlockedWithinRelatedWebsiteSet.md +4 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/cookieExcludeDomainNonAscii.md +11 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/cookieExcludePortMismatch.md +8 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/cookieExcludeSchemeMismatch.md +7 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/cookieExcludeThirdPartyPhaseoutRead.md +6 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/cookieExcludeThirdPartyPhaseoutSet.md +6 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/cookieWarnDomainNonAscii.md +11 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/cookieWarnMetadataGrantRead.md +4 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/cookieWarnMetadataGrantSet.md +4 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/cookieWarnThirdPartyPhaseoutRead.md +6 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/cookieWarnThirdPartyPhaseoutSet.md +6 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/corsAllowCredentialsRequired.md +6 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/corsDisabledScheme.md +7 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/corsDisallowedByMode.md +7 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/corsHeaderDisallowedByPreflightResponse.md +5 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/corsInsecurePrivateNetwork.md +10 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/corsInvalidHeaderValues.md +7 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/corsLocalNetworkAccessPermissionDenied.md +19 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/corsMethodDisallowedByPreflightResponse.md +5 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/corsNoCorsRedirectModeNotFollow.md +5 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/corsOriginMismatch.md +6 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/corsPreflightAllowPrivateNetworkError.md +10 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/corsPreflightResponseInvalid.md +5 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/corsPrivateNetworkPermissionDenied.md +10 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/corsRedirectContainsCredentials.md +5 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/corsWildcardOriginNotAllowed.md +8 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/cspEvalViolation.md +9 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/cspInlineViolation.md +10 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/cspTrustedTypesPolicyViolation.md +5 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/cspTrustedTypesSinkViolation.md +8 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/cspURLViolation.md +10 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/deprecation.md +3 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/federatedAuthRequestAccountsHttpNotFound.md +1 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/federatedAuthRequestAccountsInvalidResponse.md +1 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/federatedAuthRequestAccountsNoResponse.md +1 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/federatedAuthRequestApprovalDeclined.md +1 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/federatedAuthRequestCanceled.md +1 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/federatedAuthRequestClientMetadataHttpNotFound.md +1 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/federatedAuthRequestClientMetadataInvalidResponse.md +1 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/federatedAuthRequestClientMetadataNoResponse.md +1 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/federatedAuthRequestErrorFetchingSignin.md +1 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/federatedAuthRequestErrorIdToken.md +1 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/federatedAuthRequestIdTokenHttpNotFound.md +1 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/federatedAuthRequestIdTokenInvalidRequest.md +1 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/federatedAuthRequestIdTokenInvalidResponse.md +1 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/federatedAuthRequestIdTokenNoResponse.md +1 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/federatedAuthRequestInvalidSigninResponse.md +1 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/federatedAuthRequestManifestHttpNotFound.md +1 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/federatedAuthRequestManifestInvalidResponse.md +1 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/federatedAuthRequestManifestNoResponse.md +1 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/federatedAuthRequestTooManyRequests.md +1 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/federatedAuthUserInfoRequestInvalidAccountsResponse.md +1 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/federatedAuthUserInfoRequestInvalidConfigOrWellKnown.md +1 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/federatedAuthUserInfoRequestNoAccountSharingPermission.md +1 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/federatedAuthUserInfoRequestNoApiPermission.md +1 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/federatedAuthUserInfoRequestNoReturningUserFromFetchedAccounts.md +1 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/federatedAuthUserInfoRequestNotIframe.md +1 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/federatedAuthUserInfoRequestNotPotentiallyTrustworthy.md +1 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/federatedAuthUserInfoRequestNotSameOrigin.md +1 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/federatedAuthUserInfoRequestNotSignedInWithIdp.md +1 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/fetchingPartitionedBlobURL.md +7 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/genericFormAriaLabelledByToNonExistingId.md +8 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/genericFormAutocompleteAttributeEmptyError.md +5 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/genericFormDuplicateIdForInputError.md +5 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/genericFormEmptyIdAndNameAttributesForInputError.md +5 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/genericFormInputAssignedAutocompleteValueToIdOrNameAttributeError.md +5 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/genericFormInputHasWrongButWellIntendedAutocompleteValueError.md +5 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/genericFormInputWithNoLabelError.md +5 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/genericFormLabelForMatchesNonExistingIdError.md +5 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/genericFormLabelForNameError.md +5 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/genericFormLabelHasNeitherForNorNestedInput.md +5 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/genericResponseWasBlockedByORB.md +4 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/heavyAd.md +10 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/mixedContent.md +5 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/navigatingPartitionedBlobURL.md +5 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/placeholderDescriptionForInvisibleIssues.md +3 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/propertyRuleInvalidNameIssue.md +3 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/propertyRuleIssue.md +7 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/selectElementAccessibilityDisallowedOptGroupChild.md +7 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/selectElementAccessibilityDisallowedSelectChild.md +7 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/selectElementAccessibilityInteractiveContentAttributesSelectDescendant.md +3 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/selectElementAccessibilityInteractiveContentLegendChild.md +3 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/selectElementAccessibilityInteractiveContentOptionChild.md +3 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/selectElementAccessibilityNonPhrasingContentOptionChild.md +3 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/sharedArrayBuffer.md +7 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/sharedDictionaryUseErrorCrossOriginNoCorsRequest.md +1 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/sharedDictionaryUseErrorDictionaryLoadFailure.md +3 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/sharedDictionaryUseErrorMatchingDictionaryNotUsed.md +3 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/sharedDictionaryUseErrorUnexpectedContentDictionaryHeader.md +1 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/sharedDictionaryWriteErrorCossOriginNoCorsRequest.md +1 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/sharedDictionaryWriteErrorDisallowedBySettings.md +1 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/sharedDictionaryWriteErrorExpiredResponse.md +3 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/sharedDictionaryWriteErrorFeatureDisabled.md +3 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/sharedDictionaryWriteErrorInsufficientResources.md +1 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/sharedDictionaryWriteErrorInvalidMatchField.md +1 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/sharedDictionaryWriteErrorInvalidStructuredHeader.md +1 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/sharedDictionaryWriteErrorNavigationRequest.md +3 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/sharedDictionaryWriteErrorNoMatchField.md +1 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/sharedDictionaryWriteErrorNonListMatchDestField.md +1 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/sharedDictionaryWriteErrorNonSecureContext.md +3 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/sharedDictionaryWriteErrorNonStringIdField.md +1 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/sharedDictionaryWriteErrorNonStringInMatchDestList.md +1 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/sharedDictionaryWriteErrorNonStringMatchField.md +1 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/sharedDictionaryWriteErrorNonTokenTypeField.md +1 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/sharedDictionaryWriteErrorRequestAborted.md +1 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/sharedDictionaryWriteErrorShuttingDown.md +1 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/sharedDictionaryWriteErrorTooLongIdField.md +3 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/sharedDictionaryWriteErrorUnsupportedType.md +3 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/sriInvalidSignatureHeader.md +14 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/sriInvalidSignatureInputHeader.md +15 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/sriMissingSignatureHeader.md +8 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/sriMissingSignatureInputHeader.md +7 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/sriSignatureHeaderValueIsIncorrectLength.md +11 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/sriSignatureHeaderValueIsNotByteSequence.md +14 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/sriSignatureHeaderValueIsParameterized.md +15 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/sriSignatureInputHeaderInvalidComponentName.md +8 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/sriSignatureInputHeaderInvalidComponentType.md +13 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/sriSignatureInputHeaderInvalidDerivedComponentParameter.md +4 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/sriSignatureInputHeaderInvalidHeaderComponentParameter.md +5 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/sriSignatureInputHeaderInvalidParameter.md +11 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/sriSignatureInputHeaderKeyIdLength.md +12 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/sriSignatureInputHeaderMissingLabel.md +6 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/sriSignatureInputHeaderMissingRequiredParameters.md +8 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/sriSignatureInputHeaderValueMissingComponents.md +11 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/sriSignatureInputHeaderValueNotInnerList.md +11 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/sriValidationFailedIntegrityMismatch.md +12 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/sriValidationFailedInvalidLength.md +5 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/sriValidationFailedSignatureExpired.md +6 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/sriValidationFailedSignatureMismatch.md +11 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/stylesheetLateImport.md +4 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/descriptions/stylesheetRequestFailed.md +3 -0
- package/client/dist/chrome-devtools-ui/models/issues_manager/issues_manager.js +1 -0
- package/client/dist/chrome-devtools-ui/models/javascript_metadata/javascript_metadata.js +1 -0
- package/client/dist/chrome-devtools-ui/models/live-metrics/live-metrics.js +1 -0
- package/client/dist/chrome-devtools-ui/models/live-metrics/web-vitals-injected/spec/spec.js +1 -0
- package/client/dist/chrome-devtools-ui/models/live-metrics/web-vitals-injected/web-vitals-injected.generated.js +1 -0
- package/client/dist/chrome-devtools-ui/models/logs/logs-meta.js +1 -0
- package/client/dist/chrome-devtools-ui/models/logs/logs.js +1 -0
- package/client/dist/chrome-devtools-ui/models/persistence/persistence-meta.js +1 -0
- package/client/dist/chrome-devtools-ui/models/persistence/persistence.js +1 -0
- package/client/dist/chrome-devtools-ui/models/project_settings/project_settings.js +1 -0
- package/client/dist/chrome-devtools-ui/models/react_native/react_native.js +1 -0
- package/client/dist/chrome-devtools-ui/models/source_map_scopes/source_map_scopes.js +1 -0
- package/client/dist/chrome-devtools-ui/models/text_utils/text_utils.js +1 -0
- package/client/dist/chrome-devtools-ui/models/trace/extras/extras.js +1 -0
- package/client/dist/chrome-devtools-ui/models/trace/handlers/handlers.js +1 -0
- package/client/dist/chrome-devtools-ui/models/trace/helpers/helpers.js +1 -0
- package/client/dist/chrome-devtools-ui/models/trace/insights/insights.js +1 -0
- package/client/dist/chrome-devtools-ui/models/trace/lantern/core/core.js +1 -0
- package/client/dist/chrome-devtools-ui/models/trace/lantern/graph/graph.js +1 -0
- package/client/dist/chrome-devtools-ui/models/trace/lantern/lantern.js +1 -0
- package/client/dist/chrome-devtools-ui/models/trace/lantern/metrics/metrics.js +1 -0
- package/client/dist/chrome-devtools-ui/models/trace/lantern/simulation/simulation.js +1 -0
- package/client/dist/chrome-devtools-ui/models/trace/lantern/types/types.js +1 -0
- package/client/dist/chrome-devtools-ui/models/trace/trace.js +1 -0
- package/client/dist/chrome-devtools-ui/models/trace/types/types.js +1 -0
- package/client/dist/chrome-devtools-ui/models/workspace/workspace.js +1 -0
- package/client/dist/chrome-devtools-ui/models/workspace_diff/workspace_diff.js +1 -0
- package/client/dist/chrome-devtools-ui/ndb_app.html +24 -0
- package/client/dist/chrome-devtools-ui/node_app.html +24 -0
- package/client/dist/chrome-devtools-ui/panels/accessibility/accessibility-meta.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/accessibility/accessibility.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/ai_assistance/ai_assistance-meta.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/ai_assistance/ai_assistance.js +512 -0
- package/client/dist/chrome-devtools-ui/panels/animation/animation-meta.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/animation/animation.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/application/application-meta.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/application/application.js +107 -0
- package/client/dist/chrome-devtools-ui/panels/application/components/components.js +765 -0
- package/client/dist/chrome-devtools-ui/panels/application/preloading/components/components.js +362 -0
- package/client/dist/chrome-devtools-ui/panels/application/preloading/helper/helper.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/autofill/autofill-meta.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/autofill/autofill.js +107 -0
- package/client/dist/chrome-devtools-ui/panels/browser_debugger/browser_debugger-meta.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/browser_debugger/browser_debugger.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/changes/changes-meta.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/changes/changes.js +31 -0
- package/client/dist/chrome-devtools-ui/panels/common/common.js +45 -0
- package/client/dist/chrome-devtools-ui/panels/console/console-meta.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/console/console.js +6 -0
- package/client/dist/chrome-devtools-ui/panels/console_counters/console_counters-meta.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/console_counters/console_counters.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/coverage/coverage-meta.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/coverage/coverage.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/css_overview/components/components.js +23 -0
- package/client/dist/chrome-devtools-ui/panels/css_overview/css_overview-meta.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/css_overview/css_overview.js +148 -0
- package/client/dist/chrome-devtools-ui/panels/developer_resources/developer_resources-meta.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/developer_resources/developer_resources.js +48 -0
- package/client/dist/chrome-devtools-ui/panels/elements/components/components.js +250 -0
- package/client/dist/chrome-devtools-ui/panels/elements/elements-meta.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/elements/elements.js +67 -0
- package/client/dist/chrome-devtools-ui/panels/emulation/components/components.js +39 -0
- package/client/dist/chrome-devtools-ui/panels/emulation/emulation-meta.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/emulation/emulation.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/event_listeners/event_listeners.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/explain/explain-meta.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/explain/explain.js +231 -0
- package/client/dist/chrome-devtools-ui/panels/issues/components/components.js +14 -0
- package/client/dist/chrome-devtools-ui/panels/issues/issues-meta.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/issues/issues.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/js_timeline/js_timeline-meta.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/js_timeline/js_timeline.js +2 -0
- package/client/dist/chrome-devtools-ui/panels/layer_viewer/layer_viewer-meta.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/layer_viewer/layer_viewer.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/layers/layers-meta.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/layers/layers.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/lighthouse/lighthouse-meta.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/lighthouse/lighthouse.js +65 -0
- package/client/dist/chrome-devtools-ui/panels/linear_memory_inspector/components/components.js +179 -0
- package/client/dist/chrome-devtools-ui/panels/linear_memory_inspector/linear_memory_inspector-meta.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/linear_memory_inspector/linear_memory_inspector.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/media/media-meta.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/media/media.js +25 -0
- package/client/dist/chrome-devtools-ui/panels/mobile_throttling/mobile_throttling-meta.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/mobile_throttling/mobile_throttling.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/network/components/components.js +346 -0
- package/client/dist/chrome-devtools-ui/panels/network/forward/forward.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/network/network-meta.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/network/network.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/performance_monitor/performance_monitor-meta.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/performance_monitor/performance_monitor.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/profiler/profiler-meta.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/profiler/profiler.js +8 -0
- package/client/dist/chrome-devtools-ui/panels/protocol_monitor/protocol_monitor-meta.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/protocol_monitor/protocol_monitor.js +293 -0
- package/client/dist/chrome-devtools-ui/panels/react_devtools/react_devtools.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/react_devtools/react_devtools_components-meta.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/react_devtools/react_devtools_profiler-meta.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/recorder/components/components.js +686 -0
- package/client/dist/chrome-devtools-ui/panels/recorder/controllers/controllers.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/recorder/converters/converters.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/recorder/extensions/extensions.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/recorder/injected/injected.generated.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/recorder/injected/injected.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/recorder/models/models.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/recorder/recorder-actions/recorder-actions.js +3 -0
- package/client/dist/chrome-devtools-ui/panels/recorder/recorder-meta.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/recorder/recorder.js +126 -0
- package/client/dist/chrome-devtools-ui/panels/recorder/util/util.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/rn_welcome/rn_welcome-meta.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/rn_welcome/rn_welcome.js +62 -0
- package/client/dist/chrome-devtools-ui/panels/screencast/screencast-meta.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/screencast/screencast.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/search/search.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/security/security-meta.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/security/security.js +178 -0
- package/client/dist/chrome-devtools-ui/panels/sensors/sensors-meta.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/sensors/sensors.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/settings/components/components.js +22 -0
- package/client/dist/chrome-devtools-ui/panels/settings/emulation/components/components.js +221 -0
- package/client/dist/chrome-devtools-ui/panels/settings/emulation/emulation-meta.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/settings/emulation/emulation.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/settings/emulation/utils/utils.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/settings/settings-meta.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/settings/settings.js +91 -0
- package/client/dist/chrome-devtools-ui/panels/snippets/snippets.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/sources/components/components.js +162 -0
- package/client/dist/chrome-devtools-ui/panels/sources/sources-meta.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/sources/sources.js +2 -0
- package/client/dist/chrome-devtools-ui/panels/timeline/components/components.js +1063 -0
- package/client/dist/chrome-devtools-ui/panels/timeline/components/insights/insights.js +262 -0
- package/client/dist/chrome-devtools-ui/panels/timeline/extensions/extensions.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/timeline/overlays/components/components.js +190 -0
- package/client/dist/chrome-devtools-ui/panels/timeline/overlays/overlays.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/timeline/timeline-meta.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/timeline/timeline.js +43 -0
- package/client/dist/chrome-devtools-ui/panels/timeline/utils/utils.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/utils/utils.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/web_audio/graph_visualizer/graph_visualizer.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/web_audio/web_audio-meta.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/web_audio/web_audio.js +19 -0
- package/client/dist/chrome-devtools-ui/panels/webauthn/webauthn-meta.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/webauthn/webauthn.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/whats_new/resources/WNDT.md +6 -0
- package/client/dist/chrome-devtools-ui/panels/whats_new/whats_new-meta.js +1 -0
- package/client/dist/chrome-devtools-ui/panels/whats_new/whats_new.js +32 -0
- package/client/dist/chrome-devtools-ui/rehydrated_devtools_app.html +24 -0
- package/client/dist/chrome-devtools-ui/rn_fusebox.html +24 -0
- package/client/dist/chrome-devtools-ui/services/puppeteer/puppeteer.js +1 -0
- package/client/dist/chrome-devtools-ui/services/trace_bounds/trace_bounds.js +1 -0
- package/client/dist/chrome-devtools-ui/services/tracing/tracing.js +1 -0
- package/client/dist/chrome-devtools-ui/services/window_bounds/window_bounds.js +1 -0
- package/client/dist/chrome-devtools-ui/third_party/acorn/acorn.js +1 -0
- package/client/dist/chrome-devtools-ui/third_party/chromium/client-variations/client-variations.js +1 -0
- package/client/dist/chrome-devtools-ui/third_party/codemirror.next/chunk/angular.js +2 -0
- package/client/dist/chrome-devtools-ui/third_party/codemirror.next/chunk/codemirror.js +2 -0
- package/client/dist/chrome-devtools-ui/third_party/codemirror.next/chunk/cpp.js +2 -0
- package/client/dist/chrome-devtools-ui/third_party/codemirror.next/chunk/java.js +2 -0
- package/client/dist/chrome-devtools-ui/third_party/codemirror.next/chunk/legacy.js +2 -0
- package/client/dist/chrome-devtools-ui/third_party/codemirror.next/chunk/less.js +2 -0
- package/client/dist/chrome-devtools-ui/third_party/codemirror.next/chunk/markdown.js +2 -0
- package/client/dist/chrome-devtools-ui/third_party/codemirror.next/chunk/php.js +2 -0
- package/client/dist/chrome-devtools-ui/third_party/codemirror.next/chunk/python.js +2 -0
- package/client/dist/chrome-devtools-ui/third_party/codemirror.next/chunk/sass.js +2 -0
- package/client/dist/chrome-devtools-ui/third_party/codemirror.next/chunk/svelte.js +2 -0
- package/client/dist/chrome-devtools-ui/third_party/codemirror.next/chunk/vue.js +2 -0
- package/client/dist/chrome-devtools-ui/third_party/codemirror.next/chunk/wast.js +2 -0
- package/client/dist/chrome-devtools-ui/third_party/codemirror.next/chunk/xml.js +2 -0
- package/client/dist/chrome-devtools-ui/third_party/codemirror.next/codemirror.next.js +2 -0
- package/client/dist/chrome-devtools-ui/third_party/csp_evaluator/csp_evaluator.js +194 -0
- package/client/dist/chrome-devtools-ui/third_party/diff/diff.js +1 -0
- package/client/dist/chrome-devtools-ui/third_party/i18n/i18n.js +1 -0
- package/client/dist/chrome-devtools-ui/third_party/intl-messageformat/intl-messageformat.js +15 -0
- package/client/dist/chrome-devtools-ui/third_party/json5/json5.js +1 -0
- package/client/dist/chrome-devtools-ui/third_party/legacy-javascript/legacy-javascript.js +7 -0
- package/client/dist/chrome-devtools-ui/third_party/lighthouse/lighthouse-dt-bundle.js +3023 -0
- package/client/dist/chrome-devtools-ui/third_party/lighthouse/report/report.js +39 -0
- package/client/dist/chrome-devtools-ui/third_party/lit/lit.js +121 -0
- package/client/dist/chrome-devtools-ui/third_party/marked/marked.js +1 -0
- package/client/dist/chrome-devtools-ui/third_party/puppeteer/puppeteer.js +373 -0
- package/client/dist/chrome-devtools-ui/third_party/puppeteer-replay/puppeteer-replay.js +1 -0
- package/client/dist/chrome-devtools-ui/third_party/react-devtools/react-devtools.js +41 -0
- package/client/dist/chrome-devtools-ui/third_party/third-party-web/third-party-web.js +1 -0
- package/client/dist/chrome-devtools-ui/third_party/wasmparser/wasmparser.js +1 -0
- package/client/dist/chrome-devtools-ui/third_party/web-vitals/web-vitals.js +1 -0
- package/client/dist/chrome-devtools-ui/ui/components/adorners/adorners.js +1 -0
- package/client/dist/chrome-devtools-ui/ui/components/buttons/buttons.js +17 -0
- package/client/dist/chrome-devtools-ui/ui/components/cards/cards.js +10 -0
- package/client/dist/chrome-devtools-ui/ui/components/chrome_link/chrome_link.js +6 -0
- package/client/dist/chrome-devtools-ui/ui/components/code_highlighter/code_highlighter.js +1 -0
- package/client/dist/chrome-devtools-ui/ui/components/dialogs/dialogs.js +61 -0
- package/client/dist/chrome-devtools-ui/ui/components/diff_view/diff_view.js +8 -0
- package/client/dist/chrome-devtools-ui/ui/components/expandable_list/expandable_list.js +17 -0
- package/client/dist/chrome-devtools-ui/ui/components/floating_button/floating_button.js +1 -0
- package/client/dist/chrome-devtools-ui/ui/components/helpers/helpers.js +1 -0
- package/client/dist/chrome-devtools-ui/ui/components/highlighting/highlighting.js +1 -0
- package/client/dist/chrome-devtools-ui/ui/components/icon_button/icon_button.js +13 -0
- package/client/dist/chrome-devtools-ui/ui/components/input/input.js +1 -0
- package/client/dist/chrome-devtools-ui/ui/components/issue_counter/issue_counter.js +10 -0
- package/client/dist/chrome-devtools-ui/ui/components/legacy_wrapper/legacy_wrapper.js +1 -0
- package/client/dist/chrome-devtools-ui/ui/components/linkifier/linkifier.js +1 -0
- package/client/dist/chrome-devtools-ui/ui/components/markdown_view/markdown_view.js +51 -0
- package/client/dist/chrome-devtools-ui/ui/components/menus/menus.js +71 -0
- package/client/dist/chrome-devtools-ui/ui/components/node_text/node_text.js +3 -0
- package/client/dist/chrome-devtools-ui/ui/components/panel_feedback/panel_feedback.js +37 -0
- package/client/dist/chrome-devtools-ui/ui/components/panel_introduction_steps/panel_introduction_steps.js +9 -0
- package/client/dist/chrome-devtools-ui/ui/components/render_coordinator/render_coordinator.js +1 -0
- package/client/dist/chrome-devtools-ui/ui/components/report_view/report_view.js +21 -0
- package/client/dist/chrome-devtools-ui/ui/components/request_link_icon/request_link_icon.js +8 -0
- package/client/dist/chrome-devtools-ui/ui/components/settings/settings.js +20 -0
- package/client/dist/chrome-devtools-ui/ui/components/spinners/spinners.js +16 -0
- package/client/dist/chrome-devtools-ui/ui/components/srgb_overlay/srgb_overlay.js +6 -0
- package/client/dist/chrome-devtools-ui/ui/components/suggestion_input/suggestion_input.js +29 -0
- package/client/dist/chrome-devtools-ui/ui/components/survey_link/survey_link.js +7 -0
- package/client/dist/chrome-devtools-ui/ui/components/switch/switch.js +10 -0
- package/client/dist/chrome-devtools-ui/ui/components/text_editor/text_editor.js +1 -0
- package/client/dist/chrome-devtools-ui/ui/components/text_prompt/text_prompt.js +4 -0
- package/client/dist/chrome-devtools-ui/ui/components/tooltips/tooltips.js +7 -0
- package/client/dist/chrome-devtools-ui/ui/components/tree_outline/tree_outline.js +32 -0
- package/client/dist/chrome-devtools-ui/ui/legacy/components/color_picker/color_picker.js +1 -0
- package/client/dist/chrome-devtools-ui/ui/legacy/components/cookie_table/cookie_table.js +85 -0
- package/client/dist/chrome-devtools-ui/ui/legacy/components/data_grid/data_grid.js +1 -0
- package/client/dist/chrome-devtools-ui/ui/legacy/components/inline_editor/inline_editor.js +58 -0
- package/client/dist/chrome-devtools-ui/ui/legacy/components/object_ui/object_ui-meta.js +1 -0
- package/client/dist/chrome-devtools-ui/ui/legacy/components/object_ui/object_ui.js +7 -0
- package/client/dist/chrome-devtools-ui/ui/legacy/components/perf_ui/perf_ui-meta.js +1 -0
- package/client/dist/chrome-devtools-ui/ui/legacy/components/perf_ui/perf_ui.js +60 -0
- package/client/dist/chrome-devtools-ui/ui/legacy/components/quick_open/quick_open-meta.js +1 -0
- package/client/dist/chrome-devtools-ui/ui/legacy/components/quick_open/quick_open.js +1 -0
- package/client/dist/chrome-devtools-ui/ui/legacy/components/source_frame/source_frame-meta.js +1 -0
- package/client/dist/chrome-devtools-ui/ui/legacy/components/source_frame/source_frame.js +1 -0
- package/client/dist/chrome-devtools-ui/ui/legacy/components/utils/utils.js +1 -0
- package/client/dist/chrome-devtools-ui/ui/legacy/legacy.js +59 -0
- package/client/dist/chrome-devtools-ui/ui/legacy/theme_support/theme_support.js +1 -0
- package/client/dist/chrome-devtools-ui/ui/lit/lit.js +1 -0
- package/client/dist/chrome-devtools-ui/ui/visual_logging/visual_logging.js +1 -0
- package/client/dist/chrome-devtools-ui/worker_app.html +24 -0
- package/client/dist/index.html +3 -3
- package/package.json +4 -1
- package/packages/simdeck-test/dist/index.d.ts +7 -1
- package/client/dist/assets/index-ICWevBP_.js +0 -9
- package/client/dist/assets/index-Y_Zqbt1r.css +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import*as e from"../../../third_party/third-party-web/third-party-web.js";import*as t from"../types/types.js";import*as n from"../helpers/helpers.js";import*as i from"../../../core/platform/platform.js";import*as s from"../../../core/root/root.js";import*as a from"../../cpu_profile/cpu_profile.js";import*as r from"../../../core/common/common.js";function o(e,t){const n=l(e);if(n)return c(n,t)}function c(t,n){return e.ThirdPartyWeb.getEntity(t)??d(n,t)}function l(e,n){if(t.Events.isProfileCall(e))return e.callFrame.url;if(t.Events.isSyntheticNetworkRequest(e))return e.args.data.url;if(e.args?.data?.stackTrace&&e.args.data.stackTrace.length>0)return e.args.data.stackTrace[0].url;if(t.Events.isParseHTML(e))return e.args.beginData.url;if(n){if(t.Events.isDecodeImage(e)){const t=n.ImagePainting.paintImageForEvent.get(e);return t?l(t,n):null}if(t.Events.isDrawLazyPixelRef(e)&&e.args?.LazyPixelRef){const t=n.ImagePainting.paintImageByDrawLazyPixelRef.get(e.args.LazyPixelRef);return t?l(t,n):null}}return e.args?.data?.url?e.args.data.url:null}function d(t,n){if(n.startsWith("chrome-extension:"))return function(e,t,n){const i=new URL(t),s=function(e){return e.protocol+"//"+e.host}(i),a=new URL(s).host,r=n||a,o=e.get(s);if(o)return o;const c={name:r,company:r,category:"Chrome Extension",homepage:"https://chromewebstore.google.com/detail/"+a,categories:[],domains:[s],averageExecutionTime:0,totalExecutionTime:0,totalOccurrences:0};return e.set(s,c),c}(t,n);if(!n.startsWith("http"))return;const i=e.ThirdPartyWeb.getRootDomain(n);if(!i)return;if(t.has(i))return t.get(i);const s={name:i,company:i,category:"",categories:[],domains:[i],averageExecutionTime:0,totalExecutionTime:0,totalOccurrences:0,isUnrecognized:!0};return t.set(i,s),s}function u(e,t){const n=o(e,t.createdEntityCache);if(!n)return;if(t.entityByEvent.has(e))return;const i=t.eventsByEntity.get(n);i?i.push(e):t.eventsByEntity.set(n,[e]),t.entityByEvent.set(e,n)}function f(e,t,n){const i=o(e,t.createdEntityCache);if(!i)return;const s=[e,...Object.values(n).flat()],a=t.eventsByEntity.get(i);a?a.push(...s):t.eventsByEntity.set(i,s);for(const e of s)t.entityByEvent.set(e,i)}var m=Object.freeze({__proto__:null,addEventToEntityMapping:u,addNetworkRequestToEntityMapping:f,getEntityForEvent:o,getEntityForUrl:c,getNonResolvedURL:l,makeUpEntity:d});function g(e){return`${e.pid}-${e.tid}`}const p=new Map,h=new Map,v=new Map,E=[],T=new Map;var y=Object.freeze({__proto__:null,data:function(){return{animationFrames:E,presentationForFrame:T}},deps:function(){return["Meta"]},finalize:async function(){for(const[e,i]of p.entries()){const s=h.get(e);if(s){n.Trace.sortTraceEventsInPlace(i),n.Trace.sortTraceEventsInPlace(s);for(let e=0;e<i.length;e++){const a=s.at(e);if(!a)break;const r=i[e],o=n.SyntheticEvents.SyntheticEventsManager.registerSyntheticEvent({rawSourceEvent:r,...r,dur:t.Timing.Micro(a.ts-r.ts),args:{data:{beginEvent:r,endEvent:a}}});E.push(o);const c=r.args?.id;if(c){const e=v.get(c);e&&T.set(o,e)}}}}},handleEvent:function(e){if(t.Events.isAnimationFrameAsyncStart(e)){const t=g(e),n=p.get(t)??[];n.push(e),p.set(t,n)}else if(t.Events.isAnimationFrameAsyncEnd(e)){const t=g(e),n=h.get(t)??[];n.push(e),h.set(t,n)}else t.Events.isAnimationFramePresentation(e)&&e.args?.id&&v.set(e.args.id,e)},reset:function(){p.clear(),h.clear(),E.length=0,T.clear(),v.clear()}});const M=[],I=[];var w=Object.freeze({__proto__:null,data:function(){return{animations:I}},finalize:async function(){const e=n.Trace.createMatchedSortedSyntheticEvents(M);I.push(...e)},handleEvent:function(e){t.Events.isAnimation(e)&&M.push(e)},reset:function(){M.length=0,I.length=0}});const S=new Map,F=new Map,P=new Map,_=[],R=[];let C=[];const L="-$-";function k(e){const t=F.get(e.ts)?.get(e.pid)?.get(e.tid)?.get(e.cat);if(!t)return;const{flows:n,bindingParsed:s}=t;if(!s){for(const t of n){i.MapUtilities.getWithDefault(P,t,(()=>new Map)).set(e.ts,e)}t.bindingParsed=!0}}function b(e){const t=`${(n=e).cat}${L}${n.name}${L}${n.id}`;var n;switch(e.ph){case"s":{const n={flowId:e.id,times:new Map([[e.ts,void 0]])};return S.set(t,e.id),void D(e,n.flowId)}case"t":{const n=S.get(t);if(void 0===n)return;return void D(e,n)}case"f":{const n=S.get(t);if(void 0===n)return;D(e,n),S.delete(t)}}}function D(e,t){const n=i.MapUtilities.getWithDefault(F,e.ts,(()=>new Map)),s=i.MapUtilities.getWithDefault(n,e.pid,(()=>new Map)),a=i.MapUtilities.getWithDefault(s,e.tid,(()=>new Map));i.MapUtilities.getWithDefault(a,e.cat,(()=>({flows:new Set,bindingParsed:!1}))).flows.add(t)}function N(){return{flows:C}}var B=Object.freeze({__proto__:null,data:N,finalize:async function(){_.forEach(b),R.forEach(k),C=[...P.values()].map((e=>[...e.values()])).map((e=>e.filter((e=>void 0!==e)))).filter((e=>e.length>1))},handleEvent:function(e){t.Events.isFlowPhaseEvent(e)?_.push(e):R.push(e)},reset:function(){C=[],_.length=0,R.length=0,S.clear(),F.clear(),P.clear()}});const W=new Map,U=new Map,O=new Map,x=new Map,z=new Map;function A(e){switch(e){case"seller":return"seller";case"bidder":return"bidder";default:return"unknown"}}function q(e){return n.SyntheticEvents.SyntheticEventsManager.registerSyntheticEvent({rawSourceEvent:e,name:"SyntheticAuctionWorklet",s:"t",cat:e.cat,tid:e.tid,ts:e.ts,ph:"I",pid:e.args.data.pid,host:e.args.data.host,target:e.args.data.target,type:A(e.args.data.type)})}function j(){return{worklets:new Map(O)}}var H=Object.freeze({__proto__:null,data:j,finalize:async function(){for(const[e,t]of x){const n=z.get(e);if(!n)continue;const i=W.get(e),s=U.get(e);let a=null;i?(a={...q(i),args:{data:{runningInProcessEvent:i,utilityThread:t,v8HelperThread:n}}},s&&(a.args.data.doneWithProcessEvent=s)):s&&(a={...q(s),args:{data:{doneWithProcessEvent:s,utilityThread:t,v8HelperThread:n}}},i&&(a.args.data.runningInProcessEvent=i)),null!==a&&O.set(e,a)}},handleEvent:function(e){if(t.Events.isAuctionWorkletRunningInProcess(e))W.set(e.args.data.pid,e);else if(t.Events.isAuctionWorkletDoneWithProcess(e))U.set(e.args.data.pid,e);else if(t.Events.isThreadName(e)){if("auction_worklet.CrUtilityMain"===e.args.name)return void x.set(e.pid,e);"AuctionV8HelperThread"===e.args.name&&z.set(e.pid,e)}},reset:function(){W.clear(),U.clear(),O.clear(),x.clear(),z.clear()}});const $=new Map;let G="",V="";const X=new Map;let Y=t.Events.ProcessID(-1),K=t.Events.ThreadID(-1),Q=t.Events.ProcessID(-1),J=t.Events.ThreadID(-1),Z=null,ee=null;const te=new Map,ne=new Set,ie={min:t.Timing.Micro(Number.POSITIVE_INFINITY),max:t.Timing.Micro(Number.NEGATIVE_INFINITY),range:t.Timing.Micro(Number.POSITIVE_INFINITY)},se=new Map,ae=new Map,re=new Map,oe=[],ce=new Map;let le=t.Timing.Micro(-1);const de=new Set(["B","E","X","I"]);let ue=!0;const fe=new Set(["TracingStartedInPage","TracingSessionIdForWorker","TracingStartedInBrowser"]);function me(e,n){i.MapUtilities.getWithDefault(X,n.processId,(()=>new Map)).set(n.frame,n);const s=i.MapUtilities.getWithDefault($,n.frame,(()=>new Map)),a=i.MapUtilities.getWithDefault(s,n.processId,(()=>[])),r=a.at(-1);r&&r.frame.url===n.url||a.push({frame:n,window:{min:e.ts,max:t.Timing.Micro(0),range:t.Timing.Micro(0)}})}function ge(){return{traceBounds:{...ie},browserProcessId:Y,browserThreadId:K,processNames:te,gpuProcessId:Q,gpuThreadId:J===t.Events.ThreadID(-1)?void 0:J,viewportRect:Z||void 0,devicePixelRatio:ee??void 0,mainFrameId:G,mainFrameURL:V,navigationsByFrameId:se,navigationsByNavigationId:ae,finalDisplayUrlByNavigationId:re,threadsInProcess:ce,rendererProcessesByFrame:$,topLevelRendererIds:ne,frameByProcessId:X,mainFrameNavigations:oe,traceIsGeneric:ue}}var pe=Object.freeze({__proto__:null,data:ge,finalize:async function(){le>=0&&(ie.min=le),ie.range=t.Timing.Micro(ie.max-ie.min);for(const[,e]of $){const n=[...e.values()].flat().sort(((e,t)=>e.window.min-t.window.min));for(let e=0;e<n.length;e++){const i=n[e],s=n[e+1];s?(i.window.max=t.Timing.Micro(s.window.min-1),i.window.range=t.Timing.Micro(i.window.max-i.window.min)):(i.window.max=t.Timing.Micro(ie.max),i.window.range=t.Timing.Micro(ie.max-i.window.min))}}for(const[e,t]of se)if(!$.has(e)){se.delete(e);for(const e of t)e.args.data&&ae.delete(e.args.data.navigationId)}const e=oe.at(0),i=n.Timing.secondsToMicro(t.Timing.Seconds(.5));if(e){const t=e.ts-ie.min<i;e.args.data?.isOutermostMainFrame&&e.args.data?.documentLoaderURL&&t&&(V=e.args.data.documentLoaderURL)}},handleEvent:function(e){if(ue&&fe.has(e.name)&&(ue=!1),t.Events.isProcessName(e)&&te.set(e.pid,e),0!==e.ts&&!e.name.endsWith("::UMA")&&de.has(e.ph)){ie.min=t.Timing.Micro(Math.min(e.ts,ie.min));const n=e.dur??t.Timing.Micro(0);ie.max=t.Timing.Micro(Math.max(e.ts+n,ie.max))}if(!t.Events.isProcessName(e)||"Browser"!==e.args.name&&"HeadlessBrowser"!==e.args.name)if(!t.Events.isProcessName(e)||"Gpu"!==e.args.name&&"GPU Process"!==e.args.name)if(t.Events.isThreadName(e)&&"CrGpuMain"===e.args.name)J=e.tid;else{if(t.Events.isThreadName(e)&&"CrBrowserMain"===e.args.name&&(K=e.tid),t.Events.isMainFrameViewport(e)&&null===Z){const t=e.args.data.viewport_rect,n=t[0],i=t[1],s=t[2],a=t[5];Z=new DOMRect(n,i,s,a),ee=e.args.data.dpr}if(t.Events.isTracingStartedInBrowser(e)){if(le=e.ts,!e.args.data)throw new Error("No frames found in trace data");for(const t of e.args.data.frames??[]){me(e,t),t.parent||ne.add(t.processId);const n="isOutermostMainFrame"in t;"isInPrimaryMainFrame"in t&&n?t.isInPrimaryMainFrame&&t.isOutermostMainFrame&&(G=t.frame,V=t.url):n?t.isOutermostMainFrame&&(G=t.frame,V=t.url):!t.parent&&t.url&&(G=t.frame,V=t.url)}}else if(t.Events.isFrameCommittedInBrowser(e)){const t=e.args.data;if(!t)return;if(me(e,t),t.parent)return;ne.add(t.processId)}else if(t.Events.isCommitLoad(e)){const t=e.args.data;if(!t)return;const{frame:n,name:i,url:s}=t;me(e,{processId:e.pid,frame:n,name:i,url:s})}else if(t.Events.isThreadName(e)){i.MapUtilities.getWithDefault(ce,e.pid,(()=>new Map)).set(e.tid,e)}else{if(t.Events.isNavigationStart(e)&&e.args.data){const t=e.args.data.navigationId;if(ae.has(t))return;ae.set(t,e),re.set(t,e.args.data.documentLoaderURL);const n=e.args.frame,i=se.get(n)||[];return i.push(e),se.set(n,i),void(n===G&&oe.push(e))}if(t.Events.isResourceSendRequest(e)){if("Document"!==e.args.data.resourceType)return;const t=e.args.data.requestId;if(!ae.get(t))return;re.set(t,e.args.data.url)}else if(t.Events.isDidCommitSameDocumentNavigation(e)){if("PRIMARY_MAIN_FRAME"!==e.args.render_frame_host.frame_type)return;const t=oe.at(-1),n=t?.args.data?.navigationId??"";re.set(n,e.args.url)}else;}}else Q=e.pid;else Y=e.pid},reset:function(){se.clear(),ae.clear(),re.clear(),te.clear(),oe.length=0,Y=t.Events.ProcessID(-1),K=t.Events.ThreadID(-1),Q=t.Events.ProcessID(-1),J=t.Events.ThreadID(-1),Z=null,ne.clear(),ce.clear(),$.clear(),X.clear(),ie.min=t.Timing.Micro(Number.POSITIVE_INFINITY),ie.max=t.Timing.Micro(Number.NEGATIVE_INFINITY),ie.range=t.Timing.Micro(Number.POSITIVE_INFINITY),le=t.Timing.Micro(-1),ue=!0}});const he=1e3,ve=1e6,Ee=new Map,Te=new Map,ye=new Map,Me=new Map,Ie=[],we=new Map,Se=new Map,Fe={eventsByEntity:new Map,entityByEvent:new Map,createdEntityCache:new Map};function Pe(e,t,n){Te.has(e)||Te.set(e,{});const i=Te.get(e);if(!i)throw new Error(`Unable to locate trace events for request ID ${e}`);if(Array.isArray(i[t])){const e=n;i[t].push(...e)}else i[t]=n}function _e(e){for(const t of e)if(t>0)return t;return 0}function Re(){return{byId:ye,byOrigin:Me,byTime:Ie,eventToInitiator:Se,webSocket:[...Ee.values()],entityMappings:{entityByEvent:new Map(Fe.entityByEvent),eventsByEntity:new Map(Fe.eventsByEntity),createdEntityCache:new Map(Fe.createdEntityCache)}}}var Ce=Object.freeze({__proto__:null,data:Re,deps:function(){return["Meta"]},finalize:async function(){const{rendererProcessesByFrame:e}=ge();for(const[s,a]of Te.entries()){if(!a.sendRequests||!a.receiveResponse)continue;const r=[];for(let e=0;e<a.sendRequests.length-1;e++){const n=a.sendRequests[e],i=a.sendRequests[e+1];let s=n.ts,o=t.Timing.Micro(i.ts-n.ts);if(a.willSendRequests?.[e]&&a.willSendRequests[e+1]){const n=a.willSendRequests[e],i=a.willSendRequests[e+1];s=n.ts,o=t.Timing.Micro(i.ts-n.ts)}r.push({url:n.args.data.url,priority:n.args.data.priority,requestMethod:n.args.data.requestMethod,ts:s,dur:o})}const o=0!==a.resourceFinish?.args.data.encodedDataLength,c=a.receiveResponse.args.data.fromCache&&!a.receiveResponse.args.data.fromServiceWorker&&!o,l=void 0!==a.resourceMarkAsCached,d=l?void 0:a.receiveResponse.args.data.timing;if(!d&&!l)continue;const u=a.sendRequests[0],m=a.sendRequests[a.sendRequests.length-1],g=m.args.data.priority;let p=g;a.changePriority&&(p=a.changePriority.args.data.priority);const h=a.willSendRequests?.length?t.Timing.Micro(a.willSendRequests[0].ts):t.Timing.Micro(u.ts),v=a.willSendRequests?.length?t.Timing.Micro(a.willSendRequests[a.willSendRequests.length-1].ts):t.Timing.Micro(m.ts),E=a.resourceFinish?a.resourceFinish.ts:v,T=a.resourceFinish?.args.data.finishTime?t.Timing.Micro(a.resourceFinish.args.data.finishTime*ve):t.Timing.Micro(E),y=t.Timing.Micro(d?(T||v)-v:0),M=t.Timing.Micro(E-(T||E)),I=t.Timing.Micro(v-h),w=d?d.requestTime*ve-v:0,S=t.Timing.Micro(i.NumberUtilities.clamp(w,0,Number.MAX_VALUE)),F=d?t.Timing.Micro(_e([d.dnsStart*he,d.connectStart*he,d.sendStart*he,a.receiveResponse.ts-v])):t.Timing.Micro(a.receiveResponse.ts-h),P=d?t.Timing.Micro(d.requestTime*ve+d.sendStart*he):h,_=d?t.Timing.Micro((d.receiveHeadersEnd-d.sendEnd)*he):t.Timing.Micro(0),R=d?t.Timing.Micro(d.requestTime*ve+d.receiveHeadersEnd*he):h,C=d?t.Timing.Micro((T||R)-R):t.Timing.Micro(E-a.receiveResponse.ts),L=t.Timing.Micro(y+M),k=d?t.Timing.Micro((d.dnsEnd-d.dnsStart)*he):t.Timing.Micro(0),b=d?t.Timing.Micro((d.sslEnd-d.sslStart)*he):t.Timing.Micro(0),D=d?t.Timing.Micro((d.proxyEnd-d.proxyStart)*he):t.Timing.Micro(0),N=d?t.Timing.Micro((d.sendEnd-d.sendStart)*he):t.Timing.Micro(0),B=d?t.Timing.Micro((d.connectEnd-d.connectStart)*he):t.Timing.Micro(0),{frame:W,url:U,renderBlocking:O}=m.args.data,{encodedDataLength:x,decodedBodyLength:z}=a.resourceFinish?a.resourceFinish.args.data:{encodedDataLength:0,decodedBodyLength:0},A=new URL(U),q="https:"===A.protocol,j=n.Trace.activeURLForFrameAtTime(W,m.ts,e)||"",H=n.SyntheticEvents.SyntheticEventsManager.registerSyntheticEvent({rawSourceEvent:m,args:{data:{syntheticData:{dnsLookup:k,download:C,downloadStart:R,finishTime:T,initialConnection:B,isDiskCached:c,isHttps:q,isMemoryCached:l,isPushedResource:o,networkDuration:y,processingDuration:M,proxyNegotiation:D,queueing:S,redirectionDuration:I,requestSent:N,sendStartTime:P,ssl:b,stalled:F,totalTime:L,waiting:_},decodedBodyLength:z,encodedDataLength:x,frame:W,fromServiceWorker:a.receiveResponse.args.data.fromServiceWorker,isLinkPreload:m.args.data.isLinkPreload||!1,mimeType:a.receiveResponse.args.data.mimeType,priority:p,initialPriority:g,protocol:a.receiveResponse.args.data.protocol??"unknown",redirects:r,renderBlocking:O??"non_blocking",requestId:s,requestingFrameUrl:j,requestMethod:m.args.data.requestMethod,resourceType:m.args.data.resourceType??"Other",statusCode:a.receiveResponse.args.data.statusCode,responseHeaders:a.receiveResponse.args.data.headers||[],fetchPriorityHint:m.args.data.fetchPriorityHint??"auto",initiator:m.args.data.initiator,stackTrace:m.args.data.stackTrace,timing:d,url:U,failed:a.resourceFinish?.args.data.didFail??!1,finished:Boolean(a.resourceFinish),connectionId:a.receiveResponse.args.data.connectionId,connectionReused:a.receiveResponse.args.data.connectionReused}},cat:"loading",name:"SyntheticNetworkRequest",ph:"X",dur:t.Timing.Micro(E-h),tdur:t.Timing.Micro(E-h),ts:t.Timing.Micro(h),tts:t.Timing.Micro(h),pid:m.pid,tid:m.tid}),$=i.MapUtilities.getWithDefault(Me,A.host,(()=>({renderBlocking:[],nonRenderBlocking:[],all:[]})));n.Network.isSyntheticNetworkRequestEventRenderBlocking(H)?$.renderBlocking.push(H):$.nonRenderBlocking.push(H),$.all.push(H),Ie.push(H),ye.set(H.args.data.requestId,H),f(H,Fe,a);const G=H.args.data.initiator?.url||n.Trace.getZeroIndexedStackTraceForEvent(H)?.at(0)?.url;if(G){const e=we.get(G)??[];e.push(H),we.set(G,e)}}for(const e of Ie){const t=we.get(e.args.data.url);if(t)for(const n of t)Se.set(n,e)}Ee.forEach((e=>{let n=null,i=null;for(const s of e.events)t.Events.isWebSocketCreate(s)&&(n=s),t.Events.isWebSocketDestroy(s)&&(i=s);e.syntheticConnection=function(e,t,n){const{traceBounds:i}=ge(),s=e?e.ts:i.min,a=t?t.ts:i.max,r=a-s,o=e||t||n;return{name:"SyntheticWebSocketConnection",cat:o.cat,ph:"X",ts:s,dur:r,pid:o.pid,tid:o.tid,s:o.s,rawSourceEvent:o,_tag:"SyntheticEntryTag",args:{data:{identifier:o.args.data.identifier,priority:"Low",url:o.args.data.url||""}}}}(n,i,e.events[0])}))},handleEvent:function(e){if(t.Events.isResourceChangePriority(e))Pe(e.args.data.requestId,"changePriority",e);else if(t.Events.isResourceWillSendRequest(e))Pe(e.args.data.requestId,"willSendRequests",[e]);else if(t.Events.isResourceSendRequest(e))Pe(e.args.data.requestId,"sendRequests",[e]);else if(t.Events.isResourceReceiveResponse(e))Pe(e.args.data.requestId,"receiveResponse",e);else if(t.Events.isResourceReceivedData(e))Pe(e.args.data.requestId,"receivedData",[e]);else if(t.Events.isResourceFinish(e))Pe(e.args.data.requestId,"resourceFinish",e);else if(t.Events.isResourceMarkAsCached(e))Pe(e.args.data.requestId,"resourceMarkAsCached",e);else if(t.Events.isWebSocketCreate(e)||t.Events.isWebSocketInfo(e)||t.Events.isWebSocketTransfer(e)){const t=e.args.data.identifier;Ee.has(t)||(e.args.data.frame?Ee.set(t,{frame:e.args.data.frame,webSocketIdentifier:t,events:[],syntheticConnection:null}):e.args.data.workerId&&Ee.set(t,{workerId:e.args.data.workerId,webSocketIdentifier:t,events:[],syntheticConnection:null})),Ee.get(t)?.events.push(e)}},reset:function(){ye.clear(),Me.clear(),Te.clear(),Ie.length=0,we.clear(),Se.clear(),Ee.clear(),Fe.eventsByEntity.clear(),Fe.entityByEvent.clear(),Fe.createdEntityCache.clear()}});const Le=new Map,ke=new Map,be=new Map,De=new Map;function Ne(){return{profilesInProcess:ke,entryToNode:be}}function Be(e,t){const n=i.MapUtilities.getWithDefault(De,e,(()=>new Map));return i.MapUtilities.getWithDefault(n,t,(()=>({rawProfile:{startTime:0,endTime:0,nodes:[],samples:[],timeDeltas:[],lines:[]},profileId:t})))}var We=Object.freeze({__proto__:null,data:Ne,finalize:async function(e={}){!function(e){for(const[s,r]of De)for(const[o,c]of r){const l=c.threadId;if(!c.rawProfile.nodes.length||void 0===l)continue;const d=[],u=new a.CPUProfileDataModel.CPUProfileDataModel(c.rawProfile),f=n.TreeHelpers.makeEmptyTraceEntryTree();f.maxDepth=u.maxDepth;const m={rawProfile:c.rawProfile,parsedProfile:u,profileCalls:[],profileTree:f,profileId:o};function g(){u.forEachFrame((function(e,i,a,r){if(void 0===l)return;const c=n.Timing.milliToMicro(t.Timing.Milli(r)),u=i.id,f=n.Trace.makeProfileCall(i,o,a,c,s,l);m.profileCalls.push(f),d.push(m.profileCalls.length-1);const g=n.TreeHelpers.makeEmptyTraceEntryNode(f,u);be.set(f,g),g.depth=e,1===d.length&&m.profileTree?.roots.add(g)}),(function(e,i,s,a,r,c){const l=d.pop(),u=void 0!==l&&m.profileCalls[l];if(!u)return;const{callFrame:f,ts:g,pid:p,tid:h}=u,v=be.get(u);if(void 0===f||void 0===g||void 0===p||void 0===o||void 0===h||void 0===v)return;const E=n.Timing.milliToMicro(t.Timing.Milli(r)),T=n.Timing.milliToMicro(t.Timing.Milli(c));u.dur=E,v.selfTime=T;const y=d.at(-1),M=void 0!==y&&m.profileCalls.at(y),I=M&&be.get(M);I&&(v.parent=I,I.children.push(v))}))}i.MapUtilities.getWithDefault(ke,s,(()=>new Map)).set(l,m),e.isCPUProfile&&g()}}(e)},getProfileCallFunctionName:function(e,t){const n=e.profilesInProcess.get(t.pid)?.get(t.tid),i=n?.parsedProfile.nodeById(t.nodeId);return i?.functionName?i.functionName:t.callFrame.functionName},handleEvent:function(e){if(t.Events.isSyntheticCpuProfile(e)){const t=e.pid,n=e.tid,i=Be(t,"0x1");return i.rawProfile=e.args.data.cpuProfile,void(i.threadId=n)}if(t.Events.isProfile(e)){const t=Be(e.pid,e.id);return t.rawProfile.startTime=e.ts,void(t.threadId=e.tid)}if(t.Events.isProfileChunk(e)){const t=Be(e.pid,e.id).rawProfile,n=e.args?.data?.cpuProfile||{samples:[]},i=n?.samples||[],s=e.args?.data?.cpuProfile?.trace_ids||{},a=[];for(const e of n?.nodes||[]){const t=void 0===e.callFrame.lineNumber?-1:e.callFrame.lineNumber,n=void 0===e.callFrame.columnNumber?-1:e.callFrame.columnNumber,i=String(e.callFrame.scriptId),s=e.callFrame.url||"",r={...e,callFrame:{...e.callFrame,url:s,lineNumber:t,columnNumber:n,scriptId:i}};a.push(r)}const r=e.args.data?.timeDeltas||[],o=e.args.data?.lines||Array(i.length).fill(0);if(t.nodes.push(...a),t.samples?.push(...i),t.timeDeltas?.push(...r),t.lines?.push(...o),t.traceIds={...t.traceIds||{},...s},t.samples&&t.timeDeltas&&t.samples.length!==t.timeDeltas.length)return void console.error("Failed to parse CPU profile.");if(!t.endTime&&t.timeDeltas){const e=t.timeDeltas;t.endTime=e.reduce(((e,t)=>e+t),t.startTime)}}else;},reset:function(){Le.clear(),De.clear(),ke.clear(),be.clear()}});const Ue=new Map;let Oe={eventsByEntity:new Map,entityByEvent:new Map,createdEntityCache:new Map};const xe=Array(),ze=new Map;let Ae=[];const qe=[];let je=t.Configuration.defaults();const He=()=>({url:null,isOnMainFrame:!1,threads:new Map}),$e=()=>({name:null,entries:[],profileCalls:[],layoutEvents:[],updateLayoutTreeEvents:[]}),Ge=(e,t)=>i.MapUtilities.getWithDefault(e,t,He),Ve=(e,t)=>i.MapUtilities.getWithDefault(e.threads,t,$e);function Xe(){return{processes:new Map(Ue),compositorTileWorkers:new Map(Ye()),entryToNode:new Map(ze),allTraceEntries:[...Ae],entityMappings:{entityByEvent:new Map(Oe.entityByEvent),eventsByEntity:new Map(Oe.eventsByEntity),createdEntityCache:new Map(Oe.createdEntityCache)}}}function Ye(){const e=new Map;for(const t of xe){const n=e.get(t.pid)||[];n.push(t.tid),e.set(t.pid,n)}return e}function Ke(e,t,n,i){Qe(e,n),Je(e,t,n),Ze(e,n,i)}function Qe(e,t){for(const n of t.values())for(const[t,i]of n)for(const n of i.flat()){const i=Ge(e,t);if(null===i.url||"about:blank"===i.url)try{new URL(n.frame.url),i.url=n.frame.url}catch{i.url=null}}}function Je(e,t,n){for(const[i,s]of n)for(const[n]of s){const s=Ge(e,n);i===t&&(s.isOnMainFrame=!0)}}function Ze(e,t,n){for(const[t,i]of e)for(const[e,s]of n.get(t)??[]){Ve(i,e).name=s?.args.name??`${e}`}}function et(e){if(s.Runtime.experiments.isEnabled("react-native-specific-ui"))return;const t=j().worklets;if(!ge().traceIsGeneric)for(const[n,i]of e)if(null!==i.url);else{const s=t.get(n);s?i.url=s.host:e.delete(n)}}function tt(e){for(const[,t]of e)for(const[e,n]of t.threads)n.tree?.roots.size||t.threads.delete(e)}function nt(e,t){const i=Ne();for(const[s,a]of e)for(const[e,r]of a.threads){if(!r.entries.length){r.tree=n.TreeHelpers.makeEmptyTraceEntryTree();continue}n.Trace.sortTraceEventsInPlace(r.entries);const a=i.profilesInProcess.get(s)?.get(e);if(a){const t=a.parsedProfile,i=t&&new n.SamplesIntegrator.SamplesIntegrator(t,a.profileId,s,e,je),o=i?.buildProfileCalls(r.entries);if(i&&o){Ae=[...Ae,...o],r.entries=n.Trace.mergeEventsInOrder(r.entries,o),r.profileCalls=o;const e=i.jsSampleEvents;e&&(Ae=[...Ae,...e],r.entries=n.Trace.mergeEventsInOrder(r.entries,e))}}const o=n.TreeHelpers.treify(r.entries,t);r.tree=o.tree;for(const[e,t]of o.entryToNode)ze.set(e,t),u(e,Oe)}}function it(e){if(t.Events.isEnd(e)){const n=qe.pop();return n?n.name!==e.name||n.cat!==e.cat?(console.error("Begin/End events mismatch at "+n.ts+" ("+n.name+") vs. "+e.ts+" ("+e.name+")"),null):(n.dur=t.Timing.Micro(e.ts-n.ts),null):null}const n={...e,ph:"X",dur:t.Timing.Micro(0)};return qe.push(n),n}var st=Object.freeze({__proto__:null,assignIsMainFrame:Je,assignMeta:Ke,assignOrigin:Qe,assignThreadName:Ze,buildHierarchy:nt,data:Xe,deps:function(){return["Meta","Samples","AuctionWorklets","NetworkRequests"]},finalize:async function(){const{mainFrameId:e,rendererProcessesByFrame:t,threadsInProcess:i}=ge();Oe=Re().entityMappings,Ke(Ue,e,t,i),et(Ue),nt(Ue),tt(Ue),n.Trace.sortTraceEventsInPlace(Ae)},handleEvent:function(e){if(t.Events.isThreadName(e)&&e.args.name?.startsWith("CompositorTileWorker")&&xe.push({pid:e.pid,tid:e.tid}),t.Events.isBegin(e)||t.Events.isEnd(e)){const t=Ge(Ue,e.pid),n=Ve(t,e.tid),i=it(e);if(!i)return;return n.entries.push(i),void Ae.push(i)}if(t.Events.isInstant(e)||t.Events.isComplete(e)){const t=Ge(Ue,e.pid);Ve(t,e.tid).entries.push(e),Ae.push(e)}if(t.Events.isLayout(e)){const t=Ge(Ue,e.pid);Ve(t,e.tid).layoutEvents.push(e)}if(t.Events.isUpdateLayoutTree(e)){const t=Ge(Ue,e.pid);Ve(t,e.tid).updateLayoutTreeEvents.push(e)}},handleUserConfig:function(e){je=e},makeCompleteEvent:it,reset:function(){Ue.clear(),ze.clear(),Oe.eventsByEntity.clear(),Oe.entityByEvent.clear(),Oe.createdEntityCache.clear(),Ae.length=0,qe.length=0,xe.length=0},sanitizeProcesses:et,sanitizeThreads:tt});const at=new Map,rt=new Map;function ot(e,n){let i=n.get(e)?.parent;for(;i;){if(t.Events.isProfileCall(i.entry)||ct(i.entry))return i.entry;i=i.parent}return null}function ct(e){const n=t.Events.isConsoleRunTask(e),i=e.name.startsWith("v8")||e.name.startsWith("V8");return t.Events.isJSInvocationEvent(e)&&(n||!i)}function lt(e,n){return ut(e,n,ct,t.Events.isDebuggerAsyncTaskRun).at(0)}function dt(e,n){return ut(e,n,t.Events.isProfileCall,t.Events.isDebuggerAsyncTaskRun)}function ut(e,t,n,i){const s=t.get(e);if(!s)return[];const a=[[...s.children]],r=[];for(let e=0;e<a.length;e++){const t=a[e];for(let e=0;e<t.length;e++){const s=t[e];n(s.entry)?r.push(s.entry):i(s.entry)||a.push([...s.children])}}return r}function ft(){return{schedulerToRunEntryPoints:at,asyncCallToScheduler:rt}}var mt=Object.freeze({__proto__:null,data:ft,deps:function(){return["Renderer","Flows"]},finalize:async function(){const{flows:e}=N(),{entryToNode:n}=Xe();for(const s of e){const e=s.at(0);if(!e||!t.Events.isDebuggerAsyncTaskScheduled(e))continue;const a=e.args.taskName,r=s.at(1);if(!r||!t.Events.isDebuggerAsyncTaskRun(r))continue;const o=ot(e,n);if(!o)continue;const c=lt(r,n);if(!c)continue;i.MapUtilities.getWithDefault(at,o,(()=>[])).push(c);const l=dt(r,n);for(const e of l)rt.set(e,{taskName:a,scheduler:o})}},handleEvent:function(e){},reset:function(){at.clear(),rt.clear()}});const gt=new Map;var pt=Object.freeze({__proto__:null,data:function(){return{domStatsByFrameId:gt}},finalize:async function(){},handleEvent:function(e){if(!t.Events.isDOMStats(e))return;i.MapUtilities.getWithDefault(gt,e.args.data.frame,(()=>[])).push(e)},reset:function(){gt.clear()}});let ht=[];const vt=new Map,Et=[],Tt=[],yt=[],Mt=[];const It=["workerStart","redirectStart","redirectEnd","fetchStart","domainLookupStart","domainLookupEnd","connectStart","connectEnd","secureConnectionStart","requestStart","responseStart","responseEnd","navigationStart","unloadEventStart","unloadEventEnd","redirectStart","redirectEnd","fetchStart","commitNavigationEnd","domainLookupStart","domainLookupEnd","connectStart","connectEnd","secureConnectionStart","requestStart","responseStart","responseEnd","domLoading","domInteractive","domContentLoadedEventStart","domContentLoadedEventEnd","domComplete","loadEventStart","loadEventEnd"];function wt(){return{performanceMeasures:ht.filter((e=>"blink.user_timing"===e.cat)),consoleTimings:ht.filter((e=>"blink.console"===e.cat)),performanceMarks:[...Tt],timestampEvents:[...Mt],measureTraceByTraceId:new Map(vt)}}var St=Object.freeze({__proto__:null,data:wt,finalize:async function(){const e=[...Et,...yt];ht=n.Trace.createMatchedSortedSyntheticEvents(e),ht=ht.sort(((e,t)=>function(e,t,n){const i=e.ts,s=t.ts;if(i<s)return-1;if(i>s)return 1;const a=i+(e.dur??0),r=s+(t.dur??0);return a>r?-1:a<r?1:n.indexOf(t)-n.indexOf(e)}(e,t,[...ht])))},handleEvent:function(e){It.includes(e.name)||(t.Events.isUserTimingMeasure(e)&&vt.set(e.args.traceId,e),t.Events.isPerformanceMeasure(e)?Et.push(e):(t.Events.isPerformanceMark(e)&&Tt.push(e),t.Events.isConsoleTime(e)&&yt.push(e),t.Events.isConsoleTimeStamp(e)&&Mt.push(e)))},reset:function(){ht.length=0,Et.length=0,Tt.length=0,yt.length=0,Mt.length=0,vt.clear()}});const Ft=[],Pt=[],_t=[],Rt=new Map,Ct=new Map,Lt=[];function kt(){const e=wt().timestampEvents;for(const i of e){if(!i.args.data)continue;const e=String(i.args.data.name??i.args.data.message);Ct.set(e,i);const s=Nt(i),a=i.args.data.start,r=i.args.data.end;if(!s&&!a&&!r)continue;const o="number"==typeof a?t.Timing.Micro(a):Ct.get(String(a))?.ts,c="number"==typeof r?t.Timing.Micro(r):Ct.get(String(r))?.ts;if(void 0!==c&&void 0===o)continue;const l=o??i.ts,d=c??i.ts;if(s){const a={...i,name:e,cat:"devtools.extension",args:s,rawSourceEvent:i,dur:t.Timing.Micro(d-l),ts:l,ph:"X"},r=n.SyntheticEvents.SyntheticEventsManager.getActiveManager().registerSyntheticEvent(a);Ft.push(r);continue}const u={...i,name:e,cat:"disabled-by-default-v8.inspector",ph:"X",ts:l,dur:t.Timing.Micro(d-l),rawSourceEvent:i},f=n.SyntheticEvents.SyntheticEventsManager.getActiveManager().registerSyntheticEvent(u);Lt.push(f)}}function bt(e){for(const i of e){const e=Dt(i);if(!e)continue;const s={name:i.name,ph:t.Extensions.isExtensionPayloadMarker(e)?"I":"X",pid:i.pid,tid:i.tid,ts:i.ts,dur:i.dur,cat:"devtools.extension",args:e,rawSourceEvent:t.Events.isSyntheticUserTiming(i)?i.rawSourceEvent:i};if(t.Extensions.isExtensionPayloadMarker(e)){const e=n.SyntheticEvents.SyntheticEventsManager.getActiveManager().registerSyntheticEvent(s);_t.push(e)}else if(t.Extensions.isExtensionPayloadTrackEntry(s.args)){const e=n.SyntheticEvents.SyntheticEventsManager.getActiveManager().registerSyntheticEvent(s);Ft.push(e)}else;}}function Dt(e){const n=t.Events.isPerformanceMark(e)?e.args.data?.detail:e.args.data.beginEvent.args.detail;if(!n)return null;try{const e=JSON.parse(n);return"devtools"in e&&t.Extensions.isValidExtensionPayload(e.devtools)?e.devtools:null}catch{return null}}function Nt(e){if(!e.args.data)return null;const t=e.args.data.track;return""===t||void 0===t?null:{color:String(e.args.data.color),track:String(t),dataType:"track-entry",trackGroup:void 0!==e.args.data.trackGroup?String(e.args.data.trackGroup):void 0}}var Bt=Object.freeze({__proto__:null,data:function(){return{entryToNode:Rt,extensionTrackData:Pt,extensionMarkers:_t,syntheticConsoleEntriesForTimingsTrack:Lt}},deps:function(){return["UserTimings"]},extensionDataInConsoleTimeStamp:Nt,extensionDataInPerformanceTiming:Dt,extractConsoleAPIExtensionEntries:kt,extractPerformanceAPIExtensionEntries:bt,finalize:async function(){!function(){const e=wt().performanceMeasures,t=wt().performanceMarks;bt(n.Trace.mergeEventsInOrder(e,t)),kt(),n.Trace.sortTraceEventsInPlace(Ft),n.Extensions.buildTrackDataFromExtensionEntries(Ft,Pt,Rt)}()},handleEvent:function(e){},reset:function(){Ft.length=0,Lt.length=0,Pt.length=0,_t.length=0,Rt.clear(),Ct.clear()}});const Wt=[],Ut=[],Ot=new Map;let xt={},zt=null;const At=[],qt=[];function jt(){return{paints:Wt,snapshots:Ut,paintsToSnapshots:Ot}}var Ht=Object.freeze({__proto__:null,data:jt,deps:function(){return["Meta"]},finalize:async function(){const e=ge();n.Trace.sortTraceEventsInPlace(qt);for(const n of qt)if(t.Events.isSetLayerId(n)){if(e.mainFrameId!==n.args.data.frame)continue;zt=n.args.data.layerTreeId}else if(t.Events.isUpdateLayer(n))At.push(n);else{if(t.Events.isPaint(n)){if(!n.args.data.layerId)continue;Wt.push(n),xt[n.args.data.layerId]=n;continue}if(t.Events.isDisplayListItemListSnapshot(n)){let e=null;for(let t=At.length-1;t>-1;t--){const i=At[t];if(i.pid===n.pid&&i.tid===n.tid){e=i;break}}if(!e)continue;if(e.args.layerTreeId!==zt)continue;const t=xt[e.args.layerId];if(!t)continue;Ut.push(n),Ot.set(t,n)}}},handleEvent:function(e){(t.Events.isPaint(e)||t.Events.isDisplayListItemListSnapshot(e)||t.Events.isUpdateLayer(e)||t.Events.isSetLayerId(e))&&qt.push(e)},reset:function(){Wt.length=0,Ut.length=0,Ot.clear(),xt={},zt=null,At.length=0,qt.length=0}});function $t(e,t,n){let i="OTHER";return"CrRendererMain"===t.name?i="MAIN_THREAD":"DedicatedWorker thread"===t.name?i="WORKER":t.name?.startsWith("CompositorTileWorker")?i="RASTERIZER":n.worklets.has(e)?i="AUCTION_WORKLET":t.name?.startsWith("ThreadPool")&&(i="THREAD_POOL"),i}function Gt(e,t){const n=[];if(e.processes.size)for(const[i,s]of e.processes)for(const[a,r]of s.threads){if(!r.tree)continue;const o=$t(i,r,t);n.push({name:r.name,pid:i,tid:a,processIsOnMainFrame:s.isOnMainFrame,entries:r.entries,tree:r.tree,type:o,entryToNode:e.entryToNode})}return n}const Vt=new WeakMap;var Xt=Object.freeze({__proto__:null,threadsInRenderer:Gt,threadsInTrace:function(e){const t=Vt.get(e);if(t)return t;const n=Gt(e.Renderer,e.AuctionWorklets);if(n.length)return Vt.set(e,n),n;const i=[];if(e.Samples.profilesInProcess.size)for(const[t,n]of e.Samples.profilesInProcess)for(const[s,a]of n)a.profileTree&&i.push({pid:t,tid:s,name:null,entries:a.profileCalls,processIsOnMainFrame:!1,tree:a.profileTree,type:"CPU_PROFILE",entryToNode:e.Samples.entryToNode});return Vt.set(e,i),i}});const Yt=[];let Kt=null;class Qt{#e=[];#t={};#n=new sn;#i=null;#s=!1;#a=!1;#r=null;#o=null;#c=null;#l=null;#d=null;#u=null;#f=null;#m=null;#g=null;#p;constructor(e,t,n,i,s){const a=Gt(t,n).filter((e=>"MAIN_THREAD"===e.type&&e.processIsOnMainFrame)).map((e=>({tid:e.tid,pid:e.pid,startTime:e.entries[0].ts})));this.#p=s,this.#h(e,a,i.mainFrameId)}framesById(){return this.#t}frames(){return this.#e}#v(e,t){this.#i||this.#E(e,t),this.#l=e,this.#n.addFrameIfNotExists(t,e,!1,!1)}#T(e,t,n){this.#i||this.#E(e,t),this.#n.addFrameIfNotExists(t,e,!0,n),this.#n.setDropped(t,!0),this.#n.setPartial(t,n)}#y(e,t){if(this.#i){if(this.#s||!this.#a){if(this.#d){(this.#o?this.#o.triggerTime:this.#l||this.#d)>this.#i.startTime&&(this.#i.idle=!0,this.#l=null),this.#d=null}const e=this.#n.processPendingBeginFramesOnDrawFrame(t);for(const n of e){const e=this.#i.idle;this.#E(n.startTime,t),e&&this.#o&&this.#M(),n.isDropped&&(this.#i.dropped=!0),n.isPartial&&(this.#i.isPartial=!0)}}this.#s=!1}else this.#E(e,t)}#I(){this.#i&&this.#o&&!this.#d&&this.#M()}#w(){this.#i&&(this.#a=!0)}#S(){this.#c&&(this.#o=this.#c,this.#c=null,this.#a=!1,this.#s=!0)}#F(e){this.#r=e}#P(e,t){t&&(this.#d=e)}#E(e,n){this.#i&&this.#_(this.#i,e),this.#i=new Zt(n,e,t.Timing.Micro(e-ge().traceBounds.min))}#_(e,t){e.setLayerTree(this.#r),e.setEndTime(t),this.#r&&(this.#r.paints=e.paints);const n=this.#e[this.#e.length-1];this.#e.length&&n&&(e.startTime!==n.endTime||e.startTime>e.endTime)&&console.assert(!1,`Inconsistent frame time for frame ${this.#e.length} (${e.startTime} - ${e.endTime})`);const i=this.#e.push(e);e.setIndex(i-1),"number"==typeof e.mainFrameId&&(this.#t[e.mainFrameId]=e)}#M(){this.#o&&this.#i&&(this.#i.paints=this.#o.paints,this.#i.mainFrameId=this.#o.mainFrameId,this.#o=null)}#h(e,t,n){let i=0;this.#g=t.length&&t[0].tid||null,this.#m=t.length&&t[0].pid||null;for(let s=0;s<e.length;++s){for(;i+1<t.length&&t[i+1].startTime<=e[s].ts;)this.#g=t[++i].tid,this.#m=t[i].pid;this.#R(e[s],n)}this.#g=null,this.#m=null}#R(e,n){t.Events.isSetLayerId(e)&&e.args.data.frame===n?this.#f=e.args.data.layerTreeId:t.Events.isLayerTreeHostImplSnapshot(e)&&Number(e.id)===this.#f?this.#F({entry:e,paints:[]}):(function(e){return t.Events.isSetLayerId(e)||t.Events.isBeginFrame(e)||t.Events.isDroppedFrame(e)||t.Events.isRequestMainThreadFrame(e)||t.Events.isBeginMainThreadFrame(e)||t.Events.isNeedsBeginFrameChanged(e)||t.Events.isCommit(e)||t.Events.isCompositeLayers(e)||t.Events.isActivateLayerTree(e)||t.Events.isDrawFrame(e)}(e)&&this.#C(e),e.tid===this.#g&&e.pid===this.#m&&this.#L(e))}#C(e){e.args.layerTreeId===this.#f&&(t.Events.isBeginFrame(e)?this.#v(e.ts,e.args.frameSeqId):t.Events.isDrawFrame(e)?this.#y(e.ts,e.args.frameSeqId):t.Events.isActivateLayerTree(e)?this.#I():t.Events.isRequestMainThreadFrame(e)?this.#w():t.Events.isNeedsBeginFrameChanged(e)?this.#P(e.ts,e.args.data&&Boolean(e.args.data.needsBeginFrame)):t.Events.isDroppedFrame(e)&&this.#T(e.ts,e.args.frameSeqId,Boolean(e.args.hasPartialUpdate)))}#L(e){if(function(e){return"RunTask"===e.name&&e.cat.includes("disabled-by-default-devtools.timeline")}(e)&&(this.#u=e.ts),!this.#c&&Jt.has(e.name)&&(this.#c=new tn(this.#u||e.ts)),this.#c){if(t.Events.isBeginMainThreadFrame(e)&&e.args.data.frameId&&(this.#c.mainFrameId=e.args.data.frameId),t.Events.isPaint(e)){const t=this.#p.paintsToSnapshots.get(e);t&&this.#c.paints.push(new en(e,t))}(t.Events.isCompositeLayers(e)||t.Events.isCommit(e))&&e.args.layerTreeId===this.#f&&this.#S()}}}const Jt=new Set(["ScheduleStyleRecalculation","InvalidateLayout","BeginMainThreadFrame","ScrollLayer"]);class Zt{cat="devtools.legacy_frame";name="frame";ph="X";ts;pid=t.Events.ProcessID(-1);tid=t.Events.ThreadID(-1);index=-1;startTime;startTimeOffset;endTime;duration;idle;dropped;isPartial;layerTree;paints;mainFrameId;seqId;constructor(e,n,i){this.seqId=e,this.startTime=n,this.ts=n,this.startTimeOffset=i,this.endTime=this.startTime,this.duration=t.Timing.Micro(0),this.idle=!1,this.dropped=!1,this.isPartial=!1,this.layerTree=null,this.paints=[],this.mainFrameId=void 0}setIndex(e){this.index=e}setEndTime(e){this.endTime=e,this.duration=t.Timing.Micro(this.endTime-this.startTime)}setLayerTree(e){this.layerTree=e}get dur(){return this.duration}}class en{#k;#b;constructor(e,t){this.#k=e,this.#b=t}layerId(){return this.#k.args.data.layerId}event(){return this.#k}picture(){const e=this.#b.args.snapshot.params?.layer_rect,t=this.#b.args.snapshot.skp64;return e&&t?{rect:e,serializedPicture:t}:null}}class tn{paints;mainFrameId;triggerTime;constructor(e){this.paints=[],this.mainFrameId=void 0,this.triggerTime=e}}class nn{seqId;startTime;isDropped;isPartial;constructor(e,t,n,i){this.seqId=e,this.startTime=t,this.isDropped=n,this.isPartial=i}}class sn{queueFrames=[];mapFrames={};addFrameIfNotExists(e,t,n,i){e in this.mapFrames||(this.mapFrames[e]=new nn(e,t,n,i),this.queueFrames.push(e))}setDropped(e,t){e in this.mapFrames&&(this.mapFrames[e].isDropped=t)}setPartial(e,t){e in this.mapFrames&&(this.mapFrames[e].isPartial=t)}processPendingBeginFramesOnDrawFrame(e){const t=[];if(e in this.mapFrames){for(;this.queueFrames[0]!==e;){const e=this.queueFrames[0];this.mapFrames[e].isDropped&&t.push(this.mapFrames[e]),delete this.mapFrames[e],this.queueFrames.shift()}t.push(this.mapFrames[e]),delete this.mapFrames[e],this.queueFrames.shift()}return t}}var an=Object.freeze({__proto__:null,LayerPaintEvent:en,PendingFrame:tn,TimelineFrameBeginFrameQueue:sn,TimelineFrameModel:Qt,data:function(){return{frames:Kt?Array.from(Kt.frames()):[],framesById:Kt?{...Kt.framesById()}:{}}},deps:function(){return["Meta","Renderer","AuctionWorklets","LayerTree"]},finalize:async function(){n.Trace.sortTraceEventsInPlace(Yt);const e=new Qt(Yt,Xe(),j(),ge(),jt());Kt=e},framesWithinWindow:function(e,t,n){const s=i.ArrayUtilities.lowerBound(e,t||0,((e,t)=>e-t.endTime)),a=i.ArrayUtilities.lowerBound(e,n||1/0,((e,t)=>e-t.startTime));return e.slice(s,a)},handleEvent:function(e){Yt.push(e)},reset:function(){Yt.length=0}});const rn=new Map;let on=[];var cn=Object.freeze({__proto__:null,data:function(){return{mainGPUThreadTasks:on}},deps:function(){return["Meta"]},finalize:async function(){const{gpuProcessId:e,gpuThreadId:t}=ge(),n=rn.get(e);n&&t&&(on=n.get(t)||[])},handleEvent:function(e){t.Events.isGPUTask(e)&&n.Trace.addEventToProcessThread(e,rn)},reset:function(){rn.clear(),on=[]}});const ln=new Map,dn=new Map,un=new Map,fn=new Map,mn=new Map;var gn=Object.freeze({__proto__:null,data:function(){return{paintImageByDrawLazyPixelRef:un,paintImageForEvent:fn,paintImageEventForUrl:mn}},finalize:async function(){},handleEvent:function(e){if(t.Events.isPaintImage(e)){const t=ln.get(e.pid)||new Map,n=t.get(e.tid)||[];if(n.push(e),t.set(e.tid,n),ln.set(e.pid,t),e.args.data.url){i.MapUtilities.getWithDefault(mn,e.args.data.url,(()=>[])).push(e)}}else{if(t.Events.isDecodeLazyPixelRef(e)&&void 0!==e.args?.LazyPixelRef){const t=dn.get(e.pid)||new Map,n=t.get(e.tid)||[];n.push(e),t.set(e.tid,n),dn.set(e.pid,t)}if(t.Events.isDrawLazyPixelRef(e)&&void 0!==e.args?.LazyPixelRef){const t=ln.get(e.pid)?.get(e.tid)?.at(-1);if(!t)return;un.set(e.args.LazyPixelRef,t)}else if(t.Events.isDecodeImage(e)){const t=ln.get(e.pid)?.get(e.tid)?.at(-1);if(t)return void fn.set(e,t);const n=dn.get(e.pid)?.get(e.tid)?.at(-1);if(void 0===n?.args?.LazyPixelRef)return;const i=un.get(n.args.LazyPixelRef);if(!i)return;fn.set(e,i)}}},reset:function(){ln.clear(),dn.clear(),un.clear(),fn.clear(),mn.clear()}});const pn=new Map,hn=new Map,vn=new Map,En=new Map,Tn=new Map,yn=new Map,Mn=new Map;function In(e){En.set(e.event,e.initiator);const t=Tn.get(e.initiator)||[];t.push(e.event),Tn.set(e.initiator,t)}var wn=Object.freeze({__proto__:null,data:function(){return{eventToInitiator:En,initiatorToEvents:Tn}},deps:function(){return["Flows","AsyncJSCalls"]},finalize:async function(){!function(){const e=N().flows;for(let t=0;t<e.length;t++){const n=e[t];for(let e=0;e<n.length-1;e++)In({event:n[e+1],initiator:n[e]})}}(),function(){const e=ft().schedulerToRunEntryPoints.entries();for(const[t,n]of e)for(const e of n)In({event:e,initiator:t})}()},handleEvent:function(e){if(t.Events.isScheduleStyleRecalculation(e))pn.set(e.args.data.frame,e);else if(t.Events.isUpdateLayoutTree(e)){if(e.args.beginData){vn.set(e.args.beginData.frame,e);const t=pn.get(e.args.beginData.frame);t&&In({event:e,initiator:t})}}else if(t.Events.isInvalidateLayout(e)){let t=e;if(!hn.has(e.args.data.frame)){const i=vn.get(e.args.data.frame);if(i){const{endTime:s}=n.Timing.eventTimingsMicroSeconds(i),a=En.get(i);a&&s&&s>e.ts&&(t=a)}}hn.set(e.args.data.frame,t)}else if(t.Events.isLayout(e)){const t=hn.get(e.args.beginData.frame);t&&In({event:e,initiator:t}),hn.delete(e.args.beginData.frame)}else if(t.Events.isWebSocketCreate(e))yn.set(e.args.data.identifier,e);else if(t.Events.isWebSocketInfo(e)||t.Events.isWebSocketTransfer(e)){const t=yn.get(e.args.data.identifier);t&&In({event:e,initiator:t})}else if(t.Events.isSchedulePostTaskCallback(e))Mn.set(e.args.data.taskId,e);else if(t.Events.isRunPostTaskCallback(e)||t.Events.isAbortPostTaskCallback(e)){const t=Mn.get(e.args.data.taskId);t&&In({event:e,initiator:t})}},reset:function(){pn.clear(),hn.clear(),vn.clear(),En.clear(),Tn.clear(),yn.clear(),Mn.clear()}});const Sn=new Map,Fn=new Map;let Pn=null,_n=!1;const Rn=[];let Cn=null;function Ln(e,t){const n=Sn.get(e)||[];n.push(t),null!==Cn&&n.length>Cn&&n.shift(),Sn.set(e,n);const i=Fn.get(e)??0;Fn.set(e,i+1)}var kn=Object.freeze({__proto__:null,data:function(){return{invalidationsForEvent:Sn,invalidationCountForEvent:Fn}},finalize:async function(){},handleEvent:function(e){if(0!==Cn)if(t.Events.isUpdateLayoutTree(e)){Pn=e;for(const n of Rn){if(t.Events.isLayoutInvalidationTracking(n))continue;const i=Pn.args.beginData?.frame;i&&n.args.data.frame===i&&Ln(e,n)}}else if(t.Events.isInvalidationTracking(e)){if(_n&&(Rn.length=0,Pn=null,_n=!1),Pn&&(t.Events.isScheduleStyleInvalidationTracking(e)||t.Events.isStyleRecalcInvalidationTracking(e)||t.Events.isStyleInvalidatorInvalidationTracking(e))){const t=Pn.ts+(Pn.dur||0);e.ts>=Pn.ts&&e.ts<=t&&Pn.args.beginData?.frame===e.args.data.frame&&Ln(Pn,e)}Rn.push(e)}else if(t.Events.isPaint(e))_n=!0;else if(t.Events.isLayout(e)){const n=e.args.beginData.frame;for(const i of Rn)t.Events.isLayoutInvalidationTracking(i)&&i.args.data.frame===n&&Ln(e,i)}},handleUserConfig:function(e){Cn=e.maxInvalidationEventsPerEvent},reset:function(){Sn.clear(),Fn.clear(),Pn=null,Rn.length=0,_n=!1,Cn=null}});const bn=new Map;let Dn=[];let Nn=[];const Bn=new Set;function Wn(e,s){const a=e.args.data?.navigationId;if(!a)throw new Error("Navigation event unexpectedly had no navigation ID.");const r=On(s),{rendererProcessesByFrame:o}=ge(),c=o.get(r);if(!c)return;if(c.get(s.pid)&&!t.Events.isNavigationStart(s))if(t.Events.isFirstContentfulPaint(s)){const n=t.Timing.Micro(s.ts-e.ts);Un(r,a,{event:s,metricName:"FCP",classification:zn(n),navigation:e,timing:n})}else if(t.Events.isFirstPaint(s)){Un(r,a,{event:s,metricName:"FP",classification:"unclassified",navigation:e,timing:t.Timing.Micro(s.ts-e.ts)})}else if(t.Events.isMarkDOMContent(s)){const n=t.Timing.Micro(s.ts-e.ts);Un(r,a,{event:s,metricName:"DCL",classification:"unclassified",navigation:e,timing:n})}else if(t.Events.isInteractiveTime(s)){const i=t.Timing.Micro(s.ts-e.ts);Un(r,a,{event:s,metricName:"TTI",classification:An(i),navigation:e,timing:i});const o=n.Timing.milliToMicro(t.Timing.Milli(s.args.args.total_blocking_time_ms));Un(r,a,{event:s,metricName:"TBT",classification:Hn(o),navigation:e,timing:o})}else if(t.Events.isMarkLoad(s)){Un(r,a,{event:s,metricName:"L",classification:"unclassified",navigation:e,timing:t.Timing.Micro(s.ts-e.ts)})}else if(t.Events.isLargestContentfulPaintCandidate(s)){const n=s.args.data?.candidateIndex;if(!n)throw new Error("Largest Contenful Paint unexpectedly had no candidateIndex.");const o=t.Timing.Micro(s.ts-e.ts),c={event:s,metricName:"LCP",classification:qn(o),navigation:e,timing:o},l=i.MapUtilities.getWithDefault(bn,r,(()=>new Map)),d=i.MapUtilities.getWithDefault(l,a,(()=>new Map)).get("LCP");if(void 0===d)return Bn.add(c.event),void Un(r,a,c);const u=d.event;if(!t.Events.isLargestContentfulPaintCandidate(u))return;const f=u.args.data?.candidateIndex;if(!f)return;f<n&&(Bn.delete(u),Bn.add(c.event),Un(r,a,c))}else if(!t.Events.isLayoutShift(s))return i.assertNever(s,`Unexpected event type: ${s}`)}function Un(e,t,n){const s=i.MapUtilities.getWithDefault(bn,e,(()=>new Map)),a=i.MapUtilities.getWithDefault(s,t,(()=>new Map));a.delete(n.metricName),a.set(n.metricName,n)}function On(e){if(t.Events.isFirstContentfulPaint(e)||t.Events.isInteractiveTime(e)||t.Events.isLargestContentfulPaintCandidate(e)||t.Events.isNavigationStart(e)||t.Events.isLayoutShift(e)||t.Events.isFirstPaint(e))return e.args.frame;if(t.Events.isMarkDOMContent(e)||t.Events.isMarkLoad(e)){const t=e.args.data?.frame;if(!t)throw new Error("MarkDOMContent unexpectedly had no frame ID.");return t}i.assertNever(e,`Unexpected event type: ${e}`)}function xn(e){if(t.Events.isFirstContentfulPaint(e)||t.Events.isLargestContentfulPaintCandidate(e)||t.Events.isFirstPaint(e)){const t=e.args.data?.navigationId;if(!t)throw new Error("Trace event unexpectedly had no navigation ID.");const{navigationsByNavigationId:n}=ge(),i=n.get(t);return i||null}if(t.Events.isMarkDOMContent(e)||t.Events.isInteractiveTime(e)||t.Events.isLayoutShift(e)||t.Events.isMarkLoad(e)){const t=On(e),{navigationsByFrameId:i}=ge();return n.Trace.getNavigationForTraceEvent(e,t,i)}return t.Events.isNavigationStart(e)?null:i.assertNever(e,`Unexpected event type: ${e}`)}function zn(e){const i=n.Timing.secondsToMicro(t.Timing.Seconds(1.8));let s="bad";return e<=n.Timing.secondsToMicro(t.Timing.Seconds(3))&&(s="ok"),e<=i&&(s="good"),s}function An(e){const i=n.Timing.secondsToMicro(t.Timing.Seconds(3.8));let s="bad";return e<=n.Timing.secondsToMicro(t.Timing.Seconds(7.3))&&(s="ok"),e<=i&&(s="good"),s}function qn(e){const i=n.Timing.secondsToMicro(t.Timing.Seconds(2.5));let s="bad";return e<=n.Timing.secondsToMicro(t.Timing.Seconds(4))&&(s="ok"),e<=i&&(s="good"),s}function jn(e){return"unclassified"}function Hn(e){const i=n.Timing.milliToMicro(t.Timing.Milli(200));let s="bad";return e<=n.Timing.milliToMicro(t.Timing.Milli(600))&&(s="ok"),e<=i&&(s="good"),s}function $n(){return{metricScoresByFrameId:bn,allMarkerEvents:Dn}}var Gn=Object.freeze({__proto__:null,data:$n,deps:function(){return["Meta"]},finalize:async function(){Nn.sort(((e,t)=>e.ts-t.ts));for(const e of Nn){const t=xn(e);t&&Wn(t,e)}const e=function(){const e=[],t=[...bn.values()].flatMap((e=>[...e.values()]));for(let n=0;n<t.length;n++){const i=t[n].get("LCP");i?.event&&e.push(i.event)}return e}(),n=ge().mainFrameId,i=[...e,...Nn.filter((e=>!t.Events.isLargestContentfulPaintCandidate(e)))].filter(t.Events.isMarkerEvent);Dn=i.filter((e=>On(e)===n)).sort(((e,t)=>e.ts-t.ts))},getFrameIdForPageLoadEvent:On,handleEvent:function(e){t.Events.eventIsPageLoadEvent(e)&&Nn.push(e)},metricIsLCP:function(e){return"LCP"===e.metricName},reset:function(){bn.clear(),Nn=[],Dn=[],Bn.clear()},scoreClassificationForDOMContentLoaded:jn,scoreClassificationForFirstContentfulPaint:zn,scoreClassificationForLargestContentfulPaint:qn,scoreClassificationForTimeToInteractive:An,scoreClassificationForTotalBlockingTime:Hn});const Vn=new Map,Xn=new Map;var Yn=Object.freeze({__proto__:null,data:function(){return{lcpRequestByNavigationId:Xn}},deps:function(){return["Meta","NetworkRequests","PageLoadMetrics"]},finalize:async function(){const e=Re().byTime,{traceBounds:n,navigationsByNavigationId:i}=ge(),s=$n().metricScoresByFrameId;for(const[a,r]of i){const i=s.get(r.args.frame)?.get(a)?.get("LCP"),o=i?.event;if(!o||!t.Events.isLargestContentfulPaintCandidate(o))continue;const c=o.args.data?.nodeId;if(!c)continue;const l=Vn.get(o.pid)?.get(c),d=l?.args.data?.imageUrl;if(!d)continue;const u=r?.ts??n.min,f=l.ts;let m;for(const t of e)if(!(t.ts<u)){if(t.ts>=f)break;if(t.args.data.url===d||t.args.data.redirects.some((e=>e.url===d))){m=t;break}}m&&Xn.set(a,m)}},handleEvent:function(e){if(!t.Events.isLargestImagePaintCandidate(e)||!e.args.data)return;i.MapUtilities.getWithDefault(Vn,e.pid,(()=>new Map)).set(e.args.data.DOMNodeId,e)},reset:function(){Vn.clear()}});const Kn=new Map;var Qn=Object.freeze({__proto__:null,data:function(){return Kn},finalize:async function(){},handleEvent:function(e){t.Events.isLargestTextPaintCandidate(e)&&e.args.data&&Kn.set(e.args.data.DOMNodeId,e)},reset:function(){Kn.clear()}});const Jn=[],Zn=[],ei=[],ti=[];let ni={};function ii(){return{legacySyntheticScreenshots:ti.length?ti:null,screenshots:ei.length?ei:null}}var si=Object.freeze({__proto__:null,data:ii,deps:function(){return["Meta"]},finalize:async function(){const e=n.Trace.createMatchedSortedSyntheticEvents(Jn);ni=Object.fromEntries(e.map((e=>[e.args.data.beginEvent.args.chrome_frame_reporter.frame_sequence,t.Timing.Micro(e.ts+e.dur)])));for(const e of Zn){const{cat:t,name:i,ph:s,pid:a,tid:r}=e,o=n.SyntheticEvents.SyntheticEventsManager.registerSyntheticEvent({rawSourceEvent:e,cat:t,name:i,ph:s,pid:a,tid:r,ts:e.ts,args:{dataUri:`data:image/jpg;base64,${e.args.snapshot}`}});ti.push(o)}},handleEvent:function(e){t.Events.isLegacyScreenshot(e)?Zn.push(e):t.Events.isScreenshot(e)?ei.push(e):t.Events.isPipelineReporter(e)&&Jn.push(e)},reset:function(){Jn.length=0,Zn.length=0,ti.length=0,ei.length=0,ni={}},screenshotImageDataUri:function(e){return t.Events.isLegacySyntheticScreenshot(e)?e.args.dataUri:`data:image/jpg;base64,${e.args.snapshot}`}});const ai=n.Timing.milliToMicro(t.Timing.Milli(5e3)),ri=n.Timing.milliToMicro(t.Timing.Milli(1e3)),oi=[],ci=[],li=[],di=[],ui=[],fi=[],mi=[],gi=[],pi=new Set,hi=[],vi=[];let Ei=0,Ti=-1;const yi=[],Mi=new Map,Ii=[];function wi(e){return{min:e,max:e,range:t.Timing.Micro(0)}}function Si(e,n){e.max=n,e.range=t.Timing.Micro(e.max-e.min)}function Fi(e){const t=ii();if(t.screenshots){const i=n.Trace.findPreviousEventBeforeTimestamp(t.screenshots,e);return{before:i,after:i?t.screenshots[t.screenshots.indexOf(i)+1]:null}}if(t.legacySyntheticScreenshots){const i=n.Trace.findPreviousEventBeforeTimestamp(t.legacySyntheticScreenshots,e);return{before:i,after:i?t.legacySyntheticScreenshots[t.legacySyntheticScreenshots.indexOf(i)+1]:null}}return{before:null,after:null}}var Pi=Object.freeze({__proto__:null,MAX_CLUSTER_DURATION:ai,MAX_SHIFT_TIME_DELTA:ri,data:function(){return{clusters:yi,sessionMaxScore:Ei,clsWindowID:Ti,prePaintEvents:hi,layoutInvalidationEvents:ci,scheduleStyleInvalidationEvents:li,styleRecalcInvalidationEvents:[],renderFrameImplCreateChildFrameEvents:ui,domLoadingEvents:fi,layoutImageUnsizedEvents:mi,remoteFonts:gi,scoreRecords:Ii,backendNodeIds:[...pi],clustersByNavigationId:new Map(Mi),paintImageEvents:vi}},deps:function(){return["Screenshots","Meta"]},finalize:async function(){oi.sort(((e,t)=>e.ts-t.ts)),hi.sort(((e,t)=>e.ts-t.ts)),ci.sort(((e,t)=>e.ts-t.ts)),ui.sort(((e,t)=>e.ts-t.ts)),fi.sort(((e,t)=>e.ts-t.ts)),mi.sort(((e,t)=>e.ts-t.ts)),gi.sort(((e,t)=>e.beginRemoteFontLoadEvent.ts-t.beginRemoteFontLoadEvent.ts)),vi.sort(((e,t)=>e.ts-t.ts)),await async function(){const{navigationsByFrameId:e,mainFrameId:s,traceBounds:a}=ge(),r=e.get(s)||[];if(0===oi.length)return;let o=oi[0].ts,c=oi[0].ts,l=null;for(const e of oi){const s=e.ts-o>ai,a=e.ts-c>ri,d=i.ArrayUtilities.nearestIndexFromEnd(r,(t=>t.ts<e.ts)),u=l!==d&&null!==d;if(s||a||u||!yi.length){const n=e.ts,i=s?o+ai:1/0,l=a?c+ri:1/0,f=u?r[d].ts:1/0,m=Math.min(i,l,f);if(yi.length>0){Si(yi[yi.length-1].clusterWindow,t.Timing.Micro(m))}const g=null===d?t.Events.NO_NAVIGATION:r[d].args.data?.navigationId;yi.push({name:"SyntheticLayoutShiftCluster",events:[],clusterWindow:wi(n),clusterCumulativeScore:0,scoreWindows:{good:wi(n)},navigationId:g,ts:e.ts,pid:e.pid,tid:e.tid,ph:"X",cat:"",dur:t.Timing.Micro(-1)}),o=n}const f=yi[yi.length-1],m=null!==d?t.Timing.Micro(e.ts-r[d].ts):void 0;if(f.clusterCumulativeScore+=e.args.data?e.args.data.weighted_score_delta:0,!e.args.data)continue;const g=n.SyntheticEvents.SyntheticEventsManager.registerSyntheticEvent({rawSourceEvent:e,...e,name:"SyntheticLayoutShift",args:{frame:e.args.frame,data:{...e.args.data,rawEvent:e,navigationId:f.navigationId??void 0}},parsedData:{timeFromNavigation:m,screenshots:Fi(e.ts),cumulativeWeightedScoreInWindow:f.clusterCumulativeScore,sessionWindowData:{cumulativeWindowScore:0,id:yi.length}}});f.events.push(g),Si(f.clusterWindow,e.ts),c=e.ts,l=d}for(const e of yi){let s=0,o=-1;if(e===yi[yi.length-1]){const n=ai+e.clusterWindow.min,s=e.clusterWindow.max+ri,o=i.ArrayUtilities.nearestIndexFromBeginning(r,(t=>t.ts>e.clusterWindow.max)),c=o?r[o].ts:1/0,l=Math.min(n,s,a.max,c);Si(e.clusterWindow,t.Timing.Micro(l))}let c=0,l=null;for(const n of e.events){s+=n.args.data?n.args.data.weighted_score_delta:0,o=n.parsedData.sessionWindowData.id;const i=n.ts;n.parsedData.sessionWindowData.cumulativeWindowScore=e.clusterCumulativeScore,s<.1?Si(e.scoreWindows.good,i):s>=.1&&s<.25?(e.scoreWindows.needsImprovement||(Si(e.scoreWindows.good,t.Timing.Micro(i-1)),e.scoreWindows.needsImprovement=wi(i)),Si(e.scoreWindows.needsImprovement,i)):s>=.25&&(e.scoreWindows.bad||(e.scoreWindows.needsImprovement?Si(e.scoreWindows.needsImprovement,t.Timing.Micro(i-1)):Si(e.scoreWindows.good,t.Timing.Micro(i-1)),e.scoreWindows.bad=wi(n.ts)),Si(e.scoreWindows.bad,i)),e.scoreWindows.bad?Si(e.scoreWindows.bad,e.clusterWindow.max):e.scoreWindows.needsImprovement?Si(e.scoreWindows.needsImprovement,e.clusterWindow.max):Si(e.scoreWindows.good,e.clusterWindow.max);const a=n.args.data?.weighted_score_delta;void 0!==a&&a>c&&(c=a,l=n)}l&&(e.worstShiftEvent=l),e.ts=e.events[0].ts;const d=n.Timing.eventTimingsMicroSeconds(e.events[e.events.length-1]);if(e.dur=t.Timing.Micro(d.endTime-e.events[0].ts+ri),s>Ei&&(Ti=o,Ei=s),e.navigationId){i.MapUtilities.getWithDefault(Mi,e.navigationId,(()=>[])).push(e)}}}(),function(){const{traceBounds:e}=ge();Ii.push({ts:e.min,score:0});for(const e of yi){let t=0;e.events[0].args.data&&Ii.push({ts:e.clusterWindow.min,score:e.events[0].args.data.weighted_score_delta});for(let n=0;n<e.events.length;n++){const i=e.events[n];i.args.data&&(t+=i.args.data.weighted_score_delta,Ii.push({ts:i.ts,score:t}))}Ii.push({ts:e.clusterWindow.max,score:0})}}(),function(){pi.clear();for(const e of oi)if(e.args.data?.impacted_nodes)for(const t of e.args.data.impacted_nodes)pi.add(t.node_id);for(const e of ci)e.args.data?.nodeId&&pi.add(e.args.data.nodeId);for(const e of li)e.args.data?.nodeId&&pi.add(e.args.data.nodeId)}()},handleEvent:function(e){if(!t.Events.isLayoutShift(e)||e.args.data?.had_recent_input)if(t.Events.isLayoutInvalidationTracking(e))ci.push(e);else if(t.Events.isScheduleStyleInvalidationTracking(e)&&li.push(e),t.Events.isStyleRecalcInvalidationTracking(e)&&di.push(e),t.Events.isPrePaint(e))hi.push(e);else{if(t.Events.isRenderFrameImplCreateChildFrame(e)&&ui.push(e),t.Events.isDomLoading(e)&&fi.push(e),t.Events.isLayoutImageUnsized(e)&&mi.push(e),t.Events.isBeginRemoteFontLoad(e)&&gi.push({display:e.args.display,url:e.args.url,beginRemoteFontLoadEvent:e}),t.Events.isRemoteFontLoaded(e))for(const t of gi)t.url===e.args.url&&(t.name=e.args.name);t.Events.isPaintImage(e)&&vi.push(e)}else oi.push(e)},reset:function(){oi.length=0,ci.length=0,li.length=0,di.length=0,hi.length=0,vi.length=0,ui.length=0,mi.length=0,fi.length=0,gi.length=0,pi.clear(),yi.length=0,Ei=0,Ii.length=0,Ti=-1,Mi.clear()},scoreClassificationForLayoutShift:function(e){let t="good";return e>=.1&&(t="ok"),e>=.25&&(t="bad"),t}});const _i=new Map;var Ri=Object.freeze({__proto__:null,data:function(){return{updateCountersByProcess:_i}},finalize:async function(){},handleEvent:function(e){if(t.Events.isUpdateCounters(e)){const t=i.MapUtilities.getWithDefault(_i,e.pid,(()=>[]));t.push(e),_i.set(e.pid,t)}},reset:function(){_i.clear()}});const Ci=new Map;var Li=Object.freeze({__proto__:null,data:function(){return{frames:Ci}},finalize:async function(){},handleEvent:function(e){if(t.Events.isTracingStartedInBrowser(e))for(const t of e.args.data?.frames??[])Ci.set(t.frame,t);else if(t.Events.isCommitLoad(e)){const t=e.args.data;if(!t)return;const n=Ci.get(t.frame);if(!n)return;Ci.set(t.frame,{...n,url:t.url||n.url,name:t.name||t.name})}},reset:function(){Ci.clear()}});const ki=new Map;function bi(e,t){for(const n of e.frameByProcessId?.values()){const e=n.get(t);if(e)return e}return null}function Di(e,t){return e.find((e=>e.args.data.url===t.url))??null}function Ni(e){if(!e.sourceMap)throw new Error("expected source map");const t=e.sourceMap,n=e.content??"",i=n.length,s=n.split("\n"),a={},r=i;let o=r;const c=function(e){const t=new Map,n=e.mappings();for(let e=0;e<n.length-1;e++){const i=n[e],s=n[e+1];i.lineNumber===s.lineNumber&&t.set(i,s.columnNumber)}return t}(e.sourceMap);for(const e of t.mappings()){const n=e.sourceURL,i=e.lineNumber,r=e.columnNumber,l=c.get(e);if(!n)continue;const d=s[i];if(null==d){return{errorMessage:`${t.url()} mapping for line out of bounds: ${i+1}`}}if(r>d.length){return{errorMessage:`${t.url()} mapping for column out of bounds: ${i+1}:${r}`}}let u=0;if(void 0!==l){if(l>d.length){return{errorMessage:`${t.url()} mapping for last column out of bounds: ${i+1}:${l}`}}u=l-r}else u=d.length-r+1;a[n]=(a[n]||0)+u,o-=u}return{files:a,unmappedBytes:o,totalBytes:r}}function Bi(e,t){if(!e)return;const n=e.startsWith("data:");if(!t.isFreshRecording&&t.metadata?.sourceMaps&&!n){const n=t.metadata.sourceMaps.find((t=>t.sourceMapUrl===e));if(n)return n.sourceMap}}var Wi=Object.freeze({__proto__:null,data:function(){return{scripts:[...ki.values()]}},deps:function(){return["Meta","NetworkRequests"]},finalize:async function(e){const t=[...Re().byId.values()];for(const e of ki.values())e.request=Di(t,e)??void 0;if(!e.resolveSourceMap)return;const n=ge(),i=[];for(const t of ki.values()){if(!t.frame||!t.url||!t.sourceMapUrl)continue;const s=bi(n,t.frame)?.url;if(!s)continue;let a=t.url;t.sourceUrl&&(a=r.ParsedURL.ParsedURL.completeURL(s,t.sourceUrl)??t.sourceUrl);const o=r.ParsedURL.ParsedURL.completeURL(a,t.sourceMapUrl);if(!o)continue;t.sourceMapUrl=o;const c={scriptId:t.scriptId,scriptUrl:a,sourceMapUrl:o,frame:t.frame,cachedRawSourceMap:Bi(o,e)},l=e.resolveSourceMap(c).then((e=>{e&&(t.sourceMap=e)}));i.push(l)}await Promise.all(i)},getScriptGeneratedSizes:function(e){return e.sourceMap&&!e.sizes&&(e.sizes=Ni(e)),e.sizes??null},handleEvent:function(e){const n=(e,t)=>{const n=String(t),s=`${e}.${n}`;return i.MapUtilities.getWithDefault(ki,s,(()=>({isolate:e,scriptId:n,frame:"",ts:0})))};if(t.Events.isTargetRundownEvent(e)&&e.args.data){const{isolate:t,scriptId:i,frame:s}=e.args.data,a=n(t,i);return a.frame=s,void(a.ts=e.ts)}if(t.Events.isV8SourceRundownEvent(e)){const{isolate:t,scriptId:i,url:s,sourceUrl:a,sourceMapUrl:r,startLine:o,startColumn:c}=e.args.data,l=n(t,i);return l.url=s,a&&(l.sourceUrl=a),r&&(l.sourceMapUrl=r),void(l.inline=Boolean(o||c))}if(t.Events.isV8SourceRundownSourcesScriptCatchupEvent(e)){const{isolate:t,scriptId:i,sourceText:s}=e.args.data;n(t,i).content=s}else if(t.Events.isV8SourceRundownSourcesLargeScriptCatchupEvent(e)){const{isolate:t,scriptId:i,sourceText:s}=e.args.data,a=n(t,i);a.content=(a.content??"")+s}else;},reset:function(){ki.clear()}});let Ui=null;const Oi=new Map;var xi=Object.freeze({__proto__:null,data:function(){return{dataForUpdateLayoutEvent:Oi}},finalize:async function(){},handleEvent:function(e){t.Events.isSelectorStats(e)&&Ui&&e.args.selector_stats?Oi.set(Ui,{timings:e.args.selector_stats.selector_timings}):t.Events.isUpdateLayoutTree(e)&&(Ui=e)},reset:function(){Ui=null,Oi.clear()}});const zi=[],Ai=[],qi=[],ji=n.Timing.milliToMicro(t.Timing.Milli(200)),Hi=ji,$i=n.Timing.milliToMicro(t.Timing.Milli(500));let Gi=null;const Vi=[],Xi=[],Yi=new Map,Ki=[];const Qi=new Set(["pointerdown","touchstart","pointerup","touchend","mousedown","mouseup","click"]),Ji=new Set(["keydown","keypress","keyup"]);function Zi(e){return Qi.has(e.type)?"POINTER":Ji.has(e.type)?"KEYBOARD":"OTHER"}function es(e){const n={POINTER:new Map,KEYBOARD:new Map,OTHER:new Map};function i(e){const i=Zi(e),s=n[i],a=t.Timing.Micro(e.ts+e.dur),r=s.get(a);if(r){if(e.ts<r.ts)s.set(a,e);else if(e.ts===r.ts&&e.interactionId===r.interactionId){const t=r.processingEnd-r.processingStart;e.processingEnd-e.processingStart>t&&s.set(a,e)}e.processingStart<r.processingStart&&(r.processingStart=e.processingStart,ts(r)),e.processingEnd>r.processingEnd&&(r.processingEnd=e.processingEnd,ts(r))}else s.set(a,e)}for(const t of e)i(t);const s=Object.values(n).flatMap((e=>Array.from(e.values())));return s.sort(((e,t)=>e.ts-t.ts)),s}function ts(e){const n=e.args.data.beginEvent,i=e.args.data.endEvent;e.inputDelay=t.Timing.Micro(e.processingStart-n.ts),e.mainThreadHandling=t.Timing.Micro(e.processingEnd-e.processingStart),e.presentationDelay=t.Timing.Micro(i.ts-e.processingEnd)}function ns(){return{allEvents:zi,beginCommitCompositorFrameEvents:Ai,parseMetaViewportEvents:qi,interactionEvents:Vi,interactionEventsWithNoNesting:Xi,longestInteractionEvent:Gi,interactionsOverThreshold:new Set(Vi.filter((e=>e.dur>ji)))}}var is=Object.freeze({__proto__:null,LONG_INTERACTION_THRESHOLD:ji,categoryOfInteraction:Zi,data:ns,deps:function(){return["Meta"]},finalize:async function(){const{navigationsByFrameId:e}=ge();for(const i of Ki){const s=Yi.get(i.id);if(!s)continue;const{type:a,interactionId:r,timeStamp:o,processingStart:c,processingEnd:l}=i.args.data;if(!(a&&r&&o&&c&&l))continue;const d=t.Timing.Micro(n.Timing.milliToMicro(c)-n.Timing.milliToMicro(o)+i.ts),u=t.Timing.Micro(n.Timing.milliToMicro(l)-n.Timing.milliToMicro(o)+i.ts),f=i.args.frame??i.args.data.frame??"",m=n.Trace.getNavigationForTraceEvent(i,f,e),g=m?.args.data?.navigationId,p=n.SyntheticEvents.SyntheticEventsManager.registerSyntheticEvent({rawSourceEvent:i,cat:i.cat,name:i.name,pid:i.pid,tid:i.tid,ph:i.ph,processingStart:d,processingEnd:u,inputDelay:t.Timing.Micro(-1),mainThreadHandling:t.Timing.Micro(-1),presentationDelay:t.Timing.Micro(-1),args:{data:{beginEvent:i,endEvent:s,frame:f,navigationId:g}},ts:i.ts,dur:t.Timing.Micro(s.ts-i.ts),type:i.args.data.type,interactionId:i.args.data.interactionId});ts(p),Vi.push(p)}Xi.push(...es(Vi));for(const e of Xi)(!Gi||Gi.dur<e.dur)&&(Gi=e)},handleEvent:function(e){if(t.Events.isBeginCommitCompositorFrame(e))return void Ai.push(e);if(t.Events.isParseMetaViewport(e))return void qi.push(e);if(!t.Events.isEventTiming(e))return;if(t.Events.isEventTimingEnd(e)&&Yi.set(e.id,e),zi.push(e),!e.args.data||!t.Events.isEventTimingStart(e))return;const{duration:n,interactionId:i}=e.args.data;n<1||void 0===i||0===i||Ki.push(e)},removeNestedInteractions:es,reset:function(){zi.length=0,Ai.length=0,qi.length=0,Vi.length=0,Ki.length=0,Yi.clear(),Xi.length=0,Gi=null},scoreClassificationForInteractionToNextPaint:function(e){return e<=Hi?"good":e<=$i?"ok":"bad"}});const ss=new Map,as=new Map,rs=[],os=[],cs=[],ls=n.Timing.milliToMicro(t.Timing.Milli(30)),ds=n.Timing.milliToMicro(t.Timing.Milli(50));function us(e,t){const n=i.MapUtilities.getWithDefault(ss,e,(()=>[]));n.push(t),ss.set(e,n);const s=i.MapUtilities.getWithDefault(as,t,(()=>[]));s.push(e),as.set(t,s)}function fs(e,t,n=!0){let i=t.at(-1);for(;i&&e.ts>i.ts+(i.dur||0);)t.pop(),i=t.at(-1);n&&t.push(e)}var ms=Object.freeze({__proto__:null,FORCED_REFLOW_THRESHOLD:ls,LONG_MAIN_THREAD_TASK_THRESHOLD:ds,data:function(){return{perEvent:ss,perWarning:as}},deps:function(){return["UserInteractions"]},finalize:async function(){const e=ns().interactionsOverThreshold;for(const t of e)us(t,"LONG_INTERACTION")},handleEvent:function(e){if(function(e){if(fs(e,rs),fs(e,os,t.Events.isJSInvocationEvent(e)),os.length&&("Layout"===e.name||"UpdateLayoutTree"===e.name))return void cs.push(e);if(1===rs.length){const e=cs.reduce(((e,t)=>e+(t.dur||0)),0);e>=ls&&cs.forEach((e=>us(e,"FORCED_REFLOW"))),cs.length=0}}(e),"RunTask"!==e.name)if(t.Events.isFireIdleCallback(e)){const{duration:t}=n.Timing.eventTimingsMilliSeconds(e);t>e.args.data.allottedMilliseconds&&us(e,"IDLE_CALLBACK_OVER_TIME")}else;else{const{duration:t}=n.Timing.eventTimingsMicroSeconds(e);t>ds&&us(e,"LONG_TASK")}},reset:function(){ss.clear(),as.clear(),rs.length=0,os.length=0,cs.length=0}});const gs=[],ps=new Map,hs=new Map;var vs=Object.freeze({__proto__:null,data:function(){return{workerSessionIdEvents:gs,workerIdByThread:ps,workerURLById:hs}},finalize:async function(){for(const e of gs)e.args.data&&(ps.set(e.args.data.workerThreadId,e.args.data.workerId),hs.set(e.args.data.workerId,e.args.data.url))},handleEvent:function(e){t.Events.isTracingSessionIdForWorker(e)&&gs.push(e)},reset:function(){gs.length=0,ps.clear(),hs.clear()}}),Es=Object.freeze({__proto__:null,AnimationFrames:y,Animations:w,AsyncJSCalls:mt,AuctionWorklets:H,DOMStats:pt,ExtensionTraceData:Bt,Flows:B,Frames:an,GPU:cn,ImagePainting:gn,Initiators:wn,Invalidations:kn,LargestImagePaint:Yn,LargestTextPaint:Qn,LayerTree:Ht,LayoutShifts:Pi,Memory:Ri,Meta:pe,NetworkRequests:Ce,PageFrames:Li,PageLoadMetrics:Gn,Renderer:st,Samples:We,Screenshots:si,Scripts:Wi,SelectorStats:xi,UserInteractions:is,UserTimings:St,Warnings:ms,Workers:vs}),Ts=Object.freeze({__proto__:null});export{m as Helpers,Es as ModelHandlers,Xt as Threads,Ts as Types};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import*as e from"../../../core/platform/platform.js";import*as t from"../../../core/common/common.js";import*as n from"../types/types.js";let r=null;class i{#e=[];#t=[];static activate(e){r=e}static createAndActivate(e){const t=new i(e);return i.activate(t),t}static getActiveManager(){if(!r)throw new Error("Attempted to get a SyntheticEventsManager without initializing");return r}static reset(){r=null}static registerSyntheticEvent(e){try{return i.getActiveManager().registerSyntheticEvent(e)}catch{return e}}constructor(e){this.#t=e}registerSyntheticEvent(e){const t=this.#t.indexOf(e.rawSourceEvent);if(t<0)throw new Error("Attempted to register a synthetic event paired to an unknown raw event.");const n=e;return this.#e[t]=n,n}syntheticEventForRawEventIndex(e){const t=this.#e.at(e);if(!t)throw new Error(`Attempted to get a synthetic event from an unknown raw event index: ${e}`);return t}getSyntheticTraces(){return this.#e}getRawTraceEvents(){return this.#t}}var a=Object.freeze({__proto__:null,SyntheticEventsManager:i});const o=e=>n.Timing.Micro(1e3*e),s=e=>n.Timing.Milli(1e3*e),c=e=>n.Timing.Milli(e/1e3);function l(e){return{startTime:e.ts,endTime:e.ts+(e.dur??0),duration:e.dur||0}}function u(e,t){const n=e.ts;return n<=t.max&&t.min<=n+(e.dur??0)}var d=Object.freeze({__proto__:null,boundsIncludeTimeRange:function(e){const{min:t,max:n}=e.bounds,{min:r,max:i}=e.timeRange;return t<=i&&n>=r},eventIsInBounds:u,eventTimingsMicroSeconds:l,eventTimingsMilliSeconds:function(e){return{startTime:e.ts/1e3,endTime:(e.ts+(e.dur??0))/1e3,duration:(e.dur||0)/1e3}},expandWindowByPercentOrToOneMillisecond:function(e,t,r){let i=e.min-e.range*(r/100)/2,a=e.max+e.range*(r/100)/2;if(a-i<1e3){const t=(e.min+e.max)/2;i=t-500,a=t+500}return i=Math.max(i,t.min),a=Math.min(a,t.max),{min:n.Timing.Micro(i),max:n.Timing.Micro(a),range:n.Timing.Micro(a-i)}},microToMilli:c,microToSeconds:e=>n.Timing.Seconds(e/1e3/1e3),milliToMicro:o,secondsToMicro:e=>o(s(e)),secondsToMilli:s,timeStampForEventAdjustedByClosestNavigation:function(e,t,r,i){let a=e.ts-t.min;if(e.args?.data?.navigationId){const t=r.get(e.args.data.navigationId);t&&(a=e.ts-t.ts)}else if(e.args?.data?.frame){const t=g(e,e.args.data.frame,i);t&&(a=e.ts-t.ts)}return n.Timing.Micro(a)},timestampIsInBounds:function(e,t){return t>=e.min&&t<=e.max},traceWindowFromEvent:function(e){return{min:e.ts,max:n.Timing.Micro(e.ts+(e.dur??0)),range:e.dur??n.Timing.Micro(0)}},traceWindowFromMicroSeconds:function(e,t){return{min:e,max:t,range:n.Timing.Micro(t-e)}},traceWindowFromMilliSeconds:function(e,t){return{min:o(e),max:o(t),range:n.Timing.Micro(o(t)-o(e))}},traceWindowMicroSecondsToMilliSeconds:function(e){return{min:c(e.min),max:c(e.max),range:c(e.range)}},traceWindowMilliSeconds:function(e){return{min:c(e.min),max:c(e.max),range:c(e.range)}},windowFitsInsideBounds:function(e){return e.window.min>=e.bounds.min&&e.window.max<=e.bounds.max},windowsEqual:function(e,t){return e.min===t.min&&e.max===t.max}});function m(e){if(e.args?.data?.stackTrace)return e.args.data.stackTrace;if(e.args?.stackTrace)return e.args.stackTrace;if(n.Events.isUpdateLayoutTree(e))return e.args.beginData?.stackTrace||null;if(n.Events.isLayout(e))return e.args.beginData.stackTrace??null;if(n.Events.isFunctionCall(e)){const t=e.args.data;if(!t)return null;const{columnNumber:n,lineNumber:r,url:i,scriptId:a,functionName:o}=t;return void 0===r||void 0===o||void 0===n||void 0===a||void 0===i?null:[{columnNumber:n,lineNumber:r,url:i,scriptId:a,functionName:o}]}if(n.Events.isProfileCall(e)){const t=e.callFrame;if(!t)return null;const{columnNumber:n,lineNumber:r,url:i,scriptId:a,functionName:o}=t;return void 0===r||void 0===o||void 0===n||void 0===a||void 0===i?null:[{columnNumber:n,lineNumber:r,url:i,scriptId:a,functionName:o}]}return null}function h(e,t){const r=e.ts,i=t.ts;if(r<i)return-1;if(r>i)return 1;const a=r+(e.dur??0),o=i+(t.dur??0);return a>o?-1:a<o?1:n.Events.isProfileCall(e)&&!n.Events.isProfileCall(t)?-1:n.Events.isProfileCall(t)&&!n.Events.isProfileCall(e)?1:0}function f(e){e.sort(h)}function p(e,t){const n=[];let r=0,i=0;for(;r<e.length&&i<t.length;){const a=e[r],o=t[i],s=h(a,o);s<=0&&(n.push(a),r++),1===s&&(n.push(o),i++)}for(;r<e.length;)n.push(e[r++]);for(;i<t.length;)n.push(t[i++]);return n}function g(t,n,r){const i=r.get(n);if(!i||""===n)return null;const a=e.ArrayUtilities.nearestIndexFromEnd(i,(e=>e.ts<=t.ts));return null===a?null:i[a]}function v(e){return e.id??e.id2?.global??e.id2?.local}function S(e,t,r,i,a,o){return{cat:"",name:"ProfileCall",nodeId:e.id,args:{},ph:"X",pid:a,tid:o,ts:i,dur:n.Timing.Micro(0),callFrame:e.callFrame,sampleIndex:r,profileId:t}}function T(t){const n=new Map;for(const r of t){const t=k(r);if(void 0===t)continue;const i=e.MapUtilities.getWithDefault(n,t,(()=>({begin:null,end:null,instant:[]}))),a="b"===r.ph,o="e"===r.ph,s="n"===r.ph;a?i.begin=r:o?i.end=r:s&&(i.instant||(i.instant=[]),i.instant.push(r))}return n}function k(e){const t=v(e);return t&&`${e.cat}:${t}:${e.name}`}function E(e,t){const r=[];for(const[a,o]of e.entries()){const s=o.begin,c=o.end,l=o.instant;if(!s||!c&&!l)continue;const u={beginEvent:s,endEvent:c,instantEvents:l};function d(e){const t=!!e.instantEvents&&e.instantEvents.some((e=>a===k(e))),n=!!e.endEvent&&a===k(e.endEvent);return Boolean(a)&&(t||n)}if(!d(u))continue;const m=c||s,h=i.registerSyntheticEvent({rawSourceEvent:u.beginEvent,cat:m.cat,ph:m.ph,pid:m.pid,tid:m.tid,id:a,name:s.name,dur:n.Timing.Micro(m.ts-s.ts),ts:s.ts,args:{data:u}});h.dur<0||(t?.(h),r.push(h))}return r.sort(((e,t)=>e.ts-t.ts))}function y(e){const t={...e};return t.lineNumber=e.lineNumber&&e.lineNumber-1,t.columnNumber=e.columnNumber&&e.columnNumber-1,t}function b(e){return"JSRoot"===e.name&&"toplevel"===e.cat||e.cat.includes("disabled-by-default-devtools.timeline")&&"RunTask"===e.name}function I(t,n){let r=e.ArrayUtilities.upperBound(t,n,((e,t)=>e-t.ts))-1;for(;r>0&&!b(t[r]);)r--;return Math.max(r,0)}const M=new Map;function C(e){if(!e.args)return null;if("beginData"in e.args){return e.args.beginData.sampleTraceId??null}return e.args?.sampleTraceId??e.args?.data?.sampleTraceId??null}const w=new Set(["AbortPostTaskCallback","Animation","AsyncTask","v8.deserializeOnBackground","BeginFrame","BeginMainThreadFrame","v8.produceModuleCache","v8.produceCache","CancelAnimationFrame","CancelIdleCallback","v8.compile","V8.CompileCode","V8.CompileModule","Commit","CompositeLayers","ComputeIntersections","ConsoleTime","TimeStamp","CppGC.IncrementalSweep","DoDecrypt","DoDecryptReply","DoDigest","DoDigestReply","DoEncrypt","DoEncryptReply","DoSign","DoSignReply","DoVerify","DoVerifyReply","Decode Image","DrawFrame","EmbedderCallback","v8.evaluateModule","EvaluateScript","EventDispatch","EventTiming","V8.FinalizeDeserialization","FireAnimationFrame","FireIdleCallback","FrameStartedLoading","FunctionCall","GCEvent","BlinkGC.AtomicPhase","GPUTask","HandlePostMessage","HitTest","InvalidateLayout","JSSample","Layerize","Layout","LayoutShift","MajorGC","MarkDOMContent","firstPaint","firstContentfulPaint","largestContentfulPaint::Candidate","MarkLoad","MinorGC","V8.OptimizeCode","Paint","PaintImage","PaintSetup","ParseAuthorStyleSheet","ParseHTML","PrePaint","ProfileCall","Program","RasterTask","RequestAnimationFrame","RequestIdleCallback","RequestMainThreadFrame","ResourceFinish","ResourceReceivedData","ResourceReceiveResponse","ResourceSendRequest","ResourceWillSendRequest","RunMicrotasks","RunPostTaskCallback","RunTask","SchedulePostMessage","SchedulePostTaskCallback","ScheduleStyleRecalculation","ScrollLayer","CpuProfiler::StartProfiling","v8.parseOnBackground","v8.parseOnBackgroundParsing","v8.parseOnBackgroundWaiting","SyntheticLayoutShift","SyntheticLayoutShiftCluster","TimerFire","TimerInstall","TimerRemove","UpdateLayer","UpdateLayerTree","UpdateLayoutTree","UserTiming","V8Console::runTask","v8.wasm.cachedModule","v8.wasm.compiledModule","v8.wasm.moduleCacheHit","v8.wasm.moduleCacheInvalid","v8.wasm.streamFromResponseCallback","WebSocketCreate","WebSocketDestroy","WebSocketReceive","WebSocketReceiveHandshakeResponse","WebSocketSend","WebSocketSendHandshakeRequest","XHRLoad","XHRReadyStateChange"]);var N=Object.freeze({__proto__:null,VISIBLE_TRACE_EVENT_TYPES:w,activeURLForFrameAtTime:function(e,t,n){const r=n.get(e);if(!r)return null;for(const e of r.values())for(const n of e)if(!(n.window.min>t||n.window.max<t))return n.frame.url;return null},addEventToProcessThread:function(e,t){const{tid:n,pid:r}=e;let i=t.get(r);i||(i=new Map);let a=i.get(n);a||(a=[]),a.push(e),i.set(e.tid,a),t.set(e.pid,i)},createMatchedSortedSyntheticEvents:function(e,t){return E(T(e),t)},createSortedSyntheticEvents:E,eventContainsTimestamp:function(e,t){return e.ts<=t&&e.ts+(e.dur||0)>=t},eventHasCategory:function(e,t){let n=M.get(e.cat);return n||(n=new Set(e.cat.split(",")||[])),n.has(t)},eventTimeComparator:h,extractId:v,extractOriginFromTrace:function(e){const n=t.ParsedURL.ParsedURL.fromString(e);return n?n.host.startsWith("www.")?n.host.slice(4):n.host:null},extractSampleTraceId:C,findNextEventAfterTimestamp:function(t,n){const r=e.ArrayUtilities.nearestIndexFromBeginning(t,(e=>n<e.ts));return null===r?null:t[r]},findPreviousEventBeforeTimestamp:function(t,n){const r=e.ArrayUtilities.nearestIndexFromEnd(t,(e=>e.ts<n));return null===r?null:t[r]},findUpdateLayoutTreeEvents:function(e,t,r){const i=[];for(let a=I(e,t);a<e.length;a++){const t=e[a];n.Events.isUpdateLayoutTree(t)&&(t.ts>=(r||1/0)||i.push(t))}return i},forEachEvent:function(e,t){const r=t.startTime??n.Timing.Micro(0),i=t.endTime||n.Timing.Micro(1/0),a=!1!==t.ignoreAsyncEvents,o=[];for(let s=I(e,r);s<e.length;s++){const c=e[s],u=l(c);if(u.endTime<r)continue;if(u.startTime>i)break;if(a&&n.Events.isPhaseAsync(c.ph)||n.Events.isFlowPhase(c.ph))continue;let d=o.at(-1),m=d?l(d).endTime:null;for(;d&&m&&m<=u.startTime;)o.pop(),t.onEndEvent(d),d=o.at(-1),m=d?l(d).endTime:null;t.eventFilter&&!t.eventFilter(c)||(u.duration?(t.onStartEvent(c),o.push(c)):t.onInstantEvent&&t.onInstantEvent(c))}for(;o.length;){const e=o.pop();e&&t.onEndEvent(e)}},frameIDForEvent:function(e){return e.args&&"beginData"in e.args&&"object"==typeof e.args.beginData&&null!==e.args.beginData&&"frame"in e.args.beginData&&"string"==typeof e.args.beginData.frame?e.args.beginData.frame:e.args?.data?.frame?e.args.data.frame:null},getNavigationForTraceEvent:g,getZeroIndexedLineAndColumnForEvent:function(e){const t=function(e){if(!e.args?.data)return{lineNumber:void 0,columnNumber:void 0};let t,n;"lineNumber"in e.args.data&&"number"==typeof e.args.data.lineNumber&&(t=e.args.data.lineNumber);"columnNumber"in e.args.data&&"number"==typeof e.args.data.columnNumber&&(n=e.args.data.columnNumber);return{lineNumber:t,columnNumber:n}}(e),{lineNumber:n,columnNumber:r}=t;switch(e.name){case"FunctionCall":case"EvaluateScript":case"v8.compile":case"v8.produceCache":return{lineNumber:"number"==typeof n?n-1:void 0,columnNumber:"number"==typeof r?r-1:void 0};case"ProfileCall":{const t=e.callFrame;return{lineNumber:"number"==typeof n?t.lineNumber-1:void 0,columnNumber:"number"==typeof r?t.columnNumber-1:void 0}}default:return t}},getZeroIndexedStackTraceForEvent:function(e){const t=m(e);return t?t.map((t=>{switch(e.name){case"ScheduleStyleRecalculation":case"InvalidateLayout":case"FunctionCall":case"Layout":case"UpdateLayoutTree":return y(t);default:if(n.Events.isUserTiming(e)||n.Extensions.isSyntheticExtensionEntry(e))return y(t)}return t})):null},isMatchingCallFrame:function(e,t){return e.columnNumber===t.columnNumber&&e.lineNumber===t.lineNumber&&String(e.scriptId)===t.scriptId&&e.url===t.url&&e.functionName===t.functionName},isTopLevelEvent:b,makeProfileCall:S,makeZeroBasedCallFrame:y,matchEvents:T,mergeEventsInOrder:p,sortTraceEventsInPlace:f,stackTraceInEvent:m});let F=0;const P=()=>++F,x=()=>({roots:new Set,maxDepth:0}),R=(e,t)=>({entry:e,id:t,parent:null,children:[],depth:0});function D(e,t){const r=new Map,i=[];F=-1;const a=x();for(let o=0;o<e.length;o++){const s=e[o];if(t&&!t.filter.has(s.name))continue;const c=s.dur||0,l=P(),u=R(s,l);if(0===i.length){a.roots.add(u),u.selfTime=n.Timing.Micro(c),i.push(u),a.maxDepth=Math.max(a.maxDepth,i.length),r.set(s,u);continue}const d=i.at(-1);if(void 0===d)throw new Error("Impossible: no parent node found in the stack");const m=d.entry,h=s.ts,f=m.ts,p=h+c,g=f+(m.dur||0);if(h<f)throw new Error("Impossible: current event starts before the parent event");if(h>=g){i.pop(),o--,F--;continue}p>g||(u.depth=i.length,u.parent=d,d.children.push(u),u.selfTime=n.Timing.Micro(c),void 0!==d.selfTime&&(d.selfTime=n.Timing.Micro(d.selfTime-(s.dur||0))),i.push(u),a.maxDepth=Math.max(a.maxDepth,i.length),r.set(s,u))}return{tree:a,entryToNode:r}}function J(e,t,r,i,a,o){if(!a||(s=a,u(t.entry,s))){var s;if(void 0!==o){if(n.Timing.Micro(t.entry.ts+n.Timing.Micro(t.entry.dur??0))<o)return}r(t.entry);for(const n of t.children)J(e,n,r,i,a,o);i(t.entry)}}function _(e){const t=[];for(const n of e){const e=n.ts,r=n.ts+(n.dur??0);let i=t.at(-1);if(void 0===i){t.push(n);continue}let a=i.ts+(i.dur??0);for(;t.length&&e>=a&&(t.pop(),i=t.at(-1),void 0!==i);)a=i.ts+(i.dur??0);if(t.length&&r>a)return!1;t.push(n)}return!0}var A=Object.freeze({__proto__:null,canBuildTreesFromEvents:_,makeEmptyTraceEntryNode:R,makeEmptyTraceEntryTree:x,makeTraceEntryNodeId:P,treify:D,walkEntireTree:function(e,t,n,r,i,a){for(const o of t.roots)J(e,o,n,r,i,a)},walkTreeFromEntry:function(e,t,n,r){const i=e.get(t);i&&J(e,i,n,r)}});var B=Object.freeze({__proto__:null,buildTrackDataFromExtensionEntries:function(t,n,r){const i=new Map;for(const n of t){const t=n.args.trackGroup||`track-name-${n.args.track}`,r=e.MapUtilities.getWithDefault(i,t,(()=>({name:n.args.trackGroup||n.args.track,isTrackGroup:Boolean(n.args.trackGroup),entriesByTrack:{[n.args.track]:[]}})));r.entriesByTrack[n.args.track]||(r.entriesByTrack[n.args.track]=[]);r.entriesByTrack[n.args.track].push(n)}for(const e of i.values()){for(const t of Object.values(e.entriesByTrack))if(f(t),_(t))for(const[e,n]of D(t).entryToNode)r.set(e,n);n.push(e)}return{extensionTrackData:n,entryToNode:r}}});const L=new Set(["non_blocking","dynamically_injected_non_blocking","potentially_blocking"]);const O=new Set(["VeryHigh","High","Medium"]);const U=new Set([200,203,206]),W=new Set(["Font","Image","Media","Script","Stylesheet"]);const j=["localhost","127.0.0.1"];var G=Object.freeze({__proto__:null,CACHEABLE_STATUS_CODES:U,NON_NETWORK_SCHEMES:["blob","data","intent","file","filesystem","chrome-extension"],STATIC_RESOURCE_TYPES:W,isSyntheticNetworkRequestEventRenderBlocking:function(e){return!L.has(e.args.data.renderBlocking)},isSyntheticNetworkRequestHighPriority:function(e){return O.has(e.args.data.priority)},isSyntheticNetworkRequestLocalhost:function(e){try{const t=new URL(e.args.data.url).hostname;return j.includes(t)||t.endsWith(".localhost")}catch{return!1}},parseCacheControl:function(e){if(!e)return null;const t=e.split(",").map((e=>e.trim())),n={};for(const e of t){const[t,r]=e.split("=").map((e=>e.trim()));switch(t){case"max-age":{const e=parseInt(r,10);isNaN(e)||(n["max-age"]=e);break}case"no-cache":n["no-cache"]=!0;break;case"no-store":n["no-store"]=!0;break;case"must-revalidate":n["must-revalidate"]=!0;break;case"private":n.private=!0}}return n}});var H=Object.freeze({__proto__:null,SamplesIntegrator:class e{#n=[];#r=[];#i;#a;#o=[];#s=!1;#c;#l=new Map;#u;#d;jsSampleEvents=[];constructor(e,t,r,i,a){this.#c=e,this.#a=i,this.#i=r,this.#u=a||n.Configuration.defaults(),this.#d=t}buildProfileCalls(e){const t=p(e,this.callsFromProfileSamples()),r=[];for(let e=0;e<t.length;e++){const i=t[e];if("I"===i.ph&&!C(i))continue;if(0===r.length){if(n.Events.isProfileCall(i)){this.#m(i);continue}r.push(i),this.#h(i);continue}const a=r.at(-1);if(void 0===a)continue;i.ts>=a.ts+(a.dur||0)?(this.#f(a),r.pop(),e--):n.Events.isProfileCall(i)?this.#m(i,a):(this.#h(i),r.push(i))}for(;r.length;){const e=r.pop();e&&this.#f(e)}return f(this.jsSampleEvents),this.#n}#h(e){"RunMicrotasks"!==e.name&&"RunTask"!==e.name||(this.#o=[],this.#p(0,e.ts),this.#s=!1),this.#s&&(this.#p(this.#o.pop()||0,e.ts),this.#s=!1),this.#g(e),this.#o.push(this.#r.length)}#m(e,t){if(t&&n.Events.isJSInvocationEvent(t)||this.#s)this.#g(e);else if(n.Events.isProfileCall(e)&&0===this.#r.length){this.#s=!0;const t=this.#r.length;this.#g(e),this.#o.push(t)}}#f(e){const t=n.Timing.Micro(e.ts+(e.dur??0));this.#p(this.#o.pop()||0,t)}callsFromProfileSamples(){const e=this.#c.samples,t=this.#c.timestamps;if(!e)return[];const r=[];let i;for(let a=0;a<e.length;a++){const e=this.#c.nodeByIndex(a),s=o(n.Timing.Milli(t[a]));if(!e)continue;const c=S(e,this.#d,a,s,this.#i,this.#a);if(r.push(c),this.#u.debugMode){const e=this.#c.traceIds?.[a];this.jsSampleEvents.push(this.#v(c,s,e))}e.id===this.#c.gcNode?.id&&i?this.#l.set(c,i):i=e}return r}#S(e,t){let n=this.#c.nodeById(e.nodeId);const r=n?.id===this.#c.gcNode?.id;if(r&&(n=this.#l.get(e)||null),!n)return[];const i=new Array(n.depth+1+Number(r));let a=i.length-1;for(r&&(i[a--]=e);n;)i[a--]=S(n,e.profileId,e.sampleIndex,t??e.ts,this.#i,this.#a),n=n.parent;return i}#T(e,t){const n=this.#c.traceIds?.[e],r=n&&this.#c.nodeById(n),i=r&&S(r,this.#d,-1,t,this.#i,this.#a);return i?(this.#u.debugMode&&this.jsSampleEvents.push(this.#v(i,t,e)),this.#S(i)):null}#g(t){let r=this.#r;n.Events.isProfileCall(t)&&(r=this.#S(t));const i=C(t),a=i&&this.#T(i,t.ts);a&&(r=a),e.filterStackFrames(r,this.#u);const o=t.ts+(t.dur||0),s=Math.min(r.length,this.#r.length);let c;for(c=this.#o.at(-1)||0;c<s;++c){const t=r[c].callFrame,i=this.#r[c].callFrame;if(!e.framesAreEqual(t,i))break;this.#r[c].dur=n.Timing.Micro(Math.max(this.#r[c].dur||0,o-this.#r[c].ts))}for(this.#p(c,t.ts);c<r.length;++c){const e=r[c];e.nodeId!==this.#c.programNode?.id&&e.nodeId!==this.#c.root?.id&&e.nodeId!==this.#c.idleNode?.id&&e.nodeId!==this.#c.gcNode?.id&&(this.#r.push(e),this.#n.push(e))}}#p(e,t){if(this.#o.length){const n=this.#o.at(-1);n&&e<n&&(console.error(`Child stack is shallower (${e}) than the parent stack (${n}) at ${t}`),e=n)}this.#r.length<e&&(console.error(`Trying to truncate higher than the current stack size at ${t}`),e=this.#r.length);for(let e=0;e<this.#r.length;++e)this.#r[e].dur=n.Timing.Micro(Math.max(t-this.#r[e].ts,0));this.#r.length=e}#v(e,t,r){return{name:"JSSample",cat:"devtools.timeline",args:{data:{traceId:r,stackTrace:this.#S(e).map((e=>e.callFrame))}},ph:"I",ts:t,dur:n.Timing.Micro(0),pid:this.#i,tid:this.#a}}static framesAreEqual(e,t){return e.scriptId===t.scriptId&&e.functionName===t.functionName&&e.lineNumber===t.lineNumber}static showNativeName(t,n){return n&&Boolean(e.nativeGroup(t))}static nativeGroup(e){return e.startsWith("Parse")?"Parse":e.startsWith("Compile")||e.startsWith("Recompile")?"Compile":null}static isNativeRuntimeFrame(e){return"native V8Runtime"===e.url}static filterStackFrames(t,n){if(n.showAllEvents)return;let r=null,i=0;for(let a=0;a<t.length;++a){const o=t[a].callFrame,s=e.isNativeRuntimeFrame(o);if(s&&!e.showNativeName(o.functionName,n.includeRuntimeCallStats))continue;const c=s?e.nativeGroup(o.functionName):null;r&&r===c||(r=c,t[i++]=t[a])}t.length=i}static createFakeTraceFromCpuProfile(e,t){const r=[],i=`Thread ${t}`;return a("TracingStartedInPage",{data:{sessionId:"1"}},0,0,"M"),a("thread_name",{name:i},0,0,"M","__metadata"),e?(a("JSRoot",{},e.startTime,e.endTime-e.startTime,"X","toplevel"),a("CpuProfile",{data:{cpuProfile:e}},e.endTime,0,"X"),{traceEvents:r,metadata:{dataOrigin:"CPUProfile"}}):{traceEvents:r,metadata:{}};function a(e,i,a,o,s,c){const l={cat:c||"disabled-by-default-devtools.timeline",name:e,ph:s||"X",pid:n.Events.ProcessID(1),tid:t,ts:n.Timing.Micro(a),args:i};return o&&(l.dur=n.Timing.Micro(o)),r.push(l),l}}}});export{B as Extensions,G as Network,H as SamplesIntegrator,a as SyntheticEvents,d as Timing,N as Trace,A as TreeHelpers};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import*as e from"../helpers/helpers.js";import*as t from"../types/types.js";import*as n from"../../../core/i18n/i18n.js";import*as i from"../../../core/platform/platform.js";import*as r from"../handlers/handlers.js";import*as s from"../extras/extras.js";import*as a from"../../../third_party/legacy-javascript/legacy-javascript.js";import*as o from"../../../third_party/third-party-web/third-party-web.js";function c({median:e,p10:t},n){if(e<=0)throw new Error("median must be greater than zero");if(t<=0)throw new Error("p10 must be greater than zero");if(t>=e)throw new Error("p10 must be less than the median");if(n<=0)return 1;const i=Math.max(Number.MIN_VALUE,n/e),r=Math.log(i),s=Math.max(Number.MIN_VALUE,t/e),a=(1-function(e){const t=Math.sign(e),n=1/(1+.3275911*(e=Math.abs(e)));return t*(1-n*(.254829592+n*(n*(1.421413741+n*(1.061405429*n-1.453152027))-.284496736))*Math.exp(-e*e))}(.9061938024368232*r/-Math.log(s)))/2;let o;return o=n<=t?Math.max(.9,Math.min(1,a)):n<=e?Math.max(.5,Math.min(.8999999999999999,a)):Math.max(0,Math.min(.49999999999999994,a)),o}function l(e,t,n,i,r){return t+(r-e)*((i-t)/(n-e))}var u=Object.freeze({__proto__:null,getLogNormalScore:c,linearInterpolation:l});function d(e,t,n){if(!t||!n)return null;const i=t.get(n);if(!i)return null;const r=i.model[e];return r instanceof Error?null:r}function g(e){return c({p10:2500,median:4e3},e)}function p(e){return c({p10:200,median:500},e)}function m(e){return c({p10:.1,median:.25},e)}function f(e,t,n=null){const i=[];n?i.push(n):(i.push({pageScope:"url",deviceScope:"ALL"}),i.push({pageScope:"origin",deviceScope:"ALL"}));for(const n of i){const i=`${n.pageScope}-${n.deviceScope}`;let r=e[i]?.record.metrics[t]?.percentiles?.p75;if("string"==typeof r&&(r=Number(r)),"number"==typeof r&&Number.isFinite(r))return{value:r,pageScope:n.pageScope}}return null}function h(t,n,i=null){const r=f(t,n,i);if(r){const t=r.value;return{value:e.Timing.milliToMicro(t),pageScope:r.pageScope}}return null}function v(e,t,n=null){const i=t?.cruxFieldData;if(!i)return null;const r=function(e,t,n,i=null){return e.find((e=>{const r=i?e[`${i.pageScope}-${i.deviceScope}`]?.record.key:(e["url-ALL"]||e["origin-ALL"])?.record.key;return r?.url&&r.url===t||r?.origin&&r.origin===n}))}(i,e.url.href,e.url.origin,n);return r?{fcp:h(r,"first_contentful_paint",n),lcp:h(r,"largest_contentful_paint",n),inp:h(r,"interaction_to_next_paint",n),cls:f(r,"cumulative_layout_shift",n),lcpPhases:{ttfb:h(r,"largest_contentful_paint_image_time_to_first_byte",n),loadDelay:h(r,"largest_contentful_paint_image_resource_load_delay",n),loadDuration:h(r,"largest_contentful_paint_image_resource_load_duration",n),renderDelay:h(r,"largest_contentful_paint_image_element_render_delay",n)}}:null}function y(e,n,i){const r=n.simulate(i),s=new Map;i.traverse((t=>{if("network"!==t.type)return;const n=e.get(t.request.requestId);if(!n)return;const i=t.request.transferSize;s.set(t.request.requestId,i),t.request.transferSize=Math.max(i-n,0)}));const a=n.simulate(i);i.traverse((e=>{if("network"!==e.type)return;const t=s.get(e.request.requestId);void 0!==t&&(e.request.transferSize=t)}));let o=r.timeInMs-a.timeInMs;return o=50*Math.round(o/50),t.Timing.Milli(o)}function S(e,n){if(!n.navigation||!n.lantern)return;if(!e.size)return{FCP:t.Timing.Milli(0),LCP:t.Timing.Milli(0)};const i=n.lantern.simulator,r=n.lantern.metrics.firstContentfulPaint.optimisticGraph,s=n.lantern.metrics.largestContentfulPaint.optimisticGraph;return{FCP:y(e,i,r),LCP:y(e,i,s)}}function T(e){const t=[/^content-encoding$/i,/^x-content-encoding-over-network$/i,/^x-original-content-encoding$/i],n=["gzip","br","deflate","zstd"];return e.args.data.responseHeaders.some((e=>t.some((t=>e.name.match(t)))&&n.includes(e.value)))}function I(e,t,n){if(!e)switch(n){case"Stylesheet":return Math.round(.2*t);case"Script":case"Document":return Math.round(.33*t);default:return Math.round(.5*t)}const{transferSize:i,resourceSize:r}=function(e){return{resourceSize:e.args.data.decodedBodyLength,transferSize:e.args.data.encodedDataLength}}(e);let s=i;if(T(e)||(s=r),e.args.data.resourceType===n)return s;const a=Number.isFinite(r)&&r>0?s/r:1;return Math.round(t*a)}function _(e){if(!e.request)return 1;const t=e.request,n=t.args.data.decodedBodyLength??e.content?.length??0;return I(t,n,"Script")/n}var E,M,w=Object.freeze({__proto__:null,calculateMetricWeightsForSorting:function(t,n){const i={lcp:1/3,inp:1/3,cls:1/3},r=n?.cruxFieldData;if(!r)return i;const s=v(t,n);if(!s)return i;const a=s.lcp?.value??null,o=s.inp?.value??null,c=s.cls?.value??null,l=1-(null!==a?g(e.Timing.microToMilli(a)):0),u=1-(null!==o?p(e.Timing.microToMilli(o)):0),d=1-(null!==c?m(c):0),f=l+u+d;return f?(i.lcp=l/f,i.inp=u/f,i.cls=d/f,i):i},estimateCompressedContentSize:I,estimateCompressionRatioForScript:_,evaluateCLSMetricScore:m,evaluateINPMetricScore:p,evaluateLCPMetricScore:g,getCLS:function(e,t){const n=d("CLSCulprits",e,t);if(!n)return{value:0,worstClusterEvent:null};let i,r=0;for(const e of n.clusters)e.clusterCumulativeScore>r&&(r=e.clusterCumulativeScore,i=e);return{value:r,worstClusterEvent:i??null}},getFieldMetricsForInsightSet:v,getINP:function(e,t){const n=d("InteractionToNextPaint",e,t);return n?.longestInteractionEvent?.dur?{value:n.longestInteractionEvent.dur,event:n.longestInteractionEvent}:null},getInsight:d,getLCP:function(t,n){const i=d("LCPPhases",t,n);return i&&i.lcpMs&&i.lcpEvent?{value:e.Timing.milliToMicro(i.lcpMs),event:i.lcpEvent}:null},isRequestCompressed:T,metricSavingsForWastedBytes:S});!function(e){e.NO_FP="NO_FP",e.NO_LCP="NO_LCP",e.NO_DOCUMENT_REQUEST="NO_DOCUMENT_REQUEST",e.NO_LAYOUT="NO_LAYOUT"}(E||(E={})),function(e){e.ALL="All",e.INP="INP",e.LCP="LCP",e.CLS="CLS"}(M||(M={}));var b=Object.freeze({__proto__:null,get InsightCategory(){return M},get InsightWarning(){return E}});const L={title:"Use efficient cache lifetimes",description:"A long cache lifetime can speed up repeat visits to your page. [Learn more](https://web.dev/uses-long-cache-ttl/).",requestColumn:"Request",cacheTTL:"Cache TTL",noRequestsToCache:"No requests with inefficient cache policies",others:"{PH1} others"},C=n.i18n.registerUIStrings("models/trace/insights/Cache.ts",L),P=n.i18n.getLocalizedString.bind(void 0,C);function R(t){return!e.Network.NON_NETWORK_SCHEMES.includes(t.args.data.protocol)&&Boolean(e.Network.CACHEABLE_STATUS_CODES.has(t.args.data.statusCode)&&e.Network.STATIC_RESOURCE_TYPES.has(t.args.data.resourceType||"Other"))}function N(e,t){if(void 0!==t?.["max-age"])return t["max-age"];const n=e.find((e=>"expires"===e.name))?.value??null;if(n){const e=new Date(n).getTime();return e?Math.ceil((e-Date.now())/1e3):0}return null}function O(e){const t=[0,.2,1,3,8,12,24,48,72,168,8760,1/0],n=e/3600,i=t.findIndex((e=>e>=n));if(i===t.length-1)return 1;if(0===i)return 0;const r=t[i];return l(t[i-1],(i-1)/10,r,i/10,n)}function D(e){const t=new Map;for(const n of e){const e=n.name.toLowerCase();t.get(e)?t.set(e,`${t.get(e)}, ${n.value}`):t.set(e,n.value)}return t}function q(e,t){const n=e?.get("cache-control")??null,i=e?.get("pragma")??null;return!(n||!i?.includes("no-cache"))||!(!t||!(t["must-revalidate"]||t["no-cache"]||t["no-store"]||t.private))}var z=Object.freeze({__proto__:null,UIStrings:L,cachingDisabled:q,computeCacheLifetimeInSeconds:N,generateInsight:function(t,n){const i=t.NetworkRequests.byTime.filter((t=>e.Timing.eventIsInBounds(t,n.bounds))),r=[];let s=0;const a=new Map;for(const t of i){if(!R(t))continue;const n=D(t.args.data.responseHeaders),i=n.get("cache-control")??null,o=e.Network.parseCacheControl(i);if(q(n,o))continue;let c=N(t.args.data.responseHeaders,o);if(null!==c&&(!Number.isFinite(c)||c<=0))continue;c=c||0;const l=O(c);if(l>.925)continue;const u=(1-l)*(t.args.data.encodedDataLength||0);a.set(t.args.data.requestId,u),s+=u,r.push({request:t,ttl:c,wastedBytes:u})}return r.sort(((e,t)=>t.request.args.data.decodedBodyLength-e.request.args.data.decodedBodyLength||e.ttl-t.ttl)),o={relatedEvents:r.map((e=>e.request)),requests:r,metricSavings:S(a,n),totalWastedBytes:s},{insightKey:"Cache",strings:L,title:P(L.title),description:P(L.description),category:M.ALL,state:o.requests.length>0?"fail":"pass",...o};var o},getCombinedHeaders:D,i18nString:P,isCacheable:R});const A={title:"Layout shift culprits",description:"Layout shifts occur when elements move absent any user interaction. [Investigate the causes of layout shifts](https://web.dev/articles/optimize-cls), such as elements being added, removed, or their fonts changing as the page loads.",worstLayoutShiftCluster:"Worst layout shift cluster",worstCluster:"Worst cluster",layoutShiftCluster:"Layout shift cluster @ {PH1}",topCulprits:"Top layout shift culprits",injectedIframe:"Injected iframe",fontRequest:"Font request",animation:"Animation",unsizedImages:"Unsized Images",noLayoutShifts:"No layout shifts",noCulprits:"Could not detect any layout shift culprits"},F=n.i18n.registerUIStrings("models/trace/insights/CLSCulprits.ts",A),U=n.i18n.getLocalizedString.bind(void 0,F),k=[{flag:1,failure:"ACCELERATED_ANIMATIONS_DISABLED"},{flag:2,failure:"EFFECT_SUPPRESSED_BY_DEVTOOLS"},{flag:4,failure:"INVALID_ANIMATION_OR_EFFECT"},{flag:8,failure:"EFFECT_HAS_UNSUPPORTED_TIMING_PARAMS"},{flag:16,failure:"EFFECT_HAS_NON_REPLACE_COMPOSITE_MODE"},{flag:32,failure:"TARGET_HAS_INVALID_COMPOSITING_STATE"},{flag:64,failure:"TARGET_HAS_INCOMPATIBLE_ANIMATIONS"},{flag:128,failure:"TARGET_HAS_CSS_OFFSET"},{flag:512,failure:"ANIMATION_AFFECTS_NON_CSS_PROPERTIES"},{flag:1024,failure:"TRANSFORM_RELATED_PROPERTY_CANNOT_BE_ACCELERATED_ON_TARGET"},{flag:2048,failure:"TRANSFROM_BOX_SIZE_DEPENDENT"},{flag:4096,failure:"FILTER_RELATED_PROPERTY_MAY_MOVE_PIXELS"},{flag:8192,failure:"UNSUPPORTED_CSS_PROPERTY"},{flag:32768,failure:"MIXED_KEYFRAME_VALUE_TYPES"},{flag:65536,failure:"TIMELINE_SOURCE_HAS_INVALID_COMPOSITING_STATE"},{flag:1<<17,failure:"ANIMATION_HAS_NO_VISIBLE_CHANGE"},{flag:1<<18,failure:"AFFECTS_IMPORTANT_PROPERTY"},{flag:1<<19,failure:"SVG_TARGET_HAS_INDEPENDENT_TRANSFORM_PROPERTY"}],x=e.Timing.secondsToMicro(t.Timing.Seconds(.5));function B(e,t){const n=e.dur?e.ts+e.dur:e.ts;return n<t.ts&&n>=t.ts-x}function H(e){const t=[],n=e.args.data.beginEvent,i=e.args.data.instantEvents||[];for(const r of i){const i=r.args.data.compositeFailed,s=r.args.data.unsupportedProperties;if(!i)continue;const a=k.filter((e=>i&e.flag)).map((e=>e.failure)),o={name:n.args.data.displayName,failureReasons:a,unsupportedProperties:s,animation:e};t.push(o)}return t}function j(e,t){const n=i.ArrayUtilities.nearestIndexFromBeginning(e,(e=>e.ts>t.ts+(t.dur||0)));if(null!==n)return e[n]}function W(e,t){const n=[],i=e.events;for(const e of i){const i=t.get(e);if(!i)continue;const r=i.fontRequests,s=i.iframeIds,a=i.nonCompositedAnimations,o=i.unsizedImages;for(let e=0;e<r.length&&n.length<3;e++)n.push(U(A.fontRequest));for(let e=0;e<s.length&&n.length<3;e++)n.push(U(A.injectedIframe));for(let e=0;e<a.length&&n.length<3;e++)n.push(U(A.animation));for(let e=0;e<o.length&&n.length<3;e++)n.push(U(A.unsizedImages));if(n.length>=3)break}return n.slice(0,3)}var V=Object.freeze({__proto__:null,UIStrings:A,generateInsight:function(n,s){const a=t=>e.Timing.eventIsInBounds(t,s.bounds),o=n.Animations.animations.filter(a),c=n.LayoutShifts.renderFrameImplCreateChildFrameEvents.filter(a),l=n.NetworkRequests.byTime.filter(a),u=n.LayoutShifts.domLoadingEvents.filter(a),d=n.LayoutShifts.layoutImageUnsizedEvents.filter(a),g=s.navigation?s.navigationId:t.Events.NO_NAVIGATION,p=n.LayoutShifts.clustersByNavigationId.get(g)??[],m=p.toSorted(((e,t)=>t.clusterCumulativeScore-e.clusterCumulativeScore)).at(0),f=p.flatMap((e=>e.events)),h=n.LayoutShifts.prePaintEvents.filter(a),v=n.LayoutShifts.paintImageEvents.filter(a),y=new Map,S=function(e,t){const n=new Map;for(const r of t){const t=i.ArrayUtilities.nearestIndexFromBeginning(e,(e=>e.ts>=r.ts));if(null!==t)for(let s=t;s<e.length;s++){const t=e[s];if(t.ts>=r.ts&&t.ts<=r.ts+r.dur&&i.MapUtilities.getWithDefault(n,r,(()=>[])).push(t),t.ts>r.ts+r.dur)break}}return n}(f,h);for(const e of f)y.set(e,{iframeIds:[],fontRequests:[],nonCompositedAnimations:[],unsizedImages:[]});!function(e,n,i,r,s){for(const a of e){const e=j(n,a);if(!e)continue;const o=i.get(e);if(o)for(const e of o){const n=r.get(e);if(!n)throw new Error("Unaccounted shift");const i=s.find((e=>{const n=t.Timing.Micro(a.ts+(a.dur??0));return e.ts>=a.ts&&e.ts<=n}));i?.args.frame&&n.iframeIds.push(i.args.frame)}}}(c,h,S,y,u),function(e,t,n,i){const r=e.filter((e=>"Font"===e.args.data.resourceType&&e.args.data.mimeType.startsWith("font")));for(const e of r){const r=j(t,e);if(!r)continue;if(!B(e,r))continue;const s=n.get(r);if(s)for(const t of s){const n=i.get(t);if(!n)throw new Error("Unaccounted shift");n.fontRequests.push(e)}}}(l,h,S,y),function(e,t,n,i){n.forEach(((n,r)=>{const s=j(t,r),a=e.find((e=>e.args.data.nodeId===s?.args.data.nodeId));if(a)for(const e of n){const t=i.get(e);if(!t)throw new Error("Unaccounted shift");t.unsizedImages.push(a.args.data.nodeId)}}))}(d,v,S,y);const T=function(e,t,n,i){const r=[];for(const s of e){const e=H(s);if(!e)continue;r.push(...e);const a=j(t,s);if(!a)continue;if(!B(s,a))continue;const o=n.get(a);if(o)for(const t of o){const n=i.get(t);if(!n)throw new Error("Unaccounted shift");n.nonCompositedAnimations.push(...e)}}return r}(o,h,S,y),I=[...f];m&&I.push(m);const _=new Map;for(const e of p)_.set(e,W(e,y));return function(e){let t="pass";e.worstCluster&&(t="good"===r.ModelHandlers.LayoutShifts.scoreClassificationForLayoutShift(e.worstCluster.clusterCumulativeScore)?"informative":"fail");return{insightKey:"CLSCulprits",strings:A,title:U(A.title),description:U(A.description),category:M.CLS,state:t,...e}}({relatedEvents:I,animationFailures:T,shifts:y,clusters:p,worstCluster:m,topCulpritsByCluster:_})},getNonCompositedFailure:H,i18nString:U});const K={title:"Document request latency",description:"Your first network request is the most important. Reduce its latency by avoiding redirects, ensuring a fast server response, and enabling text compression.",passingRedirects:"Avoids redirects",failedRedirects:"Had redirects",passingServerResponseTime:"Server responds quickly",failedServerResponseTime:"Server responded slowly",passingTextCompression:"Applies text compression",failedTextCompression:"No compression applied",redirectsLabel:"Redirects",serverResponseTimeLabel:"Server response time",uncompressedDownload:"Uncompressed download"},G=n.i18n.registerUIStrings("models/trace/insights/DocumentLatency.ts",K),J=n.i18n.getLocalizedString.bind(void 0,G);function $(e){let t=!1;return e.data&&(t=!e.data.checklist.usesCompression.value||!e.data.checklist.serverResponseIsFast.value||!e.data.checklist.noRedirects.value),{insightKey:"DocumentLatency",strings:K,title:J(K.title),description:J(K.description),category:M.ALL,state:t?"fail":"pass",...e}}var Y=Object.freeze({__proto__:null,UIStrings:K,generateInsight:function(n,i){if(!i.navigation)return $({});const r=n.NetworkRequests.byTime.find((e=>e.args.data.requestId===i.navigationId));if(!r)return $({warnings:[E.NO_DOCUMENT_REQUEST]});const s=function(t){if(!t.args.data.timing)return null;const n=e.Timing.microToMilli(t.args.data.syntheticData.waiting);return Math.round(n)}(r);if(null===s)throw new Error("missing document request timing");const a=s>600;let o=0;s>600&&(o=Math.max(s-100,0));const c=Math.round(r.args.data.syntheticData.redirectionDuration/1e3);o+=c;const l={FCP:o,LCP:o},u=function(e){if(T(e))return 0;const t=e.args.data.decodedBodyLength;let n=0;switch(e.args.data.mimeType){case"text/css":n=Math.round(.8*t);break;case"text/html":case"text/javascript":n=Math.round(.67*t);break;case"text/plain":case"text/xml":case"text/x-component":case"application/javascript":case"application/json":case"application/manifest+json":case"application/vnd.api+json":case"application/xml":case"application/xhtml+xml":case"application/rss+xml":case"application/atom+xml":case"application/vnd.ms-fontobject":case"application/x-font-ttf":case"application/x-font-opentype":case"application/x-font-truetype":case"image/svg+xml":case"image/x-icon":case"image/vnd.microsoft.icon":case"font/ttf":case"font/eot":case"font/otf":case"font/opentype":n=Math.round(.5*t)}return n<1400?0:n}(r),d=0===c,g=!a,p=0===u;return $({relatedEvents:[r],data:{serverResponseTime:s,redirectDuration:t.Timing.Milli(c),uncompressedResponseBytes:u,documentRequest:r,checklist:{noRedirects:{label:J(d?K.passingRedirects:K.failedRedirects),value:d},serverResponseIsFast:{label:J(g?K.passingServerResponseTime:K.failedServerResponseTime),value:g},usesCompression:{label:J(p?K.passingTextCompression:K.failedTextCompression),value:p}}},metricSavings:l})},i18nString:J,isDocumentLatency:function(e){return"DocumentLatency"===e.insightKey}});const Z={title:"Optimize DOM size",description:"A large DOM can increase the duration of style calculations and layout reflows, impacting page responsiveness. A large DOM will also increase memory usage. [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",statistic:"Statistic",value:"Value",element:"Element",totalElements:"Total elements",maxDOMDepth:"DOM depth",maxChildren:"Most children"},Q=n.i18n.registerUIStrings("models/trace/insights/DOMSize.ts",Z),X=n.i18n.getLocalizedString.bind(void 0,Q),ee=e.Timing.milliToMicro(t.Timing.Milli(40));var te=Object.freeze({__proto__:null,UIStrings:Z,generateInsight:function(n,i){const s=t=>e.Timing.eventIsInBounds(t,i.bounds),a=i.navigation?.tid,o=[],c=[],l=r.Threads.threadsInRenderer(n.Renderer,n.AuctionWorklets);for(const r of l){if("MAIN_THREAD"!==r.type)continue;if(void 0===a){if(!r.processIsOnMainFrame)continue}else if(r.tid!==a)continue;const l=n.Renderer.processes.get(r.pid)?.threads.get(r.tid);if(!l)continue;const{entries:u,layoutEvents:d,updateLayoutTreeEvents:g}=l;if(!u.length)continue;const p=u[0],m=u[u.length-1],f=e.Timing.traceWindowFromMicroSeconds(p.ts,t.Timing.Micro(m.ts+(m.dur??0)));if(e.Timing.boundsIncludeTimeRange({timeRange:f,bounds:i.bounds})){for(const e of d){if(e.dur<ee||!s(e))continue;const{dirtyObjects:t}=e.args.beginData;t>100&&o.push(e)}for(const e of g){if(e.dur<ee||!s(e))continue;const{elementCount:t}=e.args;t>300&&c.push(e)}}}const u=n.DOMStats.domStatsByFrameId.get(i.frameId)?.filter(s)??[];let d;for(const e of u){const t=i.navigation?.pid;t&&e.pid!==t||(!d||e.args.data.totalElements>d.args.data.totalElements)&&(d=e)}return function(e){const t=[...e.largeLayoutUpdates,...e.largeStyleRecalcs];return{insightKey:"DOMSize",strings:Z,title:X(Z.title),description:X(Z.description),category:M.INP,state:t.length>0?"fail":"pass",...e,relatedEvents:t}}({largeLayoutUpdates:o,largeStyleRecalcs:c,maxDOMStats:d})},i18nString:X});const ne={title:"Duplicated JavaScript",description:"Remove large, duplicate JavaScript modules from bundles to reduce unnecessary bytes consumed by network activity.",columnSource:"Source",columnDuplicatedBytes:"Duplicated bytes"},ie=n.i18n.registerUIStrings("models/trace/insights/DuplicatedJavaScript.ts",ne),re=n.i18n.getLocalizedString.bind(void 0,ie);var se=Object.freeze({__proto__:null,UIStrings:ne,generateInsight:function(t,n){const i=t.Scripts.scripts.filter((t=>!!n.navigation&&(t.frame===n.frameId&&(!t.url?.startsWith("chrome-extension://")&&e.Timing.timestampIsInBounds(n.bounds,t.ts))))),{duplication:r,duplicationGroupedByNodeModules:a}=s.ScriptDuplication.computeScriptDuplication({scripts:i}),o=[...r.values().flatMap((e=>e.duplicates.map((e=>e.script))))],c=new Map;for(const{duplicates:e}of r.values())for(let t=1;t<e.length;t++){const n=e[t];if(!n.script.request)continue;const i=_(n.script),r=Math.round(n.attributedSize*i),s=n.script.request.args.data.requestId;c.set(s,(c.get(s)||0)+r)}return function(e){const t=e.scriptsWithDuplication.map((e=>e.request)).filter((e=>!!e));return{insightKey:"DuplicatedJavaScript",strings:ne,title:re(ne.title),description:re(ne.description),category:M.LCP,state:Boolean(e.duplication.values().next().value)?"fail":"pass",relatedEvents:[...new Set(t)],...e}}({duplication:r,duplicationGroupedByNodeModules:a,scriptsWithDuplication:[...new Set(o)],scripts:i,mainDocumentUrl:n.navigation?.args.data?.url??t.Meta.mainFrameURL,metricSavings:S(c,n)})},i18nString:re});const ae={title:"Font display",description:"Consider setting [`font-display`](https://developer.chrome.com/blog/font-display) to `swap` or `optional` to ensure text is consistently visible. `swap` can be further optimized to mitigate layout shifts with [font metric overrides](https://developer.chrome.com/blog/font-fallbacks).",fontColumn:"Font",wastedTimeColumn:"Wasted time"},oe=n.i18n.registerUIStrings("models/trace/insights/FontDisplay.ts",ae),ce=n.i18n.getLocalizedString.bind(void 0,oe);var le=Object.freeze({__proto__:null,UIStrings:ae,generateInsight:function(n,r){const s=[];for(const a of n.LayoutShifts.remoteFonts){const o=a.beginRemoteFontLoadEvent;if(!e.Timing.eventIsInBounds(o,r.bounds))continue;const c=`${o.pid}.${o.args.id}`,l=n.NetworkRequests.byId.get(c);if(!l)continue;if(!/^(block|fallback|auto)$/.test(a.display))continue;const u=t.Timing.Micro(l.args.data.syntheticData.finishTime-l.args.data.syntheticData.sendStartTime);let d=i.NumberUtilities.floor(e.Timing.microToMilli(u),.2);0!==d&&(d=Math.min(d,3e3),s.push({name:a.name,request:l,display:a.display,wastedTime:d}))}s.sort(((e,t)=>t.wastedTime-e.wastedTime));const a=Math.max(...s.map((e=>e.wastedTime)));return o={relatedEvents:s.map((e=>e.request)),fonts:s,metricSavings:{FCP:a}},{insightKey:"FontDisplay",strings:ae,title:ce(ae.title),description:ce(ae.description),category:M.INP,state:o.fonts.find((e=>e.wastedTime>0))?"fail":"pass",...o};var o},i18nString:ce});const ue={title:"Forced reflow",description:"Many APIs, typically reading layout geometry, force the rendering engine to pause script execution in order to calculate the style and layout. Learn more about [forced reflow](https://developers.google.com/web/fundamentals/performance/rendering/avoid-large-complex-layouts-and-layout-thrashing#avoid-forced-synchronous-layouts) and its mitigations.",relatedStackTrace:"Stack trace",topTimeConsumingFunctionCall:"Top function call",totalReflowTime:"Total reflow time",unattributed:"Unattributed"},de=n.i18n.registerUIStrings("models/trace/insights/ForcedReflow.ts",ue),ge=n.i18n.getLocalizedString.bind(void 0,de);function pe(e){return e.scriptId+":"+e.lineNumber+":"+e.columnNumber}function me(t,n){const i=s.StackTraceForEvent.get(t,n),r=e.Trace.getZeroIndexedStackTraceForEvent(t);return i?.callFrames[0]??r?.[0]??null}var fe=Object.freeze({__proto__:null,UIStrings:ue,generateInsight:function(n,r){const s=new Map,a=n.Warnings.perWarning.get("FORCED_REFLOW")?.filter((t=>e.Trace.frameIDForEvent(t)===r.frameId&&e.Timing.eventIsInBounds(t,r.bounds)))??[];for(const e of a){const t=me(e,n),r=t?pe(t):"UNATTRIBUTED",a=i.MapUtilities.getWithDefault(s,r,(()=>({bottomUpData:t,totalTime:0,relatedEvents:[]})));a.totalTime+=e.dur??0,a.relatedEvents.push(e)}const o=function(e,n){const r=n.Renderer.entryToNode,s=new Map;if(0===e.length)return;for(const n of e){const e=r.get(n);if(!e)continue;let a,o,c=e.parent;for(;c;){const e=c.entry;if(!t.Events.isProfileCall(e)){t.Events.isFunctionCall(e)&&e.args.data&&t.Events.objectIsCallFrame(e.args.data)&&(a=e.args.data,o=e);break}a=e.callFrame,o=e,c=c.parent}if(!a||!o)continue;const l=pe(a),u=i.MapUtilities.getWithDefault(s,l,(()=>({topLevelFunctionCall:a,totalReflowTime:0,topLevelFunctionCallEvents:[]})));u.totalReflowTime+=n.dur??0,u.topLevelFunctionCallEvents.push(o)}let a;return s.forEach((e=>{(!a||e.totalReflowTime>a.totalReflowTime)&&(a=e)})),a}(a,n);return c={relatedEvents:a,topLevelFunctionCallData:o,aggregatedBottomUpData:[...s.values()]},{insightKey:"ForcedReflow",strings:ue,title:ge(ue.title),description:ge(ue.description),category:M.ALL,state:0!==c.aggregatedBottomUpData.length?"fail":"pass",...c};var c},i18nString:ge});const he={title:"Improve image delivery",description:"Reducing the download time of images can improve the perceived load time of the page and LCP. [Learn more about optimizing image size](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/)",useCompression:"Increasing the image compression factor could improve this image's download size.",useModernFormat:"Using a modern image format (WebP, AVIF) or increasing the image compression could improve this image's download size.",useVideoFormat:"Using video formats instead of GIFs can improve the download size of animated content.",useResponsiveSize:"This image file is larger than it needs to be ({PH1}) for its displayed dimensions ({PH2}). Use responsive images to reduce the image download size.",optimizeFile:"Optimize file size",others:"{PH1} others",noOptimizableImages:"No optimizable images",estimatedSavings:"{PH1} (Est {PH2})"},ve=n.i18n.registerUIStrings("models/trace/insights/ImageDelivery.ts",he),ye=n.i18n.getLocalizedString.bind(void 0,ve),Se=2/12;var Te;function Ie(e){switch(e.type){case Te.ADJUST_COMPRESSION:return ye(he.useCompression);case Te.MODERN_FORMAT_OR_COMPRESSION:return ye(he.useModernFormat);case Te.VIDEO_FORMAT:return ye(he.useVideoFormat);case Te.RESPONSIVE_SIZE:return ye(he.useResponsiveSize,{PH1:`${e.fileDimensions.width}x${e.fileDimensions.height}`,PH2:`${e.displayDimensions.width}x${e.displayDimensions.height}`})}}function _e(e){const t=n.ByteUtilities.bytesToString(e.byteSavings),i=Ie(e);return ye(he.estimatedSavings,{PH1:i,PH2:t})}function Ee(e){return Math.round(29.1*Math.log10(e.args.data.decodedBodyLength)-100.7)/100}function Me(e){return{filePixels:e.args.data.srcWidth*e.args.data.srcHeight,displayedPixels:e.args.data.width*e.args.data.height}}!function(e){e.ADJUST_COMPRESSION="ADJUST_COMPRESSION",e.MODERN_FORMAT_OR_COMPRESSION="MODERN_FORMAT_OR_COMPRESSION",e.VIDEO_FORMAT="VIDEO_FORMAT",e.RESPONSIVE_SIZE="RESPONSIVE_SIZE"}(Te||(Te={}));var we=Object.freeze({__proto__:null,get ImageOptimizationType(){return Te},UIStrings:he,generateInsight:function(t,n){const i=t=>e.Timing.eventIsInBounds(t,n.bounds),r=t.NetworkRequests.byTime.filter(i),s=[];for(const e of r){if("Image"!==e.args.data.resourceType)continue;if("image/svg+xml"===e.args.data.mimeType)continue;const n=e.args.data.redirects[0]?.url??e.args.data.url,r=t.ImagePainting.paintImageEventForUrl.get(n)?.filter(i);if(!r?.length)continue;const a=r.reduce(((e,t)=>Me(e).displayedPixels>Me(t).displayedPixels?e:t)),{filePixels:o,displayedPixels:c}=Me(a),l=Math.min(e.args.data.decodedBodyLength,e.args.data.encodedDataLength),u=l/o;let d=[];if("image/gif"===e.args.data.mimeType){if(l>102400){const t=Ee(e),n=Math.round(l*t);d.push({type:Te.VIDEO_FORMAT,byteSavings:n})}}else if(u>Se){const t=l-Math.round(Se*o);"image/webp"!==e.args.data.mimeType&&"image/avif"!==e.args.data.mimeType?d.push({type:Te.MODERN_FORMAT_OR_COMPRESSION,byteSavings:t}):d.push({type:Te.ADJUST_COMPRESSION,byteSavings:t})}const g=Math.max(0,...d.map((e=>e.byteSavings)));let p=g;const m=1-c/o;if(m>0&&!a.args.data.isCSS){const e=Math.round(m*l);(!(a.args.data.isPicture||a.args.data.srcsetAttribute)||e>12288)&&(p+=Math.round(m*(l-g)),d.push({type:Te.RESPONSIVE_SIZE,byteSavings:e,fileDimensions:{width:Math.round(a.args.data.srcWidth),height:Math.round(a.args.data.srcHeight)},displayDimensions:{width:Math.round(a.args.data.width),height:Math.round(a.args.data.height)}}))}d=d.filter((e=>e.byteSavings>4096)),d.length>0&&s.push({request:e,largestImagePaint:a,optimizations:d,byteSavings:p})}const a=new Map;for(const e of s)a.set(e.request.args.data.requestId,e.byteSavings);return s.sort(((e,t)=>t.byteSavings!==e.byteSavings?t.byteSavings-e.byteSavings:t.request.args.data.decodedBodyLength-e.request.args.data.decodedBodyLength)),o={optimizableImages:s,totalByteSavings:s.reduce(((e,t)=>e+t.byteSavings),0),metricSavings:S(a,n)},{insightKey:"ImageDelivery",strings:he,title:ye(he.title),description:ye(he.description),category:M.LCP,state:o.optimizableImages.length>0?"fail":"pass",...o,relatedEvents:new Map(o.optimizableImages.map((e=>[e.request,e.optimizations.map(_e)])))};var o},getOptimizationMessage:Ie,getOptimizationMessageWithBytes:_e,i18nString:ye});const be={description:"Start investigating with the longest phase. [Delays can be minimized](https://web.dev/articles/optimize-inp#optimize_interactions). To reduce processing duration, [optimize the main-thread costs](https://web.dev/articles/optimize-long-tasks), often JS.",title:"INP by phase",phase:"Phase",duration:"Duration",inputDelay:"Input delay",processingDuration:"Processing duration",presentationDelay:"Presentation delay",noInteractions:"No interactions detected"},Le=n.i18n.registerUIStrings("models/trace/insights/InteractionToNextPaint.ts",be),Ce=n.i18n.getLocalizedString.bind(void 0,Le);function Pe(e){return{insightKey:"InteractionToNextPaint",strings:be,title:Ce(be.title),description:Ce(be.description),category:M.INP,state:e.longestInteractionEvent?"informative":"pass",...e}}var Re=Object.freeze({__proto__:null,UIStrings:be,generateInsight:function(t,n){const i=t.UserInteractions.interactionEventsWithNoNesting.filter((t=>e.Timing.eventIsInBounds(t,n.bounds)));if(!i.length)return Pe({});const r=new Map;for(const e of i){const t=e.interactionId,n=r.get(t);(!n||e.dur>n.dur)&&r.set(t,e)}const s=[...r.values()];s.sort(((e,t)=>t.dur-e.dur));const a=Math.min(9,Math.floor(s.length/50));return Pe({relatedEvents:[s[0]],longestInteractionEvent:s[0],highPercentileInteractionEvent:s[a]})},i18nString:Ce,isINP:function(e){return"InteractionToNextPaint"===e.insightKey}});const Ne={title:"LCP request discovery",description:"Optimize LCP by making the LCP image [discoverable](https://web.dev/articles/optimize-lcp#1_eliminate_resource_load_delay) from the HTML immediately, and [avoiding lazy-loading](https://web.dev/articles/lcp-lazy-loading)",lcpLoadDelay:"LCP image loaded {PH1} after earliest start point.",fetchPriorityApplied:"fetchpriority=high applied",fetchPriorityShouldBeApplied:"fetchpriority=high should be applied",requestDiscoverable:"Request is discoverable in initial document",lazyLoadNotApplied:"lazy load not applied",noLcp:"No LCP detected",noLcpResource:"No LCP resource detected because the LCP is not an image"},Oe=n.i18n.registerUIStrings("models/trace/insights/LCPDiscovery.ts",Ne),De=n.i18n.getLocalizedString.bind(void 0,Oe);function qe(e){const t=e.lcpEvent&&e.lcpRequest?[e.lcpEvent,e.lcpRequest]:[];return{insightKey:"LCPDiscovery",strings:Ne,title:De(Ne.title),description:De(Ne.description),category:M.LCP,state:!e.lcpRequest||!e.checklist||e.checklist.eagerlyLoaded.value&&e.checklist.requestDiscoverable.value&&e.checklist.priorityHinted.value?"pass":"fail",...e,relatedEvents:t}}var ze=Object.freeze({__proto__:null,UIStrings:Ne,generateInsight:function(n,i){if(!i.navigation)return qe({});const r=n.NetworkRequests,s=n.PageLoadMetrics.metricScoresByFrameId.get(i.frameId);if(!s)throw new Error("no frame metrics");const a=s.get(i.navigationId);if(!a)throw new Error("no navigation metrics");const o=a.get("LCP"),c=o?.event;if(!c||!t.Events.isLargestContentfulPaintCandidate(c))return qe({warnings:[E.NO_LCP]});const l=r.byTime.find((e=>e.args.data.requestId===i.navigationId));if(!l)return qe({warnings:[E.NO_DOCUMENT_REQUEST]});const u=n.LargestImagePaint.lcpRequestByNavigationId.get(i.navigationId);if(!u)return qe({lcpEvent:c});const d=u.args.data.initiator?.url,g="parser"===u?.args.data.initiator?.type&&l.args.data.url===d,p=u?.args.data.isLinkPreload||g,m=c.args.data?.loadingAttr,f=u?.args.data.fetchPriorityHint,h=l?.args.data.timing?e.Timing.secondsToMicro(l.args.data.timing.requestTime)+e.Timing.milliToMicro(l.args.data.timing.receiveHeadersStart):void 0,v="high"===f;return qe({lcpEvent:c,lcpRequest:u,earliestDiscoveryTimeTs:h?t.Timing.Micro(h):void 0,checklist:{priorityHinted:{label:De(v?Ne.fetchPriorityApplied:Ne.fetchPriorityShouldBeApplied),value:v},requestDiscoverable:{label:De(Ne.requestDiscoverable),value:p},eagerlyLoaded:{label:De(Ne.lazyLoadNotApplied),value:"lazy"!==m}}})},i18nString:De,isLCPDiscovery:function(e){return"LCPDiscovery"===e.insightKey}});const Ae={title:"LCP by phase",description:"Each [phase has specific improvement strategies](https://web.dev/articles/optimize-lcp#lcp-breakdown). Ideally, most of the LCP time should be spent on loading the resources, not within delays.",timeToFirstByte:"Time to first byte",resourceLoadDelay:"Resource load delay",resourceLoadDuration:"Resource load duration",elementRenderDelay:"Element render delay",phase:"Phase",duration:"Duration",fieldDuration:"Field 75th percentile",noLcp:"No LCP detected"},Fe=n.i18n.registerUIStrings("models/trace/insights/LCPPhases.ts",Ae),Ue=n.i18n.getLocalizedString.bind(void 0,Fe);function ke(...e){return e.some((e=>Number.isNaN(e)))}function xe(n,i,r,s){const a=i.args.data.timing;if(!a)throw new Error("no timing for document request");const o=e.Timing.secondsToMicro(a.requestTime)+e.Timing.milliToMicro(a.receiveHeadersStart),c=t.Timing.Micro(o-n.ts),l=e.Timing.microToMilli(c);let u=t.Timing.Milli(r-l);if(!s)return ke(l,u)?null:{ttfb:l,renderDelay:u};const d=t.Timing.Micro(s.ts-n.ts),g=e.Timing.microToMilli(d),p=t.Timing.Micro(s.args.data.syntheticData.finishTime-n.ts),m=e.Timing.microToMilli(p),f=t.Timing.Milli(g-l),h=t.Timing.Milli(m-g);return u=t.Timing.Milli(r-m),ke(l,f,h,u)?null:{ttfb:l,loadDelay:f,loadTime:h,renderDelay:u}}function Be(e){const t=[];return e.lcpEvent&&t.push(e.lcpEvent),e.lcpRequest&&t.push(e.lcpRequest),{insightKey:"LCPPhases",strings:Ae,title:Ue(Ae.title),description:Ue(Ae.description),category:M.LCP,state:e.lcpEvent||e.lcpRequest?"informative":"pass",...e,relatedEvents:t}}var He=Object.freeze({__proto__:null,UIStrings:Ae,generateInsight:function(n,i){if(!i.navigation)return Be({});const r=n.NetworkRequests,s=n.PageLoadMetrics.metricScoresByFrameId.get(i.frameId);if(!s)throw new Error("no frame metrics");const a=s.get(i.navigationId);if(!a)throw new Error("no navigation metrics");const o=a.get("LCP"),c=o?.event;if(!c||!t.Events.isLargestContentfulPaintCandidate(c))return Be({warnings:[E.NO_LCP]});const l=e.Timing.microToMilli(o.timing),u=o.event?.ts?e.Timing.microToMilli(o.event?.ts):void 0,d=n.LargestImagePaint.lcpRequestByNavigationId.get(i.navigationId),g=r.byTime.find((e=>e.args.data.requestId===i.navigationId));return Be(g?{lcpMs:l,lcpTs:u,lcpEvent:c,lcpRequest:d,phases:xe(i.navigation,g,l,d)??void 0}:{lcpMs:l,lcpTs:u,lcpEvent:c,lcpRequest:d,warnings:[E.NO_DOCUMENT_REQUEST]})},i18nString:Ue,isLCPPhases:function(e){return"LCPPhases"===e.insightKey}});const{detectLegacyJavaScript:je}=a.LegacyJavaScript,We={title:"Legacy JavaScript",description:"Polyfills and transforms enable legacy browsers to use new JavaScript features. However, many aren't necessary for modern browsers. Consider modifying your JavaScript build process to not transpile [Baseline](https://web.dev/articles/baseline-and-polyfills) features, unless you know you must support legacy browsers. [Learn why most sites can deploy ES6+ code without transpiling](https://philipwalton.com/articles/the-state-of-es5-on-the-web/)",columnScript:"Script",columnWastedBytes:"Wasted bytes"},Ve=n.i18n.registerUIStrings("models/trace/insights/LegacyJavaScript.ts",We),Ke=n.i18n.getLocalizedString.bind(void 0,Ve);var Ge=Object.freeze({__proto__:null,UIStrings:We,generateInsight:function(t,n){const i=t.Scripts.scripts.filter((t=>!!n.navigation&&(t.frame===n.frameId&&(!t.url?.startsWith("chrome-extension://")&&e.Timing.timestampIsInBounds(n.bounds,t.ts))))),r=new Map,s=new Map;for(const e of i){if(!e.content||e.content.length<5e3)continue;const t=je(e.content,e.sourceMap);if(!(t.estimatedByteSavings<5e3)&&(r.set(e,t),e.request)){const n=_(e),i=Math.round(t.estimatedByteSavings*n),r=e.request.args.data.requestId;s.set(r,i)}}return function(e){const t=[...e.legacyJavaScriptResults.keys()].map((e=>e.request)).filter((e=>!!e));return{insightKey:"LegacyJavaScript",strings:We,title:Ke(We.title),description:Ke(We.description),category:M.ALL,state:t.length?"fail":"pass",relatedEvents:[...new Set(t)],...e}}({legacyJavaScriptResults:new Map([...r].sort(((e,t)=>t[1].estimatedByteSavings-e[1].estimatedByteSavings))),metricSavings:S(s,n)})},i18nString:Ke});const Je={title:"Modern HTTP",description:"HTTP/2 and HTTP/3 offer many benefits over HTTP/1.1, such as multiplexing. [Learn more about using modern HTTP](https://developer.chrome.com/docs/lighthouse/best-practices/uses-http2/).",request:"Request",protocol:"Protocol",noOldProtocolRequests:"No requests used HTTP/1.1"},$e=n.i18n.registerUIStrings("models/trace/insights/ModernHTTP.ts",Je),Ye=n.i18n.getLocalizedString.bind(void 0,$e);function Ze(t,n,i){if(!e.Network.STATIC_RESOURCE_TYPES.has(t.args.data.resourceType))return!1;if(t.args.data.decodedBodyLength<100){const e=n.entityByEvent.get(t);if(e){if(i?.name===e.name)return!0;if(!e.isUnrecognized)return!1}}return!0}function Qe(t,n,r){const s=[],a=new Map;for(const s of t){const t=new URL(s.args.data.url);if(!Ze(s,n,r))continue;if(e.Network.isSyntheticNetworkRequestLocalhost(s))continue;i.MapUtilities.getWithDefault(a,t.origin,(()=>[])).push(s)}const o=new Set;for(const e of t){if(o.has(e.args.data.url))continue;if(e.args.data.fromServiceWorker)continue;if(!/HTTP\/[01][.\d]?/i.test(e.args.data.protocol))continue;const t=new URL(e.args.data.url);(a.get(t.origin)||[]).length<6||(o.add(e.args.data.url),s.push(e))}return s}function Xe(e,t,n){const r=n.simulate(t),s=new Map;t.traverse((t=>{"network"===t.type&&e.has(t.request.url)&&(s.set(t.request.requestId,t.request.protocol),t.request.protocol="h2")}));const a=n.simulate(t);t.traverse((e=>{if("network"!==e.type)return;const t=s.get(e.request.requestId);void 0!==t&&(e.request.protocol=t)}));const o=r.timeInMs-a.timeInMs;return i.NumberUtilities.floor(o,.1)}function et(e,t){if(!t.navigation||!t.lantern)return;const n=new Set(e.map((e=>e.args.data.url))),i=t.lantern.metrics.firstContentfulPaint.optimisticGraph,r=t.lantern.metrics.largestContentfulPaint.optimisticGraph;return{FCP:Xe(n,i,t.lantern.simulator),LCP:Xe(n,r,t.lantern.simulator)}}var tt=Object.freeze({__proto__:null,UIStrings:Je,determineNonHttp2Resources:Qe,generateInsight:function(t,n){const i=t.NetworkRequests.byTime.filter((t=>e.Timing.eventIsInBounds(t,n.bounds))),s=t.NetworkRequests.entityMappings,a=n.navigation?.args.data?.documentLoaderURL??t.Meta.mainFrameURL,o=Qe(i,s,r.Helpers.getEntityForUrl(a,s.createdEntityCache)??null);return c={requests:o,metricSavings:et(o,n)},{insightKey:"ImageDelivery",strings:Je,title:Ye(Je.title),description:Ye(Je.description),category:M.LCP,state:c.requests.length>0?"fail":"pass",...c,relatedEvents:c.requests};var c},i18nString:Ye});const nt={title:"Network dependency tree",description:"[Avoid chaining critical requests](https://developer.chrome.com/docs/lighthouse/performance/critical-request-chains) by reducing the length of chains, reducing the download size of resources, or deferring the download of unnecessary resources to improve page load.",warningDescription:"Avoid chaining critical requests by reducing the length of chains, reducing the download size of resources, or deferring the download of unnecessary resources to improve page load.",noNetworkDependencyTree:"No rendering tasks impacted by network dependencies",maxCriticalPathLatency:"Max critical path latency:"},it=n.i18n.registerUIStrings("models/trace/insights/NetworkDependencyTree.ts",nt),rt=n.i18n.getLocalizedString.bind(void 0,it),st=new Set(["Image","XHR","Fetch","EventSource"]);function at(e){return{insightKey:"NetworkDependencyTree",strings:nt,title:rt(nt.title),description:rt(nt.description),category:M.LCP,state:e.fail?"fail":"pass",...e}}function ot(t,n){if(t.args.data.requestId===n.navigationId)return!0;if(t.args.data.isLinkPreload)return!1;const i="Document"===t.args.data.resourceType&&t.args.data.frame!==n.frameId;if(st.has(t.args.data.resourceType)||i||t.args.data.mimeType.startsWith("image/"))return!1;if(!(t.args.data.initiator?.url||e.Trace.getZeroIndexedStackTraceForEvent(t)?.at(0)?.url))return!1;const r=e.Network.isSyntheticNetworkRequestEventRenderBlocking(t);return e.Network.isSyntheticNetworkRequestHighPriority(t)||r}var ct=Object.freeze({__proto__:null,UIStrings:nt,generateInsight:function(e,n){if(!n.navigation)return at({rootNodes:[],maxTime:t.Timing.Micro(0),fail:!1});const i=[],r=new Map;let s=t.Timing.Micro(0),a=!1,o=[];const c=new Set;if(n.lantern?.graph.traverse(((e,l)=>{if(c.add(e),"network"!==e.type)return;if(!ot(e.rawRequest,n))return;const u=l.filter((e=>"network"===e.type)).reverse().map((e=>e.rawRequest));u.some((e=>!ot(e,n)))||e.isNonNetworkProtocol||function(e){if(0===e.length)return;e.length>=2&&(a=!0);const n=e[0],c=e[e.length-1],l=t.Timing.Micro(c.ts+c.dur-n.ts);l>s&&(s=l,o=e);let u=i;for(let i=0;i<e.length;++i){const s=e[i];let a=u.find((e=>e.request===s));if(!a){const e=t.Timing.Micro(s.ts+s.dur-n.ts);a={request:s,timeFromInitialRequest:e,children:[],relatedRequests:new Set},u.push(a)}e.forEach((e=>a?.relatedRequests.add(e))),r.set(s,i<2?[]:[rt(nt.warningDescription)]),u=a.children}}(u)}),(function(e){return e.getDependents().filter((e=>e.getDependencies().every((e=>c.has(e)))))})),o.length>0){let e=i;for(const t of o){const n=e.find((e=>e.request===t));n?(n.isLongest=!0,e=n.children):console.error("Some request in the longest chain is not found")}}return at({rootNodes:i,maxTime:s,fail:a,relatedEvents:r})},i18nString:rt});const lt={title:"Render blocking requests",description:"Requests are blocking the page's initial render, which may delay LCP. [Deferring or inlining](https://web.dev/learn/performance/understanding-the-critical-path#render-blocking_resources/) can move these network requests out of the critical path.",renderBlockingRequest:"Request",duration:"Duration",noRenderBlocking:"No render blocking requests for this navigation"},ut=n.i18n.registerUIStrings("models/trace/insights/RenderBlocking.ts",lt),dt=n.i18n.getLocalizedString.bind(void 0,ut);function gt(e,t,n){if(!t.lantern)return;const i=function(e){const t=new Map;for(const[n,i]of e)"network"===n.type&&t.set(n.request.requestId,{node:n,nodeTiming:i});return t}(t.lantern.metrics.firstContentfulPaint.optimisticEstimate.nodeTimings),r={FCP:0,LCP:0},s=new Map,a=new Set;for(const e of n){const t=i.get(e.args.data.requestId);if(!t)continue;const{node:n,nodeTiming:r}=t;n.traverse((e=>a.add(e.id)));const o=Math.round(r.duration);o<50||s.set(n.id,o)}return s.size&&(r.FCP=function(e,t){const n=t.simulator,i=t.metrics.firstContentfulPaint.optimisticGraph,{nodeTimings:r}=t.simulator.simulate(i),s=new Map(r),a=i.cloneWithRelationships((t=>!e.has(t.id)));if("network"!==a.type)throw new Error("minimalFCPGraph not a NetworkNode");const o=Math.max(...Array.from(Array.from(s).map((e=>e[1].endTime)))),c=a.request.transferSize,l=c||0;a.request.transferSize=l+0;const u=n.simulate(a).timeInMs;return a.request.transferSize=c,Math.round(Math.max(o-u,0))}(a,t.lantern),function(e,t){return e.LargestImagePaint.lcpRequestByNavigationId.has(t.navigationId)}(e,t)||(r.LCP=r.FCP)),{metricSavings:r,requestIdToWastedMs:s}}function pt(e){return{insightKey:"RenderBlocking",strings:lt,title:dt(lt.title),description:dt(lt.description),category:M.LCP,state:e.renderBlockingRequests.length>0?"fail":"pass",...e}}var mt=Object.freeze({__proto__:null,UIStrings:lt,generateInsight:function(t,n){if(!n.navigation)return pt({renderBlockingRequests:[]});const i=t.PageLoadMetrics.metricScoresByFrameId.get(n.frameId)?.get(n.navigationId)?.get("FP")?.event?.ts;if(!i)return pt({renderBlockingRequests:[],warnings:[E.NO_FP]});let r=[];for(const s of t.NetworkRequests.byTime){if(s.args.data.frame!==n.frameId)continue;if(!e.Network.isSyntheticNetworkRequestEventRenderBlocking(s))continue;if(s.args.data.syntheticData.finishTime>i)continue;if("in_body_parser_blocking"===s.args.data.renderBlocking){const e=s.args.data.priority,t="Script"===s.args.data.resourceType;if("VeryHigh"!==e&&!(t&&"High"===e))continue}e.Trace.getNavigationForTraceEvent(s,n.frameId,t.Meta.navigationsByFrameId)===n.navigation&&r.push(s)}const s=gt(t,n,r);return r=r.sort(((e,t)=>t.dur-e.dur)),pt({relatedEvents:r,renderBlockingRequests:r,...s})},i18nString:dt,isRenderBlocking:function(e){return"RenderBlocking"===e.insightKey}});const ft=[function(e){return"MarkDOMContent"===e.name},function(e){return"MarkLoad"===e.name},function(e){return"firstPaint"===e.name},function(e){return"firstContentfulPaint"===e.name},function(e){return"largestContentfulPaint::Candidate"===e.name},function(e){return"navigationStart"===e.name&&""!==e.args?.data?.documentLoaderURL}];var ht;!function(e){e.Elapsed="elapsed (us)",e.RejectPercentage="reject_percentage",e.FastRejectCount="fast_reject_count",e.MatchAttempts="match_attempts",e.MatchCount="match_count",e.Selector="selector",e.StyleSheetId="style_sheet_id"}(ht||(ht={}));const vt={title:"CSS Selector costs",description:"If Recalculate Style costs remain high, selector optimization can reduce them. [Optimize the selectors](https://developer.chrome.com/docs/devtools/performance/selector-stats) with both high elapsed time and high slow-path %. Simpler selectors, fewer selectors, a smaller DOM, and a shallower DOM will all reduce matching costs.",matchAttempts:"Match attempts",matchCount:"Match count",elapsed:"Elapsed time",topSelectors:"Top selectors",total:"Total",enableSelectorData:"No CSS selector data was found. CSS selector stats need to be enabled in the performance panel settings."},yt=n.i18n.registerUIStrings("models/trace/insights/SlowCSSSelector.ts",vt),St=n.i18n.getLocalizedString.bind(void 0,yt);var Tt=Object.freeze({__proto__:null,UIStrings:vt,generateInsight:function(n,i){const r=n.SelectorStats;if(!r)throw new Error("no selector stats data");const s=function(t,n){const i=new Map;for(const[r,s]of t)if(r.args.beginData?.frame===n.frameId&&e.Timing.eventIsInBounds(r,n.bounds))for(const e of s.timings){const t=e[ht.Selector]+"_"+e[ht.StyleSheetId],n=i.get(t);void 0!==n?(n[ht.Elapsed]+=e[ht.Elapsed],n[ht.FastRejectCount]+=e[ht.FastRejectCount],n[ht.MatchAttempts]+=e[ht.MatchAttempts],n[ht.MatchCount]+=e[ht.MatchCount]):i.set(t,{...e})}return[...i.values()]}(r.dataForUpdateLayoutEvent,i);let a=0,o=0,c=0;s.map((e=>{a+=e[ht.Elapsed],o+=e[ht.MatchAttempts],c+=e[ht.MatchCount]}));const l=s.toSorted(((e,t)=>t[ht.Elapsed]-e[ht.Elapsed])),u=s.toSorted(((e,t)=>t[ht.MatchAttempts]-e[ht.MatchAttempts]));return d={relatedEvents:[],totalElapsedMs:t.Timing.Milli(a/1e3),totalMatchAttempts:o,totalMatchCount:c,topElapsedMs:l.slice(0,3),topMatchAttempts:u.slice(0,3)},{insightKey:"SlowCSSSelector",strings:vt,title:St(vt.title),description:St(vt.description),category:M.ALL,state:0!==d.topElapsedMs.length&&0!==d.topMatchAttempts.length?"informative":"pass",...d};var d},i18nString:St});const It={title:"3rd parties",description:"3rd party code can significantly impact load performance. [Reduce and defer loading of 3rd party code](https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/loading-third-party-javascript/) to prioritize your page's content.",columnThirdParty:"3rd party",columnTransferSize:"Transfer size",columnMainThreadTime:"Main thread time",noThirdParties:"No third parties found"},_t=n.i18n.registerUIStrings("models/trace/insights/ThirdParties.ts",It),Et=n.i18n.getLocalizedString.bind(void 0,_t);function Mt(e,t){const n=[];for(const i of e)if(i.entity!==t){const e=i.relatedEvents??[];n.push(...e)}return n}var wt=Object.freeze({__proto__:null,UIStrings:It,generateInsight:function(e,t){const n=s.ThirdParties.summarizeThirdParties(e,t.bounds),i=t.navigation?.args.data?.documentLoaderURL??e.Meta.mainFrameURL,a=o.ThirdPartyWeb.getEntity(i)||r.Helpers.makeUpEntity(e.Renderer.entityMappings.createdEntityCache,i);return c={relatedEvents:Mt(n,a),firstPartyEntity:a,summaries:n},{insightKey:"ThirdParties",strings:It,title:Et(It.title),description:Et(It.description),category:M.ALL,state:c.summaries.find((e=>e.entity!==c.firstPartyEntity))?"informative":"pass",...c};var c},i18nString:Et});const bt={title:"Optimize viewport for mobile",description:"Tap interactions may be [delayed by up to 300 ms](https://developer.chrome.com/blog/300ms-tap-delay-gone-away/) if the viewport is not optimized for mobile."},Lt=n.i18n.registerUIStrings("models/trace/insights/Viewport.ts",bt),Ct=n.i18n.getLocalizedString.bind(void 0,Lt);function Pt(e){return{insightKey:"Viewport",strings:bt,title:Ct(bt.title),description:Ct(bt.description),category:M.INP,state:!1===e.mobileOptimized?"fail":"pass",...e}}var Rt=Object.freeze({__proto__:null,UIStrings:bt,generateInsight:function(t,n){const i=t.UserInteractions.parseMetaViewportEvents.find((t=>t.args.data.frame===n.frameId&&e.Timing.eventIsInBounds(t,n.bounds))),r=t.UserInteractions.beginCommitCompositorFrameEvents.filter((t=>t.args.frame===n.frameId&&(!(i&&t.ts<i.ts)&&e.Timing.eventIsInBounds(t,n.bounds))));if(!r.length)return Pt({mobileOptimized:null,warnings:[E.NO_LAYOUT]});for(const e of r)if(!e.args.is_mobile_optimized)return Pt({mobileOptimized:!1,viewportEvent:i,metricSavings:{INP:300}});return Pt({mobileOptimized:!0,viewportEvent:i})},i18nString:Ct}),Nt=Object.freeze({__proto__:null,CLSCulprits:V,Cache:z,DOMSize:te,DocumentLatency:Y,DuplicatedJavaScript:se,FontDisplay:le,ForcedReflow:fe,ImageDelivery:we,InteractionToNextPaint:Re,LCPDiscovery:ze,LCPPhases:He,LegacyJavaScript:Ge,ModernHTTP:tt,NetworkDependencyTree:ct,RenderBlocking:mt,SlowCSSSelector:Tt,ThirdParties:wt,Viewport:Rt});export{w as Common,Nt as Models,u as Statistics,b as Types};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
class e extends Error{}class t{static rewriteChromeInternalUrl(e){return e?.startsWith("chrome://")?(e.endsWith("/")&&(e=e.replace(/\/$/,"")),e.replace(/^chrome:\/\/chrome\//,"chrome://")):e}static equalWithExcludedFragments(e,t){[e,t]=[e,t].map(this.rewriteChromeInternalUrl);try{const n=new URL(e);n.hash="";const r=new URL(t);return r.hash="",n.href===r.href}catch{return!1}}}const n={Document:.9,XHR:.9,Fetch:.9};class r{static get summary(){return"__SUMMARY__"}static groupByOrigin(e){const t=new Map;return e.forEach((e=>{const n=e.parsedURL.securityOrigin,r=t.get(n)||[];r.push(e),t.set(n,r)})),t}static getSummary(e){let t;if(e.sort(((e,t)=>e-t)),0===e.length)t=e[0];else if(e.length%2==0){t=(e[Math.floor((e.length-1)/2)]+e[Math.floor((e.length-1)/2)+1])/2}else t=e[Math.floor((e.length-1)/2)];return{min:e[0],max:e[e.length-1],avg:e.reduce(((e,t)=>e+t),0)/e.length,median:t}}static summarize(e){const t=new Map,n=[];for(const[i,s]of e)t.set(i,r.getSummary(s)),n.push(...s);return t.set(r.summary,r.getSummary(n)),t}static estimateValueByOrigin(e,t){const n=r.estimateIfConnectionWasReused(e),i=r.groupByOrigin(e),s=new Map;for(const[e,r]of i.entries()){let i=[];for(const e of r){const r=e.timing;if(!r)continue;const s=t({request:e,timing:r,connectionReused:n.get(e.requestId)});void 0!==s&&(i=i.concat(s))}i.length&&s.set(e,i)}return s}static estimateRTTViaConnectionTiming(e){const{timing:t,connectionReused:n,request:r}=e;if(n)return;const{connectStart:i,sslStart:s,sslEnd:o,connectEnd:a}=t;return a>=0&&i>=0&&r.protocol.startsWith("h3")?a-i:s>=0&&o>=0&&s!==i?[a-s,s-i]:i>=0&&a>=0?a-i:void 0}static estimateRTTViaDownloadTiming(e){const{timing:t,connectionReused:n,request:r}=e;if(n)return;if(r.transferSize<=14336)return;if(!Number.isFinite(t.receiveHeadersEnd)||t.receiveHeadersEnd<0)return;const i=r.networkEndTime-r.networkRequestTime-t.receiveHeadersEnd,s=Math.log2(r.transferSize/14336);return s>5?void 0:i/s}static estimateRTTViaSendStartTiming(e){const{timing:t,connectionReused:n,request:r}=e;if(n)return;if(!Number.isFinite(t.sendStart)||t.sendStart<0)return;let i=1;return r.protocol.startsWith("h3")||(i+=1),"https"===r.parsedURL.scheme&&(i+=1),t.sendStart/i}static estimateRTTViaHeadersEndTiming(e){const{timing:t,connectionReused:r,request:i}=e;if(!Number.isFinite(t.receiveHeadersEnd)||t.receiveHeadersEnd<0)return;if(!i.resourceType)return;const s=n[i.resourceType]||.4,o=t.receiveHeadersEnd*s;let a=1;return r||(a+=1,i.protocol.startsWith("h3")||(a+=1),"https"===i.parsedURL.scheme&&(a+=1)),Math.max((t.receiveHeadersEnd-o)/a,3)}static estimateResponseTimeByOrigin(e,t){return r.estimateValueByOrigin(e,(({request:e,timing:n})=>{if(void 0!==e.serverResponseTime)return e.serverResponseTime;if(!Number.isFinite(n.receiveHeadersEnd)||n.receiveHeadersEnd<0)return;if(!Number.isFinite(n.sendEnd)||n.sendEnd<0)return;const i=n.receiveHeadersEnd-n.sendEnd,s=e.parsedURL.securityOrigin,o=t.get(s)||t.get(r.summary)||0;return Math.max(i-o,0)}))}static canTrustConnectionInformation(e){const t=new Map;for(const n of e){const e=t.get(n.connectionId)||!n.connectionReused;t.set(n.connectionId,e)}return!(t.size<=1)&&Array.from(t.values()).every((e=>e))}static estimateIfConnectionWasReused(e,t){const{forceCoarseEstimates:n=!1}=t||{};if(!n&&r.canTrustConnectionInformation(e))return new Map(e.map((e=>[e.requestId,Boolean(e.connectionReused)])));const i=new Map,s=r.groupByOrigin(e);for(const e of s.values()){const t=e.map((e=>e.networkEndTime)).reduce(((e,t)=>Math.min(e,t)),1/0);for(const n of e)i.set(n.requestId,n.networkRequestTime>=t||"h2"===n.protocol);const n=e.reduce(((e,t)=>e.networkRequestTime>t.networkRequestTime?t:e));i.set(n.requestId,!1)}return i}static estimateRTTByOrigin(t,n){const{forceCoarseEstimates:i=!1,coarseEstimateMultiplier:s=.3,useDownloadEstimates:o=!0,useSendStartEstimates:a=!0,useHeadersEndEstimates:c=!0}=n||{},u=r.estimateIfConnectionWasReused(t),m=r.groupByOrigin(t),d=new Map;for(const[l,h]of m.entries()){const f=[];function g(e,t=1){for(const n of h){const r=n.timing;if(!r||!n.transferSize)continue;const i=e({request:n,timing:r,connectionReused:u.get(n.requestId)});void 0!==i&&(Array.isArray(i)?f.push(...i.map((e=>e*t))):f.push(i*t))}}i||g(this.estimateRTTViaConnectionTiming),f.length||(o&&g(this.estimateRTTViaDownloadTiming,s),a&&g(this.estimateRTTViaSendStartTiming,s),c&&g(this.estimateRTTViaHeadersEndTiming,s)),f.length&&d.set(l,f)}if(!d.size)throw new e("No timing information available");return r.summarize(d)}static estimateServerResponseTimeByOrigin(e,t){let n=t?.rttByOrigin;if(!n){n=new Map;const i=r.estimateRTTByOrigin(e,t);for(const[e,t]of i.entries())n.set(e,t.min)}const i=r.estimateResponseTimeByOrigin(e,n);return r.summarize(i)}static estimateThroughput(e){let t=0;const n=e.reduce(((e,n)=>{const r=n.parsedURL?.scheme;return"data"===r||n.failed||!n.finished||n.statusCode>300||!n.transferSize||(t+=n.transferSize,e.push({time:n.responseHeadersEndTime/1e3,isStart:!0}),e.push({time:n.networkEndTime/1e3,isStart:!1})),e}),[]).sort(((e,t)=>e.time-t.time));if(!n.length)return null;let r=0,i=0,s=0;return n.forEach((e=>{e.isStart?(0===r&&(i=e.time),r++):(r--,0===r&&(s+=e.time-i))})),8*t/s}static computeRTTAndServerResponseTime(e){const t=new Map;for(const[n,i]of r.estimateRTTByOrigin(e).entries())t.set(n,i.min);const n=Math.min(...Array.from(t.values())),i=r.estimateServerResponseTimeByOrigin(e,{rttByOrigin:t}),s=new Map,o=new Map;for(const[e,r]of i.entries()){const i=t.get(e)||n;s.set(e,i-n),o.set(e,r.median)}return{rtt:n,additionalRttByOrigin:s,serverResponseTimeByOrigin:o}}static analyze(e){const t=r.estimateThroughput(e);return null===t?null:{throughput:t,...r.computeRTTAndServerResponseTime(e)}}static findResourceForUrl(e,n){return e.find((e=>n.startsWith(e.url)&&t.equalWithExcludedFragments(e.url,n)))}static findLastDocumentForUrl(e,n){const r=e.filter((e=>"Document"===e.resourceType&&!e.failed&&n.startsWith(e.url)&&t.equalWithExcludedFragments(e.url,n)));return r[r.length-1]}static resolveRedirects(e){for(;e.redirectDestination;)e=e.redirectDestination;return e}}export{e as LanternError,r as NetworkAnalyzer};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import*as e from"../core/core.js";class t{static types={NETWORK:"network",CPU:"cpu"};_id;_isMainDocument;dependents;dependencies;constructor(e){this._id=e,this._isMainDocument=!1,this.dependents=[],this.dependencies=[]}get id(){return this._id}get type(){throw new e.LanternError("Unimplemented")}get startTime(){throw new e.LanternError("Unimplemented")}get endTime(){throw new e.LanternError("Unimplemented")}setIsMainDocument(e){this._isMainDocument=e}isMainDocument(){return this._isMainDocument}getDependents(){return this.dependents.slice()}getNumberOfDependents(){return this.dependents.length}getDependencies(){return this.dependencies.slice()}getNumberOfDependencies(){return this.dependencies.length}getRootNode(){let e=this;for(;e.dependencies.length;)e=e.dependencies[0];return e}addDependent(e){e.addDependency(this)}addDependency(t){if(t===this)throw new e.LanternError("Cannot add dependency on itself");this.dependencies.includes(t)||(t.dependents.push(this),this.dependencies.push(t))}removeDependent(e){e.removeDependency(this)}removeDependency(e){if(!this.dependencies.includes(e))return;const t=e.dependents.indexOf(this);e.dependents.splice(t,1),this.dependencies.splice(this.dependencies.indexOf(e),1)}removeAllDependencies(){for(const e of this.dependencies.slice())this.removeDependency(e)}isDependentOn(e){let t=!1;return this.traverse((r=>{t||(t=r===e)}),(e=>t?[]:e.getDependencies())),t}cloneWithoutRelationships(){const e=new t(this.id);return e.setIsMainDocument(this._isMainDocument),e}cloneWithRelationships(t){const r=this.getRootNode(),n=new Map;r.traverse((e=>{n.has(e.id)||(void 0!==t?t(e)&&e.traverse((e=>n.set(e.id,e.cloneWithoutRelationships())),(e=>e.dependencies.filter((e=>!n.has(e.id))))):n.set(e.id,e.cloneWithoutRelationships()))})),r.traverse((t=>{const r=n.get(t.id);if(r)for(const s of t.dependencies){const t=n.get(s.id);if(!t)throw new e.LanternError("Dependency somehow not cloned");r.addDependency(t)}}));const s=n.get(this.id);if(!s)throw new e.LanternError("Cloned graph missing node");return s}traverse(e,t){for(const{node:r,traversalPath:n}of this.traverseGenerator(t))e(r,n)}*traverseGenerator(e){e||(e=e=>e.getDependents());const t=[[this]],r=new Set([this.id]);for(;t.length;){const n=t.shift(),s=n[0];yield{node:s,traversalPath:n};for(const i of e(s))r.has(i.id)||(r.add(i.id),t.push([i,...n]))}}static hasCycle(e,r="both"){if("both"===r)return t.hasCycle(e,"dependents")||t.hasCycle(e,"dependencies");const n=new Set,s=[],i=[e],o=new Map([[e,0]]);for(;i.length;){const e=i.pop();if(s.includes(e))return!0;if(n.has(e))continue;for(;s.length>o.get(e);)s.pop();n.add(e),s.push(e);const t="dependents"===r?e.dependents:e.dependencies;for(const e of t)i.includes(e)||(i.push(e),o.set(e,s.length))}return!1}canDependOn(e){return e.startTime<=this.startTime}}class r extends t{_event;_childEvents;correctedEndTs;constructor(e,t=[],r){super(`${e.tid}.${e.ts}`),this._event=e,this._childEvents=t,this.correctedEndTs=r}get type(){return t.types.CPU}get startTime(){return this._event.ts}get endTime(){return this.correctedEndTs?this.correctedEndTs:this._event.ts+this._event.dur}get duration(){return this.endTime-this.startTime}get event(){return this._event}get childEvents(){return this._childEvents}didPerformLayout(){return this._childEvents.some((e=>"Layout"===e.name))}getEvaluateScriptURLs(){const e=new Set;for(const t of this._childEvents)"EvaluateScript"===t.name&&t.args.data?.url&&e.add(t.args.data.url);return e}cloneWithoutRelationships(){return new r(this._event,this._childEvents,this.correctedEndTs)}}const n=["blob","data","intent","file","filesystem","chrome-extension"];function s(e){const t=e.includes(":")?e.slice(0,e.indexOf(":")):e;return n.includes(t)}class i extends t{_request;constructor(e){super(e.requestId),this._request=e}get type(){return t.types.NETWORK}get startTime(){return 1e3*this._request.rendererStartTime}get endTime(){return 1e3*this._request.networkEndTime}get rawRequest(){return this._request.rawRequest}get request(){return this._request}get initiatorType(){return this._request.initiator.type}get fromDiskCache(){return Boolean(this._request.fromDiskCache)}get isNonNetworkProtocol(){return s(this.request.protocol)||s(this.request.parsedURL.scheme)}get isConnectionless(){return this.fromDiskCache||this.isNonNetworkProtocol}hasRenderBlockingPriority(){const e=this._request.priority,t="Script"===this._request.resourceType,r="Document"===this._request.resourceType;return"VeryHigh"===e||"High"===e&&t||"High"===e&&r}cloneWithoutRelationships(){const e=new i(this._request);return e.setIsMainDocument(this._isMainDocument),e}}const o=/^video/;class d{static getNetworkInitiators(e){if(!e.initiator)return[];if(e.initiator.url)return[e.initiator.url];if("script"===e.initiator.type){const t=new Set;let r=e.initiator.stack;for(;r;){const e=r.callFrames||[];for(const r of e)r.url&&t.add(r.url);r=r.parent}return Array.from(t)}return[]}static getNetworkNodeOutput(e){const t=[],r=new Map,n=new Map,s=new Map;return e.forEach((e=>{if(o.test(e.mimeType))return;if(e.fromWorker)return;for(;r.has(e.requestId);)e.requestId+=":duplicate";const d=new i(e);t.push(d);const a=n.get(e.url)||[];if(a.push(d),r.set(e.requestId,d),n.set(e.url,a),e.frameId&&"Document"===e.resourceType&&e.documentURL===e.url){const t=s.has(e.frameId)?null:d;s.set(e.frameId,t)}})),{nodes:t,idToNodeMap:r,urlToNodeMap:n,frameIdToNodeMap:s}}static isScheduleableTask(e){return"RunTask"===e.name||"ThreadControllerImpl::RunTask"===e.name||"ThreadControllerImpl::DoWork"===e.name||"TaskQueueManager::ProcessTaskFromWorkQueue"===e.name}static assertHasToplevelEvents(t){if(!t.some(this.isScheduleableTask))throw new e.LanternError("Could not find any top level events")}static getCPUNodes(e){const t=[];let n=0;for(d.assertHasToplevelEvents(e);n<e.length;){const s=e[n];if(n++,!d.isScheduleableTask(s)||!s.dur)continue;let i;const o=[];for(const t=s.ts+s.dur;n<e.length&&e[n].ts<t;n++){const t=e[n];if(d.isScheduleableTask(t)&&t.dur){i=t.ts-1;break}o.push(t)}t.push(new r(s,o,i))}return t}static linkNetworkNodes(e,t){t.nodes.forEach((r=>{const n=r.request.initiatorRequest||e.request,s=t.idToNodeMap.get(n.requestId)||e,i=!s.isDependentOn(r)&&r.canDependOn(s),o=d.getNetworkInitiators(r.request);if(o.length?o.forEach((e=>{const n=t.urlToNodeMap.get(e)||[];1===n.length&&n[0].startTime<=r.startTime&&!n[0].isDependentOn(r)?r.addDependency(n[0]):i&&s.addDependent(r)})):i&&s.addDependent(r),r!==e&&0===r.getDependencies().length&&r.canDependOn(e)&&r.addDependency(e),!r.request.redirects)return;const a=[...r.request.redirects,r.request];for(let e=1;e<a.length;e++){const r=t.idToNodeMap.get(a[e-1].requestId),n=t.idToNodeMap.get(a[e].requestId);n&&r&&n.addDependency(r)}}))}static linkCPUNodes(e,t,r){const n=new Set(["XHR","Fetch","Script"]);function s(e,r){const s=t.idToNodeMap.get(r);if(!s||s.startTime<=e.startTime)return;const{request:i}=s,o=i.resourceType||i.redirectDestination?.resourceType;n.has(o)&&e.addDependent(s)}function i(e,r){if(!r)return;const n=t.frameIdToNodeMap.get(r);n&&(n.startTime>=e.startTime||e.addDependency(n))}function o(e,r){if(!r)return;const n=t.urlToNodeMap.get(r)||[];let s=null,i=1/0;for(const t of n){if(e.startTime<=t.startTime)return;const r=e.startTime-t.endTime;r>=-1e5&&r<i&&(s=t,i=r)}s&&e.addDependency(s)}const a=new Map;for(const t of r){for(const e of t.childEvents){if(!e.args.data)continue;const r=e.args.data.url,n=(e.args.data.stackTrace||[]).map((e=>e.url)).filter(Boolean);switch(e.name){case"TimerInstall":a.set(e.args.data.timerId,t),n.forEach((e=>o(t,e)));break;case"TimerFire":{const r=a.get(e.args.data.timerId);if(!r||r.endTime>t.startTime)break;r.addDependent(t);break}case"InvalidateLayout":case"ScheduleStyleRecalculation":i(t,e.args.data.frame),n.forEach((e=>o(t,e)));break;case"EvaluateScript":i(t,e.args.data.frame),o(t,r),n.forEach((e=>o(t,e)));break;case"XHRReadyStateChange":if(4!==e.args.data.readyState)break;o(t,r),n.forEach((e=>o(t,e)));break;case"FunctionCall":case"v8.compile":i(t,e.args.data.frame),o(t,r);break;case"ParseAuthorStyleSheet":i(t,e.args.data.frame),o(t,e.args.data.styleSheetUrl);break;case"ResourceSendRequest":i(t,e.args.data.frame),s(t,e.args.data.requestId),n.forEach((e=>o(t,e)))}}0===t.getNumberOfDependencies()&&t.canDependOn(e)&&t.addDependency(e)}let c=!1,u=!1,h=!1;for(const e of r){let t=!1;!c&&e.childEvents.some((e=>"Layout"===e.name))&&(t=c=!0),!u&&e.childEvents.some((e=>"Paint"===e.name))&&(t=u=!0),!h&&e.childEvents.some((e=>"ParseHTML"===e.name))&&(t=h=!0),t||e.duration>=1e4||(1===e.getNumberOfDependencies()||e.getNumberOfDependents()<=1)&&d.pruneNode(e)}}static pruneNode(e){const t=e.getDependencies(),r=e.getDependents();for(const n of t){e.removeDependency(n);for(const e of r)n.addDependent(e)}for(const t of r)e.removeDependent(t)}static debugNormalizeRequests(e){for(const t of e)t.rendererStartTime=Math.round(1e3*t.rendererStartTime)/1e3,t.networkRequestTime=Math.round(1e3*t.networkRequestTime)/1e3,t.responseHeadersEndTime=Math.round(1e3*t.responseHeadersEndTime)/1e3,t.networkEndTime=Math.round(1e3*t.networkEndTime)/1e3;for(const t of e)delete t.rawRequest,t.initiatorRequest&&(t.initiatorRequest={id:t.initiatorRequest.requestId}),t.redirectDestination&&(t.redirectDestination={id:t.redirectDestination.requestId}),t.redirectSource&&(t.redirectSource={id:t.redirectSource.requestId}),t.redirects&&(t.redirects=t.redirects.map((e=>e.requestId)));const t=e.map((e=>({requestId:e.requestId,connectionId:e.connectionId,connectionReused:e.connectionReused,url:e.url,protocol:e.protocol,parsedURL:e.parsedURL,documentURL:e.documentURL,rendererStartTime:e.rendererStartTime,networkRequestTime:e.networkRequestTime,responseHeadersEndTime:e.responseHeadersEndTime,networkEndTime:e.networkEndTime,transferSize:e.transferSize,resourceSize:e.resourceSize,fromDiskCache:e.fromDiskCache,fromMemoryCache:e.fromMemoryCache,finished:e.finished,statusCode:e.statusCode,redirectSource:e.redirectSource,redirectDestination:e.redirectDestination,redirects:e.redirects,failed:e.failed,initiator:e.initiator,timing:e.timing?{requestTime:e.timing.requestTime,proxyStart:e.timing.proxyStart,proxyEnd:e.timing.proxyEnd,dnsStart:e.timing.dnsStart,dnsEnd:e.timing.dnsEnd,connectStart:e.timing.connectStart,connectEnd:e.timing.connectEnd,sslStart:e.timing.sslStart,sslEnd:e.timing.sslEnd,workerStart:e.timing.workerStart,workerReady:e.timing.workerReady,workerFetchStart:e.timing.workerFetchStart,workerRespondWithSettled:e.timing.workerRespondWithSettled,sendStart:e.timing.sendStart,sendEnd:e.timing.sendEnd,pushStart:e.timing.pushStart,pushEnd:e.timing.pushEnd,receiveHeadersStart:e.timing.receiveHeadersStart,receiveHeadersEnd:e.timing.receiveHeadersEnd}:e.timing,resourceType:e.resourceType,mimeType:e.mimeType,priority:e.priority,initiatorRequest:e.initiatorRequest,frameId:e.frameId,fromWorker:e.fromWorker,isLinkPreload:e.isLinkPreload,serverResponseTime:e.serverResponseTime}))).filter((e=>!e.fromWorker));console.log(t)}static createGraph(t,r,n){const s=d.getNetworkNodeOutput(r),o=d.getCPUNodes(t),{requestedUrl:a,mainDocumentUrl:c}=n;if(!a)throw new e.LanternError("requestedUrl is required to get the root request");if(!c)throw new e.LanternError("mainDocumentUrl is required to get the main resource");const u=e.NetworkAnalyzer.findResourceForUrl(r,a);if(!u)throw new e.LanternError("rootRequest not found");const h=s.idToNodeMap.get(u.requestId);if(!h)throw new e.LanternError("rootNode not found");const p=e.NetworkAnalyzer.findLastDocumentForUrl(r,c);if(!p)throw new e.LanternError("mainDocumentRequest not found");const m=s.idToNodeMap.get(p.requestId);if(!m)throw new e.LanternError("mainDocumentNode not found");if(d.linkNetworkNodes(h,s),d.linkCPUNodes(h,s,o),m.setIsMainDocument(!0),i.hasCycle(h))throw new e.LanternError("Invalid dependency graph created, cycle detected");return h}static printGraph(e,t=100){function r(e,t,r=" "){return e+r.repeat(Math.max(t-e.length,0))}const n=[];e.traverse((e=>n.push(e))),n.sort(((e,t)=>e.startTime-t.startTime));const s=n[0].startTime,i=(n.reduce(((e,t)=>Math.max(e,t.endTime)),0)-s)/t;n.forEach((e=>{const n=Math.round((e.startTime-s)/i),o=Math.ceil((e.endTime-e.startTime)/i),d=r("",n)+r("",o,"="),a=e.request?e.request.url:e.type;console.log(r(d,t),`| ${a.slice(0,30)}`)}))}}export{t as BaseNode,r as CPUNode,i as NetworkNode,d as PageDependencyGraph};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import*as r from"./core/core.js";export{r as Core};import*as s from"./graph/graph.js";export{s as Graph};import*as o from"./metrics/metrics.js";export{o as Metrics};import*as t from"./simulation/simulation.js";export{t as Simulation};import*as a from"./types/types.js";export{a as Types};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import*as t from"../graph/graph.js";import*as e from"../core/core.js";class i{static getScriptUrls(e,i){const s=new Set;return e.traverse((e=>{e.type===t.BaseNode.types.NETWORK&&"Script"===e.request.resourceType&&i?.(e)&&s.add(e.request.url)})),s}static get coefficients(){throw new e.LanternError("coefficients unimplemented!")}static getScaledCoefficients(t){return this.coefficients}static getOptimisticGraph(t,i){throw new e.LanternError("Optimistic graph unimplemented!")}static getPessimisticGraph(t,i){throw new e.LanternError("Pessmistic graph unimplemented!")}static getEstimateFromSimulation(t,e){return t}static compute(t,e){const{simulator:i,graph:s,processedNavigation:r}=t,n=this.name.replace("Lantern",""),a=this.getOptimisticGraph(s,r),o=this.getPessimisticGraph(s,r);let c={label:`optimistic${n}`};const m=i.simulate(a,c);c={label:`pessimistic${n}`};const p=i.simulate(o,c),u=this.getEstimateFromSimulation(m,{...e,optimistic:!0}),d=this.getEstimateFromSimulation(p,{...e,optimistic:!1}),l=this.getScaledCoefficients(i.rtt),g=l.intercept>0?Math.min(1,u.timeInMs/1e3):1;return{timing:l.intercept*g+l.optimistic*u.timeInMs+l.pessimistic*d.timeInMs,optimisticEstimate:u,pessimisticEstimate:d,optimisticGraph:a,pessimisticGraph:o}}}class s extends i{static get coefficients(){return{intercept:0,optimistic:.5,pessimistic:.5}}static getRenderBlockingNodeData(e,{cutoffTimestamp:s,treatNodeAsRenderBlocking:r,additionalCpuNodesToTreatAsRenderBlocking:n}){const a=new Map,o=[];e.traverse((e=>{if(e.type===t.BaseNode.types.CPU){e.startTime<=s&&o.push(e);const t=e.getEvaluateScriptURLs();for(const i of t){const t=a.get(i)||e;a.set(i,e.startTime<t.startTime?e:t)}}})),o.sort(((t,e)=>t.startTime-e.startTime));const c=i.getScriptUrls(e,(t=>t.endTime<=s&&r(t))),m=new Set,p=new Set;for(const t of c){const e=a.get(t);e&&(o.includes(e)?p.add(e.id):m.add(t))}const u=o.find((t=>t.didPerformLayout()));u&&p.add(u.id);const d=o.find((t=>t.childEvents.some((t=>"Paint"===t.name))));d&&p.add(d.id);const l=o.find((t=>t.childEvents.some((t=>"ParseHTML"===t.name))));return l&&p.add(l.id),n&&o.filter(n).forEach((t=>p.add(t.id))),{definitelyNotRenderBlockingScriptUrls:m,renderBlockingCpuNodeIds:p}}static getFirstPaintBasedGraph(e,{cutoffTimestamp:i,treatNodeAsRenderBlocking:s,additionalCpuNodesToTreatAsRenderBlocking:r}){const n=this.getRenderBlockingNodeData(e,{cutoffTimestamp:i,treatNodeAsRenderBlocking:s,additionalCpuNodesToTreatAsRenderBlocking:r}),{definitelyNotRenderBlockingScriptUrls:a,renderBlockingCpuNodeIds:o}=n;return e.cloneWithRelationships((e=>{if(e.type===t.BaseNode.types.NETWORK){if((e.endTime>i||e.startTime>i)&&!e.isMainDocument())return!1;const t=e.request.url;return!a.has(t)&&s(e)}return o.has(e.id)}))}static getOptimisticGraph(t,e){return this.getFirstPaintBasedGraph(t,{cutoffTimestamp:e.timestamps.firstContentfulPaint,treatNodeAsRenderBlocking:t=>t.hasRenderBlockingPriority()&&"script"!==t.initiatorType})}static getPessimisticGraph(t,e){return this.getFirstPaintBasedGraph(t,{cutoffTimestamp:e.timestamps.firstContentfulPaint,treatNodeAsRenderBlocking:t=>t.hasRenderBlockingPriority()})}}class r extends i{static get coefficients(){return{intercept:0,optimistic:.45,pessimistic:.55}}static getOptimisticGraph(e){return e.cloneWithRelationships((e=>{if(e.type===t.BaseNode.types.CPU)return e.duration>2e4;const i="Image"===e.request.resourceType,s="Script"===e.request.resourceType;return!i&&(s||"High"===e.request.priority||"VeryHigh"===e.request.priority)}))}static getPessimisticGraph(t){return t}static getEstimateFromSimulation(t,i){if(!i.lcpResult)throw new e.LanternError("missing lcpResult");const s=r.getLastLongTaskEndTime(t.nodeTimings),n=i.optimistic?i.lcpResult.optimisticEstimate.timeInMs:i.lcpResult.pessimisticEstimate.timeInMs;return{timeInMs:Math.max(n,s),nodeTimings:t.nodeTimings}}static compute(t,i){const s=i?.lcpResult;if(!s)throw new e.LanternError("LCP is required to calculate the Interactive metric");const r=super.compute(t,i);return r.timing=Math.max(r.timing,s.timing),r}static getLastLongTaskEndTime(e,i=50){return Array.from(e.entries()).filter((([e,s])=>e.type===t.BaseNode.types.CPU&&s.duration>i)).map((([t,e])=>e.endTime)).reduce(((t,e)=>Math.max(t||0,e||0)),0)}}class n extends i{static get coefficients(){return{intercept:0,optimistic:.5,pessimistic:.5}}static isNotLowPriorityImageNode(t){if("network"!==t.type)return!0;const e="Image"===t.request.resourceType,i="Low"===t.request.priority||"VeryLow"===t.request.priority;return!e||!i}static getOptimisticGraph(t,i){const r=i.timestamps.largestContentfulPaint;if(!r)throw new e.LanternError("NO_LCP");return s.getFirstPaintBasedGraph(t,{cutoffTimestamp:r,treatNodeAsRenderBlocking:n.isNotLowPriorityImageNode})}static getPessimisticGraph(t,i){const r=i.timestamps.largestContentfulPaint;if(!r)throw new e.LanternError("NO_LCP");return s.getFirstPaintBasedGraph(t,{cutoffTimestamp:r,treatNodeAsRenderBlocking:t=>!0,additionalCpuNodesToTreatAsRenderBlocking:t=>t.didPerformLayout()})}static getEstimateFromSimulation(t){const e=Array.from(t.nodeTimings.entries()).filter((t=>n.isNotLowPriorityImageNode(t[0]))).map((t=>t[1].endTime));return{timeInMs:Math.max(...e),nodeTimings:t.nodeTimings}}static compute(t,i){const s=i?.fcpResult;if(!s)throw new e.LanternError("FCP is required to calculate the LCP metric");const r=super.compute(t,i);return r.timing=Math.max(r.timing,s.timing),r}}class a extends i{static get coefficients(){return{intercept:0,optimistic:.5,pessimistic:.5}}static getOptimisticGraph(t){return t}static getPessimisticGraph(t){return t}static getEstimateFromSimulation(t,i){if(!i.fcpResult)throw new e.LanternError("missing fcpResult");const s=i.optimistic?i.fcpResult.pessimisticEstimate.timeInMs:i.fcpResult.optimisticEstimate.timeInMs,r=a.getTimingsAfterFCP(t.nodeTimings,s);return{timeInMs:Math.max(...r.map((t=>t.duration)),16),nodeTimings:t.nodeTimings}}static compute(t,i){const s=i?.fcpResult;if(!s)throw new e.LanternError("FCP is required to calculate the Max Potential FID metric");return super.compute(t,i)}static getTimingsAfterFCP(e,i){return Array.from(e.entries()).filter((([e,s])=>e.type===t.BaseNode.types.CPU&&s.endTime>i)).map((([t,e])=>e))}}class o extends i{static get coefficients(){return{intercept:0,optimistic:1.4,pessimistic:.4}}static getScaledCoefficients(t){const e=this.coefficients,i=Math.max((t-30)/120,0);return{intercept:e.intercept*i,optimistic:.5+(e.optimistic-.5)*i,pessimistic:.5+(e.pessimistic-.5)*i}}static getOptimisticGraph(t){return t}static getPessimisticGraph(t){return t}static getEstimateFromSimulation(t,i){if(!i.fcpResult)throw new e.LanternError("missing fcpResult");if(void 0===i.observedSpeedIndex)throw new e.LanternError("missing observedSpeedIndex");const s=i.fcpResult.pessimisticEstimate.timeInMs;return{timeInMs:i.optimistic?i.observedSpeedIndex:o.computeLayoutBasedSpeedIndex(t.nodeTimings,s),nodeTimings:t.nodeTimings}}static compute(t,i){const s=i?.fcpResult;if(!s)throw new e.LanternError("FCP is required to calculate the SpeedIndex metric");const r=super.compute(t,i);return r.timing=Math.max(r.timing,s.timing),r}static computeLayoutBasedSpeedIndex(e,i){const s=[];for(const[i,r]of e.entries())if(i.type===t.BaseNode.types.CPU&&i.childEvents.some((t=>"Layout"===t.name))){const t=Math.max(Math.log2(r.endTime-r.startTime),0);s.push({time:r.endTime,weight:t})}const r=s.map((t=>t.weight*Math.max(t.time,i))).reduce(((t,e)=>t+e),0),n=s.map((t=>t.weight)).reduce(((t,e)=>t+e),0);return n?r/n:i}}function c(t,e,i,s){let r=50;if(s&&(r*=t.duration/s.duration),t.duration<r)return 0;if(t.end<e)return 0;if(t.start>i)return 0;const n=Math.max(t.start,e),a=Math.min(t.end,i)-n;return a<r?0:a-r}function m(t,e,i){if(i<=e)return 0;let s=0;for(const r of t)s+=c(r,e,i);return s}var p=Object.freeze({__proto__:null,BLOCKING_TIME_THRESHOLD:50,calculateSumOfBlockingTime:m,calculateTbtImpactForEvent:c});class u extends i{static get coefficients(){return{intercept:0,optimistic:.5,pessimistic:.5}}static getOptimisticGraph(t){return t}static getPessimisticGraph(t){return t}static getEstimateFromSimulation(t,i){if(!i.fcpResult)throw new e.LanternError("missing fcpResult");if(!i.interactiveResult)throw new e.LanternError("missing interactiveResult");const s=i.optimistic?i.fcpResult.pessimisticEstimate.timeInMs:i.fcpResult.optimisticEstimate.timeInMs,r=i.optimistic?i.interactiveResult.optimisticEstimate.timeInMs:i.interactiveResult.pessimisticEstimate.timeInMs;return{timeInMs:m(u.getTopLevelEvents(t.nodeTimings,50),s,r),nodeTimings:t.nodeTimings}}static compute(t,i){const s=i?.fcpResult;if(!s)throw new e.LanternError("FCP is required to calculate the TBT metric");const r=i?.fcpResult;if(!r)throw new e.LanternError("Interactive is required to calculate the TBT metric");return super.compute(t,i)}static getTopLevelEvents(e,i){const s=[];for(const[r,n]of e.entries())r.type===t.BaseNode.types.CPU&&(n.duration<i||s.push({start:n.startTime,end:n.endTime,duration:n.duration}));return s}}export{s as FirstContentfulPaint,r as Interactive,n as LargestContentfulPaint,a as MaxPotentialFID,i as Metric,o as SpeedIndex,p as TBTUtils,u as TotalBlockingTime};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import*as t from"../core/core.js";import*as e from"../graph/graph.js";const o=1460;class i{warmed;ssl;h2;rtt;throughput;serverLatency;_congestionWindow;h2OverflowBytesDownloaded;constructor(t,e,o=0,i=!0,s=!1){this.warmed=!1,this.ssl=i,this.h2=s,this.rtt=t,this.throughput=e,this.serverLatency=o,this._congestionWindow=10,this.h2OverflowBytesDownloaded=0}static maximumSaturatedConnections(t,e){const o=8*(1460*(1e3/t));return Math.floor(e/o)}computeMaximumCongestionWindowInSegments(){const t=this.throughput/8*(this.rtt/1e3);return Math.floor(t/o)}setThroughput(t){this.throughput=t}setCongestionWindow(t){this._congestionWindow=t}setWarmed(t){this.warmed=t}isH2(){return this.h2}get congestionWindow(){return this._congestionWindow}setH2OverflowBytesDownloaded(t){this.h2&&(this.h2OverflowBytesDownloaded=t)}clone(){return Object.assign(new i(this.rtt,this.throughput),this)}simulateDownloadUntil(t,e){const{timeAlreadyElapsed:i=0,maximumTimeToElapse:s=1/0,dnsResolutionTime:n=0}=e||{};this.warmed&&this.h2&&(t-=this.h2OverflowBytesDownloaded);const r=this.rtt,a=r/2,d=this.computeMaximumCongestionWindowInSegments();let h=a;this.warmed||(h=n+a+a+a+(this.ssl?r:0));let u=Math.ceil(h/r),l=h+this.serverLatency+a;this.warmed&&this.h2&&(l=0);const m=Math.max(l-i,0),c=s-m;let p=Math.min(this._congestionWindow,d),g=0;m>0?g=p*o:u=0;let w=0,T=t-g;for(;T>0&&w<=c;){u++,w+=r,p=Math.max(Math.min(d,2*p),1);const t=p*o;g+=t,T-=t}const y=m+w,N=this.h2?Math.max(g-t,0):0,f=Math.max(Math.min(g,t),0);let R;return R=this.warmed?this.h2?{timeToFirstByte:l}:{connectionTime:h,timeToFirstByte:l}:{dnsResolutionTime:n,connectionTime:h-n,sslTime:this.ssl?r:void 0,timeToFirstByte:l},{roundTrips:u,timeElapsed:y,bytesDownloaded:f,extraBytesDownloaded:N,congestionWindow:p,connectionTiming:R}}}const s=["https","wss"];class n{options;records;connectionsByOrigin;connectionsByRequest;_connectionsInUse;connectionReusedByRequestId;constructor(e,o){this.options=o,this.records=e,this.connectionsByOrigin=new Map,this.connectionsByRequest=new Map,this._connectionsInUse=new Set,this.connectionReusedByRequestId=t.NetworkAnalyzer.estimateIfConnectionWasReused(e,{forceCoarseEstimates:!0}),this.initializeConnections()}connectionsInUse(){return Array.from(this._connectionsInUse)}initializeConnections(){const e=this.connectionReusedByRequestId,o=this.options.additionalRttByOrigin,n=this.options.serverResponseTimeByOrigin,r=t.NetworkAnalyzer.groupByOrigin(this.records);for(const[a,d]of r.entries()){const r=[],h=o.get(a)||0,u=n.get(a)||30;for(const t of d){if(e.get(t.requestId))continue;const o=s.includes(t.parsedURL.scheme),n="h2"===t.protocol,a=new i(this.options.rtt+h,this.options.throughput,u,o,n);r.push(a)}if(!r.length)throw new t.LanternError(`Could not find a connection for origin: ${a}`);const l=r[0].isH2()?1:6;for(;r.length<l;)r.push(r[0].clone());this.connectionsByOrigin.set(a,r)}}findAvailableConnectionWithLargestCongestionWindow(t){let e=null;for(let o=0;o<t.length;o++){const i=t[o];if(this._connectionsInUse.has(i))continue;const s=e?.congestionWindow||-1/0;i.congestionWindow>s&&(e=i)}return e}acquire(e){if(this.connectionsByRequest.has(e))throw new t.LanternError("Record already has a connection");const o=e.parsedURL.securityOrigin,i=this.connectionsByOrigin.get(o)||[],s=this.findAvailableConnectionWithLargestCongestionWindow(i);return s?(this._connectionsInUse.add(s),this.connectionsByRequest.set(e,s),s):null}acquireActiveConnectionFromRequest(e){const o=this.connectionsByRequest.get(e);if(!o)throw new t.LanternError("Could not find an active connection for request");return o}release(t){const e=this.connectionsByRequest.get(t);this.connectionsByRequest.delete(t),e&&this._connectionsInUse.delete(e)}}const r=3.75,a=.9,d={throttling:{DEVTOOLS_RTT_ADJUSTMENT_FACTOR:r,DEVTOOLS_THROUGHPUT_ADJUSTMENT_FACTOR:a,mobileSlow4G:{rttMs:150,throughputKbps:1638.4,requestLatencyMs:562.5,downloadThroughputKbps:1474.5600000000002,uploadThroughputKbps:675,cpuSlowdownMultiplier:4},mobileRegular3G:{rttMs:300,throughputKbps:700,requestLatencyMs:1125,downloadThroughputKbps:630,uploadThroughputKbps:630,cpuSlowdownMultiplier:4},desktopDense4G:{rttMs:40,throughputKbps:10240,cpuSlowdownMultiplier:1,requestLatencyMs:0,downloadThroughputKbps:0,uploadThroughputKbps:0}}};class h{static rttMultiplier=2;rtt;resolvedDomainNames;constructor({rtt:t}){this.rtt=t,this.resolvedDomainNames=new Map}getTimeUntilResolution(t,e){const{requestedAt:o=0,shouldUpdateCache:i=!1}=e||{},s=t.parsedURL.host,n=this.resolvedDomainNames.get(s);let r=this.rtt*h.rttMultiplier;if(n){const t=Math.max(n.resolvedAt-o,0);r=Math.min(t,r)}const a=o+r;return i&&this.updateCacheResolvedAtIfNeeded(t,a),r}updateCacheResolvedAtIfNeeded(t,e){const o=t.parsedURL.host,i=this.resolvedDomainNames.get(o)||{resolvedAt:e};i.resolvedAt=Math.min(i.resolvedAt,e),this.resolvedDomainNames.set(o,i)}setResolvedAt(t,e){this.resolvedDomainNames.set(t,{resolvedAt:e})}}class u{nodeTimings;constructor(){this.nodeTimings=new Map}getNodes(){return Array.from(this.nodeTimings.keys())}setReadyToStart(t,e){this.nodeTimings.set(t,e)}setInProgress(t,o){const i={...this.getQueued(t),startTime:o.startTime,timeElapsed:0};this.nodeTimings.set(t,t.type===e.BaseNode.types.NETWORK?{...i,timeElapsedOvershoot:0,bytesDownloaded:0}:i)}setCompleted(t,e){const o={...this.getInProgress(t),endTime:e.endTime,connectionTiming:e.connectionTiming};this.nodeTimings.set(t,o)}setCpu(t,e){const o={...this.getCpuStarted(t),timeElapsed:e.timeElapsed};this.nodeTimings.set(t,o)}setCpuEstimated(t,e){const o={...this.getCpuStarted(t),estimatedTimeElapsed:e.estimatedTimeElapsed};this.nodeTimings.set(t,o)}setNetwork(t,e){const o={...this.getNetworkStarted(t),timeElapsed:e.timeElapsed,timeElapsedOvershoot:e.timeElapsedOvershoot,bytesDownloaded:e.bytesDownloaded};this.nodeTimings.set(t,o)}setNetworkEstimated(t,e){const o={...this.getNetworkStarted(t),estimatedTimeElapsed:e.estimatedTimeElapsed};this.nodeTimings.set(t,o)}getQueued(e){const o=this.nodeTimings.get(e);if(!o)throw new t.LanternError(`Node ${e.id} not yet queued`);return o}getCpuStarted(e){const o=this.nodeTimings.get(e);if(!o)throw new t.LanternError(`Node ${e.id} not yet queued`);if(!("startTime"in o))throw new t.LanternError(`Node ${e.id} not yet started`);if("bytesDownloaded"in o)throw new t.LanternError(`Node ${e.id} timing not valid`);return o}getNetworkStarted(e){const o=this.nodeTimings.get(e);if(!o)throw new t.LanternError(`Node ${e.id} not yet queued`);if(!("startTime"in o))throw new t.LanternError(`Node ${e.id} not yet started`);if(!("bytesDownloaded"in o))throw new t.LanternError(`Node ${e.id} timing not valid`);return o}getInProgress(e){const o=this.nodeTimings.get(e);if(!o)throw new t.LanternError(`Node ${e.id} not yet queued`);if(!("startTime"in o))throw new t.LanternError(`Node ${e.id} not yet started`);if(!("estimatedTimeElapsed"in o))throw new t.LanternError(`Node ${e.id} not yet in progress`);return o}getCompleted(e){const o=this.nodeTimings.get(e);if(!o)throw new t.LanternError(`Node ${e.id} not yet queued`);if(!("startTime"in o))throw new t.LanternError(`Node ${e.id} not yet started`);if(!("estimatedTimeElapsed"in o))throw new t.LanternError(`Node ${e.id} not yet in progress`);if(!("endTime"in o))throw new t.LanternError(`Node ${e.id} not yet completed`);return o}}const l=d.throttling.mobileSlow4G,m={NotReadyToStart:0,ReadyToStart:1,InProgress:2,Complete:3},c={VeryHigh:0,High:.25,Medium:.5,Low:1,VeryLow:2},p=new Map;class g{static createSimulator(t){const{throttlingMethod:e,throttling:o,precomputedLanternData:i,networkAnalysis:s}=t,n={additionalRttByOrigin:s.additionalRttByOrigin,serverResponseTimeByOrigin:s.serverResponseTimeByOrigin,observedThroughput:s.throughput};switch(i&&(n.additionalRttByOrigin=new Map(Object.entries(i.additionalRttByOrigin)),n.serverResponseTimeByOrigin=new Map(Object.entries(i.serverResponseTimeByOrigin))),e){case"provided":n.rtt=s.rtt,n.throughput=s.throughput,n.cpuSlowdownMultiplier=1,n.layoutTaskMultiplier=1;break;case"devtools":o&&(n.rtt=o.requestLatencyMs/d.throttling.DEVTOOLS_RTT_ADJUSTMENT_FACTOR,n.throughput=1024*o.downloadThroughputKbps/d.throttling.DEVTOOLS_THROUGHPUT_ADJUSTMENT_FACTOR),n.cpuSlowdownMultiplier=1,n.layoutTaskMultiplier=1;break;case"simulate":o&&(n.rtt=o.rttMs,n.throughput=1024*o.throughputKbps,n.cpuSlowdownMultiplier=o.cpuSlowdownMultiplier)}return new g(n)}options;_rtt;throughput;maximumConcurrentRequests;cpuSlowdownMultiplier;layoutTaskMultiplier;cachedNodeListByStartPosition;nodeTimings;numberInProgressByType;nodes;dns;connectionPool;constructor(e){if(this.options=Object.assign({rtt:l.rttMs,throughput:1024*l.throughputKbps,maximumConcurrentRequests:10,cpuSlowdownMultiplier:l.cpuSlowdownMultiplier,layoutTaskMultiplier:.5,additionalRttByOrigin:new Map,serverResponseTimeByOrigin:new Map},e),this._rtt=this.options.rtt,this.throughput=this.options.throughput,this.maximumConcurrentRequests=Math.max(Math.min(i.maximumSaturatedConnections(this._rtt,this.throughput),this.options.maximumConcurrentRequests),1),this.cpuSlowdownMultiplier=this.options.cpuSlowdownMultiplier,this.layoutTaskMultiplier=this.cpuSlowdownMultiplier*this.options.layoutTaskMultiplier,this.cachedNodeListByStartPosition=[],this.nodeTimings=new u,this.numberInProgressByType=new Map,this.nodes={},this.dns=new h({rtt:this._rtt}),this.connectionPool=null,!Number.isFinite(this._rtt))throw new t.LanternError(`Invalid rtt ${this._rtt}`);if(!Number.isFinite(this.throughput))throw new t.LanternError(`Invalid throughput ${this.throughput}`)}get rtt(){return this._rtt}initializeConnectionPool(t){const o=[];t.getRootNode().traverse((t=>{t.type===e.BaseNode.types.NETWORK&&o.push(t.request)})),this.connectionPool=new n(o,this.options)}initializeAuxiliaryData(){this.nodeTimings=new u,this.numberInProgressByType=new Map,this.nodes={},this.cachedNodeListByStartPosition=[];for(const t of Object.values(m))this.nodes[t]=new Set}numberInProgress(t){return this.numberInProgressByType.get(t)||0}markNodeAsReadyToStart(t,e){const o=g.computeNodeStartPosition(t),i=this.cachedNodeListByStartPosition.findIndex((t=>g.computeNodeStartPosition(t)>o)),s=-1===i?this.cachedNodeListByStartPosition.length:i;this.cachedNodeListByStartPosition.splice(s,0,t),this.nodes[m.ReadyToStart].add(t),this.nodes[m.NotReadyToStart].delete(t),this.nodeTimings.setReadyToStart(t,{queuedTime:e})}markNodeAsInProgress(t,e){const o=this.cachedNodeListByStartPosition.indexOf(t);this.cachedNodeListByStartPosition.splice(o,1),this.nodes[m.InProgress].add(t),this.nodes[m.ReadyToStart].delete(t),this.numberInProgressByType.set(t.type,this.numberInProgress(t.type)+1),this.nodeTimings.setInProgress(t,{startTime:e})}markNodeAsComplete(t,e,o){this.nodes[m.Complete].add(t),this.nodes[m.InProgress].delete(t),this.numberInProgressByType.set(t.type,this.numberInProgress(t.type)-1),this.nodeTimings.setCompleted(t,{endTime:e,connectionTiming:o});for(const o of t.getDependents()){o.getDependencies().some((t=>!this.nodes[m.Complete].has(t)))||this.markNodeAsReadyToStart(o,e)}}acquireConnection(t){return this.connectionPool.acquire(t)}getNodesSortedByStartPosition(){return Array.from(this.cachedNodeListByStartPosition)}startNodeIfPossible(o,i){if(o.type!==e.BaseNode.types.CPU){if(o.type!==e.BaseNode.types.NETWORK)throw new t.LanternError("Unsupported");if(!o.isConnectionless){if(this.numberInProgress(o.type)>=this.maximumConcurrentRequests)return;if(!this.acquireConnection(o.request))return}this.markNodeAsInProgress(o,i)}else 0===this.numberInProgress(o.type)&&this.markNodeAsInProgress(o,i)}updateNetworkCapacity(){const t=this.numberInProgress(e.BaseNode.types.NETWORK);if(0!==t)for(const e of this.connectionPool.connectionsInUse())e.setThroughput(this.throughput/t)}estimateTimeRemaining(o){if(o.type===e.BaseNode.types.CPU)return this.estimateCPUTimeRemaining(o);if(o.type===e.BaseNode.types.NETWORK)return this.estimateNetworkTimeRemaining(o);throw new t.LanternError("Unsupported")}estimateCPUTimeRemaining(t){const e=this.nodeTimings.getCpuStarted(t),o=t.didPerformLayout()?this.layoutTaskMultiplier:this.cpuSlowdownMultiplier,i=Math.min(Math.round(t.duration/1e3*o),1e4)-e.timeElapsed;return this.nodeTimings.setCpuEstimated(t,{estimatedTimeElapsed:i}),i}estimateNetworkTimeRemaining(t){const e=t.request,o=this.nodeTimings.getNetworkStarted(t);let i=0;if(t.fromDiskCache){i=8+20*((e.resourceSize||0)/1024/1024)-o.timeElapsed}else if(t.isNonNetworkProtocol){i=2+10*((e.resourceSize||0)/1024/1024)-o.timeElapsed}else{const t=this.connectionPool.acquireActiveConnectionFromRequest(e),s=this.dns.getTimeUntilResolution(e,{requestedAt:o.startTime,shouldUpdateCache:!0}),n=o.timeElapsed;i=t.simulateDownloadUntil(e.transferSize-o.bytesDownloaded,{timeAlreadyElapsed:n,dnsResolutionTime:s,maximumTimeToElapse:1/0}).timeElapsed}const s=i+o.timeElapsedOvershoot;return this.nodeTimings.setNetworkEstimated(t,{estimatedTimeElapsed:s}),s}findNextNodeCompletionTime(){let t=1/0;for(const e of this.nodes[m.InProgress])t=Math.min(t,this.estimateTimeRemaining(e));return t}updateProgressMadeInTimePeriod(o,i,s){const n=this.nodeTimings.getInProgress(o),r=n.estimatedTimeElapsed===i;if(o.type===e.BaseNode.types.CPU||o.isConnectionless)return void(r?this.markNodeAsComplete(o,s):n.timeElapsed+=i);if(o.type!==e.BaseNode.types.NETWORK)throw new t.LanternError("Unsupported");if(!("bytesDownloaded"in n))throw new t.LanternError("Invalid timing data");const a=o.request,d=this.connectionPool.acquireActiveConnectionFromRequest(a),h=this.dns.getTimeUntilResolution(a,{requestedAt:n.startTime,shouldUpdateCache:!0}),u=d.simulateDownloadUntil(a.transferSize-n.bytesDownloaded,{dnsResolutionTime:h,timeAlreadyElapsed:n.timeElapsed,maximumTimeToElapse:i-n.timeElapsedOvershoot});d.setCongestionWindow(u.congestionWindow),d.setH2OverflowBytesDownloaded(u.extraBytesDownloaded),r?(d.setWarmed(!0),this.connectionPool.release(a),this.markNodeAsComplete(o,s,u.connectionTiming)):(n.timeElapsed+=u.timeElapsed,n.timeElapsedOvershoot+=u.timeElapsed-i,n.bytesDownloaded+=u.bytesDownloaded)}computeFinalNodeTimings(){const t=this.nodeTimings.getNodes().map((t=>[t,this.nodeTimings.getCompleted(t)]));t.sort(((t,e)=>t[1].startTime-e[1].startTime));const e=t.map((([t,e])=>[t,{startTime:e.startTime,endTime:e.endTime,duration:e.endTime-e.startTime}]));return{nodeTimings:new Map(e),completeNodeTimings:new Map(t)}}getOptions(){return this.options}simulate(o,i){if(e.BaseNode.hasCycle(o))throw new t.LanternError("Cannot simulate graph with cycle");i=Object.assign({label:void 0},i),this.dns=new h({rtt:this._rtt}),this.initializeConnectionPool(o),this.initializeAuxiliaryData();const s=this.nodes[m.NotReadyToStart],n=this.nodes[m.ReadyToStart],r=this.nodes[m.InProgress],a=o.getRootNode();a.traverse((t=>s.add(t)));let d=0,u=0;for(this.markNodeAsReadyToStart(a,d);n.size||r.size;){for(const t of this.getNodesSortedByStartPosition())this.startNodeIfPossible(t,d);if(!r.size)throw new t.LanternError("Failed to start a node");this.updateNetworkCapacity();const e=this.findNextNodeCompletionTime();if(d+=e,!Number.isFinite(e)||u>1e5)throw new t.LanternError("Simulation failed, depth exceeded");u++;for(const t of r)this.updateProgressMadeInTimePeriod(t,e,d)}const{nodeTimings:l,completeNodeTimings:c}=this.computeFinalNodeTimings();return p.set(i.label||"unlabeled",c),{timeInMs:d,nodeTimings:l}}computeWastedMsFromWastedBytes(t){const{throughput:e,observedThroughput:o}=this.options,i=0===e?o:e;if(0===i)return 0;const s=8*t/i*1e3;return 10*Math.round(s/10)}static get allNodeTimings(){return p}static computeNodeStartPosition(t){return"cpu"===t.type?t.startTime:t.startTime+(1e3*c[t.request.priority]*1e3||0)}}export{n as ConnectionPool,d as Constants,h as DNSCache,g as Simulator,u as SimulatorTimingMap,i as TCPConnection};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e={XHR:"XHR",Fetch:"Fetch",EventSource:"EventSource",Script:"Script",Stylesheet:"Stylesheet",Image:"Image",Media:"Media",Font:"Font",Document:"Document",TextTrack:"TextTrack",WebSocket:"WebSocket",Other:"Other",Manifest:"Manifest",SignedExchange:"SignedExchange",Ping:"Ping",Preflight:"Preflight",CSPViolationReport:"CSPViolationReport",Prefetch:"Prefetch"};export{e as NetworkRequestTypes};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import*as e from"./extras/extras.js";export{e as Extras};import*as t from"./handlers/handlers.js";export{t as Handlers};import*as r from"./helpers/helpers.js";export{r as Helpers};import*as n from"./insights/insights.js";export{n as Insights};import*as s from"./lantern/lantern.js";export{s as Lantern};import*as a from"../../core/platform/platform.js";import*as i from"./types/types.js";export{i as Types};import*as o from"../../core/sdk/sdk.js";function c(e,t,r){const n=e.PageLoadMetrics.metricScoresByFrameId.get(t);if(!n)throw new s.Core.LanternError("missing metric scores for frame");const a=n.get(r);if(!a)throw new s.Core.LanternError("missing metric scores for specified navigation");return{timestamps:{firstContentfulPaint:(e=>{const t=a.get(e);if(!t?.event)throw new s.Core.LanternError(`missing metric: ${e}`);return t.event.ts})("FCP"),largestContentfulPaint:(e=>{const t=a.get(e);if(t?.event)return t.event.ts})("LCP")}}}function l(e){return"string"==typeof e&&(e=new URL(e)),{scheme:e.protocol.split(":")[0],host:e.hostname,securityOrigin:e.origin}}function d(e,t,r){if(void 0===r.args.data.connectionId||void 0===r.args.data.connectionReused)throw new s.Core.LanternError("Trace is too old");let n;try{n=new URL(r.args.data.url)}catch{return}const a=r.args.data.timing?{workerFetchStart:-1,workerRespondWithSettled:-1,...r.args.data.timing}:void 0,i=a?1e3*a.requestTime:r.args.data.syntheticData.downloadStart/1e3;let o=!1;const c=t.get(r.pid);c?.includes(r.tid)&&(o=!0),e.Workers.workerIdByThread.has(r.tid)&&(o=!0);const d=r.args.data.initiator??{type:"other"};if(r.args.data.stackTrace){const e=r.args.data.stackTrace.map((e=>({scriptId:String(e.scriptId),url:e.url,lineNumber:e.lineNumber-1,columnNumber:e.columnNumber-1,functionName:e.functionName})));d.stack={callFrames:e}}let g=r.args.data.resourceType;"xmlhttprequest"===r.args.data.initiator?.fetchType?g="XHR":"fetch"===r.args.data.initiator?.fetchType&&(g="Fetch");let h=r.args.data.decodedBodyLength??0;if("data:"===n.protocol&&0===h){const e=n.pathname.indexOf(",");h=n.pathname.substring(0,e).includes(";base64")?atob(n.pathname.substring(e+1)).length:n.pathname.length-e-1}return{rawRequest:r,requestId:r.args.data.requestId,connectionId:r.args.data.connectionId,connectionReused:r.args.data.connectionReused,url:r.args.data.url,protocol:r.args.data.protocol,parsedURL:l(n),documentURL:r.args.data.requestingFrameUrl,rendererStartTime:r.ts/1e3,networkRequestTime:i,responseHeadersEndTime:r.args.data.syntheticData.downloadStart/1e3,networkEndTime:r.args.data.syntheticData.finishTime/1e3,transferSize:r.args.data.encodedDataLength,resourceSize:h,fromDiskCache:r.args.data.syntheticData.isDiskCached,fromMemoryCache:r.args.data.syntheticData.isMemoryCached,isLinkPreload:r.args.data.isLinkPreload,finished:r.args.data.finished,failed:r.args.data.failed,statusCode:r.args.data.statusCode,initiator:d,timing:a,resourceType:g,mimeType:r.args.data.mimeType,priority:r.args.data.priority,frameId:r.args.data.frame,fromWorker:o,redirects:void 0,redirectSource:void 0,redirectDestination:void 0,initiatorRequest:void 0}}function g(e,t){if(e.redirectSource)return e.redirectSource;const r=s.Graph.PageDependencyGraph.getNetworkInitiators(e)[0];let n=t.get(r)||[];if(n=n.filter((t=>t.responseHeadersEndTime<=e.rendererStartTime&&t.finished&&!t.failed)),n.length>1){const e=n.filter((e=>e.resourceType!==s.Types.NetworkRequestTypes.Other));e.length&&(n=e)}if(n.length>1){const t=n.filter((t=>t.frameId===e.frameId));t.length&&(n=t)}if(n.length>1&&"parser"===e.initiator.type){const e=n.filter((e=>e.resourceType===s.Types.NetworkRequestTypes.Document));e.length&&(n=e)}if(n.length>1){const e=n.filter((e=>e.isLinkPreload));if(e.length){const t=n.filter((e=>!e.isLinkPreload)),r=t.every((e=>e.fromDiskCache||e.fromMemoryCache));t.length&&r&&(n=e)}}return 1===n.length?n[0]:null}function h(e,t,r=0,n=Number.POSITIVE_INFINITY){const s=function(e){const t=new Map,r=["ServiceWorker thread","DedicatedWorker thread"];for(const n of e.traceEvents){if("thread_name"!==n.name||!n.args.name)continue;if(!r.includes(n.args.name))continue;const e=t.get(n.pid);e?e.push(n.tid):t.set(n.pid,[n.tid])}return t}(e),a=[];for(const e of t.NetworkRequests.byTime)if(e.ts>=r&&e.ts<n){const r=d(t,s,e);r&&a.push(r)}for(const e of[...a]){if(!e.rawRequest)continue;const t=e.rawRequest.args.data.redirects;if(!t.length)continue;const r=[];for(const n of t){const t=structuredClone(e);t.networkRequestTime=n.ts/1e3,t.rendererStartTime=t.networkRequestTime,t.networkEndTime=(n.ts+n.dur)/1e3,t.responseHeadersEndTime=t.networkEndTime,t.timing={requestTime:t.networkRequestTime/1e3,receiveHeadersStart:t.responseHeadersEndTime,receiveHeadersEnd:t.responseHeadersEndTime,proxyStart:-1,proxyEnd:-1,dnsStart:-1,dnsEnd:-1,connectStart:-1,connectEnd:-1,sslStart:-1,sslEnd:-1,sendStart:-1,sendEnd:-1,workerStart:-1,workerReady:-1,workerFetchStart:-1,workerRespondWithSettled:-1,pushStart:-1,pushEnd:-1},t.url=n.url,t.parsedURL=l(n.url),t.statusCode=302,t.resourceType=void 0,t.transferSize=400,r.push(t),a.push(t)}r.push(e);for(let e=0;e<r.length;e++){const t=r[e];e>0&&(t.redirectSource=r[e-1],t.redirects=r.slice(0,e)),e!==r.length-1&&(t.redirectDestination=r[e+1])}for(let e=1;e<r.length;e++)r[e].requestId=`${r[e-1].requestId}:redirect`}return function(e){const t=new Map;for(const r of e){const e=t.get(r.url)||[];e.push(r),t.set(r.url,e)}for(const r of e){const e=g(r,t);e&&(r.initiatorRequest=e)}}(a),a.sort(((e,t)=>e.rendererStartTime-t.rendererStartTime))}function u(e,t,r,n){const a=function(e,t){const r=t.Meta,n=r.mainFrameNavigations.length?new Set(r.mainFrameNavigations.map((e=>e.pid))):r.topLevelRendererIds,s=new Map;for(const e of n){const t=r.threadsInProcess.get(e)??[];let n=!1;for(const[r,a]of t)if("CrRendererMain"===a.args.name){s.set(e,r),n=!0;break}if(!n)for(const[r,a]of t)if("CrBrowserMain"===a.args.name){s.set(e,r),n=!0;break}}return e.traceEvents.filter((e=>s.get(e.pid)===e.tid))}(t,r);if(!n){n={requestedUrl:e[0].url,mainDocumentUrl:""};let t=e[0];for(;t.redirectDestination;)t=t.redirectDestination;n.mainDocumentUrl=t.url}return s.Graph.PageDependencyGraph.createGraph(a,e,n)}var f=Object.freeze({__proto__:null,createGraph:u,createNetworkRequests:h,createProcessedNavigation:c});class m extends Event{data;static eventName="traceparseprogress";constructor(e,t={bubbles:!0}){super(m.eventName,t),this.data=e}}function p(e,t){return.8===t?e*(.8-.2)+.2:e*t}class v extends EventTarget{#e;#t="IDLE";#r=i.Configuration.defaults();#n=null;#s=null;static createWithAllHandlers(){return new v(t.ModelHandlers,i.Configuration.defaults())}static getInsightRunners(){return{...n.Models}}constructor(e,r){super(),this.#a(e),this.#e={Meta:t.ModelHandlers.Meta,...e},r&&(this.#r=r),this.#i()}#i(){for(const e of Object.values(this.#e))"handleUserConfig"in e&&e.handleUserConfig&&e.handleUserConfig(this.#r)}#a(e){if(Object.keys(e).length===Object.keys(t.ModelHandlers).length)return;const r=new Set;for(const[t,n]of Object.entries(e)){r.add(t);const e="deps"in n?n.deps():[];for(const t of e)r.add(t)}const n=new Set(Object.keys(e));r.delete("Meta");for(const e of r)if(!n.has(e))throw new Error(`Required handler ${e} not provided.`)}reset(){if("PARSING"===this.#t)throw new Error("Trace processor can't reset while parsing.");const e=Object.values(this.#e);for(const t of e)t.reset();this.#n=null,this.#s=null,this.#t="IDLE"}async parse(e,t){if("IDLE"!==this.#t)throw new Error(`Trace processor can't start parsing when not idle. Current state: ${this.#t}`);t.logger?.start("total");try{this.#t="PARSING",t.logger?.start("parse"),await this.#o(e,t),t.logger?.end("parse"),this.#n&&!t.isCPUProfile&&(t.logger?.start("insights"),this.#c(this.#n,e,t),t.logger?.end("insights")),this.#t="FINISHED_PARSING"}catch(e){throw this.#t="ERRORED_WHILE_PARSING",e}finally{t.logger?.end("total")}}async#o(e,t){const r=[...C(this.#e).entries()];for(const[,e]of r)e.reset();t.logger?.start("parse:handleEvent");for(let t=0;t<e.length;++t){if(t%5e4==0&&t){const r=p(t/e.length,.2);this.dispatchEvent(new m({percent:r})),await new Promise((e=>setTimeout(e,0)))}const n=e[t];for(let e=0;e<r.length;++e){const[,t]=r[e];t.handleEvent(n)}}t.logger?.end("parse:handleEvent");for(let e=0;e<r.length;e++){const[n,s]=r[e];s.finalize&&(t.logger?.start(`parse:${n}:finalize`),await new Promise((e=>setTimeout(e,0))),await s.finalize(t),t.logger?.end(`parse:${n}:finalize`));const a=p(e/r.length,.8);this.dispatchEvent(new m({percent:a}))}const n=(e,t=!0)=>{if(e instanceof Map)return new Map(e);if(e instanceof Set)return new Set(e);if(Array.isArray(e))return[...e];if("object"==typeof e&&e&&t){const t={};for(const[r,s]of Object.entries(e))t[r]=n(s,!1);return t}return e};t.logger?.start("parse:clone");const s={};for(const[e,t]of Object.entries(this.#e)){const r=n(t.data());Object.assign(s,{[e]:r})}t.logger?.end("parse:clone"),this.dispatchEvent(new m({percent:1})),this.#n=s}get parsedTrace(){return"FINISHED_PARSING"!==this.#t?null:this.#n}get insights(){return"FINISHED_PARSING"!==this.#t?null:this.#s}#l(e,t,r,n,a){if(!e.NetworkRequests||!e.Workers||!e.PageLoadMetrics)return;if(!e.NetworkRequests.byTime.length)throw new s.Core.LanternError("No network requests found in trace");const i=e.Meta.navigationsByFrameId.get(r),o=i?.findIndex((e=>e.args.data?.navigationId===n));if(!i||void 0===o||-1===o)throw new s.Core.LanternError("Could not find navigation start");const l=i[o].ts,d=o+1<i.length?i[o+1].ts:Number.POSITIVE_INFINITY,g={traceEvents:t.filter((e=>e.ts>=l&&e.ts<d))},f=h(g,e,l,d),m=u(f,g,e),p=c(e,r,n),v=s.Core.NetworkAnalyzer.analyze(f);if(!v)return;const C={networkAnalysis:v,throttlingMethod:"provided",...a.lanternSettings},T=s.Simulation.Simulator.createSimulator(C),w={graph:m,simulator:T,processedNavigation:p},y=s.Metrics.FirstContentfulPaint.compute(w),I=s.Metrics.LargestContentfulPaint.compute(w,{fcpResult:y}),S=s.Metrics.Interactive.compute(w,{lcpResult:I});return{graph:m,simulator:T,metrics:{firstContentfulPaint:y,interactive:S,largestContentfulPaint:I,totalBlockingTime:s.Metrics.TotalBlockingTime.compute(w,{fcpResult:y,interactiveResult:S})}}}sortInsightSet(e,t,s){const a=n.Common.calculateMetricWeightsForSorting(t,s),o=n.Common.getLCP(e,t.id)?.value,c=o?r.Timing.microToMilli(o):i.Timing.Milli(0),l=n.Common.getCLS(e,t.id).value,d=n.Common.getINP(e,t.id)?.value,g=d?r.Timing.microToMilli(d):i.Timing.Milli(200),h=void 0!==c?n.Common.evaluateLCPMetricScore(c):void 0,u=n.Common.evaluateINPMetricScore(g),f=n.Common.evaluateCLSMetricScore(l),m=new Map;for(const[e,r]of Object.entries(t.model)){const t=r.metricSavings?.LCP??0,s=r.metricSavings?.INP??0,i=r.metricSavings?.CLS??0,o=void 0!==c?Math.max(0,c-t):void 0,d=Math.max(0,g-s),p=Math.max(0,l-i);let v=0;a.lcp&&t&&void 0!==h&&void 0!==o&&(v+=a.lcp*(n.Common.evaluateLCPMetricScore(o)-h)),a.inp&&s&&void 0!==u&&(v+=a.inp*(n.Common.evaluateINPMetricScore(d)-u)),a.cls&&i&&void 0!==f&&(v+=a.cls*(n.Common.evaluateCLSMetricScore(p)-f)),m.set(e,v)}const p=Object.keys({InteractionToNextPaint:null,LCPPhases:null,LCPDiscovery:null,CLSCulprits:null,RenderBlocking:null,NetworkDependencyTree:null,ImageDelivery:null,DocumentLatency:null,FontDisplay:null,Viewport:null,DOMSize:null,ThirdParties:null,DuplicatedJavaScript:null,SlowCSSSelector:null,ForcedReflow:null,Cache:null,ModernHTTP:null,LegacyJavaScript:null}),v=Object.keys(t.model);v.sort(((e,t)=>{const r=p.indexOf(e),n=p.indexOf(t);return r>=0&&n>=0?r-n:r>=0?-1:n>=0?1:0})),v.sort(((e,t)=>(m.get(t)??0)-(m.get(e)??0)));const C={};for(const e of v){const r=t.model[e];C[e]=r}t.model=C}#d(e,t,r,n){let s,a,o;r.navigation?(s=r.navigationId,a=t.Meta.finalDisplayUrlByNavigationId.get(r.navigationId)??t.Meta.mainFrameURL,o=r.navigation):(s=i.Events.NO_NAVIGATION,a=t.Meta.finalDisplayUrlByNavigationId.get("")??t.Meta.mainFrameURL);const c={};for(const[e,s]of Object.entries(v.getInsightRunners())){let a;try{n.logger?.start(`insights:${e}`),a=s.generateInsight(t,r),a.frameId=r.frameId;const i=r.navigation?.args.data?.navigationId;i&&(a.navigationId=i)}catch(e){a=e}finally{n.logger?.end(`insights:${e}`)}Object.assign(c,{[e]:a})}let l;try{l=new URL(a)}catch{return}const d={id:s,url:l,navigation:o,frameId:r.frameId,bounds:r.bounds,model:c};e.set(d.id,d),this.sortInsightSet(e,d,n.metadata??null)}#c(e,t,n){this.#s=new Map;const a=e.Meta.mainFrameNavigations.filter((e=>e.args.frame&&e.args.data?.navigationId));if(a.length){const t=r.Timing.traceWindowFromMicroSeconds(e.Meta.traceBounds.min,a[0].ts),s=r.Timing.milliToMicro(50);if(t.range>s){const r={bounds:t,frameId:e.Meta.mainFrameId};this.#d(this.#s,e,r,n)}}else{const t={bounds:e.Meta.traceBounds,frameId:e.Meta.mainFrameId};this.#d(this.#s,e,t,n)}for(const[i,o]of a.entries()){const c=o.args.frame,l=o.args.data?.navigationId;let d;try{n.logger?.start("insights:createLanternContext"),d=this.#l(e,t,c,l,n)}catch(e){const t=["mainDocumentRequest not found","missing metric scores for main frame","missing metric: FCP","missing metric: LCP","No network requests found in trace","Trace is too old"];e instanceof s.Core.LanternError&&t.some((t=>e.message===t))||console.error(e)}finally{n.logger?.end("insights:createLanternContext")}const g=o.ts,h=i+1<a.length?a[i+1].ts:e.Meta.traceBounds.max,u={bounds:r.Timing.traceWindowFromMicroSeconds(g,h),frameId:c,navigation:o,navigationId:l,lantern:d};this.#d(this.#s,e,u,n)}}}function C(e){const t=new Map,r=new Set,n=s=>{if(t.has(s))return;if(r.has(s)){let e="";for(const t of r)(e||t===s)&&(e+=`${t}->`);throw e+=s,new Error(`Found dependency cycle in trace event handlers: ${e}`)}r.add(s);const a=e[s];if(!a)return;const i=a.deps?.();i&&i.forEach(n),t.set(s,a)};for(const t of Object.keys(e))n(t);return t}var T=Object.freeze({__proto__:null,TraceParseProgressEvent:m,TraceProcessor:v,sortHandlers:C});class w extends EventTarget{#g=[];#h=[];#u=new Map;#f=[];#m=0;#p;#v=i.Configuration.defaults();static createWithAllHandlers(e){return new w(t.ModelHandlers,e)}static createWithSubsetOfHandlers(e,t){return new w(e,t)}constructor(e,t){super(),t&&(this.#v=t),this.#p=new v(e,this.#v)}async parse(e,t){const n=t?.metadata||{},s=t?.isFreshRecording||!1,a="CPUProfile"===n?.dataOrigin,i=e=>{const{data:t}=e;this.dispatchEvent(new y({type:"PROGRESS_UPDATE",data:t}))};this.#p.addEventListener(m.eventName,i);const o={traceEvents:e,metadata:n,parsedTrace:null,traceInsights:null};try{const i=r.SyntheticEvents.SyntheticEventsManager.createAndActivate(e);await this.#p.parse(e,{isFreshRecording:s,isCPUProfile:a,metadata:n,resolveSourceMap:t?.resolveSourceMap}),this.#C(o,this.#p.parsedTrace,this.#p.insights),this.#g.push(o),this.#h.push(i)}catch(e){throw e}finally{this.#p.removeEventListener(m.eventName,i),this.dispatchEvent(new y({type:"COMPLETE",data:"done"}))}}#C(e,t,n){e.parsedTrace=t,e.traceInsights=n,this.#m++;let s=`Trace ${this.#m}`,i=null;if(e.parsedTrace&&(i=r.Trace.extractOriginFromTrace(e.parsedTrace.Meta.mainFrameURL),i)){const e=a.MapUtilities.getWithDefault(this.#u,i,(()=>1));s=`${i} (${e})`,this.#u.set(i,e+1)}this.#f.push(s)}lastTraceIndex(){return this.size()-1}parsedTrace(e=this.#g.length-1){return this.#g.at(e)?.parsedTrace??null}traceInsights(e=this.#g.length-1){return this.#g.at(e)?.traceInsights??null}metadata(e=this.#g.length-1){return this.#g.at(e)?.metadata??null}overrideModifications(e,t){this.#g[e]&&(this.#g[e].metadata.modifications=t)}rawTraceEvents(e=this.#g.length-1){return this.#g.at(e)?.traceEvents??null}syntheticTraceEventsManager(e=this.#g.length-1){return this.#h.at(e)??null}size(){return this.#g.length}deleteTraceByIndex(e){this.#g.splice(e,1),this.#f.splice(e,1)}getRecordingsAvailable(){return this.#f}resetProcessor(){this.#p.reset()}}class y extends Event{data;static eventName="modelupdate";constructor(e){super(y.eventName),this.data=e}}var I=Object.freeze({__proto__:null,Model:w,ModelUpdateEvent:y,isModelUpdateDataComplete:function(e){return"COMPLETE"===e.type}});class S extends o.SDKModel.SDKModel{#T;#w;#y;#I;constructor(e){super(e),this.#T=e.tracingAgent(),e.registerTracingDispatcher(new M(this)),this.#w=null,this.#y=0}bufferUsage(e,t,r){this.#w&&this.#w.tracingBufferUsage(e||r||0)}eventsCollected(e){if(!this.#w)return;this.#w.traceEventsCollected(e),this.#y+=e.length;const t=Math.min(this.#y/9e5+.15,.9);this.#w.eventsRetrievalProgress(t)}tracingComplete(){this.#y=0,this.#w&&(this.#w.tracingComplete(),this.#w=null),this.#I=!1}async reset(){this.#w&&await this.#T.invoke_end(),this.#y=0,this.#w=null,this.#I=!1}async start(e,t,r){if(this.#w)throw new Error("Tracing is already started");this.#w=e;const n={bufferUsageReportingInterval:500,categories:t,options:r,transferMode:"ReportEvents"},s=await this.#T.invoke_start(n);return s.getError()&&(this.#w=null),s}stop(){if(!this.#w)throw new Error("Tracing is not started");if(this.#I)throw new Error("Tracing is already being stopped");this.#I=!0,this.#T.invoke_end()}rnPrepareForTraceCapturedInBackground(e){this.#w=e,this.#I=!0}}class M{#S;constructor(e){this.#S=e}bufferUsage({value:e,eventCount:t,percentFull:r}){this.#S.bufferUsage(e,t,r)}dataCollected({value:e}){this.#S.eventsCollected(e)}tracingComplete(){this.#S.tracingComplete()}}o.SDKModel.SDKModel.register(S,{capabilities:128,autostart:!1});var E=Object.freeze({__proto__:null,TracingManager:S});export{f as LanternComputationData,T as Processor,I as TraceModel,E as TracingManager};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=Object.freeze({__proto__:null,configToCacheKey:function(e){return JSON.stringify(e)},defaults:()=>({includeRuntimeCallStats:!1,showAllEvents:!1,debugMode:!1,maxInvalidationEventsPerEvent:20})});function n(e){return"marker"===e.dataType}function t(e){const n="track"in e&&Boolean(e.track);return("track-entry"===e.dataType||void 0===e.dataType)&&n}var r=Object.freeze({__proto__:null,extensionPalette:["primary","primary-light","primary-dark","secondary","secondary-light","secondary-dark","tertiary","tertiary-light","tertiary-dark","error","warning"],isExtensionPayloadMarker:n,isExtensionPayloadTrackEntry:t,isSyntheticExtensionEntry:function(e){return"devtools.extension"===e.cat},isValidExtensionPayload:function(e){return n(e)||t(e)}});var i=Object.freeze({__proto__:null,isEntriesLinkAnnotation:function(e){return"ENTRIES_LINK"===e.type},isEntryLabelAnnotation:function(e){return"ENTRY_LABEL"===e.type},isTimeRangeAnnotation:function(e){return"TIME_RANGE"===e.type},traceEventKeyToValues:function(e){const n=e.split("-"),t=n[0];switch(t){case"p":if(5!==n.length||!n.every(((e,n)=>0===n||"number"==typeof e||!isNaN(parseInt(e,10)))))throw new Error(`Invalid ProfileCallKey: ${e}`);return{type:n[0],processID:parseInt(n[1],10),threadID:parseInt(n[2],10),sampleIndex:parseInt(n[3],10),protocol:parseInt(n[4],10)};case"r":if(2!==n.length||"number"!=typeof n[1]&&isNaN(parseInt(n[1],10)))throw new Error(`Invalid RawEvent Key: ${e}`);return{type:n[0],rawIndex:parseInt(n[1],10)};case"s":if(2!==n.length||"number"!=typeof n[1]&&isNaN(parseInt(n[1],10)))throw new Error(`Invalid SyntheticEvent Key: ${e}`);return{type:n[0],rawIndex:parseInt(n[1],10)};case"l":if(2!==n.length||Number.isNaN(parseInt(n[1],10)))throw new Error(`Invalid LegacyTimelineFrame Key: ${e}`);return{type:t,rawIndex:parseInt(n[1],10)};default:throw new Error(`Unknown trace event key: ${e}`)}}});var a=Object.freeze({__proto__:null,Micro:function(e){return e},Milli:function(e){return e},Seconds:function(e){return e}});function o(e){return"b"===e||"e"===e||"n"===e}function u(e){return o(e)||"S"===e||"T"===e||"F"===e||"p"===e}const s=[I,k,v,y,h,P];const c=[...s,R];function m(e){return"ScheduleStyleInvalidationTracking"===e.name}function l(e){return"StyleRecalcInvalidationTracking"===e.name}function f(e){return"StyleInvalidatorInvalidationTracking"===e.name}var d;!function(e){e.Elapsed="elapsed (us)",e.RejectPercentage="reject_percentage",e.FastRejectCount="fast_reject_count",e.MatchAttempts="match_attempts",e.MatchCount="match_count",e.Selector="selector",e.StyleSheetId="style_sheet_id"}(d||(d={}));function p(e){return"X"===e.ph}function S(e){return"I"===e.ph}function g(e){return"LayoutInvalidationTracking"===e.name}function y(e){return"firstContentfulPaint"===e.name}function h(e){return"largestContentfulPaint::Candidate"===e.name}function k(e){return"MarkLoad"===e.name}function v(e){return"firstPaint"===e.name}function I(e){return"MarkDOMContent"===e.name}function R(e){return"InteractiveTime"===e.name}function T(e){return"EventTiming"===e.name}function C(e){return"SyntheticNetworkRequest"===e.name}function b(e){return"SyntheticWebSocketConnection"===e.name}function P(e){return"navigationStart"===e.name&&""!==e.args?.data?.documentLoaderURL}function L(e){return"blink.user_timing"===e.cat}function E(e){return L(e)&&u(e.ph)}function F(e){return"WebSocketCreate"===e.name}function w(e){return"WebSocketSendHandshakeRequest"===e.name||"WebSocketReceiveHandshakeResponse"===e.name||"WebSocketDestroy"===e.name}function D(e){return"WebSocketSend"===e.name||"WebSocketReceive"===e.name}function A(e){return F(e)||w(e)||D(e)}function M(e){return"V8Console::runTask"===e.name}var N=Object.freeze({__proto__:null,CallFrameID:function(e){return e},Categories:{Console:"blink.console",UserTiming:"blink.user_timing",Loading:"loading"},MarkerName:["MarkDOMContent","MarkLoad","firstPaint","firstContentfulPaint","largestContentfulPaint::Candidate"],NO_NAVIGATION:"NO_NAVIGATION",ProcessID:function(e){return e},ProfileID:function(e){return e},SampleIndex:function(e){return e},get SelectorTimingsKey(){return d},ThreadID:function(e){return e},WorkerId:function(e){return e},eventIsPageLoadEvent:function(e){return("I"===e.ph||"R"===e.ph)&&c.some((n=>n(e)))},isAbortPostTaskCallback:function(e){return"AbortPostTaskCallback"===e.name},isActivateLayerTree:function(e){return"ActivateLayerTree"===e.name},isAnimation:function(e){return"Animation"===e.name&&e.cat.includes("devtools.timeline")},isAnimationFrameAsyncEnd:function(e){return"AnimationFrame"===e.name&&"e"===e.ph},isAnimationFrameAsyncStart:function(e){return"AnimationFrame"===e.name&&"b"===e.ph},isAnimationFramePresentation:function(e){return"AnimationFrame::Presentation"===e.name},isAuctionWorkletDoneWithProcess:function(e){return"AuctionWorkletDoneWithProcess"===e.name},isAuctionWorkletRunningInProcess:function(e){return"AuctionWorkletRunningInProcess"===e.name},isBegin:function(e){return"B"===e.ph},isBeginCommitCompositorFrame:function(e){return"BeginCommitCompositorFrame"===e.name},isBeginFrame:function(e){return Boolean("BeginFrame"===e.name&&e.args&&"frameSeqId"in e.args)},isBeginMainThreadFrame:function(e){return"BeginMainThreadFrame"===e.name},isBeginRemoteFontLoad:function(e){return"BeginRemoteFontLoad"===e.name},isCommit:function(e){return Boolean("Commit"===e.name&&e.args&&"frameSeqId"in e.args)},isCommitLoad:function(e){return"CommitLoad"===e.name},isComplete:p,isCompositeLayers:function(e){return"CompositeLayers"===e.name},isConsoleRunTask:M,isConsoleTime:function(e){return"blink.console"===e.cat&&u(e.ph)},isConsoleTimeStamp:function(e){return"I"===e.ph&&"TimeStamp"===e.name},isDOMStats:function(e){return"DOMStats"===e.name},isDebuggerAsyncTaskRun:function(e){return"v8::Debugger::AsyncTaskRun"===e.name},isDebuggerAsyncTaskScheduled:function(e){return"v8::Debugger::AsyncTaskScheduled"===e.name},isDecodeImage:function(e){return"Decode Image"===e.name},isDecodeLazyPixelRef:function(e){return"Decode LazyPixelRef"===e.name},isDidCommitSameDocumentNavigation:function(e){return"RenderFrameHostImpl::DidCommitSameDocumentNavigation"===e.name},isDispatch:function(e){return"EventDispatch"===e.name},isDisplayListItemListSnapshot:function(e){return"cc::DisplayItemList"===e.name},isDomLoading:function(e){return"domLoading"===e.name},isDrawFrame:function(e){return"DrawFrame"===e.name&&"I"===e.ph},isDrawLazyPixelRef:function(e){return"Draw LazyPixelRef"===e.name},isDroppedFrame:function(e){return Boolean("DroppedFrame"===e.name&&e.args&&"frameSeqId"in e.args)},isEnd:function(e){return"E"===e.ph},isEventTiming:T,isEventTimingEnd:function(e){return T(e)&&"e"===e.ph},isEventTimingStart:function(e){return T(e)&&"b"===e.ph},isFireAnimationFrame:function(e){return"FireAnimationFrame"===e.name},isFireIdleCallback:function(e){return"FireIdleCallback"===e.name},isFirstContentfulPaint:y,isFirstPaint:v,isFlowPhase:function(e){return"s"===e||"t"===e||"f"===e},isFlowPhaseEvent:function(e){return"s"===e.ph||"t"===e.ph||"f"===e.ph},isFrameCommittedInBrowser:function(e){return"FrameCommittedInBrowser"===e.name},isFunctionCall:function(e){return"FunctionCall"===e.name},isGPUTask:function(e){return"GPUTask"===e.name},isHandlePostMessage:function(e){return"HandlePostMessage"===e.name},isInstant:S,isInteractiveTime:R,isInvalidateLayout:function(e){return"InvalidateLayout"===e.name},isInvalidationTracking:function(e){return m(e)||l(e)||f(e)||g(e)},isJSInvocationEvent:function(e){switch(e.name){case"RunMicrotasks":case"FunctionCall":case"EvaluateScript":case"v8.evaluateModule":case"EventDispatch":case"V8.Execute":case"V8Console::runTask":return!0}return!(!e.name.startsWith("v8")&&!e.name.startsWith("V8"))||!!M(e)},isLargestContentfulPaintCandidate:h,isLargestImagePaintCandidate:function(e){return"LargestImagePaint::Candidate"===e.name},isLargestTextPaintCandidate:function(e){return"LargestTextPaint::Candidate"===e.name},isLayerTreeHostImplSnapshot:function(e){return"cc::LayerTreeHostImpl"===e.name},isLayout:function(e){return"Layout"===e.name},isLayoutImageUnsized:function(e){return"LayoutImageUnsized"===e.name},isLayoutInvalidationTracking:g,isLayoutShift:function(e){return"LayoutShift"===e.name},isLegacyScreenshot:function(e){return"Screenshot"===e.name&&"id"in e},isLegacySyntheticScreenshot:function(e){return"Screenshot"===e.name&&"dataUri"in(e.args??{})},isLegacyTimelineFrame:function(e){return"idle"in e&&"boolean"==typeof e.idle},isMainFrameViewport:function(e){return"PaintTimingVisualizer::Viewport"===e.name},isMarkDOMContent:I,isMarkLoad:k,isMarkerEvent:function(e){return("I"===e.ph||"R"===e.ph)&&s.some((n=>n(e)))},isNavigationStart:P,isNeedsBeginFrameChanged:function(e){return"NeedsBeginFrameChanged"===e.name},isNestableAsyncPhase:o,isNetworkTrackEntry:function(e){return C(e)||b(e)||A(e)},isPaint:function(e){return"Paint"===e.name},isPaintImage:function(e){return"PaintImage"===e.name},isParseHTML:function(e){return"ParseHTML"===e.name},isParseMetaViewport:function(e){return"ParseMetaViewport"===e.name},isPerformanceMark:function(e){return L(e)&&("R"===e.ph||"I"===e.ph)},isPerformanceMeasure:E,isPerformanceMeasureBegin:function(e){return E(e)&&"b"===e.ph},isPhaseAsync:u,isPipelineReporter:function(e){return"PipelineReporter"===e.name},isPrePaint:function(e){return"PrePaint"===e.name},isProcessName:function(e){return"process_name"===e.name},isProfile:function(e){return"Profile"===e.name},isProfileCall:function(e){return"callFrame"in e},isProfileChunk:function(e){return"ProfileChunk"===e.name},isRasterTask:function(e){return"RasterTask"===e.name},isReceivedDataEvent:function(e){return"ResourceReceivedData"===e.name||"ResourceFinish"===e.name||"ResourceReceiveResponse"===e.name},isRemoteFontLoaded:function(e){return"RemoteFontLoaded"===e.name},isRenderFrameImplCreateChildFrame:function(e){return"RenderFrameImpl::createChildFrame"===e.name},isRendererEvent:function(e){return S(e)||p(e)},isRequestAnimationFrame:function(e){return"RequestAnimationFrame"===e.name},isRequestIdleCallback:function(e){return"RequestIdleCallback"===e.name},isRequestMainThreadFrame:function(e){return"RequestMainThreadFrame"===e.name},isResourceChangePriority:function(e){return"ResourceChangePriority"===e.name},isResourceFinish:function(e){return"ResourceFinish"===e.name},isResourceMarkAsCached:function(e){return"ResourceMarkAsCached"===e.name},isResourceReceiveResponse:function(e){return"ResourceReceiveResponse"===e.name},isResourceReceivedData:function(e){return"ResourceReceivedData"===e.name},isResourceSendRequest:function(e){return"ResourceSendRequest"===e.name},isResourceWillSendRequest:function(e){return"ResourceWillSendRequest"===e.name},isRunPostTaskCallback:function(e){return"RunPostTaskCallback"===e.name},isRunTask:function(e){return"RunTask"===e.name},isSchedulePostMessage:function(e){return"SchedulePostMessage"===e.name},isSchedulePostTaskCallback:function(e){return"SchedulePostTaskCallback"===e.name},isScheduleStyleInvalidationTracking:m,isScheduleStyleRecalculation:function(e){return"ScheduleStyleRecalculation"===e.name},isScreenshot:function(e){return"Screenshot"===e.name&&"source_id"in(e.args??{})},isScrollLayer:function(e){return"ScrollLayer"===e.name},isSelectorStats:function(e){return"SelectorStats"===e.name},isSetLayerId:function(e){return"SetLayerTreeId"===e.name},isStyleInvalidatorInvalidationTracking:f,isStyleRecalcInvalidationTracking:l,isSyntheticAnimation:function(e){if("Animation"!==e.name||!e.cat.includes("devtools.timeline"))return!1;const n=e.args?.data;return!!n&&("beginEvent"in n&&"endEvent"in n)},isSyntheticBased:function(e){return"rawSourceEvent"in e},isSyntheticConsoleTiming:function(e){if("blink.console"!==e.cat)return!1;const n=e.args?.data;return!!n&&("beginEvent"in n&&"endEvent"in n)},isSyntheticCpuProfile:function(e){return"CpuProfile"===e.name},isSyntheticInteraction:function(e){return Boolean("interactionId"in e&&e.args?.data&&"beginEvent"in e.args.data&&"endEvent"in e.args.data)},isSyntheticLayoutShift:function(e){return"SyntheticLayoutShift"===e.name},isSyntheticLayoutShiftCluster:function(e){return"SyntheticLayoutShiftCluster"===e.name},isSyntheticNetworkRequest:C,isSyntheticUserTiming:function(e){if("blink.user_timing"!==e.cat)return!1;const n=e.args?.data;return!!n&&("beginEvent"in n&&"endEvent"in n)},isSyntheticWebSocketConnection:b,isTargetRundownEvent:function(e){return"disabled-by-default-devtools.target-rundown"===e.cat&&"ScriptCompiled"===e.name},isThreadName:function(e){return"thread_name"===e.name},isTimerFire:function(e){return"TimerFire"===e.name},isTimerInstall:function(e){return"TimerInstall"===e.name},isTracingSessionIdForWorker:function(e){return"TracingSessionIdForWorker"===e.name},isTracingStartedInBrowser:function(e){return"TracingStartedInBrowser"===e.name},isUpdateCounters:function(e){return"UpdateCounters"===e.name},isUpdateLayer:function(e){return"UpdateLayer"===e.name},isUpdateLayoutTree:function(e){return"UpdateLayoutTree"===e.name},isUserTiming:L,isUserTimingMeasure:function(e){return"UserTiming::Measure"===e.name},isV8Compile:function(e){return"v8.compile"===e.name},isV8SourceRundownEvent:function(e){return"disabled-by-default-devtools.v8-source-rundown"===e.cat&&"ScriptCatchup"===e.name},isV8SourceRundownSourcesLargeScriptCatchupEvent:function(e){return"disabled-by-default-devtools.v8-source-rundown-sources"===e.cat&&"LargeScriptCatchup"===e.name},isV8SourceRundownSourcesScriptCatchupEvent:function(e){return"disabled-by-default-devtools.v8-source-rundown-sources"===e.cat&&"ScriptCatchup"===e.name},isWebSocketCreate:F,isWebSocketDestroy:function(e){return"WebSocketDestroy"===e.name},isWebSocketEvent:function(e){return A(e)||b(e)},isWebSocketInfo:w,isWebSocketReceive:function(e){return"WebSocketReceive"===e.name},isWebSocketReceiveHandshakeResponse:function(e){return"WebSocketReceiveHandshakeResponse"===e.name},isWebSocketSend:function(e){return"WebSocketSend"===e.name},isWebSocketSendHandshakeRequest:function(e){return"WebSocketSendHandshakeRequest"===e.name},isWebSocketTraceEvent:A,isWebSocketTransfer:D,objectIsCallFrame:function(e){return"functionName"in e&&"string"==typeof e.functionName&&"scriptId"in e&&("string"==typeof e.scriptId||"number"==typeof e.scriptId)&&"columnNumber"in e&&"number"==typeof e.columnNumber&&"lineNumber"in e&&"number"==typeof e.lineNumber&&"url"in e&&"string"==typeof e.url}});export{e as Configuration,N as Events,r as Extensions,i as File,a as Timing};
|