chrome-devtools-frontend 1.0.1662965 → 1.0.1664496

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.
Files changed (273) hide show
  1. package/.agents/skills/{creating-a-model → devtools-model-management}/SKILL.md +0 -1
  2. package/.agents/skills/devtools-ux-writing-refactor/SKILL.md +2 -1
  3. package/.agents/skills/fixing-skipped-tests/SKILL.md +3 -3
  4. package/.agents/skills/merging-devtools-module/SKILL.md +1 -1
  5. package/.agents/skills/migrate-chromium-test/SKILL.md +3 -2
  6. package/.agents/skills/repro-flaky-tests/SKILL.md +71 -31
  7. package/.agents/skills/ui-eng-vision-widget-promoter/SKILL.md +1 -0
  8. package/docs/ui_engineering.md +2 -0
  9. package/eslint.config.mjs +1 -0
  10. package/front_end/core/common/Settings.ts +75 -0
  11. package/front_end/core/protocol_client/PuppeteerDevToolsConnection.ts +112 -0
  12. package/front_end/core/sdk/CPUProfilerModel.ts +21 -13
  13. package/front_end/core/sdk/CSSContainerQuery.ts +1 -1
  14. package/front_end/core/sdk/CSSLayer.ts +1 -1
  15. package/front_end/core/sdk/CSSMedia.ts +1 -1
  16. package/front_end/core/sdk/CSSModel.ts +1 -1
  17. package/front_end/core/sdk/CSSNavigation.ts +1 -1
  18. package/front_end/core/sdk/CSSProperty.ts +1 -1
  19. package/front_end/core/sdk/CSSQuery.ts +1 -1
  20. package/front_end/core/sdk/CSSRule.ts +1 -1
  21. package/front_end/core/sdk/CSSScope.ts +1 -1
  22. package/front_end/core/sdk/CSSStartingStyle.ts +1 -1
  23. package/front_end/core/sdk/CSSStyleDeclaration.ts +1 -1
  24. package/front_end/core/sdk/CSSStyleSheetHeader.ts +1 -1
  25. package/front_end/core/sdk/CSSSupports.ts +1 -1
  26. package/front_end/core/sdk/CompilerSourceMappingContentProvider.ts +1 -1
  27. package/front_end/core/sdk/NetworkManager.ts +1 -1
  28. package/front_end/core/sdk/NetworkRequest.ts +7 -7
  29. package/front_end/core/sdk/Resource.ts +1 -1
  30. package/front_end/core/sdk/ScopeTreeCache.ts +1 -1
  31. package/front_end/core/sdk/Script.ts +1 -1
  32. package/front_end/core/sdk/ServerSentEvents.ts +1 -1
  33. package/front_end/core/sdk/SourceMap.ts +1 -1
  34. package/front_end/core/sdk/SourceMapScopesInfo.ts +1 -1
  35. package/front_end/core/sdk/sdk-meta.ts +3 -3
  36. package/front_end/{models → core}/text_utils/ContentProvider.ts +4 -6
  37. package/front_end/{models → core}/text_utils/StaticContentProvider.ts +4 -6
  38. package/front_end/{models → core}/text_utils/StreamingContentData.ts +1 -2
  39. package/front_end/{models → core}/text_utils/TextRange.ts +6 -3
  40. package/front_end/{models → core}/text_utils/TextUtils.ts +7 -7
  41. package/front_end/{models → core}/text_utils/WasmDisassembly.ts +2 -2
  42. package/front_end/core/text_utils/text_utils.ts +27 -0
  43. package/front_end/entrypoints/formatter_worker/AcornTokenizer.ts +1 -1
  44. package/front_end/entrypoints/heap_snapshot_worker/HeapSnapshotLoader.ts +1 -1
  45. package/front_end/entrypoints/main/MainImpl.ts +14 -1
  46. package/front_end/foundation/Universe.ts +1 -1
  47. package/front_end/models/ai_assistance/AgentProject.ts +1 -1
  48. package/front_end/models/ai_assistance/agents/AccessibilityAgent.ts +3 -6
  49. package/front_end/models/ai_assistance/agents/AiAgent.ts +1 -1
  50. package/front_end/models/ai_assistance/agents/ContextSelectionAgent.ts +19 -11
  51. package/front_end/models/ai_assistance/agents/PerformanceAgent.snapshot.txt +2 -2
  52. package/front_end/models/ai_assistance/agents/PerformanceAgent.ts +23 -10
  53. package/front_end/models/ai_assistance/agents/StorageAgent.ts +19 -18
  54. package/front_end/models/ai_assistance/agents/StylingAgent.ts +2 -3
  55. package/front_end/models/ai_assistance/contexts/FileContext.ts +7 -3
  56. package/front_end/models/ai_assistance/contexts/PerformanceTraceContext.ts +39 -11
  57. package/front_end/models/ai_assistance/data_formatters/FileFormatter.ts +6 -3
  58. package/front_end/models/ai_assistance/data_formatters/NetworkRequestFormatter.ts +1 -1
  59. package/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.snapshot.txt +4 -4
  60. package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.snapshot.txt +8 -8
  61. package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.ts +76 -3
  62. package/front_end/models/ai_assistance/tools/ListNetworkRequests.ts +11 -1
  63. package/front_end/models/badges/AiExplorerBadge.ts +8 -3
  64. package/front_end/models/badges/Badge.ts +1 -0
  65. package/front_end/models/badges/UserBadges.ts +11 -5
  66. package/front_end/models/bindings/CompilerScriptMapping.ts +1 -1
  67. package/front_end/models/bindings/ContentProviderBasedProject.ts +1 -1
  68. package/front_end/models/bindings/DebuggerLanguagePlugins.ts +2 -2
  69. package/front_end/models/bindings/DebuggerWorkspaceBinding.ts +1 -1
  70. package/front_end/models/bindings/DefaultScriptMapping.ts +1 -1
  71. package/front_end/models/bindings/FileUtils.ts +1 -1
  72. package/front_end/models/bindings/PresentationConsoleMessageHelper.ts +7 -10
  73. package/front_end/models/bindings/ResourceMapping.ts +1 -1
  74. package/front_end/models/bindings/ResourceScriptMapping.ts +1 -1
  75. package/front_end/models/bindings/SASSSourceMapping.ts +1 -1
  76. package/front_end/models/bindings/StylesSourceMapping.ts +1 -1
  77. package/front_end/models/breakpoints/BreakpointManager.ts +1 -1
  78. package/front_end/models/crux-manager/CrUXManager.ts +1 -1
  79. package/front_end/models/emulation/EmulatedDevices.ts +3 -2
  80. package/front_end/models/har/Importer.ts +1 -1
  81. package/front_end/models/har/Writer.ts +1 -1
  82. package/front_end/models/issues_manager/IssueAggregator.ts +9 -0
  83. package/front_end/models/issues_manager/IssuesManager.ts +5 -0
  84. package/front_end/models/issues_manager/LazyLoadImageIssue.ts +76 -0
  85. package/front_end/models/issues_manager/descriptions/lazyLoadImageZeroSize.md +7 -0
  86. package/front_end/models/issues_manager/issues_manager.ts +2 -0
  87. package/front_end/models/javascript_metadata/NativeFunctions.js +9 -10
  88. package/front_end/models/live-metrics/LiveMetrics.ts +2 -3
  89. package/front_end/models/logs/NetworkLog.ts +4 -3
  90. package/front_end/models/logs/logs-meta.ts +3 -3
  91. package/front_end/models/network_time_calculator/NetworkTimeCalculator.ts +4 -4
  92. package/front_end/models/persistence/Automapping.ts +1 -1
  93. package/front_end/models/persistence/AutomaticFileSystemWorkspaceBinding.ts +2 -2
  94. package/front_end/models/persistence/FileSystemWorkspaceBinding.ts +1 -1
  95. package/front_end/models/persistence/IsolatedFileSystem.ts +2 -2
  96. package/front_end/models/persistence/NetworkPersistenceManager.ts +1 -1
  97. package/front_end/models/persistence/PersistenceImpl.ts +1 -1
  98. package/front_end/models/persistence/PlatformFileSystem.ts +1 -1
  99. package/front_end/models/source_map_scopes/FunctionCodeResolver.ts +1 -1
  100. package/front_end/models/source_map_scopes/NamesResolver.ts +1 -1
  101. package/front_end/models/text_utils/text_utils.ts +2 -24
  102. package/front_end/models/trace/insights/ImageDelivery.ts +2 -2
  103. package/front_end/models/trace/insights/LegacyJavaScript.ts +1 -1
  104. package/front_end/models/trace/insights/RenderBlocking.ts +1 -1
  105. package/front_end/models/trace/insights/ThirdParties.ts +1 -1
  106. package/front_end/models/workspace/FileManager.ts +1 -1
  107. package/front_end/models/workspace/UISourceCode.ts +1 -1
  108. package/front_end/models/workspace/WorkspaceImpl.ts +1 -1
  109. package/front_end/models/workspace_diff/WorkspaceDiff.ts +1 -1
  110. package/front_end/panels/accessibility/AccessibilityNodeView.ts +1 -1
  111. package/front_end/panels/accessibility/AccessibilityStrings.ts +2 -2
  112. package/front_end/panels/ai_assistance/AiAssistancePanel.ts +1 -1
  113. package/front_end/panels/ai_assistance/ExportConversation.ts +1 -1
  114. package/front_end/panels/ai_assistance/ai_assistance-meta.ts +1 -1
  115. package/front_end/panels/ai_assistance/components/ChatMessage.ts +1 -1
  116. package/front_end/panels/application/AppManifestView.ts +4 -4
  117. package/front_end/panels/application/ApplicationPanelSidebar.ts +1 -2
  118. package/front_end/panels/application/CrashReportContextView.ts +1 -1
  119. package/front_end/panels/application/DOMStorageItemsView.ts +1 -1
  120. package/front_end/panels/application/DeviceBoundSessionsView.ts +4 -4
  121. package/front_end/panels/application/ExtensionStorageItemsView.ts +1 -1
  122. package/front_end/panels/application/FrameDetailsView.ts +1 -1
  123. package/front_end/panels/application/ServiceWorkerCacheTreeElement.ts +12 -2
  124. package/front_end/panels/application/ServiceWorkerCacheViews.ts +1 -1
  125. package/front_end/panels/application/application.ts +2 -0
  126. package/front_end/panels/application/components/BackForwardCacheView.ts +21 -5
  127. package/front_end/panels/application/components/CrashReportContextGrid.ts +1 -1
  128. package/front_end/panels/application/components/TrustTokensView.ts +2 -2
  129. package/front_end/panels/application/preloading/PreloadingView.ts +1 -1
  130. package/front_end/panels/application/preloading/components/PreloadingDisabledInfobar.ts +2 -2
  131. package/front_end/panels/application/preloading/components/PreloadingString.ts +2 -2
  132. package/front_end/panels/application/preloading/components/UsedPreloadingView.ts +4 -4
  133. package/front_end/panels/autofill/AutofillView.ts +1 -1
  134. package/front_end/panels/common/AiCodeCompletionTeaser.ts +1 -1
  135. package/front_end/panels/common/ExtensionServer.ts +1 -1
  136. package/front_end/panels/console/ConsoleFilter.ts +1 -1
  137. package/front_end/panels/console/ConsoleSidebar.ts +1 -1
  138. package/front_end/panels/console/ConsoleView.ts +1 -1
  139. package/front_end/panels/console/ConsoleViewMessage.ts +1 -1
  140. package/front_end/panels/console/PromptBuilder.ts +1 -1
  141. package/front_end/panels/coverage/CoverageDecorationManager.ts +9 -1
  142. package/front_end/panels/coverage/CoverageModel.ts +1 -1
  143. package/front_end/panels/css_overview/CSSOverviewCompletedView.ts +1 -1
  144. package/front_end/panels/developer_resources/DeveloperResourcesListView.ts +1 -1
  145. package/front_end/panels/developer_resources/DeveloperResourcesView.ts +1 -1
  146. package/front_end/panels/elements/AccessibilityTreeView.ts +38 -3
  147. package/front_end/panels/elements/AdoptedStyleSheetTreeElement.ts +1 -1
  148. package/front_end/panels/elements/ElementIssueUtils.ts +2 -2
  149. package/front_end/panels/elements/ElementsTreeElement.ts +10 -3
  150. package/front_end/panels/elements/StandaloneStylesContainer.ts +1 -1
  151. package/front_end/panels/elements/StylePropertiesSection.ts +1 -1
  152. package/front_end/panels/elements/StylePropertyTreeElement.ts +1 -1
  153. package/front_end/panels/elements/StylesAiCodeCompletionProvider.ts +1 -1
  154. package/front_end/panels/elements/StylesContainer.ts +1 -1
  155. package/front_end/panels/elements/StylesSidebarPane.ts +1 -1
  156. package/front_end/panels/elements/components/CSSPropertyDocsView.ts +1 -1
  157. package/front_end/panels/explain/components/ConsoleInsight.ts +2 -2
  158. package/front_end/panels/issues/AffectedLazyLoadImagesView.ts +76 -0
  159. package/front_end/panels/issues/AffectedResourcesView.ts +1 -1
  160. package/front_end/panels/issues/CorsIssueDetailsView.ts +1 -1
  161. package/front_end/panels/issues/IssueView.ts +2 -0
  162. package/front_end/panels/issues/issues.ts +2 -0
  163. package/front_end/panels/layer_viewer/Layers3DView.ts +1 -1
  164. package/front_end/panels/lighthouse/LighthouseController.ts +5 -0
  165. package/front_end/panels/lighthouse/LighthouseReportRenderer.ts +1 -1
  166. package/front_end/panels/network/BinaryResourceView.ts +1 -1
  167. package/front_end/panels/network/NetworkDataGridNode.ts +29 -7
  168. package/front_end/panels/network/NetworkLogView.ts +1 -1
  169. package/front_end/panels/network/NetworkLogViewColumns.ts +6 -6
  170. package/front_end/panels/network/NetworkPanel.ts +4 -4
  171. package/front_end/panels/network/NetworkSearchScope.ts +1 -1
  172. package/front_end/panels/network/RequestConditionsDrawer.ts +1 -1
  173. package/front_end/panels/network/RequestHTMLView.ts +1 -1
  174. package/front_end/panels/network/RequestPayloadView.ts +1 -1
  175. package/front_end/panels/network/RequestPreviewView.ts +1 -1
  176. package/front_end/panels/network/RequestResponseView.ts +1 -1
  177. package/front_end/panels/network/ResourceChunkView.ts +1 -1
  178. package/front_end/panels/network/ResourceDirectSocketChunkView.ts +1 -1
  179. package/front_end/panels/network/ResourceWebSocketFrameView.ts +1 -1
  180. package/front_end/panels/network/components/ResponseHeaderSection.ts +1 -1
  181. package/front_end/panels/network/forward/UIRequestLocation.ts +1 -1
  182. package/front_end/panels/network/network-meta.ts +3 -3
  183. package/front_end/panels/profiler/HeapProfileView.ts +6 -6
  184. package/front_end/panels/profiler/HeapSnapshotView.ts +1 -1
  185. package/front_end/panels/profiler/ProfileDataGrid.ts +12 -8
  186. package/front_end/panels/protocol_monitor/ProtocolMonitor.ts +1 -1
  187. package/front_end/panels/recorder/RecorderPanel.ts +493 -381
  188. package/front_end/panels/recorder/RecordingListView.ts +8 -37
  189. package/front_end/panels/recorder/RecordingView.ts +54 -27
  190. package/front_end/panels/recorder/SelectorPicker.ts +0 -13
  191. package/front_end/panels/recorder/StepEditor.ts +6 -14
  192. package/front_end/panels/recorder/StepView.ts +36 -105
  193. package/front_end/panels/search/SearchResultsPane.ts +1 -1
  194. package/front_end/panels/security/SecurityPanel.ts +3 -3
  195. package/front_end/panels/settings/AISettingsTab.ts +4 -4
  196. package/front_end/panels/settings/components/SyncSection.ts +4 -4
  197. package/front_end/panels/settings/emulation/components/UserAgentClientHintsForm.ts +3 -3
  198. package/front_end/panels/snippets/ScriptSnippetFileSystem.ts +1 -1
  199. package/front_end/panels/sources/BreakpointsView.ts +1 -1
  200. package/front_end/panels/sources/CoveragePlugin.ts +1 -1
  201. package/front_end/panels/sources/DebuggerPlugin.ts +4 -4
  202. package/front_end/panels/sources/FilteredUISourceCodeListProvider.ts +27 -3
  203. package/front_end/panels/sources/NavigatorView.ts +1 -1
  204. package/front_end/panels/sources/PersistenceActions.ts +1 -1
  205. package/front_end/panels/sources/SourcesNavigator.ts +1 -1
  206. package/front_end/panels/sources/SourcesSearchScope.ts +1 -1
  207. package/front_end/panels/sources/TabbedEditorContainer.ts +3 -3
  208. package/front_end/panels/sources/UISourceCodeFrame.ts +1 -1
  209. package/front_end/panels/sources/components/HeadersView.ts +1 -1
  210. package/front_end/panels/sources/filteredUISourceCodeListProvider.css +12 -1
  211. package/front_end/panels/sources/sources-meta.ts +1 -1
  212. package/front_end/panels/timeline/StatusDialog.ts +1 -1
  213. package/front_end/panels/timeline/TimelineController.ts +24 -3
  214. package/front_end/panels/timeline/TimelinePanel.ts +116 -25
  215. package/front_end/panels/timeline/TimelineSelectorStatsView.ts +2 -2
  216. package/front_end/panels/timeline/TimelineUIUtils.ts +1 -1
  217. package/front_end/panels/timeline/components/CWVMetrics.ts +1 -1
  218. package/front_end/panels/timeline/components/IgnoreListSetting.ts +1 -1
  219. package/front_end/panels/timeline/overlays/components/EntryLabelOverlay.ts +2 -2
  220. package/front_end/panels/timeline/timeline-meta.ts +13 -0
  221. package/front_end/services/tracing/TracingManager.ts +27 -2
  222. package/front_end/third_party/chromium/README.chromium +1 -1
  223. package/front_end/third_party/lighthouse/README.chromium +2 -2
  224. package/front_end/third_party/lighthouse/lighthouse-dt-bundle.js +1418 -1413
  225. package/front_end/third_party/lighthouse/locales/en-US.json +12 -6
  226. package/front_end/third_party/lighthouse/locales/en-XL.json +12 -6
  227. package/front_end/third_party/lighthouse/report-assets/report-generator.mjs +1 -1
  228. package/front_end/third_party/puppeteer/puppeteer.ts +20 -1
  229. package/front_end/ui/components/highlighting/HighlightElement.ts +4 -1
  230. package/front_end/ui/components/highlighting/HighlightManager.ts +1 -1
  231. package/front_end/ui/components/highlighting/MarkupHighlight.ts +1 -1
  232. package/front_end/ui/components/markdown_view/MarkdownView.ts +46 -2
  233. package/front_end/ui/components/markdown_view/markdownView.css +23 -0
  234. package/front_end/ui/components/text_editor/config.ts +1 -1
  235. package/front_end/ui/components/tree_outline/TreeOutline.ts +7 -1
  236. package/front_end/ui/legacy/Infobar.ts +1 -1
  237. package/front_end/ui/legacy/InspectorView.ts +12 -7
  238. package/front_end/ui/legacy/SuggestBox.ts +1 -1
  239. package/front_end/ui/legacy/TextPrompt.ts +1 -1
  240. package/front_end/ui/legacy/Toolbar.ts +5 -2
  241. package/front_end/ui/legacy/Treeoutline.ts +26 -7
  242. package/front_end/ui/legacy/components/color_picker/Spectrum.ts +1 -1
  243. package/front_end/ui/legacy/components/data_grid/DataGridElement.ts +1 -1
  244. package/front_end/ui/legacy/components/data_grid/ViewportDataGrid.ts +1 -1
  245. package/front_end/ui/legacy/components/data_grid/dataGrid.css +1 -1
  246. package/front_end/ui/legacy/components/inline_editor/AnimationTimingUI.ts +27 -13
  247. package/front_end/ui/legacy/components/inline_editor/BezierEditor.ts +5 -2
  248. package/front_end/ui/legacy/components/inline_editor/CSSLinearEasingModel.ts +23 -0
  249. package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +161 -54
  250. package/front_end/ui/legacy/components/quick_open/FilteredListWidget.ts +1 -1
  251. package/front_end/ui/legacy/components/source_frame/BinaryResourceViewFactory.ts +1 -1
  252. package/front_end/ui/legacy/components/source_frame/FontView.ts +1 -1
  253. package/front_end/ui/legacy/components/source_frame/ImageView.ts +1 -1
  254. package/front_end/ui/legacy/components/source_frame/JSONView.ts +105 -115
  255. package/front_end/ui/legacy/components/source_frame/PreviewFactory.ts +1 -1
  256. package/front_end/ui/legacy/components/source_frame/ResourceSourceFrame.ts +1 -1
  257. package/front_end/ui/legacy/components/source_frame/SourceFrame.ts +3 -3
  258. package/front_end/ui/legacy/components/source_frame/StreamingContentHexView.ts +1 -1
  259. package/front_end/ui/legacy/components/source_frame/XMLView.ts +5 -1
  260. package/front_end/ui/legacy/components/source_frame/jsonView.css +4 -0
  261. package/front_end/ui/legacy/components/utils/Linkifier.ts +1 -1
  262. package/front_end/ui/legacy/inspectorCommon.css +6 -2
  263. package/front_end/ui/settings/SettingUIRegistration.ts +105 -0
  264. package/front_end/ui/settings/settings.ts +9 -0
  265. package/front_end/ui/visual_logging/KnownContextValues.ts +13 -0
  266. package/mcp/mcp.ts +1 -0
  267. package/package.json +1 -1
  268. /package/.agents/skills/{verification → devtools-verification}/SKILL.md +0 -0
  269. /package/front_end/{models → core}/text_utils/CodeMirrorUtils.ts +0 -0
  270. /package/front_end/{models → core}/text_utils/ContentData.ts +0 -0
  271. /package/front_end/{models → core}/text_utils/Text.ts +0 -0
  272. /package/front_end/{models → core}/text_utils/TextCursor.ts +0 -0
  273. /package/front_end/{models → core}/text_utils/TextUtils.snapshot.txt +0 -0
@@ -42,11 +42,11 @@ import * as i18n from '../../core/i18n/i18n.js';
42
42
  import * as Platform from '../../core/platform/platform.js';
43
43
  import * as Root from '../../core/root/root.js';
44
44
  import * as SDK from '../../core/sdk/sdk.js';
45
+ import * as TextUtils from '../../core/text_utils/text_utils.js';
45
46
  import * as Protocol from '../../generated/protocol.js';
46
47
  import * as AiAssistanceModel from '../../models/ai_assistance/ai_assistance.js';
47
48
  import * as Badges from '../../models/badges/badges.js';
48
49
  import * as CrUXManager from '../../models/crux-manager/crux-manager.js';
49
- import * as TextUtils from '../../models/text_utils/text_utils.js';
50
50
  import * as Trace from '../../models/trace/trace.js';
51
51
  import * as SourceMapsResolver from '../../models/trace_source_maps_resolver/trace_source_maps_resolver.js';
52
52
  import * as Workspace from '../../models/workspace/workspace.js';
@@ -115,6 +115,32 @@ const UIStrings = {
115
115
  * @description Title of show screenshots setting in timeline panel of the performance panel
116
116
  */
117
117
  screenshots: 'Screenshots',
118
+ /**
119
+ * @description Label for the screenshot capture preset dropdown in the performance panel settings pane. The dropdown
120
+ * picks the per-frame resolution and maximum frame count used when capturing screenshots. Every preset is sized to
121
+ * stay within the same per-session memory budget.
122
+ */
123
+ screenshotCapture: 'Screenshot capture',
124
+ /**
125
+ * @description Dropdown option in the performance panel for the default screenshot capture preset (500 x 500 pixels,
126
+ * up to 450 frames).
127
+ */
128
+ screenshotPresetDefault: '500 x 500 px, up to 450 frames',
129
+ /**
130
+ * @description Dropdown option in the performance panel for a screenshot capture preset that uses smaller frames so
131
+ * more of them fit in the per-session memory budget (250 x 250 pixels, up to 1800 frames).
132
+ */
133
+ screenshotPresetMedium: '250 x 250 px, up to 1800 frames',
134
+ /**
135
+ * @description Dropdown option in the performance panel for a screenshot capture preset that uses higher-resolution
136
+ * frames at the cost of capturing fewer of them (1000 x 1000 pixels, up to 100 frames).
137
+ */
138
+ screenshotPresetLarge: '1000 x 1000 px, up to 100 frames',
139
+ /**
140
+ * @description Dropdown option in the performance panel for a screenshot capture preset that uses very small frames
141
+ * so many of them fit in the per-session memory budget (100 x 100 pixels, up to 11250 frames).
142
+ */
143
+ screenshotPresetTiny: '100 x 100 px, up to 11250 frames',
118
144
  /**
119
145
  * @description Text for the memory of the page
120
146
  */
@@ -314,6 +340,46 @@ const UIStrings = {
314
340
  const str_ = i18n.i18n.registerUIStrings('panels/timeline/TimelinePanel.ts', UIStrings);
315
341
  const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
316
342
 
343
+ /**
344
+ * Screenshot capture presets exposed in the performance panel settings pane.
345
+ * Each entry pairs a maximum per-frame edge length (square frames) with a
346
+ * maximum frame count. All presets are sized to stay within the backend's
347
+ * per-session memory budget (~450 MB at 4 bytes per pixel).
348
+ */
349
+ const SCREENSHOT_CAPTURE_PRESETS: ReadonlyArray<{
350
+ readonly key: string,
351
+ readonly maxSize: number,
352
+ readonly maxCount: number,
353
+ readonly label: () => Common.UIString.LocalizedString,
354
+ }> =
355
+ [
356
+ {
357
+ key: '500-450',
358
+ maxSize: 500,
359
+ maxCount: 450,
360
+ label: () => i18nString(UIStrings.screenshotPresetDefault),
361
+ },
362
+ {
363
+ key: '250-1800',
364
+ maxSize: 250,
365
+ maxCount: 1800,
366
+ label: () => i18nString(UIStrings.screenshotPresetMedium),
367
+ },
368
+ {
369
+ key: '1000-100',
370
+ maxSize: 1000,
371
+ maxCount: 100,
372
+ label: () => i18nString(UIStrings.screenshotPresetLarge),
373
+ },
374
+ {
375
+ key: '100-11250',
376
+ maxSize: 100,
377
+ maxCount: 11250,
378
+ label: () => i18nString(UIStrings.screenshotPresetTiny),
379
+ },
380
+ ];
381
+ const DEFAULT_SCREENSHOT_CAPTURE_PRESET_KEY = SCREENSHOT_CAPTURE_PRESETS[0].key;
382
+
317
383
  let timelinePanelInstance: TimelinePanel|undefined;
318
384
 
319
385
  // Total time to wait for source maps to load before giving up so trace processing can proceed.
@@ -349,6 +415,7 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
349
415
  private disableCaptureJSProfileSetting: Common.Settings.Setting<boolean>;
350
416
  private readonly captureLayersAndPicturesSetting: Common.Settings.Setting<boolean>;
351
417
  private readonly captureSelectorStatsSetting: Common.Settings.Setting<boolean>;
418
+ private readonly screenshotCaptureModeSetting: Common.Settings.Setting<string>;
352
419
  readonly #thirdPartyTracksSetting: Common.Settings.Setting<boolean>;
353
420
  private showScreenshotsSetting: Common.Settings.Setting<boolean>;
354
421
  private showMemorySetting: Common.Settings.Setting<boolean>;
@@ -501,6 +568,10 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
501
568
  this.captureSelectorStatsSetting = Common.Settings.Settings.instance().createSetting(
502
569
  'timeline-capture-selector-stats', false, Common.Settings.SettingStorageType.SESSION);
503
570
  this.captureSelectorStatsSetting.setTitle(i18nString(UIStrings.enableSelectorStats));
571
+ this.screenshotCaptureModeSetting = Common.Settings.Settings.instance().createSetting(
572
+ 'timeline-screenshot-capture-mode', DEFAULT_SCREENSHOT_CAPTURE_PRESET_KEY,
573
+ Common.Settings.SettingStorageType.SESSION);
574
+ this.screenshotCaptureModeSetting.setTitle(i18nString(UIStrings.screenshotCapture));
504
575
 
505
576
  this.showScreenshotsSetting =
506
577
  Common.Settings.Settings.instance().createSetting('timeline-show-screenshots', !this.#isNode);
@@ -663,24 +734,6 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
663
734
 
664
735
  SDK.TargetManager.TargetManager.instance().addEventListener(
665
736
  SDK.TargetManager.Events.SUSPEND_STATE_CHANGED, this.onSuspendStateChanged, this);
666
- const profilerModels = SDK.TargetManager.TargetManager.instance().models(SDK.CPUProfilerModel.CPUProfilerModel);
667
- for (const model of profilerModels) {
668
- for (const message of model.registeredConsoleProfileMessages) {
669
- this.consoleProfileFinished(message);
670
- }
671
- }
672
- SDK.TargetManager.TargetManager.instance().observeModels(
673
- SDK.CPUProfilerModel.CPUProfilerModel,
674
- {
675
- modelAdded: (model: SDK.CPUProfilerModel.CPUProfilerModel) => {
676
- model.addEventListener(
677
- SDK.CPUProfilerModel.Events.CONSOLE_PROFILE_FINISHED, event => this.consoleProfileFinished(event.data));
678
- },
679
- modelRemoved: (_model: SDK.CPUProfilerModel.CPUProfilerModel) => {
680
-
681
- },
682
- },
683
- );
684
737
  }
685
738
 
686
739
  zoomEvent(event: Trace.Types.Events.Event): void {
@@ -1031,7 +1084,7 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
1031
1084
  this.#minimapComponent.highlightBounds(bounds, /* withBracket */ false);
1032
1085
  }
1033
1086
 
1034
- private loadFromCpuProfile(profile: Protocol.Profiler.Profile|null): void {
1087
+ loadFromCpuProfile(profile: Protocol.Profiler.Profile|null): void {
1035
1088
  if (this.state !== State.IDLE || profile === null) {
1036
1089
  return;
1037
1090
  }
@@ -1315,6 +1368,31 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
1315
1368
  this.disableCaptureJSProfileSetting.title(), this.disableCaptureJSProfileSetting,
1316
1369
  i18nString(UIStrings.disablesJavascriptSampling)));
1317
1370
 
1371
+ const screenshotPresetSelect = new UI.Toolbar.ToolbarComboBox(
1372
+ () =>
1373
+ this.screenshotCaptureModeSetting.set((screenshotPresetSelect.selectedOption() as HTMLOptionElement).value),
1374
+ this.screenshotCaptureModeSetting.title(), '', 'screenshot-capture-mode');
1375
+ let selectedScreenshotPresetIndex = 0;
1376
+ for (let i = 0; i < SCREENSHOT_CAPTURE_PRESETS.length; ++i) {
1377
+ const preset = SCREENSHOT_CAPTURE_PRESETS[i];
1378
+ screenshotPresetSelect.addOption(
1379
+ screenshotPresetSelect.createOption(preset.label(), preset.key, `tracing.screenshot-size.${preset.key}`));
1380
+ if (preset.key === this.screenshotCaptureModeSetting.get()) {
1381
+ selectedScreenshotPresetIndex = i;
1382
+ }
1383
+ }
1384
+ screenshotPresetSelect.setSelectedIndex(selectedScreenshotPresetIndex);
1385
+ const screenshotPresetPane = this.settingsPane.createChild('div');
1386
+ screenshotPresetPane.append(this.screenshotCaptureModeSetting.title());
1387
+ screenshotPresetPane.append(screenshotPresetSelect.element);
1388
+ // Surface the dropdown only when the "Screenshots" checkbox is on, since the
1389
+ // preset only affects the screenshots captured during the recording.
1390
+ const updateScreenshotPresetVisibility = (): void => {
1391
+ screenshotPresetPane.hidden = !this.showScreenshotsSetting.get();
1392
+ };
1393
+ this.showScreenshotsSetting.addChangeListener(updateScreenshotPresetVisibility);
1394
+ updateScreenshotPresetVisibility();
1395
+
1318
1396
  const thirdPartyCheckbox =
1319
1397
  this.createSettingCheckbox(this.#thirdPartyTracksSetting, i18nString(UIStrings.showDataAddedByExtensions));
1320
1398
 
@@ -1916,6 +1994,14 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
1916
1994
 
1917
1995
  const urlToTrace = await this.#evaluateInspectedURL();
1918
1996
 
1997
+ // Resolve the user's screenshot capture preset (resolution x frame count).
1998
+ // All presets are sized to fit within the backend's per-session memory
1999
+ // budget, which the backend additionally enforces. Forward the values
2000
+ // only when screenshots are actually being captured.
2001
+ const screenshotPreset =
2002
+ SCREENSHOT_CAPTURE_PRESETS.find(p => p.key === this.screenshotCaptureModeSetting.get()) ??
2003
+ SCREENSHOT_CAPTURE_PRESETS[0];
2004
+
1919
2005
  // Order is important here: we tell the controller to start recording, which enables tracing.
1920
2006
  await this.controller.startRecording({
1921
2007
  enableJSSampling: !this.disableCaptureJSProfileSetting.get(),
@@ -1923,6 +2009,9 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
1923
2009
  captureFilmStrip: this.showScreenshotsSetting.get(),
1924
2010
  captureSelectorStats: this.captureSelectorStatsSetting.get(),
1925
2011
  navigateToUrl: this.recordingPageReload ? urlToTrace : undefined,
2012
+ ...(this.showScreenshotsSetting.get() ?
2013
+ {screenshotMaxSize: screenshotPreset.maxSize, screenshotMaxCount: screenshotPreset.maxCount} :
2014
+ {}),
1926
2015
  });
1927
2016
 
1928
2017
  // Once we get here, we know tracing is active.
@@ -2010,11 +2099,6 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
2010
2099
  this.updateTimelineControls();
2011
2100
  }
2012
2101
 
2013
- private consoleProfileFinished(data: SDK.CPUProfilerModel.ProfileFinishedData): void {
2014
- this.loadFromCpuProfile(data.cpuProfile);
2015
- void UI.InspectorView.InspectorView.instance().showPanel('timeline');
2016
- }
2017
-
2018
2102
  private updateTimelineControls(): void {
2019
2103
  if (this.#viewMode.mode === 'VIEWING_TRACE') {
2020
2104
  this.#addSidebarIconToToolbar();
@@ -3186,6 +3270,13 @@ export class BottomUpProfileRevealer implements Common.Revealer.Revealer<Utils.H
3186
3270
  }
3187
3271
  }
3188
3272
 
3273
+ export class ProfileFinishedRevealer implements Common.Revealer.Revealer<SDK.CPUProfilerModel.ProfileFinishedData> {
3274
+ async reveal(data: SDK.CPUProfilerModel.ProfileFinishedData): Promise<void> {
3275
+ await UI.ViewManager.ViewManager.instance().showView('timeline');
3276
+ TimelinePanel.instance().loadFromCpuProfile(data.cpuProfile);
3277
+ }
3278
+ }
3279
+
3189
3280
  export class ActionDelegate implements UI.ActionRegistration.ActionDelegate {
3190
3281
  handleAction(context: UI.Context.Context, actionId: string): boolean {
3191
3282
  const panel = context.flavor(TimelinePanel);
@@ -38,7 +38,7 @@ const UIStrings = {
38
38
  * @description Tooltip description '% of slow-path non-matches'
39
39
  */
40
40
  slowPathNonMatchesExplanation:
41
- 'The percentage of non-matching nodes (Match Attempts - Match Count) that couldn\'t be quickly ruled out by the bloom filter due to high selector complexity. Lower is better.',
41
+ 'The percentage of non-matching nodes (Match Attempts - Match Count) that couldnt be quickly ruled out by the bloom filter due to high selector complexity. Lower is better.',
42
42
  /**
43
43
  * @description Column name for count of elements that the engine attempted to match against a style rule
44
44
  */
@@ -71,7 +71,7 @@ const UIStrings = {
71
71
  * @description Tooltip description 'Style Sheet'
72
72
  */
73
73
  styleSheetIdExplanation:
74
- 'Links to the selector rule definition in the style sheets. Note that a selector rule could be defined in multiple places in a style sheet or defined in multiple style sheets. Selector rules from browser user-agent style sheet or dynamic style sheets don\'t have a link.',
74
+ 'Links to the selector rule definition in the style sheets. Note that a selector rule could be defined in multiple places in a style sheet or defined in multiple style sheets. Selector rules from browser user-agent style sheet or dynamic style sheets dont have a link.',
75
75
  /**
76
76
  * @description A context menu item in data grids to copy entire table to clipboard
77
77
  */
@@ -42,9 +42,9 @@ import * as i18n from '../../core/i18n/i18n.js';
42
42
  import * as Platform from '../../core/platform/platform.js';
43
43
  import * as Root from '../../core/root/root.js';
44
44
  import * as SDK from '../../core/sdk/sdk.js';
45
+ import * as TextUtils from '../../core/text_utils/text_utils.js';
45
46
  import type * as Protocol from '../../generated/protocol.js';
46
47
  import * as Bindings from '../../models/bindings/bindings.js';
47
- import * as TextUtils from '../../models/text_utils/text_utils.js';
48
48
  import * as Trace from '../../models/trace/trace.js';
49
49
  import * as SourceMapsResolver from '../../models/trace_source_maps_resolver/trace_source_maps_resolver.js';
50
50
  import * as Workspace from '../../models/workspace/workspace.js';
@@ -58,7 +58,7 @@ const UIStrings = {
58
58
  */
59
59
  fieldMismatchNotice:
60
60
  'There are many reasons why local and field metrics [may not match](https://web.dev/articles/lab-and-field-data-differences). ' +
61
- 'Adjust [throttling settings and device emulation](https://developer.chrome.com/docs/devtools/device-mode) to analyze traces more similar to the average user\'s environment.',
61
+ 'Adjust [throttling settings and device emulation](https://developer.chrome.com/docs/devtools/device-mode) to analyze traces more similar to the average users environment.',
62
62
  } as const;
63
63
 
64
64
  const str_ = i18n.i18n.registerUIStrings('panels/timeline/components/CWVMetrics.ts', UIStrings);
@@ -45,7 +45,7 @@ const UIStrings = {
45
45
  * @description Aria accessible name in Ignore List Settings Dialog in Performance panel. It labels the input
46
46
  * field used to add new or edit existing regular expressions that match file names to ignore in the debugger.
47
47
  */
48
- addNewRegex: 'Add a regular expression rule for the script\'s URL',
48
+ addNewRegex: 'Add a regular expression rule for the scripts URL',
49
49
  /**
50
50
  * @description Aria accessible name in Ignore List Settings Dialog in Performance panel. It labels the checkbox of
51
51
  * the input field used to enable the new regular expressions that match file names to ignore in the debugger.
@@ -65,12 +65,12 @@ const UIStringsNotTranslate = {
65
65
  * @description Security disclaimer text displayed when the information icon on a button that generates an AI label is hovered.
66
66
  */
67
67
  generateLabelSecurityDisclaimer:
68
- 'The selected call stack is sent to Google. This data may be seen by human reviewers to improve this feature. This is an experimental AI feature and won\'t always get it right.',
68
+ 'The selected call stack is sent to Google. This data may be seen by human reviewers to improve this feature. This is an experimental AI feature and wont always get it right.',
69
69
  /**
70
70
  * @description Enterprise users with logging off - Security disclaimer text displayed when the information icon on a button that generates an AI label is hovered.
71
71
  */
72
72
  generateLabelSecurityDisclaimerLoggingOff:
73
- 'The selected call stack is sent to Google. This data will not be used to improve Google\'s AI models. Your organization may change these settings at any time. This is an experimental AI feature and won\'t always get it right.',
73
+ 'The selected call stack is sent to Google. This data will not be used to improve Googles AI models. Your organization may change these settings at any time. This is an experimental AI feature and wont always get it right.',
74
74
  /**
75
75
  * @description The `Generate AI label button` tooltip disclaimer for when the feature is not available and the reason can be checked in settings.
76
76
  */
@@ -456,3 +456,16 @@ Common.Revealer.registerRevealer({
456
456
  return new Timeline.TimelinePanel.BottomUpProfileRevealer();
457
457
  },
458
458
  });
459
+
460
+ Common.Revealer.registerRevealer({
461
+ contextTypes() {
462
+ return [
463
+ SDK.CPUProfilerModel.ProfileFinishedData,
464
+ ];
465
+ },
466
+ destination: Common.Revealer.RevealerDestination.TIMELINE_PANEL,
467
+ async loadRevealer() {
468
+ const Timeline = await loadTimelineModule();
469
+ return new Timeline.TimelinePanel.ProfileFinishedRevealer();
470
+ },
471
+ });
@@ -66,13 +66,14 @@ export class TracingManager extends SDK.SDKModel.SDKModel<void> {
66
66
  this.#finishing = false;
67
67
  }
68
68
 
69
- async start(client: TracingManagerClient, categoryFilter: string): Promise<Protocol.ProtocolResponseWithError> {
69
+ async start(client: TracingManagerClient, categoryFilter: string,
70
+ options: TracingStartOptions = {}): Promise<Protocol.ProtocolResponseWithError> {
70
71
  if (this.#activeClient) {
71
72
  throw new Error('Tracing is already started');
72
73
  }
73
74
  const bufferUsageReportingIntervalMs = 500;
74
75
  this.#activeClient = client;
75
- const args = {
76
+ const args: Protocol.Tracing.StartRequest = {
76
77
  bufferUsageReportingInterval: bufferUsageReportingIntervalMs,
77
78
  transferMode: Protocol.Tracing.StartRequestTransferMode.ReportEvents,
78
79
  traceConfig: {
@@ -81,6 +82,12 @@ export class TracingManager extends SDK.SDKModel.SDKModel<void> {
81
82
  includedCategories: categoryFilter.split(','),
82
83
  },
83
84
  };
85
+ if (options.screenshotMaxSize !== undefined) {
86
+ args.screenshotMaxSize = options.screenshotMaxSize;
87
+ }
88
+ if (options.screenshotMaxCount !== undefined) {
89
+ args.screenshotMaxCount = options.screenshotMaxCount;
90
+ }
84
91
  const response = await this.#tracingAgent.invoke_start(args);
85
92
  if (response.getError()) {
86
93
  this.#activeClient = null;
@@ -108,6 +115,24 @@ export interface TracingManagerClient {
108
115
  eventsRetrievalProgress(progress: number): void;
109
116
  }
110
117
 
118
+ /**
119
+ * Optional knobs that control how the `disabled-by-default-devtools.screenshot`
120
+ * tracing category captures frames. See `Tracing.start` in the protocol for
121
+ * details and per-session memory budget.
122
+ */
123
+ export interface TracingStartOptions {
124
+ /**
125
+ * Maximum width and height (in pixels) of each captured screenshot.
126
+ * When omitted the backend default (500) is used.
127
+ */
128
+ screenshotMaxSize?: number;
129
+ /**
130
+ * Maximum number of screenshots captured during a single tracing session.
131
+ * When omitted the backend default (450) is used.
132
+ */
133
+ screenshotMaxCount?: number;
134
+ }
135
+
111
136
  class TracingDispatcher implements ProtocolProxyApi.TracingDispatcher {
112
137
  readonly #tracingManager: TracingManager;
113
138
  constructor(tracingManager: TracingManager) {
@@ -1,7 +1,7 @@
1
1
  Name: Dependencies sourced from the upstream `chromium` repository
2
2
  URL: Internal
3
3
  Version: N/A
4
- Revision: 7eaaa785deda657a652efc66266b8cc2957167f9
4
+ Revision: 0710d8bfc99da895041ed5684b55ab2f262173b6
5
5
  Update Mechanism: Manual (https://crbug.com/428069060)
6
6
  License: BSD-3-Clause
7
7
  License File: LICENSE
@@ -1,7 +1,7 @@
1
1
  Name: Lighthouse
2
2
  Short Name: lighthouse
3
- Version: 13.4.0
4
- Revision: cb79bea56c4668fd7a338f2f421f87754ee927a2
3
+ Version: 13.4.1
4
+ Revision: 1d58f5b06d28e3419b38817a6c7488ec4413c67d
5
5
  Update Mechanism: Manual
6
6
  URL: https://github.com/GoogleChrome/lighthouse
7
7
  License: Apache-2.0