From 4e4f130898c0516fb61d1bb22804c1d786014660 Mon Sep 17 00:00:00 2001 From: Ruslan Lesiutin Date: Mon, 15 Sep 2025 14:02:58 +0100 Subject: [PATCH] feat: use application display name for trace title --- front_end/panels/timeline/BUILD.gn | 1 + front_end/panels/timeline/TimelineHistoryManager.ts | 11 ++++++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/front_end/panels/timeline/BUILD.gn b/front_end/panels/timeline/BUILD.gn index a05cb31fbc4..931cce7f229 100644 --- a/front_end/panels/timeline/BUILD.gn +++ b/front_end/panels/timeline/BUILD.gn @@ -104,6 +104,7 @@ devtools_module("timeline") { ":easter-egg", "../../core/host:bundle", "../../core/i18n:bundle", + "../../core/root:bundle", "../../generated:protocol", "../../models/cpu_profile:bundle", "../../models/extensions:bundle", diff --git a/front_end/panels/timeline/TimelineHistoryManager.ts b/front_end/panels/timeline/TimelineHistoryManager.ts index eb4d82449ee..a67cb4bd1b0 100644 --- a/front_end/panels/timeline/TimelineHistoryManager.ts +++ b/front_end/panels/timeline/TimelineHistoryManager.ts @@ -5,6 +5,8 @@ import * as Common from '../../core/common/common.js'; import * as i18n from '../../core/i18n/i18n.js'; import * as Platform from '../../core/platform/platform.js'; +import * as Root from '../../core/root/root.js'; +import * as SDK from '../../core/sdk/sdk.js'; import * as Trace from '../../models/trace/trace.js'; import * as IconButton from '../../ui/components/icon_button/icon_button.js'; import * as UI from '../../ui/legacy/legacy.js'; @@ -339,7 +341,14 @@ export class TimelineHistoryManager { parsedTraceIndex: number, parsedTrace: Trace.Handlers.Types.ParsedTrace, metadata: Trace.Types.File.MetaData|null, filmStrip: Trace.Extras.FilmStrip.Data|null): HTMLDivElement { const parsedURL = Common.ParsedURL.ParsedURL.fromString(parsedTrace.Meta.mainFrameURL); - const domain = parsedURL ? parsedURL.host : ''; + let domain = parsedURL ? parsedURL.host : ''; + // [RN] React Native doesn't have a URL as a concept for Frame, we will use Application name as a fallback. + if (Root.Runtime.experiments.isEnabled(Root.Runtime.ExperimentName.REACT_NATIVE_SPECIFIC_UI)) { + const reactNativeApplicationModel = SDK.TargetManager.TargetManager.instance().primaryPageTarget()?.model(SDK.ReactNativeApplicationModel.ReactNativeApplicationModel); + if (reactNativeApplicationModel !== null && reactNativeApplicationModel !== undefined) { + domain = reactNativeApplicationModel.metadataCached?.appDisplayName || ''; + } + } const sequenceNumber = this.nextNumberByDomain.get(domain) || 1; const titleWithSequenceNumber = i18nString(UIStrings.sD, {PH1: domain, PH2: sequenceNumber});