Skip to content

Commit 70c9c11

Browse files
jackfranklinDevtools-frontend LUCI CQ
authored andcommitted
Move the Trace SourceMapsResolver into its own model
This will likely change again in the future as szuend@ and others are working on a consistent approach across DevTools, but my focus currently is removing UI usage from front_end/models, and this resolver is relied upon by the Performance Formatters in the AI models directory. It makes more sense in my opinion to think of the SourceMapsResolver as a model. Bypass-Check-License: not new files, just moved existing files Bug: 443001453 Change-Id: I4d8e7dd71f4cd3efc0fda60a1f8572b3ae9ce9f4 Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/6943176 Auto-Submit: Jack Franklin <jacktfranklin@chromium.org> Reviewed-by: Alex Rudenko <alexrudenko@chromium.org> Commit-Queue: Jack Franklin <jacktfranklin@chromium.org>
1 parent a094252 commit 70c9c11

23 files changed

+211
-72
lines changed

config/gni/devtools_grd_files.gni

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -618,6 +618,7 @@ grd_files_bundled_sources = [
618618
"front_end/models/trace/lantern/types/types.js",
619619
"front_end/models/trace/trace.js",
620620
"front_end/models/trace/types/types.js",
621+
"front_end/models/trace_source_maps_resolver/trace_source_maps_resolver.js",
621622
"front_end/models/workspace/workspace.js",
622623
"front_end/models/workspace_diff/workspace_diff.js",
623624
"front_end/ndb_app.html",
@@ -1265,6 +1266,7 @@ grd_files_unbundled_sources = [
12651266
"front_end/models/trace/types/Overlays.js",
12661267
"front_end/models/trace/types/Timing.js",
12671268
"front_end/models/trace/types/TraceEvents.js",
1269+
"front_end/models/trace_source_maps_resolver/SourceMapsResolver.js",
12681270
"front_end/models/workspace/FileManager.js",
12691271
"front_end/models/workspace/IgnoreListManager.js",
12701272
"front_end/models/workspace/SearchConfig.js",
@@ -2070,7 +2072,6 @@ grd_files_unbundled_sources = [
20702072
"front_end/panels/timeline/utils/IgnoreList.js",
20712073
"front_end/panels/timeline/utils/ImageCache.js",
20722074
"front_end/panels/timeline/utils/InsightAIContext.js",
2073-
"front_end/panels/timeline/utils/SourceMapsResolver.js",
20742075
"front_end/panels/timeline/utils/Treemap.js",
20752076
"front_end/panels/web_audio/WebAudioModel.js",
20762077
"front_end/panels/web_audio/WebAudioView.js",

front_end/BUILD.gn

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,7 @@ group("unittests") {
157157
"models/trace/lantern/metrics:unittests",
158158
"models/trace/lantern/simulation:unittests",
159159
"models/trace/types:unittests",
160+
"models/trace_source_maps_resolver:unittests",
160161
"models/workspace:unittests",
161162
"models/workspace_diff:unittests",
162163
"panels/accessibility:unittests",

front_end/models/bindings/BUILD.gn

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ devtools_entrypoint("bundle") {
7878
"../issues_manager/*",
7979
"../persistence/*",
8080
"../source_map_scopes/*",
81+
"../trace_source_maps_resolver/*",
8182
"../workspace/*",
8283
]
8384

front_end/models/source_map_scopes/BUILD.gn

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ devtools_entrypoint("bundle") {
3737
"../../ui/components/text_editor/*",
3838
"../../ui/legacy/components/object_ui/*",
3939
"../breakpoints/*",
40+
"../trace_source_maps_resolver/*",
4041
]
4142

4243
visibility += devtools_models_visibility

front_end/models/trace/BUILD.gn

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ devtools_entrypoint("bundle") {
6161
"../../ui/legacy/components/utils/*",
6262
"../ai_assistance/*",
6363
"../live-metrics/*",
64+
"../trace_source_maps_resolver/*",
6465
"./*",
6566
]
6667

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
# Copyright 2025 The Chromium Authors. All rights reserved.
2+
# Use of this source code is governed by a BSD-style license that can be
3+
# found in the LICENSE file.
4+
5+
import("../../../scripts/build/ninja/devtools_entrypoint.gni")
6+
import("../../../scripts/build/ninja/devtools_module.gni")
7+
import("../../../scripts/build/typescript/typescript.gni")
8+
9+
devtools_module("trace_source_maps_resolver") {
10+
sources = [ "SourceMapsResolver.ts" ]
11+
12+
deps = [
13+
"../../core/platform:bundle",
14+
"../../core/sdk:bundle",
15+
"../../generated:protocol",
16+
"../bindings:bundle",
17+
"../source_map_scopes:bundle",
18+
"../trace:bundle",
19+
"../workspace:bundle",
20+
]
21+
}
22+
23+
devtools_entrypoint("bundle") {
24+
entrypoint = "trace_source_maps_resolver.ts"
25+
26+
deps = [ ":trace_source_maps_resolver" ]
27+
28+
visibility = [
29+
":*",
30+
"../../panels/timeline/*",
31+
"../../testing/*",
32+
"../trace:bundle",
33+
]
34+
}
35+
36+
ts_library("unittests") {
37+
testonly = true
38+
39+
sources = [ "SourceMapsResolver.test.ts" ]
40+
41+
deps = [
42+
":bundle",
43+
"../../core/platform:bundle",
44+
"../../core/sdk:bundle",
45+
"../../testing",
46+
"../bindings:bundle",
47+
"../trace:bundle",
48+
"../workspace:bundle",
49+
]
50+
}

front_end/panels/timeline/utils/SourceMapsResolver.test.ts renamed to front_end/models/trace_source_maps_resolver/SourceMapsResolver.test.ts

Lines changed: 28 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -2,29 +2,31 @@
22
// Use of this source code is governed by a BSD-style license that can be
33
// found in the LICENSE file.
44

5-
import type {Chrome} from '../../../../extension-api/ExtensionAPI.js';
6-
import * as Platform from '../../../core/platform/platform.js';
7-
import * as SDK from '../../../core/sdk/sdk.js';
8-
import type * as Protocol from '../../../generated/protocol.js';
9-
import * as Bindings from '../../../models/bindings/bindings.js';
10-
import * as Trace from '../../../models/trace/trace.js';
11-
import * as Workspace from '../../../models/workspace/workspace.js';
12-
import {createTarget} from '../../../testing/EnvironmentHelpers.js';
13-
import {TestPlugin} from '../../../testing/LanguagePluginHelpers.js';
5+
import type {Chrome} from '../../../extension-api/ExtensionAPI.js';
6+
import * as Platform from '../../core/platform/platform.js';
7+
import * as SDK from '../../core/sdk/sdk.js';
8+
import type * as Protocol from '../../generated/protocol.js';
9+
import * as Bindings from '../../models/bindings/bindings.js';
10+
import * as Trace from '../../models/trace/trace.js';
11+
import * as Workspace from '../../models/workspace/workspace.js';
12+
import {createTarget} from '../../testing/EnvironmentHelpers.js';
13+
import {TestPlugin} from '../../testing/LanguagePluginHelpers.js';
1414
import {
1515
describeWithMockConnection,
16-
} from '../../../testing/MockConnection.js';
17-
import {MockProtocolBackend} from '../../../testing/MockScopeChain.js';
18-
import {encodeSourceMap} from '../../../testing/SourceMapEncoder.js';
19-
import {loadBasicSourceMapExample} from '../../../testing/SourceMapHelpers.js';
16+
} from '../../testing/MockConnection.js';
17+
import {MockProtocolBackend} from '../../testing/MockScopeChain.js';
18+
import {encodeSourceMap} from '../../testing/SourceMapEncoder.js';
19+
import {loadBasicSourceMapExample} from '../../testing/SourceMapHelpers.js';
2020
import {
2121
makeMockRendererHandlerData,
2222
makeMockSamplesHandlerData,
2323
makeProfileCall,
24-
} from '../../../testing/TraceHelpers.js';
25-
import {TraceLoader} from '../../../testing/TraceLoader.js';
24+
} from '../../testing/TraceHelpers.js';
25+
import {TraceLoader} from '../../testing/TraceLoader.js';
2626

27-
import * as Utils from './utils.js';
27+
import * as TraceSourceMapsResolver from './trace_source_maps_resolver.js';
28+
29+
const {SourceMapsResolver, SourceMappingsUpdated} = TraceSourceMapsResolver;
2830

2931
const {urlString} = Platform.DevToolsPath;
3032
const MINIFIED_FUNCTION_NAME = 'minified';
@@ -153,7 +155,7 @@ describeWithMockConnection('SourceMapsResolver', () => {
153155

154156
it('renames nodes from the profile models when the corresponding scripts and source maps have loaded',
155157
async function() {
156-
const resolver = new Utils.SourceMapsResolver.SourceMapsResolver(parsedTrace);
158+
const resolver = new SourceMapsResolver(parsedTrace);
157159

158160
// Test the node's name is minified before the script and source maps load.
159161
assert.strictEqual(
@@ -172,8 +174,7 @@ describeWithMockConnection('SourceMapsResolver', () => {
172174

173175
// Ensure we populate the cache
174176
assert.strictEqual(
175-
Utils.SourceMapsResolver.SourceMapsResolver.resolvedCodeLocationForEntry(profileCallForNameResolving)
176-
?.name,
177+
SourceMapsResolver.resolvedCodeLocationForEntry(profileCallForNameResolving)?.name,
177178
AUTHORED_FUNCTION_NAME);
178179
});
179180

@@ -195,7 +196,7 @@ describeWithMockConnection('SourceMapsResolver', () => {
195196

196197
const {pluginManager} = Bindings.DebuggerWorkspaceBinding.DebuggerWorkspaceBinding.instance();
197198
pluginManager.addPlugin(new Plugin());
198-
const resolver = new Utils.SourceMapsResolver.SourceMapsResolver(parsedTrace);
199+
const resolver = new SourceMapsResolver(parsedTrace);
199200
await resolver.install();
200201
assert.strictEqual(
201202
Trace.Handlers.ModelHandlers.Samples.getProfileCallFunctionName(
@@ -233,19 +234,17 @@ describeWithMockConnection('SourceMapsResolver', () => {
233234
// For a profile call with mappings, it must return the mapped script.
234235
const parsedTraceWithMappings = parsedTraceFromProfileCalls([profileCallWithMappings]);
235236
const mapperWithMappings = new Trace.EntityMapper.EntityMapper(parsedTraceWithMappings);
236-
let resolver = new Utils.SourceMapsResolver.SourceMapsResolver(parsedTraceWithMappings, mapperWithMappings);
237+
let resolver = new SourceMapsResolver(parsedTraceWithMappings, mapperWithMappings);
237238
await resolver.install();
238-
let sourceMappedURL = Utils.SourceMapsResolver.SourceMapsResolver.resolvedURLForEntry(
239-
parsedTraceWithMappings, profileCallWithMappings);
239+
let sourceMappedURL = SourceMapsResolver.resolvedURLForEntry(parsedTraceWithMappings, profileCallWithMappings);
240240
assert.strictEqual(sourceMappedURL, authoredScriptURL);
241241

242242
// For a profile call without mappings, it must return the original URL
243243
const parsedTraceWithoutMappings = parsedTraceFromProfileCalls([profileCallWithNoMappings]);
244244
const mapperWithoutMappings = new Trace.EntityMapper.EntityMapper(parsedTraceWithoutMappings);
245-
resolver = new Utils.SourceMapsResolver.SourceMapsResolver(parsedTraceWithoutMappings, mapperWithoutMappings);
245+
resolver = new SourceMapsResolver(parsedTraceWithoutMappings, mapperWithoutMappings);
246246
await resolver.install();
247-
sourceMappedURL = Utils.SourceMapsResolver.SourceMapsResolver.resolvedURLForEntry(
248-
parsedTraceWithoutMappings, profileCallWithNoMappings);
247+
sourceMappedURL = SourceMapsResolver.resolvedURLForEntry(parsedTraceWithoutMappings, profileCallWithNoMappings);
249248
assert.strictEqual(sourceMappedURL, genScriptURL);
250249
});
251250
});
@@ -254,8 +253,8 @@ describeWithMockConnection('SourceMapsResolver', () => {
254253
const parsedTrace = await TraceLoader.traceEngine(this, 'user-timings.json.gz');
255254
const listener = sinon.spy();
256255

257-
const sourceMapsResolver = new Utils.SourceMapsResolver.SourceMapsResolver(parsedTrace);
258-
sourceMapsResolver.addEventListener(Utils.SourceMapsResolver.SourceMappingsUpdated.eventName, listener);
256+
const sourceMapsResolver = new SourceMapsResolver(parsedTrace);
257+
sourceMapsResolver.addEventListener(SourceMappingsUpdated.eventName, listener);
259258
await sourceMapsResolver.install();
260259
sinon.assert.notCalled(listener);
261260
});
@@ -306,7 +305,7 @@ describeWithMockConnection('SourceMapsResolver', () => {
306305
mapper.mappings().eventsByEntity.set(testEntity, [profileCall, profileCallUnmapped]);
307306
mapper.mappings().createdEntityCache.set('example-domain.com', testEntity);
308307

309-
const resolver = new Utils.SourceMapsResolver.SourceMapsResolver(parsedTrace, mapper);
308+
const resolver = new SourceMapsResolver(parsedTrace, mapper);
310309
// This should update the entities
311310
await resolver.install();
312311
const afterEntityOfEvent = mapper.entityForEvent(profileCall);

front_end/panels/timeline/utils/SourceMapsResolver.ts renamed to front_end/models/trace_source_maps_resolver/SourceMapsResolver.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@
22
// Use of this source code is governed by a BSD-style license that can be
33
// found in the LICENSE file.
44

5-
import type * as Platform from '../../../core/platform/platform.js';
6-
import * as SDK from '../../../core/sdk/sdk.js';
7-
import type * as Protocol from '../../../generated/protocol.js';
8-
import * as Bindings from '../../../models/bindings/bindings.js';
9-
import * as SourceMapScopes from '../../../models/source_map_scopes/source_map_scopes.js';
10-
import * as Trace from '../../../models/trace/trace.js';
11-
import * as Workspace from '../../../models/workspace/workspace.js';
5+
import type * as Platform from '../../core/platform/platform.js';
6+
import * as SDK from '../../core/sdk/sdk.js';
7+
import type * as Protocol from '../../generated/protocol.js';
8+
import * as Bindings from '../bindings/bindings.js';
9+
import * as SourceMapScopes from '../source_map_scopes/source_map_scopes.js';
10+
import * as Trace from '../trace/trace.js';
11+
import * as Workspace from '../workspace/workspace.js';
1212

1313
interface ResolvedCodeLocationData {
1414
name: string|null;
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
// Copyright 2025 The Chromium Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
export * from './SourceMapsResolver.js';

front_end/models/workspace/BUILD.gn

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ devtools_entrypoint("bundle") {
6767
"../persistence/*",
6868
"../source_map_scopes/*",
6969
"../stack_trace/*",
70+
"../trace_source_maps_resolver/*",
7071
"../workspace_diff/*",
7172
]
7273

0 commit comments

Comments
 (0)