Skip to content

Commit ac0965a

Browse files
committed
Fix
1 parent b4702f9 commit ac0965a

File tree

1 file changed

+34
-25
lines changed

1 file changed

+34
-25
lines changed

src/renderers/shared/fiber/ReactDebugFiberPerf.js

Lines changed: 34 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
3850
function shouldIgnore(fiber) {
3951
switch (fiber.tag) {
4052
case HostRoot:
@@ -50,37 +62,36 @@ function shouldIgnore(fiber) {
5062
}
5163

5264
let bailedFibers = new Set();
53-
let lastCompletedFiber = null;
54-
let pausedFibers = [];
65+
let currentFiber = null;
66+
let stashedFibers = [];
5567
let flushIndex = 0;
5668

5769
function 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

6577
function markBailWork(fiber) {
6678
if (shouldIgnore(fiber)) {
6779
return;
6880
}
6981
bailedFibers.add(fiber);
70-
performance.clearMarks(getMarkName(fiber));
82+
clearBeginMark(fiber);
7183
}
7284

7385
function 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

8697
function markWillCommit() {
@@ -94,39 +105,37 @@ function markDidCommit() {
94105
function markWillReconcile() {
95106
flushIndex++;
96107
performance.mark('react:reconcile');
97-
resumeStack();
108+
rewindStack();
98109
}
99110

100111
function markDidReconcile() {
101-
rewindStack();
112+
unwindStack();
102113
performance.measure('(React) Reconcile Tree', 'react:reconcile');
103114
}
104115

105116
function 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

128137
function resetStack() {
129-
pausedFibers.length = 0;
138+
stashedFibers.length = 0;
130139
bailedFibers.clear();
131140
}
132141

0 commit comments

Comments
 (0)