Skip to content

Commit 6c2c55d

Browse files
committed
track when all startup resources are loaded
1 parent cb0bab7 commit 6c2c55d

2 files changed

Lines changed: 43 additions & 5 deletions

File tree

front_end/core/host/RNPerfMetrics.ts

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,16 @@ class RNPerfMetrics {
186186
});
187187
}
188188

189+
developerResourcesStartupLoadingFinishedEvent(numResources: number, timeSinceLaunch: DOMHighResTimeStamp): void {
190+
this.sendEvent({
191+
eventName: 'DeveloperResources.StartupLoadingFinished',
192+
params: {
193+
numResources,
194+
timeSinceLaunch,
195+
},
196+
});
197+
}
198+
189199
fuseboxSetClientMetadataStarted(): void {
190200
this.sendEvent({eventName: 'FuseboxSetClientMetadataStarted'});
191201
}
@@ -437,6 +447,14 @@ export type DeveloperResourceLoadingFinishedEvent = Readonly<{
437447
}>,
438448
}>;
439449

450+
export type DeveloperResourcesStartupLoadingFinishedEvent = Readonly<{
451+
eventName: 'DeveloperResources.StartupLoadingFinished',
452+
params: Readonly<{
453+
numResources: number,
454+
timeSinceLaunch: DOMHighResTimeStamp,
455+
}>,
456+
}>;
457+
440458
export type FuseboxSetClientMetadataStartedEvent = Readonly<{
441459
eventName: 'FuseboxSetClientMetadataStarted',
442460
}>;
@@ -525,10 +543,10 @@ export type ManualBreakpointSetSucceeded = Readonly<{
525543

526544
export type ReactNativeChromeDevToolsEvent =
527545
EntrypointLoadingStartedEvent|EntrypointLoadingFinishedEvent|DebuggerReadyEvent|BrowserVisibilityChangeEvent|
528-
BrowserErrorEvent|RemoteDebuggingTerminatedEvent|DeveloperResourceLoadingStartedEvent|
529-
DeveloperResourceLoadingFinishedEvent|FuseboxSetClientMetadataStartedEvent|FuseboxSetClientMetadataFinishedEvent|
530-
MemoryPanelActionStartedEvent|MemoryPanelActionFinishedEvent|PanelShownEvent|PanelClosedEvent|
531-
StackTraceSymbolicationSucceeded|StackTraceSymbolicationFailed|StackTraceFrameUrlResolutionSucceeded|
532-
StackTraceFrameUrlResolutionFailed|ManualBreakpointSetSucceeded|StackTraceFrameClicked;
546+
BrowserErrorEvent|RemoteDebuggingTerminatedEvent|DeveloperResourceLoadingStartedEvent|StackTraceFrameClicked|
547+
DeveloperResourceLoadingFinishedEvent|DeveloperResourcesStartupLoadingFinishedEvent|FuseboxSetClientMetadataStartedEvent|
548+
FuseboxSetClientMetadataFinishedEvent|MemoryPanelActionStartedEvent|MemoryPanelActionFinishedEvent|
549+
PanelShownEvent|PanelClosedEvent|StackTraceSymbolicationSucceeded|StackTraceSymbolicationFailed|
550+
StackTraceFrameUrlResolutionSucceeded|StackTraceFrameUrlResolutionFailed|ManualBreakpointSetSucceeded;
533551

534552
export type DecoratedReactNativeChromeDevToolsEvent = CommonEventFields&ReactNativeChromeDevToolsEvent;

front_end/core/sdk/PageResourceLoader.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ import {
2020
import type {Target} from './Target.js';
2121
import {TargetManager} from './TargetManager.js';
2222

23+
const ALL_RESOURCES_LOADED_COOLDOWN = 3000;
24+
2325
const UIStrings = {
2426
/**
2527
*@description Error message for canceled source map loads
@@ -82,6 +84,8 @@ interface LoadQueueEntry {
8284
*/
8385
export class PageResourceLoader extends Common.ObjectWrapper.ObjectWrapper<EventTypes> {
8486
#currentlyLoading = 0;
87+
#startupResourcesLoadedReported = false;
88+
#startupResourcesLoadedTimeout = -1;
8589
#currentlyLoadingPerTarget = new Map<Protocol.Target.TargetID|'main', number>();
8690
readonly #maxConcurrentLoads: number;
8791
#pageResources = new Map<string, PageResource>();
@@ -354,6 +358,22 @@ export class PageResourceLoader extends Common.ObjectWrapper.ObjectWrapper<Event
354358
}
355359
Host.rnPerfMetrics.developerResourceLoadingFinished(
356360
parsedURL, Host.UserMetrics.DeveloperResourceLoaded.FALLBACK_AFTER_FAILURE, result);
361+
362+
if (!this.#startupResourcesLoadedReported) {
363+
// if no new resource was set to be loaded for a certain time
364+
// we consider all startup resources to be loaded
365+
window.clearTimeout(this.#startupResourcesLoadedTimeout);
366+
this.#startupResourcesLoadedTimeout = window.setTimeout(() => {
367+
if (!this.#startupResourcesLoadedReported && this.#currentlyLoading === 0) {
368+
Host.rnPerfMetrics.developerResourcesStartupLoadingFinishedEvent(
369+
this.getNumberOfResources().resources /* numResources */,
370+
performance.now() - ALL_RESOURCES_LOADED_COOLDOWN /* timeSinceLaunch */,
371+
);
372+
this.#startupResourcesLoadedReported = true;
373+
}
374+
}, ALL_RESOURCES_LOADED_COOLDOWN);
375+
}
376+
357377
return result;
358378
}
359379

0 commit comments

Comments
 (0)