Skip to content

Commit 760d9ab

Browse files
author
Brian Vaughn
authored
Scheduling profiler tweaks (#20215)
1 parent 9403c3b commit 760d9ab

4 files changed

Lines changed: 149 additions & 77 deletions

File tree

‎packages/react-reconciler/src/SchedulingProfiler.js‎

Lines changed: 63 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -20,31 +20,63 @@ import getComponentName from 'shared/getComponentName';
2020
* require.
2121
*/
2222
constsupportsUserTiming=
23-
typeofperformance!=='undefined'&&typeofperformance.mark==='function';
23+
typeofperformance!=='undefined'&&
24+
typeofperformance.mark==='function'&&
25+
typeofperformance.clearMarks==='function';
26+
27+
letsupportsUserTimingV3=false;
28+
if(enableSchedulingProfiler){
29+
if(supportsUserTiming){
30+
constCHECK_V3_MARK='__v3';
31+
constmarkOptions={};
32+
// $FlowFixMe: Ignore Flow complaining about needing a value
33+
Object.defineProperty(markOptions,'startTime',{
34+
get: function(){
35+
supportsUserTimingV3=true;
36+
return0;
37+
},
38+
set: function(){},
39+
});
40+
41+
try{
42+
// $FlowFixMe: Flow expects the User Timing level 2 API.
43+
performance.mark(CHECK_V3_MARK,markOptions);
44+
}catch(error){
45+
// Ignore
46+
}finally{
47+
performance.clearMarks(CHECK_V3_MARK);
48+
}
49+
}
50+
}
2451

2552
functionformatLanes(laneOrLanes: Lane|Lanes): string{
2653
return((laneOrLanes: any): number).toString();
2754
}
2855

56+
functionmarkAndClear(name){
57+
performance.mark(name);
58+
performance.clearMarks(name);
59+
}
60+
2961
// Create a mark on React initialization
3062
if(enableSchedulingProfiler){
31-
if(supportsUserTiming){
32-
performance.mark(`--react-init-${ReactVersion}`);
63+
if(supportsUserTimingV3){
64+
markAndClear(`--react-init-${ReactVersion}`);
3365
}
3466
}
3567

3668
exportfunctionmarkCommitStarted(lanes: Lanes): void{
3769
if(enableSchedulingProfiler){
38-
if(supportsUserTiming){
39-
performance.mark(`--commit-start-${formatLanes(lanes)}`);
70+
if(supportsUserTimingV3){
71+
markAndClear(`--commit-start-${formatLanes(lanes)}`);
4072
}
4173
}
4274
}
4375

4476
exportfunctionmarkCommitStopped(): void{
4577
if(enableSchedulingProfiler){
46-
if(supportsUserTiming){
47-
performance.mark('--commit-stop');
78+
if(supportsUserTimingV3){
79+
markAndClear('--commit-stop');
4880
}
4981
}
5082
}
@@ -63,89 +95,89 @@ function getWakeableID(wakeable: Wakeable): number {
6395

6496
exportfunctionmarkComponentSuspended(fiber: Fiber,wakeable: Wakeable): void{
6597
if(enableSchedulingProfiler){
66-
if(supportsUserTiming){
98+
if(supportsUserTimingV3){
6799
constid=getWakeableID(wakeable);
68100
constcomponentName=getComponentName(fiber.type)||'Unknown';
69101
// TODO Add component stack id
70-
performance.mark(`--suspense-suspend-${id}-${componentName}`);
102+
markAndClear(`--suspense-suspend-${id}-${componentName}`);
71103
wakeable.then(
72-
()=>performance.mark(`--suspense-resolved-${id}-${componentName}`),
73-
()=>performance.mark(`--suspense-rejected-${id}-${componentName}`),
104+
()=>markAndClear(`--suspense-resolved-${id}-${componentName}`),
105+
()=>markAndClear(`--suspense-rejected-${id}-${componentName}`),
74106
);
75107
}
76108
}
77109
}
78110

79111
exportfunctionmarkLayoutEffectsStarted(lanes: Lanes): void{
80112
if(enableSchedulingProfiler){
81-
if(supportsUserTiming){
82-
performance.mark(`--layout-effects-start-${formatLanes(lanes)}`);
113+
if(supportsUserTimingV3){
114+
markAndClear(`--layout-effects-start-${formatLanes(lanes)}`);
83115
}
84116
}
85117
}
86118

87119
exportfunctionmarkLayoutEffectsStopped(): void{
88120
if(enableSchedulingProfiler){
89-
if(supportsUserTiming){
90-
performance.mark('--layout-effects-stop');
121+
if(supportsUserTimingV3){
122+
markAndClear('--layout-effects-stop');
91123
}
92124
}
93125
}
94126

95127
exportfunctionmarkPassiveEffectsStarted(lanes: Lanes): void{
96128
if(enableSchedulingProfiler){
97-
if(supportsUserTiming){
98-
performance.mark(`--passive-effects-start-${formatLanes(lanes)}`);
129+
if(supportsUserTimingV3){
130+
markAndClear(`--passive-effects-start-${formatLanes(lanes)}`);
99131
}
100132
}
101133
}
102134

103135
exportfunctionmarkPassiveEffectsStopped(): void{
104136
if(enableSchedulingProfiler){
105-
if(supportsUserTiming){
106-
performance.mark('--passive-effects-stop');
137+
if(supportsUserTimingV3){
138+
markAndClear('--passive-effects-stop');
107139
}
108140
}
109141
}
110142

111143
exportfunctionmarkRenderStarted(lanes: Lanes): void{
112144
if(enableSchedulingProfiler){
113-
if(supportsUserTiming){
114-
performance.mark(`--render-start-${formatLanes(lanes)}`);
145+
if(supportsUserTimingV3){
146+
markAndClear(`--render-start-${formatLanes(lanes)}`);
115147
}
116148
}
117149
}
118150

119151
exportfunctionmarkRenderYielded(): void{
120152
if(enableSchedulingProfiler){
121-
if(supportsUserTiming){
122-
performance.mark('--render-yield');
153+
if(supportsUserTimingV3){
154+
markAndClear('--render-yield');
123155
}
124156
}
125157
}
126158

127159
exportfunctionmarkRenderStopped(): void{
128160
if(enableSchedulingProfiler){
129-
if(supportsUserTiming){
130-
performance.mark('--render-stop');
161+
if(supportsUserTimingV3){
162+
markAndClear('--render-stop');
131163
}
132164
}
133165
}
134166

135167
exportfunctionmarkRenderScheduled(lane: Lane): void{
136168
if(enableSchedulingProfiler){
137-
if(supportsUserTiming){
138-
performance.mark(`--schedule-render-${formatLanes(lane)}`);
169+
if(supportsUserTimingV3){
170+
markAndClear(`--schedule-render-${formatLanes(lane)}`);
139171
}
140172
}
141173
}
142174

143175
exportfunctionmarkForceUpdateScheduled(fiber: Fiber,lane: Lane): void{
144176
if(enableSchedulingProfiler){
145-
if(supportsUserTiming){
177+
if(supportsUserTimingV3){
146178
constcomponentName=getComponentName(fiber.type)||'Unknown';
147179
// TODO Add component stack id
148-
performance.mark(
180+
markAndClear(
149181
`--schedule-forced-update-${formatLanes(lane)}-${componentName}`,
150182
);
151183
}
@@ -154,10 +186,10 @@ export function markForceUpdateScheduled(fiber: Fiber, lane: Lane): void {
154186

155187
exportfunctionmarkStateUpdateScheduled(fiber: Fiber,lane: Lane): void{
156188
if(enableSchedulingProfiler){
157-
if(supportsUserTiming){
189+
if(supportsUserTimingV3){
158190
constcomponentName=getComponentName(fiber.type)||'Unknown';
159191
// TODO Add component stack id
160-
performance.mark(
192+
markAndClear(
161193
`--schedule-state-update-${formatLanes(lane)}-${componentName}`,
162194
);
163195
}

0 commit comments

Comments
 (0)