@@ -35,6 +35,18 @@ function getMarkName(fiber) {
3535 return `react:${ flushIndex } :${ fiber . _debugID } ` ;
3636}
3737
38+ function setBeginMark ( fiber ) {
39+ performance . mark ( getMarkName ( fiber ) ) ;
40+ }
41+
42+ function clearBeginMark ( fiber ) {
43+ performance . clearMarks ( getMarkName ( fiber ) ) ;
44+ }
45+
46+ function setCompleteMark ( fiber ) {
47+ performance . measure ( getComponentName ( fiber ) , getMarkName ( fiber ) ) ;
48+ }
49+
3850function shouldIgnore ( fiber ) {
3951 switch ( fiber . tag ) {
4052 case HostRoot :
@@ -50,37 +62,36 @@ function shouldIgnore(fiber) {
5062}
5163
5264let bailedFibers = new Set ( ) ;
53- let lastCompletedFiber = null ;
54- let pausedFibers = [ ] ;
65+ let currentFiber = null ;
66+ let stashedFibers = [ ] ;
5567let flushIndex = 0 ;
5668
5769function markBeginWork ( fiber ) {
58- lastCompletedFiber = null ;
70+ currentFiber = fiber ;
5971 if ( shouldIgnore ( fiber ) ) {
6072 return ;
6173 }
62- performance . mark ( getMarkName ( fiber ) ) ;
74+ setBeginMark ( fiber ) ;
6375}
6476
6577function markBailWork ( fiber ) {
6678 if ( shouldIgnore ( fiber ) ) {
6779 return ;
6880 }
6981 bailedFibers . add ( fiber ) ;
70- performance . clearMarks ( getMarkName ( fiber ) ) ;
82+ clearBeginMark ( fiber ) ;
7183}
7284
7385function markCompleteWork ( fiber ) {
74- lastCompletedFiber = fiber ;
86+ currentFiber = fiber . return ;
7587 if ( shouldIgnore ( fiber ) ) {
76- return false ;
88+ return ;
7789 }
7890 if ( bailedFibers . has ( fiber ) ) {
7991 bailedFibers . delete ( fiber ) ;
80- } else {
81- performance . measure ( getComponentName ( fiber ) , getMarkName ( fiber ) ) ;
92+ return ;
8293 }
83- return true ;
94+ setCompleteMark ( fiber ) ;
8495}
8596
8697function markWillCommit ( ) {
@@ -94,39 +105,37 @@ function markDidCommit() {
94105function markWillReconcile ( ) {
95106 flushIndex ++ ;
96107 performance . mark ( 'react:reconcile' ) ;
97- resumeStack ( ) ;
108+ rewindStack ( ) ;
98109}
99110
100111function markDidReconcile ( ) {
101- rewindStack ( ) ;
112+ unwindStack ( ) ;
102113 performance . measure ( '(React) Reconcile Tree' , 'react:reconcile' ) ;
103114}
104115
105116function markReset ( ) {
106117 resetStack ( ) ;
107118}
108119
109- function rewindStack ( ) {
110- while ( lastCompletedFiber ) {
111- const parent = lastCompletedFiber . return ;
112- if ( parent ) {
113- if ( markCompleteWork ( parent ) ) {
114- pausedFibers . unshift ( parent ) ;
115- }
120+ function unwindStack ( ) {
121+ while ( currentFiber ) {
122+ if ( ! shouldIgnore ( currentFiber ) && ! bailedFibers . has ( currentFiber ) ) {
123+ setCompleteMark ( currentFiber ) ;
124+ stashedFibers . unshift ( currentFiber ) ;
116125 }
117- lastCompletedFiber = parent ;
126+ currentFiber = currentFiber . return ;
118127 }
119128}
120129
121- function resumeStack ( ) {
122- while ( pausedFibers . length ) {
123- const parent = pausedFibers . shift ( ) ;
124- markBeginWork ( parent ) ;
130+ function rewindStack ( ) {
131+ while ( stashedFibers . length ) {
132+ const parent = stashedFibers . shift ( ) ;
133+ setBeginMark ( parent ) ;
125134 }
126135}
127136
128137function resetStack ( ) {
129- pausedFibers . length = 0 ;
138+ stashedFibers . length = 0 ;
130139 bailedFibers . clear ( ) ;
131140}
132141
0 commit comments