chrome-devtools-frontend 1.0.1660788 → 1.0.1661063
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/.agents/skills/evaluate-ai-css-completion/SKILL.md +133 -0
- package/.agents/skills/evaluate-ai-css-completion/scripts/evaluate.js +76 -0
- package/eslint.config.mjs +7 -0
- package/extension-api/ExtensionAPI.d.ts +88 -0
- package/front_end/core/host/InspectorFrontendHost.ts +1 -0
- package/front_end/core/host/InspectorFrontendHostStub.ts +2 -0
- package/front_end/core/platform/StringUtilities.ts +20 -4
- package/front_end/core/sdk/CPUThrottlingManager.ts +2 -0
- package/front_end/core/sdk/DOMDebuggerModel.ts +2 -0
- package/front_end/core/sdk/DOMModel.ts +1 -0
- package/front_end/core/sdk/DebuggerModel.ts +4 -4
- package/front_end/core/sdk/EventBreakpointsModel.ts +2 -0
- package/front_end/core/sdk/FrameManager.ts +1 -0
- package/front_end/core/sdk/IsolateManager.ts +1 -0
- package/front_end/core/sdk/NetworkManager.ts +2 -0
- package/front_end/core/sdk/NetworkRequest.ts +1 -0
- package/front_end/core/sdk/PageResourceLoader.ts +2 -0
- package/front_end/core/sdk/SourceMap.ts +5 -5
- package/front_end/core/sdk/SourceMapManager.ts +3 -2
- package/front_end/core/sdk/TargetManager.ts +4 -0
- package/front_end/entrypoints/main/MainImpl.ts +2 -1
- package/front_end/models/bindings/CompilerScriptMapping.ts +5 -6
- package/front_end/models/bindings/ContentProviderBasedProject.ts +4 -4
- package/front_end/models/bindings/DebuggerLanguagePlugins.ts +3 -4
- package/front_end/models/bindings/DefaultScriptMapping.ts +3 -3
- package/front_end/models/bindings/NetworkProject.ts +1 -10
- package/front_end/models/bindings/ResourceMapping.ts +3 -4
- package/front_end/models/bindings/ResourceScriptMapping.ts +2 -3
- package/front_end/models/bindings/SASSSourceMapping.ts +3 -4
- package/front_end/models/bindings/StylesSourceMapping.ts +3 -3
- package/front_end/models/bindings/TempFile.ts +8 -3
- package/front_end/models/extensions/ExtensionAPI.ts +110 -46
- package/front_end/models/formatter/ScriptFormatter.ts +8 -11
- package/front_end/models/issues_manager/CookieIssue.ts +21 -9
- package/front_end/models/issues_manager/Issue.ts +3 -4
- package/front_end/models/issues_manager/IssueAggregator.ts +0 -9
- package/front_end/models/issues_manager/IssueResolver.ts +2 -2
- package/front_end/models/issues_manager/IssuesManager.ts +136 -137
- package/front_end/models/issues_manager/issues_manager.ts +0 -2
- package/front_end/models/persistence/AutomaticFileSystemWorkspaceBinding.ts +5 -0
- package/front_end/models/source_map_scopes/FunctionCodeResolver.ts +13 -10
- package/front_end/models/workspace/WorkspaceImpl.ts +10 -1
- package/front_end/models/workspace_diff/WorkspaceDiff.ts +10 -4
- package/front_end/panels/ai_assistance/components/ChatMessage.ts +2 -1
- package/front_end/panels/application/FrameDetailsView.ts +1 -1
- package/front_end/panels/application/WebMCPView.ts +38 -43
- package/front_end/panels/application/components/AdsView.ts +201 -30
- package/front_end/panels/application/components/adsView.css +25 -0
- package/front_end/panels/application/preloading/components/RuleSetDetailsView.ts +2 -2
- package/front_end/panels/console/ConsoleView.ts +2 -1
- package/front_end/panels/console/PromptBuilder.ts +2 -1
- package/front_end/panels/emulation/DeviceModeView.ts +52 -70
- package/front_end/panels/issues/IssueView.ts +0 -2
- package/front_end/panels/issues/IssuesPane.ts +1 -8
- package/front_end/panels/js_timeline/js_timeline-meta.ts +3 -2
- package/front_end/panels/linear_memory_inspector/LinearMemoryInspectorController.ts +3 -3
- package/front_end/panels/linear_memory_inspector/LinearMemoryInspectorPane.ts +5 -5
- package/front_end/panels/linear_memory_inspector/components/LinearMemoryHighlightChipList.ts +4 -4
- package/front_end/panels/linear_memory_inspector/components/LinearMemoryInspector.ts +2 -2
- package/front_end/panels/linear_memory_inspector/components/LinearMemoryNavigator.ts +6 -6
- package/front_end/panels/linear_memory_inspector/components/LinearMemoryValueInterpreter.ts +3 -3
- package/front_end/panels/linear_memory_inspector/components/ValueInterpreterDisplay.ts +8 -9
- package/front_end/panels/linear_memory_inspector/components/ValueInterpreterDisplayUtils.ts +2 -2
- package/front_end/panels/linear_memory_inspector/components/ValueInterpreterSettings.ts +1 -1
- package/front_end/panels/linear_memory_inspector/linear_memory_inspector-meta.ts +2 -2
- package/front_end/panels/network/RequestPayloadView.ts +15 -13
- package/front_end/panels/network/RequestTimingView.ts +95 -127
- package/front_end/panels/profiler/HeapSnapshotView.ts +1 -1
- package/front_end/panels/profiler/WritableProfileHeader.ts +2 -2
- package/front_end/panels/recorder/{components/ControlButton.ts → ControlButton.ts} +9 -10
- package/front_end/panels/recorder/{components/CreateRecordingView.ts → CreateRecordingView.ts} +48 -47
- package/front_end/panels/recorder/{components/ExtensionView.ts → ExtensionView.ts} +8 -8
- package/front_end/panels/recorder/RecorderController.ts +88 -77
- package/front_end/panels/recorder/{components/RecordingListView.ts → RecordingListView.ts} +19 -20
- package/front_end/panels/recorder/{components/RecordingView.ts → RecordingView.ts} +88 -88
- package/front_end/panels/recorder/{components/ReplaySection.ts → ReplaySection.ts} +11 -11
- package/front_end/panels/recorder/{components/SelectorPicker.ts → SelectorPicker.ts} +13 -13
- package/front_end/panels/recorder/{components/StepEditor.ts → StepEditor.ts} +15 -15
- package/front_end/panels/recorder/{components/StepView.ts → StepView.ts} +10 -10
- package/front_end/panels/recorder/{components/TimelineSection.ts → TimelineSection.ts} +2 -2
- package/front_end/panels/recorder/recorder.ts +23 -1
- package/front_end/panels/recorder/util/util.ts +113 -0
- package/front_end/panels/sources/InplaceFormatterEditorAction.ts +2 -2
- package/front_end/panels/sources/SourcesNavigator.ts +2 -3
- package/front_end/panels/sources/TabbedEditorContainer.ts +1 -1
- package/front_end/panels/timeline/IsolateSelector.ts +10 -8
- package/front_end/panels/timeline/TimelinePanel.ts +18 -7
- package/front_end/panels/timeline/TimelineUIUtils.ts +144 -129
- package/front_end/panels/timeline/timeline-meta.ts +3 -2
- package/front_end/third_party/chromium/README.chromium +1 -1
- package/front_end/ui/legacy/Treeoutline.ts +3 -0
- package/front_end/ui/legacy/Widget.ts +14 -15
- package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +11 -7
- package/front_end/ui/legacy/components/source_frame/SourceFrame.ts +2 -1
- package/front_end/ui/legacy/components/utils/JSPresentationUtils.ts +10 -1
- package/package.json +1 -1
- package/front_end/models/issues_manager/AttributionReportingIssue.ts +0 -247
- package/front_end/models/issues_manager/descriptions/arInsecureContext.md +0 -7
- package/front_end/models/issues_manager/descriptions/arInvalidInfoHeader.md +0 -5
- package/front_end/models/issues_manager/descriptions/arInvalidRegisterOsSourceHeader.md +0 -5
- package/front_end/models/issues_manager/descriptions/arInvalidRegisterOsTriggerHeader.md +0 -5
- package/front_end/models/issues_manager/descriptions/arInvalidRegisterSourceHeader.md +0 -5
- package/front_end/models/issues_manager/descriptions/arInvalidRegisterTriggerHeader.md +0 -5
- package/front_end/models/issues_manager/descriptions/arNavigationRegistrationUniqueScopeAlreadySet.md +0 -5
- package/front_end/models/issues_manager/descriptions/arNavigationRegistrationWithoutTransientUserActivation.md +0 -6
- package/front_end/models/issues_manager/descriptions/arNoRegisterOsSourceHeader.md +0 -5
- package/front_end/models/issues_manager/descriptions/arNoRegisterOsTriggerHeader.md +0 -5
- package/front_end/models/issues_manager/descriptions/arNoRegisterSourceHeader.md +0 -5
- package/front_end/models/issues_manager/descriptions/arNoRegisterTriggerHeader.md +0 -5
- package/front_end/models/issues_manager/descriptions/arNoWebOrOsSupport.md +0 -4
- package/front_end/models/issues_manager/descriptions/arOsSourceIgnored.md +0 -18
- package/front_end/models/issues_manager/descriptions/arOsTriggerIgnored.md +0 -19
- package/front_end/models/issues_manager/descriptions/arPermissionPolicyDisabled.md +0 -8
- package/front_end/models/issues_manager/descriptions/arSourceAndTriggerHeaders.md +0 -9
- package/front_end/models/issues_manager/descriptions/arSourceIgnored.md +0 -13
- package/front_end/models/issues_manager/descriptions/arTriggerIgnored.md +0 -12
- package/front_end/models/issues_manager/descriptions/arUntrustworthyReportingOrigin.md +0 -10
- package/front_end/models/issues_manager/descriptions/arWebAndOsHeaders.md +0 -11
- package/front_end/panels/issues/AttributionReportingIssueDetailsView.ts +0 -182
- package/front_end/panels/recorder/components/components.ts +0 -25
- package/front_end/panels/recorder/components/util.ts +0 -116
- /package/front_end/panels/recorder/{components/controlButton.css → controlButton.css} +0 -0
- /package/front_end/panels/recorder/{components/createRecordingView.css → createRecordingView.css} +0 -0
- /package/front_end/panels/recorder/{components/extensionView.css → extensionView.css} +0 -0
- /package/front_end/panels/recorder/{components/recordingListView.css → recordingListView.css} +0 -0
- /package/front_end/panels/recorder/{components/recordingView.css → recordingView.css} +0 -0
- /package/front_end/panels/recorder/{components/replaySection.css → replaySection.css} +0 -0
- /package/front_end/panels/recorder/{components/selectorPicker.css → selectorPicker.css} +0 -0
- /package/front_end/panels/recorder/{components/startView.css → startView.css} +0 -0
- /package/front_end/panels/recorder/{components/stepEditor.css → stepEditor.css} +0 -0
- /package/front_end/panels/recorder/{components/stepView.css → stepView.css} +0 -0
- /package/front_end/panels/recorder/{components/timelineSection.css → timelineSection.css} +0 -0
|
@@ -453,10 +453,15 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
|
453
453
|
#hiddenTracksInfoBarByParsedTrace = new WeakMap<Trace.TraceModel.ParsedTrace, UI.Infobar.Infobar|'DISMISSED'>();
|
|
454
454
|
|
|
455
455
|
readonly #resourceLoader: SDK.PageResourceLoader.ResourceLoader;
|
|
456
|
+
readonly #targetManager: SDK.TargetManager.TargetManager;
|
|
457
|
+
readonly #isolateManager: SDK.IsolateManager.IsolateManager;
|
|
456
458
|
|
|
457
|
-
constructor(resourceLoader: SDK.PageResourceLoader.ResourceLoader,
|
|
459
|
+
constructor(resourceLoader: SDK.PageResourceLoader.ResourceLoader, targetManager: SDK.TargetManager.TargetManager,
|
|
460
|
+
isolateManager: SDK.IsolateManager.IsolateManager, traceModel?: Trace.TraceModel.Model) {
|
|
458
461
|
super('timeline');
|
|
459
462
|
this.#resourceLoader = resourceLoader;
|
|
463
|
+
this.#targetManager = targetManager;
|
|
464
|
+
this.#isolateManager = isolateManager;
|
|
460
465
|
this.registerRequiredCSS(timelinePanelStyles);
|
|
461
466
|
const adornerContent = document.createElement('span');
|
|
462
467
|
adornerContent.innerHTML = `<div style="
|
|
@@ -717,10 +722,13 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
|
717
722
|
static instance(opts: {
|
|
718
723
|
forceNew: true,
|
|
719
724
|
resourceLoader: SDK.PageResourceLoader.ResourceLoader,
|
|
725
|
+
targetManager: SDK.TargetManager.TargetManager,
|
|
726
|
+
isolateManager: SDK.IsolateManager.IsolateManager,
|
|
720
727
|
traceModel?: Trace.TraceModel.Model,
|
|
721
728
|
}|undefined = undefined): TimelinePanel {
|
|
722
729
|
if (opts) {
|
|
723
|
-
timelinePanelInstance =
|
|
730
|
+
timelinePanelInstance =
|
|
731
|
+
new TimelinePanel(opts.resourceLoader, opts.targetManager, opts.isolateManager, opts.traceModel);
|
|
724
732
|
}
|
|
725
733
|
|
|
726
734
|
if (!timelinePanelInstance) {
|
|
@@ -1149,7 +1157,7 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
|
1149
1157
|
|
|
1150
1158
|
// Isolate selector
|
|
1151
1159
|
if (this.#isNode) {
|
|
1152
|
-
const isolateSelector = new IsolateSelector();
|
|
1160
|
+
const isolateSelector = new IsolateSelector(this.#targetManager, this.#isolateManager);
|
|
1153
1161
|
this.panelToolbar.appendSeparator();
|
|
1154
1162
|
this.panelToolbar.appendToolbarItem(isolateSelector);
|
|
1155
1163
|
}
|
|
@@ -2703,8 +2711,8 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
|
2703
2711
|
const {scriptId, scriptUrl, sourceUrl, sourceMapUrl, frame, cachedRawSourceMap} = params;
|
|
2704
2712
|
|
|
2705
2713
|
if (cachedRawSourceMap) {
|
|
2706
|
-
return new SDK.SourceMap.SourceMap(
|
|
2707
|
-
|
|
2714
|
+
return new SDK.SourceMap.SourceMap(sourceUrl, sourceMapUrl ?? '' as Platform.DevToolsPath.UrlString,
|
|
2715
|
+
cachedRawSourceMap, Common.Console.Console.instance());
|
|
2708
2716
|
}
|
|
2709
2717
|
|
|
2710
2718
|
// For still-active frames, the source map is likely already fetched or at least in-flight.
|
|
@@ -2725,7 +2733,8 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
|
2725
2733
|
if (!isFreshRecording && metadata?.sourceMaps && !isDataUrl) {
|
|
2726
2734
|
const cachedSourceMap = metadata.sourceMaps.find(m => m.sourceMapUrl === sourceMapUrl);
|
|
2727
2735
|
if (cachedSourceMap) {
|
|
2728
|
-
return new SDK.SourceMap.SourceMap(sourceUrl, sourceMapUrl, cachedSourceMap.sourceMap
|
|
2736
|
+
return new SDK.SourceMap.SourceMap(sourceUrl, sourceMapUrl, cachedSourceMap.sourceMap,
|
|
2737
|
+
Common.Console.Console.instance());
|
|
2729
2738
|
}
|
|
2730
2739
|
}
|
|
2731
2740
|
|
|
@@ -2755,7 +2764,9 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
|
2755
2764
|
};
|
|
2756
2765
|
const payload = await SDK.SourceMapManager.tryLoadSourceMap(
|
|
2757
2766
|
TimelinePanel.instance().#resourceLoader, sourceMapUrl, initiator);
|
|
2758
|
-
return payload ?
|
|
2767
|
+
return payload ?
|
|
2768
|
+
new SDK.SourceMap.SourceMap(sourceUrl, sourceMapUrl, payload, Common.Console.Console.instance()) :
|
|
2769
|
+
null;
|
|
2759
2770
|
}
|
|
2760
2771
|
|
|
2761
2772
|
const timeout = new Promise<null>(resolve => setTimeout(() => resolve(null), SOURCE_MAP_LOAD_TIMEOUT_MS));
|
|
@@ -517,8 +517,8 @@ export class TimelineUIUtils {
|
|
|
517
517
|
return functionName;
|
|
518
518
|
}
|
|
519
519
|
|
|
520
|
-
static testContentMatching(
|
|
521
|
-
|
|
520
|
+
static testContentMatching(traceEvent: Trace.Types.Events.Event, regExp: RegExp,
|
|
521
|
+
handlerData?: Trace.Handlers.Types.HandlerData): boolean {
|
|
522
522
|
const title = TimelineUIUtils.eventStyle(traceEvent).title;
|
|
523
523
|
const tokens = [title];
|
|
524
524
|
|
|
@@ -641,9 +641,9 @@ export class TimelineUIUtils {
|
|
|
641
641
|
return frame.scriptId !== '0' && !(frame.url?.startsWith('native '));
|
|
642
642
|
}
|
|
643
643
|
|
|
644
|
-
static async buildDetailsNodeForTraceEvent(
|
|
645
|
-
|
|
646
|
-
|
|
644
|
+
static async buildDetailsNodeForTraceEvent(event: Trace.Types.Events.Event, target: SDK.Target.Target|null,
|
|
645
|
+
linkifier: LegacyComponents.Linkifier.Linkifier, isFreshOrEnhanced = false,
|
|
646
|
+
parsedTrace: Trace.TraceModel.ParsedTrace): Promise<Node|null> {
|
|
647
647
|
let details: HTMLElement|HTMLSpanElement|(Element | null)|Text|null = null;
|
|
648
648
|
let detailsText;
|
|
649
649
|
// TODO(40287735): update this code with type-safe data checks.
|
|
@@ -768,15 +768,15 @@ export class TimelineUIUtils {
|
|
|
768
768
|
omitOrigin,
|
|
769
769
|
};
|
|
770
770
|
if (isFreshOrEnhanced) {
|
|
771
|
-
return linkifier.linkifyScriptLocation(
|
|
772
|
-
|
|
771
|
+
return linkifier.linkifyScriptLocation(target, scriptId, url as Platform.DevToolsPath.UrlString, lineNumber,
|
|
772
|
+
options);
|
|
773
773
|
}
|
|
774
774
|
return LegacyComponents.Linkifier.Linkifier.linkifyURL(url as Platform.DevToolsPath.UrlString, options);
|
|
775
775
|
}
|
|
776
776
|
|
|
777
|
-
static linkifyTopCallFrame(
|
|
778
|
-
|
|
779
|
-
|
|
777
|
+
static linkifyTopCallFrame(event: Trace.Types.Events.Event, target: SDK.Target.Target|null,
|
|
778
|
+
linkifier: LegacyComponents.Linkifier.Linkifier, isFreshOrEnhanced = false,
|
|
779
|
+
maxLength?: number): Element|null {
|
|
780
780
|
let frame = Trace.Helpers.Trace.getZeroIndexedStackTraceInEventPayload(event)?.[0];
|
|
781
781
|
if (Trace.Types.Events.isProfileCall(event)) {
|
|
782
782
|
frame = event.callFrame;
|
|
@@ -832,29 +832,28 @@ export class TimelineUIUtils {
|
|
|
832
832
|
return div;
|
|
833
833
|
}
|
|
834
834
|
|
|
835
|
-
static buildConsumeCacheDetails(
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
contentHelper: TimelineDetailsContentHelper): void {
|
|
835
|
+
static buildConsumeCacheDetails(eventData: {
|
|
836
|
+
consumedCacheSize?: number,
|
|
837
|
+
cacheRejected?: boolean,
|
|
838
|
+
cacheKind?: string,
|
|
839
|
+
},
|
|
840
|
+
contentHelper: TimelineDetailsContentHelper): void {
|
|
842
841
|
if (typeof eventData.consumedCacheSize === 'number') {
|
|
843
|
-
contentHelper.appendTextRow(
|
|
844
|
-
|
|
845
|
-
contentHelper.appendTextRow(
|
|
846
|
-
|
|
842
|
+
contentHelper.appendTextRow(i18nString(UIStrings.compilationCacheStatus),
|
|
843
|
+
i18nString(UIStrings.scriptLoadedFromCache));
|
|
844
|
+
contentHelper.appendTextRow(i18nString(UIStrings.compilationCacheSize),
|
|
845
|
+
i18n.ByteUtilities.bytesToString(eventData.consumedCacheSize));
|
|
847
846
|
const cacheKind = eventData.cacheKind;
|
|
848
847
|
if (cacheKind) {
|
|
849
848
|
contentHelper.appendTextRow(i18nString(UIStrings.compilationCacheKind), cacheKind);
|
|
850
849
|
}
|
|
851
850
|
} else if ('cacheRejected' in eventData && eventData['cacheRejected']) {
|
|
852
851
|
// Version mismatch or similar.
|
|
853
|
-
contentHelper.appendTextRow(
|
|
854
|
-
|
|
852
|
+
contentHelper.appendTextRow(i18nString(UIStrings.compilationCacheStatus),
|
|
853
|
+
i18nString(UIStrings.failedToLoadScriptFromCache));
|
|
855
854
|
} else {
|
|
856
|
-
contentHelper.appendTextRow(
|
|
857
|
-
|
|
855
|
+
contentHelper.appendTextRow(i18nString(UIStrings.compilationCacheStatus),
|
|
856
|
+
i18nString(UIStrings.scriptNotEligibleToBeLoadedFromCache));
|
|
858
857
|
}
|
|
859
858
|
}
|
|
860
859
|
|
|
@@ -970,8 +969,8 @@ export class TimelineUIUtils {
|
|
|
970
969
|
event,
|
|
971
970
|
parsedTrace,
|
|
972
971
|
);
|
|
973
|
-
contentHelper.appendTextRow(
|
|
974
|
-
|
|
972
|
+
contentHelper.appendTextRow(i18nString(UIStrings.timestamp),
|
|
973
|
+
i18n.TimeUtilities.preciseMillisToString(adjustedEventTimeStamp, 1));
|
|
975
974
|
}
|
|
976
975
|
|
|
977
976
|
// Only show total time and self time for events with non-zero durations.
|
|
@@ -1006,16 +1005,16 @@ export class TimelineUIUtils {
|
|
|
1006
1005
|
if (url) {
|
|
1007
1006
|
contentHelper.appendElementRow(i18nString(UIStrings.url), LegacyComponents.Linkifier.Linkifier.linkifyURL(url));
|
|
1008
1007
|
}
|
|
1009
|
-
contentHelper.appendElementRow(
|
|
1010
|
-
|
|
1008
|
+
contentHelper.appendElementRow(i18nString(UIStrings.details),
|
|
1009
|
+
TimelineUIUtils.buildDetailsNodeForMarkerEvents(event));
|
|
1011
1010
|
}
|
|
1012
1011
|
|
|
1013
1012
|
if (Trace.Types.Events.isV8Compile(event)) {
|
|
1014
1013
|
url = event.args.data?.url as Platform.DevToolsPath.UrlString;
|
|
1015
1014
|
if (url) {
|
|
1016
1015
|
const {lineNumber, columnNumber} = Trace.Helpers.Trace.getZeroIndexedLineAndColumnForEvent(event);
|
|
1017
|
-
contentHelper.appendLocationRow(
|
|
1018
|
-
|
|
1016
|
+
contentHelper.appendLocationRow(i18nString(UIStrings.script), url, lineNumber || 0, columnNumber, undefined,
|
|
1017
|
+
true);
|
|
1019
1018
|
const originWithEntity = this.getOriginWithEntity(entityMapper, parsedTrace, event);
|
|
1020
1019
|
if (originWithEntity) {
|
|
1021
1020
|
contentHelper.appendElementRow(i18nString(UIStrings.origin), originWithEntity);
|
|
@@ -1028,9 +1027,8 @@ export class TimelineUIUtils {
|
|
|
1028
1027
|
}
|
|
1029
1028
|
|
|
1030
1029
|
const isStreamed = Boolean(event.args.data?.streamed);
|
|
1031
|
-
contentHelper.appendTextRow(
|
|
1032
|
-
|
|
1033
|
-
isStreamed + (isStreamed ? '' : `: ${event.args.data?.notStreamedReason || ''}`));
|
|
1030
|
+
contentHelper.appendTextRow(i18nString(UIStrings.streamed),
|
|
1031
|
+
isStreamed + (isStreamed ? '' : `: ${event.args.data?.notStreamedReason || ''}`));
|
|
1034
1032
|
if (event.args.data) {
|
|
1035
1033
|
TimelineUIUtils.buildConsumeCacheDetails(event.args.data, contentHelper);
|
|
1036
1034
|
}
|
|
@@ -1070,8 +1068,7 @@ export class TimelineUIUtils {
|
|
|
1070
1068
|
}
|
|
1071
1069
|
}
|
|
1072
1070
|
|
|
1073
|
-
const isFreshOrEnhanced =
|
|
1074
|
-
Boolean(parsedTrace && Tracing.FreshRecording.Tracker.instance().recordingIsFreshOrEnhanced(parsedTrace));
|
|
1071
|
+
const isFreshOrEnhanced = Tracing.FreshRecording.Tracker.instance().recordingIsFreshOrEnhanced(parsedTrace);
|
|
1075
1072
|
|
|
1076
1073
|
switch (event.name) {
|
|
1077
1074
|
case Trace.Types.Events.Name.GC:
|
|
@@ -1091,9 +1088,8 @@ export class TimelineUIUtils {
|
|
|
1091
1088
|
}
|
|
1092
1089
|
const callFrame = profileCall.callFrame;
|
|
1093
1090
|
// Render the URL with its location content.
|
|
1094
|
-
contentHelper.appendLocationRow(
|
|
1095
|
-
|
|
1096
|
-
true);
|
|
1091
|
+
contentHelper.appendLocationRow(i18nString(UIStrings.source), resolvedURL, callFrame.lineNumber || 0,
|
|
1092
|
+
callFrame.columnNumber, undefined, true);
|
|
1097
1093
|
const originWithEntity = this.getOriginWithEntity(entityMapper, parsedTrace, profileCall);
|
|
1098
1094
|
if (originWithEntity) {
|
|
1099
1095
|
contentHelper.appendElementRow(i18nString(UIStrings.origin), originWithEntity);
|
|
@@ -1121,8 +1117,8 @@ export class TimelineUIUtils {
|
|
|
1121
1117
|
contentHelper.appendTextRow(i18nString(UIStrings.timerId), unsafeEventData.timerId);
|
|
1122
1118
|
|
|
1123
1119
|
if (event.name === Trace.Types.Events.Name.TIMER_INSTALL) {
|
|
1124
|
-
contentHelper.appendTextRow(
|
|
1125
|
-
|
|
1120
|
+
contentHelper.appendTextRow(i18nString(UIStrings.timeout),
|
|
1121
|
+
i18n.TimeUtilities.millisToString(unsafeEventData['timeout']));
|
|
1126
1122
|
contentHelper.appendTextRow(i18nString(UIStrings.repeats), !unsafeEventData['singleShot']);
|
|
1127
1123
|
}
|
|
1128
1124
|
break;
|
|
@@ -1130,8 +1126,8 @@ export class TimelineUIUtils {
|
|
|
1130
1126
|
|
|
1131
1127
|
case Trace.Types.Events.Name.SCHEDULE_POST_TASK_CALLBACK:
|
|
1132
1128
|
case Trace.Types.Events.Name.RUN_POST_TASK_CALLBACK: {
|
|
1133
|
-
contentHelper.appendTextRow(
|
|
1134
|
-
|
|
1129
|
+
contentHelper.appendTextRow(i18nString(UIStrings.delay),
|
|
1130
|
+
i18n.TimeUtilities.millisToString(unsafeEventData['delay']));
|
|
1135
1131
|
contentHelper.appendTextRow(i18nString(UIStrings.priority), unsafeEventData['priority']);
|
|
1136
1132
|
break;
|
|
1137
1133
|
}
|
|
@@ -1152,9 +1148,8 @@ export class TimelineUIUtils {
|
|
|
1152
1148
|
|
|
1153
1149
|
case Trace.Types.Events.Name.CACHE_MODULE: {
|
|
1154
1150
|
url = unsafeEventData && unsafeEventData['url'] as Platform.DevToolsPath.UrlString;
|
|
1155
|
-
contentHelper.appendTextRow(
|
|
1156
|
-
|
|
1157
|
-
i18n.ByteUtilities.bytesToString(unsafeEventData['producedCacheSize']));
|
|
1151
|
+
contentHelper.appendTextRow(i18nString(UIStrings.compilationCacheSize),
|
|
1152
|
+
i18n.ByteUtilities.bytesToString(unsafeEventData['producedCacheSize']));
|
|
1158
1153
|
break;
|
|
1159
1154
|
}
|
|
1160
1155
|
|
|
@@ -1162,17 +1157,16 @@ export class TimelineUIUtils {
|
|
|
1162
1157
|
url = unsafeEventData && unsafeEventData['url'] as Platform.DevToolsPath.UrlString;
|
|
1163
1158
|
if (url) {
|
|
1164
1159
|
const {lineNumber, columnNumber} = Trace.Helpers.Trace.getZeroIndexedLineAndColumnForEvent(event);
|
|
1165
|
-
contentHelper.appendLocationRow(
|
|
1166
|
-
|
|
1160
|
+
contentHelper.appendLocationRow(i18nString(UIStrings.script), url, lineNumber || 0, columnNumber, undefined,
|
|
1161
|
+
true);
|
|
1167
1162
|
const originWithEntity = this.getOriginWithEntity(entityMapper, parsedTrace, event);
|
|
1168
1163
|
if (originWithEntity) {
|
|
1169
1164
|
contentHelper.appendElementRow(i18nString(UIStrings.origin), originWithEntity);
|
|
1170
1165
|
}
|
|
1171
1166
|
entityAppended = true;
|
|
1172
1167
|
}
|
|
1173
|
-
contentHelper.appendTextRow(
|
|
1174
|
-
|
|
1175
|
-
i18n.ByteUtilities.bytesToString(unsafeEventData['producedCacheSize']));
|
|
1168
|
+
contentHelper.appendTextRow(i18nString(UIStrings.compilationCacheSize),
|
|
1169
|
+
i18n.ByteUtilities.bytesToString(unsafeEventData['producedCacheSize']));
|
|
1176
1170
|
break;
|
|
1177
1171
|
}
|
|
1178
1172
|
|
|
@@ -1180,8 +1174,8 @@ export class TimelineUIUtils {
|
|
|
1180
1174
|
url = unsafeEventData && unsafeEventData['url'] as Platform.DevToolsPath.UrlString;
|
|
1181
1175
|
if (url) {
|
|
1182
1176
|
const {lineNumber, columnNumber} = Trace.Helpers.Trace.getZeroIndexedLineAndColumnForEvent(event);
|
|
1183
|
-
contentHelper.appendLocationRow(
|
|
1184
|
-
|
|
1177
|
+
contentHelper.appendLocationRow(i18nString(UIStrings.script), url, lineNumber || 0, columnNumber, undefined,
|
|
1178
|
+
true);
|
|
1185
1179
|
const originWithEntity = this.getOriginWithEntity(entityMapper, parsedTrace, event);
|
|
1186
1180
|
if (originWithEntity) {
|
|
1187
1181
|
contentHelper.appendElementRow(i18nString(UIStrings.origin), originWithEntity);
|
|
@@ -1232,8 +1226,8 @@ export class TimelineUIUtils {
|
|
|
1232
1226
|
tabStop: true,
|
|
1233
1227
|
showColumnNumber: false,
|
|
1234
1228
|
};
|
|
1235
|
-
contentHelper.appendElementRow(
|
|
1236
|
-
|
|
1229
|
+
contentHelper.appendElementRow(i18nString(UIStrings.imageUrl),
|
|
1230
|
+
LegacyComponents.Linkifier.Linkifier.linkifyURL(url, options));
|
|
1237
1231
|
}
|
|
1238
1232
|
break;
|
|
1239
1233
|
}
|
|
@@ -1245,8 +1239,8 @@ export class TimelineUIUtils {
|
|
|
1245
1239
|
tabStop: true,
|
|
1246
1240
|
showColumnNumber: false,
|
|
1247
1241
|
};
|
|
1248
|
-
contentHelper.appendElementRow(
|
|
1249
|
-
|
|
1242
|
+
contentHelper.appendElementRow(i18nString(UIStrings.stylesheetUrl),
|
|
1243
|
+
LegacyComponents.Linkifier.Linkifier.linkifyURL(url, options));
|
|
1250
1244
|
}
|
|
1251
1245
|
break;
|
|
1252
1246
|
}
|
|
@@ -1323,8 +1317,8 @@ export class TimelineUIUtils {
|
|
|
1323
1317
|
// The failureReasons can be empty when Blink added a new failure reason that is
|
|
1324
1318
|
// not supported by DevTools yet
|
|
1325
1319
|
if (failureReasons.size === 0) {
|
|
1326
|
-
contentHelper.appendElementRow(
|
|
1327
|
-
|
|
1320
|
+
contentHelper.appendElementRow(i18nString(UIStrings.compositingFailed),
|
|
1321
|
+
i18nString(UIStrings.compositingFailedUnknownReason), true);
|
|
1328
1322
|
} else {
|
|
1329
1323
|
for (const reason of failureReasons) {
|
|
1330
1324
|
let str;
|
|
@@ -1413,9 +1407,8 @@ export class TimelineUIUtils {
|
|
|
1413
1407
|
|
|
1414
1408
|
// @ts-expect-error Fall-through intended.
|
|
1415
1409
|
case Trace.Types.Events.Name.FIRE_IDLE_CALLBACK: {
|
|
1416
|
-
contentHelper.appendTextRow(
|
|
1417
|
-
|
|
1418
|
-
i18n.TimeUtilities.millisToString(unsafeEventData['allottedMilliseconds']));
|
|
1410
|
+
contentHelper.appendTextRow(i18nString(UIStrings.allottedTime),
|
|
1411
|
+
i18n.TimeUtilities.millisToString(unsafeEventData['allottedMilliseconds']));
|
|
1419
1412
|
contentHelper.appendTextRow(i18nString(UIStrings.invokedByTimeout), unsafeEventData['timedOut']);
|
|
1420
1413
|
}
|
|
1421
1414
|
|
|
@@ -1424,9 +1417,8 @@ export class TimelineUIUtils {
|
|
|
1424
1417
|
contentHelper.appendTextRow(i18nString(UIStrings.callbackId), unsafeEventData['id']);
|
|
1425
1418
|
|
|
1426
1419
|
if (Trace.Types.Events.isRequestIdleCallback(event)) {
|
|
1427
|
-
contentHelper.appendTextRow(
|
|
1428
|
-
|
|
1429
|
-
i18n.TimeUtilities.preciseMillisToString(event.args.data.timeout));
|
|
1420
|
+
contentHelper.appendTextRow(i18nString(UIStrings.requestIdleCallbackTimeout),
|
|
1421
|
+
i18n.TimeUtilities.preciseMillisToString(event.args.data.timeout));
|
|
1430
1422
|
}
|
|
1431
1423
|
break;
|
|
1432
1424
|
}
|
|
@@ -1453,12 +1445,12 @@ export class TimelineUIUtils {
|
|
|
1453
1445
|
parsedTrace,
|
|
1454
1446
|
);
|
|
1455
1447
|
|
|
1456
|
-
contentHelper.appendTextRow(
|
|
1457
|
-
|
|
1448
|
+
contentHelper.appendTextRow(i18nString(UIStrings.timestamp),
|
|
1449
|
+
i18n.TimeUtilities.preciseMillisToString(adjustedEventTimeStamp, 1));
|
|
1458
1450
|
|
|
1459
1451
|
if (Trace.Types.Events.isMarkerEvent(event)) {
|
|
1460
|
-
contentHelper.appendElementRow(
|
|
1461
|
-
|
|
1452
|
+
contentHelper.appendElementRow(i18nString(UIStrings.details),
|
|
1453
|
+
TimelineUIUtils.buildDetailsNodeForMarkerEvents(event));
|
|
1462
1454
|
}
|
|
1463
1455
|
|
|
1464
1456
|
break;
|
|
@@ -1582,15 +1574,14 @@ export class TimelineUIUtils {
|
|
|
1582
1574
|
return highlightContainer;
|
|
1583
1575
|
}
|
|
1584
1576
|
|
|
1585
|
-
static stackTraceFromCallFrames(callFrames: Protocol.Runtime.CallFrame[]|
|
|
1586
|
-
|
|
1577
|
+
static stackTraceFromCallFrames(callFrames: Protocol.Runtime.CallFrame[]|
|
|
1578
|
+
Trace.Types.Events.CallFrame[]): Protocol.Runtime.StackTrace {
|
|
1587
1579
|
return {callFrames} as Protocol.Runtime.StackTrace;
|
|
1588
1580
|
}
|
|
1589
1581
|
|
|
1590
1582
|
/** This renders a stack trace... and other cool stuff. */
|
|
1591
|
-
static async generateCauses(
|
|
1592
|
-
|
|
1593
|
-
parsedTrace: Trace.TraceModel.ParsedTrace): Promise<void> {
|
|
1583
|
+
static async generateCauses(event: Trace.Types.Events.Event, contentHelper: TimelineDetailsContentHelper,
|
|
1584
|
+
parsedTrace: Trace.TraceModel.ParsedTrace): Promise<void> {
|
|
1594
1585
|
const {startTime} = Trace.Helpers.Timing.eventTimingsMilliSeconds(event);
|
|
1595
1586
|
let initiatorStackLabel = i18nString(UIStrings.initiatorStackTrace);
|
|
1596
1587
|
await contentHelper.appendFunctionStackTraceSection(event, parsedTrace);
|
|
@@ -1622,8 +1613,9 @@ export class TimelineUIUtils {
|
|
|
1622
1613
|
// and the time since the initiator (Pending For).
|
|
1623
1614
|
const stackTrace = Trace.Helpers.Trace.getZeroIndexedStackTraceInEventPayload(initiator);
|
|
1624
1615
|
if (stackTrace) {
|
|
1625
|
-
const
|
|
1626
|
-
|
|
1616
|
+
const isFreshOrEnhanced = Tracing.FreshRecording.Tracker.instance().recordingIsFreshOrEnhanced(parsedTrace);
|
|
1617
|
+
const traceElement = await contentHelper.createChildStackTraceElement(
|
|
1618
|
+
TimelineUIUtils.stackTraceFromCallFrames(stackTrace), isFreshOrEnhanced);
|
|
1627
1619
|
contentHelper.appendSectionWithBodyIfExists(initiatorStackLabel, {body: traceElement});
|
|
1628
1620
|
}
|
|
1629
1621
|
|
|
@@ -1701,9 +1693,8 @@ export class TimelineUIUtils {
|
|
|
1701
1693
|
return link;
|
|
1702
1694
|
}
|
|
1703
1695
|
|
|
1704
|
-
private static async generateInvalidationsList(
|
|
1705
|
-
|
|
1706
|
-
contentHelper: TimelineDetailsContentHelper): Promise<void> {
|
|
1696
|
+
private static async generateInvalidationsList(invalidations: Trace.Types.Events.InvalidationTrackingEvent[],
|
|
1697
|
+
contentHelper: TimelineDetailsContentHelper): Promise<void> {
|
|
1707
1698
|
const {groupedByReason, backendNodeIds} = TimelineComponents.DetailsView.generateInvalidationsList(invalidations);
|
|
1708
1699
|
|
|
1709
1700
|
let relatedNodesMap: Map<number, SDK.DOMModel.DOMNode|null>|null = null;
|
|
@@ -1718,9 +1709,10 @@ export class TimelineUIUtils {
|
|
|
1718
1709
|
});
|
|
1719
1710
|
}
|
|
1720
1711
|
|
|
1721
|
-
private static generateInvalidationsForReason(
|
|
1722
|
-
|
|
1723
|
-
|
|
1712
|
+
private static generateInvalidationsForReason(reason: string,
|
|
1713
|
+
invalidations: Trace.Types.Events.InvalidationTrackingEvent[],
|
|
1714
|
+
relatedNodesMap: Map<number, SDK.DOMModel.DOMNode|null>|null,
|
|
1715
|
+
contentHelper: TimelineDetailsContentHelper): void {
|
|
1724
1716
|
function createLinkForInvalidationNode(invalidation: Trace.Types.Events.InvalidationTrackingEvent):
|
|
1725
1717
|
HTMLSpanElement {
|
|
1726
1718
|
const node = (invalidation.args.data.nodeId && relatedNodesMap) ?
|
|
@@ -1759,10 +1751,9 @@ export class TimelineUIUtils {
|
|
|
1759
1751
|
|
|
1760
1752
|
const niceNodeLink = createLinkForInvalidationNode(invalidation);
|
|
1761
1753
|
|
|
1762
|
-
const text = scriptLink ?
|
|
1763
|
-
|
|
1764
|
-
|
|
1765
|
-
niceNodeLink;
|
|
1754
|
+
const text = scriptLink ? uiI18n.getFormatLocalizedString(str_, UIStrings.invalidationWithCallFrame,
|
|
1755
|
+
{PH1: niceNodeLink, PH2: scriptLink}) as HTMLElement :
|
|
1756
|
+
niceNodeLink;
|
|
1766
1757
|
|
|
1767
1758
|
// Sometimes we can get different Invalidation events which cause
|
|
1768
1759
|
// the same text for the same element for the same reason to be
|
|
@@ -1780,9 +1771,8 @@ export class TimelineUIUtils {
|
|
|
1780
1771
|
}
|
|
1781
1772
|
|
|
1782
1773
|
/** Populates the passed object then returns true/false if it makes sense to show the pie chart */
|
|
1783
|
-
private static aggregatedStatsForTraceEvent(
|
|
1784
|
-
|
|
1785
|
-
event: Trace.Types.Events.Event): boolean {
|
|
1774
|
+
private static aggregatedStatsForTraceEvent(total: TimeRangeCategoryStats, parsedTrace: Trace.TraceModel.ParsedTrace,
|
|
1775
|
+
event: Trace.Types.Events.Event): boolean {
|
|
1786
1776
|
const node = parsedTrace.data.Renderer.entryToNode.get(event);
|
|
1787
1777
|
if (!node) {
|
|
1788
1778
|
return false;
|
|
@@ -1831,9 +1821,8 @@ export class TimelineUIUtils {
|
|
|
1831
1821
|
return true;
|
|
1832
1822
|
}
|
|
1833
1823
|
|
|
1834
|
-
static async buildPicturePreviewContent(
|
|
1835
|
-
|
|
1836
|
-
target: SDK.Target.Target): Promise<Element|null> {
|
|
1824
|
+
static async buildPicturePreviewContent(parsedTrace: Trace.TraceModel.ParsedTrace, event: Trace.Types.Events.Paint,
|
|
1825
|
+
target: SDK.Target.Target): Promise<Element|null> {
|
|
1837
1826
|
const snapshotEvent = parsedTrace.data.LayerTree.paintsToSnapshots.get(event);
|
|
1838
1827
|
if (!snapshotEvent) {
|
|
1839
1828
|
return null;
|
|
@@ -1890,8 +1879,8 @@ export class TimelineUIUtils {
|
|
|
1890
1879
|
const {startTime: eventStartTime} = Trace.Helpers.Timing.eventTimingsMilliSeconds(event);
|
|
1891
1880
|
|
|
1892
1881
|
const startTime = i18n.TimeUtilities.millisToString(eventStartTime - zeroTime);
|
|
1893
|
-
UI.Tooltip.Tooltip.install(
|
|
1894
|
-
|
|
1882
|
+
UI.Tooltip.Tooltip.install(eventDivider,
|
|
1883
|
+
i18nString(UIStrings.sAtS, {PH1: TimelineUIUtils.eventTitle(event), PH2: startTime}));
|
|
1895
1884
|
const style = TimelineUIUtils.markerStyleForEvent(event);
|
|
1896
1885
|
if (style.tall) {
|
|
1897
1886
|
eventDivider.style.backgroundColor = style.color;
|
|
@@ -1909,9 +1898,8 @@ export class TimelineUIUtils {
|
|
|
1909
1898
|
return Trace.Styles.getCategoryStyles();
|
|
1910
1899
|
}
|
|
1911
1900
|
|
|
1912
|
-
static generatePieChart(
|
|
1913
|
-
|
|
1914
|
-
selfTime?: Trace.Types.Timing.Micro): Element {
|
|
1901
|
+
static generatePieChart(aggregatedStats: TimeRangeCategoryStats, selfCategory?: Trace.Styles.TimelineCategory,
|
|
1902
|
+
selfTime?: Trace.Types.Timing.Micro): Element {
|
|
1915
1903
|
let total = 0;
|
|
1916
1904
|
for (const categoryName in aggregatedStats) {
|
|
1917
1905
|
total += aggregatedStats[categoryName];
|
|
@@ -1983,9 +1971,9 @@ export class TimelineUIUtils {
|
|
|
1983
1971
|
return element;
|
|
1984
1972
|
}
|
|
1985
1973
|
|
|
1986
|
-
static generateDetailsContentForFrame(
|
|
1987
|
-
|
|
1988
|
-
|
|
1974
|
+
static generateDetailsContentForFrame(frame: Trace.Types.Events.LegacyTimelineFrame,
|
|
1975
|
+
filmStrip: Trace.Extras.FilmStrip.Data|null,
|
|
1976
|
+
filmStripFrame: Trace.Extras.FilmStrip.Frame|null): DocumentFragment {
|
|
1989
1977
|
const contentHelper = new TimelineDetailsContentHelper(null, null);
|
|
1990
1978
|
contentHelper.addSection(i18nString(UIStrings.frame));
|
|
1991
1979
|
|
|
@@ -2036,10 +2024,10 @@ export class TimelineUIUtils {
|
|
|
2036
2024
|
const green = 'hsl(90,100%,40%)';
|
|
2037
2025
|
const purple = 'hsl(256,100%,75%)';
|
|
2038
2026
|
eventDispatchDesciptors = [
|
|
2039
|
-
new EventDispatchTypeDescriptor(
|
|
2040
|
-
|
|
2041
|
-
new EventDispatchTypeDescriptor(
|
|
2042
|
-
|
|
2027
|
+
new EventDispatchTypeDescriptor(1, lightOrange,
|
|
2028
|
+
['mousemove', 'mouseenter', 'mouseleave', 'mouseout', 'mouseover']),
|
|
2029
|
+
new EventDispatchTypeDescriptor(1, lightOrange,
|
|
2030
|
+
['pointerover', 'pointerout', 'pointerenter', 'pointerleave', 'pointermove']),
|
|
2043
2031
|
new EventDispatchTypeDescriptor(2, green, ['wheel']),
|
|
2044
2032
|
new EventDispatchTypeDescriptor(3, orange, ['click', 'mousedown', 'mouseup']),
|
|
2045
2033
|
new EventDispatchTypeDescriptor(3, orange, ['touchstart', 'touchend', 'touchmove', 'touchcancel']),
|
|
@@ -2121,17 +2109,16 @@ export class TimelineUIUtils {
|
|
|
2121
2109
|
|
|
2122
2110
|
static colorForId(id: string): string {
|
|
2123
2111
|
if (!colorGenerator) {
|
|
2124
|
-
colorGenerator = new Common.Color.Generator(
|
|
2125
|
-
|
|
2126
|
-
|
|
2127
|
-
|
|
2128
|
-
|
|
2129
|
-
|
|
2130
|
-
|
|
2131
|
-
|
|
2132
|
-
|
|
2133
|
-
|
|
2134
|
-
85);
|
|
2112
|
+
colorGenerator = new Common.Color.Generator({
|
|
2113
|
+
min: 30,
|
|
2114
|
+
max: 330,
|
|
2115
|
+
},
|
|
2116
|
+
{
|
|
2117
|
+
min: 50,
|
|
2118
|
+
max: 80,
|
|
2119
|
+
count: 3,
|
|
2120
|
+
},
|
|
2121
|
+
85);
|
|
2135
2122
|
colorGenerator.setColorForID('', '#f2ecdc');
|
|
2136
2123
|
}
|
|
2137
2124
|
return colorGenerator.colorForID(id);
|
|
@@ -2143,9 +2130,8 @@ export class TimelineUIUtils {
|
|
|
2143
2130
|
frame.url.slice(0, trimAt);
|
|
2144
2131
|
}
|
|
2145
2132
|
|
|
2146
|
-
static getOriginWithEntity(
|
|
2147
|
-
|
|
2148
|
-
event: Trace.Types.Events.Event): string|null {
|
|
2133
|
+
static getOriginWithEntity(entityMapper: Trace.EntityMapper.EntityMapper|null,
|
|
2134
|
+
parsedTrace: Trace.TraceModel.ParsedTrace, event: Trace.Types.Events.Event): string|null {
|
|
2149
2135
|
const resolvedURL = SourceMapsResolver.SourceMapsResolver.resolvedURLForEntry(
|
|
2150
2136
|
parsedTrace, event, Workspace.Workspace.WorkspaceImpl.instance());
|
|
2151
2137
|
if (!resolvedURL) {
|
|
@@ -2182,6 +2168,26 @@ export class EventDispatchTypeDescriptor {
|
|
|
2182
2168
|
}
|
|
2183
2169
|
}
|
|
2184
2170
|
|
|
2171
|
+
/**
|
|
2172
|
+
* When loading a trace file (non-fresh recording), the scriptIds in the trace
|
|
2173
|
+
* are from the recorded page and are guaranteed to collide with scriptIds of
|
|
2174
|
+
* the currently active inspected page. We strip them from the stack trace
|
|
2175
|
+
* to force the stack trace rendering machinery to fall back to URL-based resolution
|
|
2176
|
+
* instead of incorrectly matching the active page's script IDs.
|
|
2177
|
+
*/
|
|
2178
|
+
export function stripScriptIds(stackTrace: Protocol.Runtime.StackTrace): Protocol.Runtime.StackTrace {
|
|
2179
|
+
const callFrames = stackTrace.callFrames.map(frame => ({
|
|
2180
|
+
...frame,
|
|
2181
|
+
scriptId: '' as Protocol.Runtime.ScriptId,
|
|
2182
|
+
}));
|
|
2183
|
+
const parent = stackTrace.parent ? stripScriptIds(stackTrace.parent) : undefined;
|
|
2184
|
+
return {
|
|
2185
|
+
...stackTrace,
|
|
2186
|
+
callFrames,
|
|
2187
|
+
parent,
|
|
2188
|
+
};
|
|
2189
|
+
}
|
|
2190
|
+
|
|
2185
2191
|
export class TimelineDetailsContentHelper {
|
|
2186
2192
|
fragment: DocumentFragment;
|
|
2187
2193
|
#linkifier: LegacyComponents.Linkifier.Linkifier|null;
|
|
@@ -2260,7 +2266,8 @@ export class TimelineDetailsContentHelper {
|
|
|
2260
2266
|
if (!stackTraceForEvent) {
|
|
2261
2267
|
return;
|
|
2262
2268
|
}
|
|
2263
|
-
const
|
|
2269
|
+
const isFreshOrEnhanced = Tracing.FreshRecording.Tracker.instance().recordingIsFreshOrEnhanced(parsedTrace);
|
|
2270
|
+
const traceElement = await this.createChildStackTraceElement(stackTraceForEvent, isFreshOrEnhanced);
|
|
2264
2271
|
this.appendSectionWithBodyIfExists(i18nString(UIStrings.functionStack), {body: traceElement});
|
|
2265
2272
|
}
|
|
2266
2273
|
|
|
@@ -2293,8 +2300,8 @@ export class TimelineDetailsContentHelper {
|
|
|
2293
2300
|
}
|
|
2294
2301
|
}
|
|
2295
2302
|
|
|
2296
|
-
appendLocationRow(
|
|
2297
|
-
|
|
2303
|
+
appendLocationRow(title: string, url: string, startLine: number, startColumn?: number, text?: string,
|
|
2304
|
+
omitOrigin?: boolean): void {
|
|
2298
2305
|
if (!this.#linkifier) {
|
|
2299
2306
|
return;
|
|
2300
2307
|
}
|
|
@@ -2306,8 +2313,8 @@ export class TimelineDetailsContentHelper {
|
|
|
2306
2313
|
text,
|
|
2307
2314
|
omitOrigin,
|
|
2308
2315
|
};
|
|
2309
|
-
const link = this.#linkifier.maybeLinkifyScriptLocation(
|
|
2310
|
-
|
|
2316
|
+
const link = this.#linkifier.maybeLinkifyScriptLocation(this.target, null, url as Platform.DevToolsPath.UrlString,
|
|
2317
|
+
startLine, options);
|
|
2311
2318
|
if (!link) {
|
|
2312
2319
|
return;
|
|
2313
2320
|
}
|
|
@@ -2324,8 +2331,8 @@ export class TimelineDetailsContentHelper {
|
|
|
2324
2331
|
return;
|
|
2325
2332
|
}
|
|
2326
2333
|
locationContent.appendChild(link);
|
|
2327
|
-
UI.UIUtils.createTextChild(
|
|
2328
|
-
|
|
2334
|
+
UI.UIUtils.createTextChild(locationContent,
|
|
2335
|
+
Platform.StringUtilities.sprintf(' [%s…%s]', startLine + 1, (endLine || 0) + 1 || ''));
|
|
2329
2336
|
this.appendElementRow(title, locationContent);
|
|
2330
2337
|
}
|
|
2331
2338
|
|
|
@@ -2333,7 +2340,10 @@ export class TimelineDetailsContentHelper {
|
|
|
2333
2340
|
* Creates a stack trace element for the given trace, but checks if it
|
|
2334
2341
|
* contains any entries, and discards it if it's empty.
|
|
2335
2342
|
*/
|
|
2336
|
-
async createChildStackTraceElement(
|
|
2343
|
+
async createChildStackTraceElement(
|
|
2344
|
+
runtimeStackTrace: Protocol.Runtime.StackTrace,
|
|
2345
|
+
isFreshOrEnhanced?: boolean,
|
|
2346
|
+
): Promise<HTMLElement|null> {
|
|
2337
2347
|
// Fallback to the main page/root target. Maybe the main page has a source map we need.
|
|
2338
2348
|
// Worst case the stack is identity mapped.
|
|
2339
2349
|
const targetManager = SDK.TargetManager.TargetManager.instance();
|
|
@@ -2342,9 +2352,14 @@ export class TimelineDetailsContentHelper {
|
|
|
2342
2352
|
return null;
|
|
2343
2353
|
}
|
|
2344
2354
|
|
|
2355
|
+
// If the trace is non-fresh and not enhanced, this means that any active
|
|
2356
|
+
// sourcemaps are not related to the trace, and therefore we do not want to
|
|
2357
|
+
// use them.
|
|
2358
|
+
const stackTraceToUse = isFreshOrEnhanced ? runtimeStackTrace : stripScriptIds(runtimeStackTrace);
|
|
2359
|
+
|
|
2345
2360
|
const stackTrace =
|
|
2346
2361
|
await Bindings.DebuggerWorkspaceBinding.DebuggerWorkspaceBinding.instance().createStackTraceFromProtocolRuntime(
|
|
2347
|
-
|
|
2362
|
+
stackTraceToUse, target);
|
|
2348
2363
|
const callFrameContents = new LegacyComponents.JSPresentationUtils.StackTracePreviewContent();
|
|
2349
2364
|
callFrameContents.options = {tabStops: true, showColumnNumber: true};
|
|
2350
2365
|
callFrameContents.stackTrace = stackTrace;
|
|
@@ -2433,8 +2448,8 @@ export function isMarkerEvent(parsedTrace: Trace.TraceModel.ParsedTrace, event:
|
|
|
2433
2448
|
return false;
|
|
2434
2449
|
}
|
|
2435
2450
|
|
|
2436
|
-
function getEventSelfTime(
|
|
2437
|
-
|
|
2451
|
+
function getEventSelfTime(event: Trace.Types.Events.Event,
|
|
2452
|
+
parsedTrace: Trace.TraceModel.ParsedTrace): Trace.Types.Timing.Micro {
|
|
2438
2453
|
const mapToUse = Trace.Types.Extensions.isSyntheticExtensionEntry(event) ?
|
|
2439
2454
|
parsedTrace.data.ExtensionTraceData.entryToNode :
|
|
2440
2455
|
parsedTrace.data.Renderer.entryToNode;
|