Skip to content

Commit 254aed5

Browse files
Connor ClarkDevtools-frontend LUCI CQ
authored andcommitted
[RPP] Don't use scriptId as key in ScriptsHandler
Bug: 394373632 Change-Id: Ib2ce63e67ea6cf89c66a4d03c44c239d9a0133d3 Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/6319818 Auto-Submit: Connor Clark <[email protected]> Commit-Queue: Connor Clark <[email protected]> Reviewed-by: Adam Raine <[email protected]>
1 parent acdf453 commit 254aed5

File tree

6 files changed

+37
-24
lines changed

6 files changed

+37
-24
lines changed

front_end/models/trace/extras/ScriptDuplication.test.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ async function loadScriptFixture(
2525
const compiledUrl = Platform.DevToolsPath.urlString`${name}.js`;
2626
const mapUrl = Platform.DevToolsPath.urlString`${name}.js.map`;
2727
return {
28+
isolate: 'iso',
2829
scriptId: `1.${name}` as Protocol.Runtime.ScriptId,
2930
frame: 'abcdef',
3031
ts: 0 as Trace.Types.Timing.Micro,
@@ -232,19 +233,17 @@ describeWithEnvironment('ScriptDuplication', function() {
232233

233234
describe('computeScriptDuplication', () => {
234235
it('works (simple, no duplication)', async () => {
235-
const scripts = [await loadScriptFixture('foo.min')];
236236
const scriptsData: Trace.Handlers.ModelHandlers.Scripts.ScriptsData = {
237-
scripts: new Map(scripts.map(s => ([s.scriptId, s]))),
237+
scripts: [await loadScriptFixture('foo.min')],
238238
};
239239

240240
const results = Object.fromEntries(Trace.Extras.ScriptDuplication.computeScriptDuplication(scriptsData));
241241
assert.deepEqual(results, {});
242242
});
243243

244244
it('works (complex, lots of duplication)', async () => {
245-
const scripts = [await loadScriptFixture('coursehero-bundle-1'), await loadScriptFixture('coursehero-bundle-2')];
246245
const scriptsData: Trace.Handlers.ModelHandlers.Scripts.ScriptsData = {
247-
scripts: new Map(scripts.map(s => ([s.scriptId, s]))),
246+
scripts: [await loadScriptFixture('coursehero-bundle-1'), await loadScriptFixture('coursehero-bundle-2')],
248247
};
249248

250249
const results = Object.fromEntries(

front_end/models/trace/extras/ScriptDuplication.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ function computeLastGeneratedColumnMap(map: SDK.SourceMap.SourceMap): Map<SDK.So
175175
*/
176176
export function computeScriptDuplication(scriptsData: Handlers.ModelHandlers.Scripts.ScriptsData): ScriptDuplication {
177177
const sizesMap = new Map<Handlers.ModelHandlers.Scripts.Script, GeneratedFileSizes>();
178-
for (const script of scriptsData.scripts.values()) {
178+
for (const script of scriptsData.scripts) {
179179
if (script.content && script.sourceMap) {
180180
sizesMap.set(script, computeGeneratedFileSizes(script));
181181
}

front_end/models/trace/handlers/ScriptsHandler.test.ts

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,25 +35,36 @@ describe('ScriptsHandler', () => {
3535

3636
it('collects scripts contents', async function() {
3737
const data = Trace.Handlers.ModelHandlers.Scripts.data();
38-
assert.deepEqual([...data.scripts.values()], [
38+
assert.deepEqual([...data.scripts], [
3939
{
40+
isolate: '12345',
4041
scriptId: '1',
41-
frame: '3E1717BE677B75D0536E292E00D6A34A',
42+
frame: '21D58E83A5C17916277166140F6A464B',
4243
request: undefined,
4344
ts: 50442438976,
4445
url: 'http://localhost:8080/index.html',
45-
content: ' text ',
46+
content: 'source text 1',
4647
sourceMapUrl: 'http://localhost:8080/source.map.json',
4748
sourceMap: {test: 'http://localhost:8080/source.map.json'}
4849
},
4950
{
51+
isolate: '12345',
5052
scriptId: '2',
5153
frame: '21D58E83A5C17916277166140F6A464B',
5254
request: undefined,
5355
ts: 50442438976,
5456
url: 'http://localhost:8080/index.html',
5557
content: 'source text 2'
5658
},
59+
{
60+
isolate: '6789',
61+
scriptId: '1',
62+
frame: '3E1717BE677B75D0536E292E00D6A34A',
63+
content: ' text ',
64+
request: undefined,
65+
ts: 50442438976,
66+
url: 'http://localhost:8080/index.html',
67+
}
5768
]);
5869
});
5970
});

front_end/models/trace/handlers/ScriptsHandler.ts

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,11 @@ import type {HandlerName} from './types.js';
1515

1616
export interface ScriptsData {
1717
/** Note: this is only populated when the "Enhanced Traces" feature is enabled. */
18-
scripts: Map<Protocol.Runtime.ScriptId, Script>;
18+
scripts: Script[];
1919
}
2020

2121
export interface Script {
22+
isolate: string;
2223
scriptId: Protocol.Runtime.ScriptId;
2324
frame: string;
2425
ts: Types.Timing.Micro;
@@ -31,7 +32,7 @@ export interface Script {
3132
request?: Types.Events.SyntheticNetworkRequest;
3233
}
3334

34-
const scriptById = new Map<Protocol.Runtime.ScriptId, Script>();
35+
const scriptById = new Map<string, Script>();
3536

3637
export function deps(): HandlerName[] {
3738
return ['Meta', 'NetworkRequests'];
@@ -42,23 +43,25 @@ export function reset(): void {
4243
}
4344

4445
export function handleEvent(event: Types.Events.Event): void {
45-
const getOrMakeScript = (scriptIdAsNumber: number): Script => {
46+
const getOrMakeScript = (isolate: string, scriptIdAsNumber: number): Script => {
4647
const scriptId = String(scriptIdAsNumber) as Protocol.Runtime.ScriptId;
47-
return Platform.MapUtilities.getWithDefault(scriptById, scriptId, () => ({scriptId, frame: '', ts: 0} as Script));
48+
const key = `${isolate}.${scriptId}`;
49+
return Platform.MapUtilities.getWithDefault(
50+
scriptById, key, () => ({isolate, scriptId, frame: '', ts: 0} as Script));
4851
};
4952

5053
if (Types.Events.isTargetRundownEvent(event) && event.args.data) {
51-
const {scriptId, frame} = event.args.data;
52-
const script = getOrMakeScript(scriptId);
54+
const {isolate, scriptId, frame} = event.args.data;
55+
const script = getOrMakeScript(isolate, scriptId);
5356
script.frame = frame;
5457
script.ts = event.ts;
5558

5659
return;
5760
}
5861

5962
if (Types.Events.isV8SourceRundownEvent(event)) {
60-
const {scriptId, url, sourceUrl, sourceMapUrl} = event.args.data;
61-
const script = getOrMakeScript(scriptId);
63+
const {isolate, scriptId, url, sourceUrl, sourceMapUrl} = event.args.data;
64+
const script = getOrMakeScript(isolate, scriptId);
6265
script.url = url;
6366
if (sourceUrl) {
6467
script.sourceUrl = sourceUrl;
@@ -70,15 +73,15 @@ export function handleEvent(event: Types.Events.Event): void {
7073
}
7174

7275
if (Types.Events.isV8SourceRundownSourcesScriptCatchupEvent(event)) {
73-
const {scriptId, sourceText} = event.args.data;
74-
const script = getOrMakeScript(scriptId);
76+
const {isolate, scriptId, sourceText} = event.args.data;
77+
const script = getOrMakeScript(isolate, scriptId);
7578
script.content = sourceText;
7679
return;
7780
}
7881

7982
if (Types.Events.isV8SourceRundownSourcesLargeScriptCatchupEvent(event)) {
80-
const {scriptId, sourceText} = event.args.data;
81-
const script = getOrMakeScript(scriptId);
83+
const {isolate, scriptId, sourceText} = event.args.data;
84+
const script = getOrMakeScript(isolate, scriptId);
8285
script.content = (script.content ?? '') + sourceText;
8386
return;
8487
}
@@ -161,6 +164,6 @@ export async function finalize(options: Types.Configuration.ParseOptions): Promi
161164

162165
export function data(): ScriptsData {
163166
return {
164-
scripts: scriptById,
167+
scripts: [...scriptById.values()],
165168
};
166169
}

front_end/models/trace/insights/DuplicateJavaScript.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ function finalize(partialModel: PartialInsightModel<DuplicateJavaScriptInsightMo
5656

5757
export function generateInsight(
5858
parsedTrace: RequiredData<typeof deps>, context: InsightSetContext): DuplicateJavaScriptInsightModel {
59-
const scriptEntries = [...parsedTrace.Scripts.scripts].filter(([_, script]) => {
59+
const scripts = parsedTrace.Scripts.scripts.filter(script => {
6060
if (!context.navigation) {
6161
return false;
6262
}
@@ -68,6 +68,6 @@ export function generateInsight(
6868
return Helpers.Timing.timestampIsInBounds(context.bounds, script.ts);
6969
});
7070

71-
const duplication = Extras.ScriptDuplication.computeScriptDuplication({scripts: new Map(scriptEntries)});
71+
const duplication = Extras.ScriptDuplication.computeScriptDuplication({scripts});
7272
return finalize({duplication});
7373
}

front_end/testing/TraceHelpers.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -752,7 +752,7 @@ export function getBaseTraceParseModelData(overrides: Partial<ParsedTrace> = {})
752752
asyncCallToScheduler: new Map(),
753753
},
754754
Scripts: {
755-
scripts: new Map(),
755+
scripts: [],
756756
},
757757
...overrides,
758758
};

0 commit comments

Comments
 (0)