@@ -14,25 +14,40 @@ import {enableProfilerTimer} from 'shared/ReactFeatureFlags';
1414import warning from 'fbjs/lib/warning' ;
1515import { now } from './ReactFiberHostConfig' ;
1616
17- /**
18- * The "actual" render time is total time required to render the descendants of a Profiler component.
19- * This time is stored as a stack, since Profilers can be nested.
20- * This time is started during the "begin" phase and stopped during the "complete" phase.
21- * It is paused (and accumulated) in the event of an interruption or an aborted render.
22- */
23-
2417export type ProfilerTimer = {
2518 checkActualRenderTimeStackEmpty ( ) : void ,
19+ getCommitTime ( ) : number ,
2620 markActualRenderTimeStarted ( fiber : Fiber ) : void ,
2721 pauseActualRenderTimerIfRunning ( ) : void ,
2822 recordElapsedActualRenderTime ( fiber : Fiber ) : void ,
2923 resetActualRenderTimer ( ) : void ,
3024 resumeActualRenderTimerIfPaused ( ) : void ,
25+ recordCommitTime ( ) : void ,
3126 recordElapsedBaseRenderTimeIfRunning ( fiber : Fiber ) : void ,
3227 startBaseRenderTimer ( ) : void ,
3328 stopBaseRenderTimerIfRunning ( ) : void ,
3429} ;
3530
31+ let commitTime : number = 0 ;
32+
33+ function getCommitTime ( ) : number {
34+ return commitTime ;
35+ }
36+
37+ function recordCommitTime ( ) : void {
38+ if ( ! enableProfilerTimer ) {
39+ return ;
40+ }
41+ commitTime = now ( ) ;
42+ }
43+
44+ /**
45+ * The "actual" render time is total time required to render the descendants of a Profiler component.
46+ * This time is stored as a stack, since Profilers can be nested.
47+ * This time is started during the "begin" phase and stopped during the "complete" phase.
48+ * It is paused (and accumulated) in the event of an interruption or an aborted render.
49+ */
50+
3651let fiberStack : Array < Fiber | null > ;
3752
3853if ( __DEV__ ) {
@@ -61,7 +76,9 @@ function markActualRenderTimeStarted(fiber: Fiber): void {
6176 if ( __DEV__ ) {
6277 fiberStack . push ( fiber ) ;
6378 }
64- fiber . stateNode . startTime = now ( ) - totalElapsedPauseTime ;
79+ const stateNode = fiber . stateNode ;
80+ stateNode . elapsedPauseTimeAtStart = totalElapsedPauseTime ;
81+ stateNode . startTime = now ( ) ;
6582}
6683
6784function pauseActualRenderTimerIfRunning ( ) : void {
@@ -80,8 +97,11 @@ function recordElapsedActualRenderTime(fiber: Fiber): void {
8097 if ( __DEV__ ) {
8198 warning ( fiber === fiberStack . pop ( ) , 'Unexpected Fiber popped.' ) ;
8299 }
83- fiber . stateNode . duration +=
84- now ( ) - totalElapsedPauseTime - fiber . stateNode . startTime ;
100+ const stateNode = fiber . stateNode ;
101+ stateNode . duration +=
102+ now ( ) -
103+ ( totalElapsedPauseTime - stateNode . elapsedPauseTimeAtStart ) -
104+ stateNode . startTime ;
85105}
86106
87107function resetActualRenderTimer ( ) : void {
@@ -145,8 +165,10 @@ function stopBaseRenderTimerIfRunning(): void {
145165
146166export {
147167 checkActualRenderTimeStackEmpty ,
168+ getCommitTime ,
148169 markActualRenderTimeStarted ,
149170 pauseActualRenderTimerIfRunning ,
171+ recordCommitTime ,
150172 recordElapsedActualRenderTime ,
151173 resetActualRenderTimer ,
152174 resumeActualRenderTimerIfPaused ,
0 commit comments