Skip to content

Commit b4702f9

Browse files
committed
wip
1 parent 0adf8ac commit b4702f9

File tree

3 files changed

+46
-5
lines changed

3 files changed

+46
-5
lines changed

src/renderers/dom/fiber/ReactDOMFiber.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -323,7 +323,7 @@ var DOMRenderer = ReactFiberReconciler({
323323

324324
scheduleDeferredCallback: ReactDOMFrameScheduling.rIC,
325325

326-
useSyncScheduling: true,
326+
useSyncScheduling: false,
327327

328328
});
329329

src/renderers/shared/fiber/ReactDebugFiberPerf.js

Lines changed: 42 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ let isProfiling = true;
3232
// TODO: individual render methods
3333

3434
function getMarkName(fiber) {
35-
return `react:${fiber._debugID}`;
35+
return `react:${flushIndex}:${fiber._debugID}`;
3636
}
3737

3838
function shouldIgnore(fiber) {
@@ -50,8 +50,12 @@ function shouldIgnore(fiber) {
5050
}
5151

5252
let bailedFibers = new Set();
53+
let lastCompletedFiber = null;
54+
let pausedFibers = [];
55+
let flushIndex = 0;
5356

5457
function markBeginWork(fiber) {
58+
lastCompletedFiber = null;
5559
if (shouldIgnore(fiber)) {
5660
return;
5761
}
@@ -67,30 +71,63 @@ function markBailWork(fiber) {
6771
}
6872

6973
function markCompleteWork(fiber) {
74+
lastCompletedFiber = fiber;
7075
if (shouldIgnore(fiber)) {
71-
return;
76+
return false;
7277
}
7378
if (bailedFibers.has(fiber)) {
7479
bailedFibers.delete(fiber);
7580
} else {
7681
performance.measure(getComponentName(fiber), getMarkName(fiber));
7782
}
83+
return true;
7884
}
7985

8086
function markWillCommit() {
8187
performance.mark('react:commit');
8288
}
8389

8490
function markDidCommit() {
85-
performance.measure('Commit React Tree', 'react:commit');
91+
performance.measure('(React) Commit Tree', 'react:commit');
8692
}
8793

8894
function markWillReconcile() {
95+
flushIndex++;
8996
performance.mark('react:reconcile');
97+
resumeStack();
9098
}
9199

92100
function markDidReconcile() {
93-
performance.measure('Reconcile React Tree', 'react:reconcile');
101+
rewindStack();
102+
performance.measure('(React) Reconcile Tree', 'react:reconcile');
103+
}
104+
105+
function markReset() {
106+
resetStack();
107+
}
108+
109+
function rewindStack() {
110+
while (lastCompletedFiber) {
111+
const parent = lastCompletedFiber.return;
112+
if (parent) {
113+
if (markCompleteWork(parent)) {
114+
pausedFibers.unshift(parent);
115+
}
116+
}
117+
lastCompletedFiber = parent;
118+
}
119+
}
120+
121+
function resumeStack() {
122+
while (pausedFibers.length) {
123+
const parent = pausedFibers.shift();
124+
markBeginWork(parent);
125+
}
126+
}
127+
128+
function resetStack() {
129+
pausedFibers.length = 0;
130+
bailedFibers.clear();
94131
}
95132

96133
exports.markBeginWork = markBeginWork;
@@ -100,3 +137,4 @@ exports.markWillCommit = markWillCommit;
100137
exports.markDidCommit = markDidCommit;
101138
exports.markWillReconcile = markWillReconcile;
102139
exports.markDidReconcile = markDidReconcile;
140+
exports.markReset = markReset;

src/renderers/shared/fiber/ReactFiberScheduler.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ var {
9393
markDidCommit,
9494
markWillReconcile,
9595
markDidReconcile,
96+
markReset,
9697
} = require('ReactDebugFiberPerf');
9798

9899
var invariant = require('invariant');
@@ -234,6 +235,8 @@ module.exports = function<T, P, I, TI, PI, C, CX, PL>(config : HostConfig<T, P,
234235
// Reset the cursors
235236
resetContext();
236237
resetHostContainer();
238+
239+
markReset();
237240
}
238241

239242
// findNextUnitOfWork mutates the current priority context. It is reset after

0 commit comments

Comments
 (0)