Skip to content

Commit f708486

Browse files
committed
Experiment with using an object literal for Fiber creation (#28734)
Object literals should be faster at least on React Native with Hermes as the JS engine. It might also be interesting to confirm the old comments in this file from years ago are even still valid. Creating an object from a literal should be a simpler operation. It's a bit unfortunate that this introduces a bunch of copied code, but since we rearely update the fields on fibers, this seems like an okay tradeoff for a hot code path. An alternative would be some sort of macro system, but that doesn't seem worth the extra complexity. DiffTrain build for [fe98289](fe98289)
1 parent f4ccb1f commit f708486

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+1105
-443
lines changed

compiled/facebook-www/JSXDEVRuntime-dev.classic.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -811,12 +811,12 @@ __DEV__ &&
811811
}
812812
var React = require("react"),
813813
dynamicFeatureFlags = require("ReactFeatureFlags"),
814-
enableDebugTracing = dynamicFeatureFlags.enableDebugTracing,
815-
enableTransitionTracing = dynamicFeatureFlags.enableTransitionTracing,
816-
enableRenderableContext = dynamicFeatureFlags.enableRenderableContext,
817814
disableDefaultPropsExceptForClasses =
818815
dynamicFeatureFlags.disableDefaultPropsExceptForClasses,
816+
enableDebugTracing = dynamicFeatureFlags.enableDebugTracing,
819817
enableFastJSX = dynamicFeatureFlags.enableFastJSX,
818+
enableRenderableContext = dynamicFeatureFlags.enableRenderableContext,
819+
enableTransitionTracing = dynamicFeatureFlags.enableTransitionTracing,
820820
renameElementSymbol = dynamicFeatureFlags.renameElementSymbol,
821821
disableLegacyMode = dynamicFeatureFlags.disableLegacyMode;
822822
dynamicFeatureFlags = Symbol.for("react.element");

compiled/facebook-www/JSXDEVRuntime-dev.modern.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -808,12 +808,12 @@ __DEV__ &&
808808
}
809809
var React = require("react"),
810810
dynamicFeatureFlags = require("ReactFeatureFlags"),
811-
enableDebugTracing = dynamicFeatureFlags.enableDebugTracing,
812-
enableTransitionTracing = dynamicFeatureFlags.enableTransitionTracing,
813-
enableRenderableContext = dynamicFeatureFlags.enableRenderableContext,
814811
disableDefaultPropsExceptForClasses =
815812
dynamicFeatureFlags.disableDefaultPropsExceptForClasses,
816-
enableFastJSX = dynamicFeatureFlags.enableFastJSX;
813+
enableDebugTracing = dynamicFeatureFlags.enableDebugTracing,
814+
enableFastJSX = dynamicFeatureFlags.enableFastJSX,
815+
enableRenderableContext = dynamicFeatureFlags.enableRenderableContext,
816+
enableTransitionTracing = dynamicFeatureFlags.enableTransitionTracing;
817817
dynamicFeatureFlags = dynamicFeatureFlags.renameElementSymbol;
818818
var REACT_LEGACY_ELEMENT_TYPE = Symbol.for("react.element"),
819819
REACT_ELEMENT_TYPE = dynamicFeatureFlags

compiled/facebook-www/REVISION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
2d3f81bb6a650386832d885d7b63a7d0d517ba15
1+
fe9828954adcc51aa2bd21fe53d969a44dd3c9d2
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
2d3f81bb6a650386832d885d7b63a7d0d517ba15
1+
fe9828954adcc51aa2bd21fe53d969a44dd3c9d2

compiled/facebook-www/React-dev.classic.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1199,12 +1199,12 @@ __DEV__ &&
11991199
typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&
12001200
__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());
12011201
var dynamicFeatureFlags = require("ReactFeatureFlags"),
1202-
enableDebugTracing = dynamicFeatureFlags.enableDebugTracing,
1203-
enableTransitionTracing = dynamicFeatureFlags.enableTransitionTracing,
1204-
enableRenderableContext = dynamicFeatureFlags.enableRenderableContext,
12051202
disableDefaultPropsExceptForClasses =
12061203
dynamicFeatureFlags.disableDefaultPropsExceptForClasses,
1204+
enableDebugTracing = dynamicFeatureFlags.enableDebugTracing,
12071205
enableFastJSX = dynamicFeatureFlags.enableFastJSX,
1206+
enableRenderableContext = dynamicFeatureFlags.enableRenderableContext,
1207+
enableTransitionTracing = dynamicFeatureFlags.enableTransitionTracing,
12081208
renameElementSymbol = dynamicFeatureFlags.renameElementSymbol,
12091209
disableLegacyMode = dynamicFeatureFlags.disableLegacyMode,
12101210
REACT_LEGACY_ELEMENT_TYPE = Symbol.for("react.element"),
@@ -1998,7 +1998,7 @@ __DEV__ &&
19981998
exports.useTransition = function () {
19991999
return resolveDispatcher().useTransition();
20002000
};
2001-
exports.version = "19.0.0-www-classic-2d3f81bb6a-20240710";
2001+
exports.version = "19.0.0-www-classic-fe9828954a-20240710";
20022002
"undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&
20032003
"function" ===
20042004
typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&

compiled/facebook-www/React-dev.modern.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1196,12 +1196,12 @@ __DEV__ &&
11961196
typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&
11971197
__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());
11981198
var dynamicFeatureFlags = require("ReactFeatureFlags"),
1199-
enableDebugTracing = dynamicFeatureFlags.enableDebugTracing,
1200-
enableTransitionTracing = dynamicFeatureFlags.enableTransitionTracing,
1201-
enableRenderableContext = dynamicFeatureFlags.enableRenderableContext,
12021199
disableDefaultPropsExceptForClasses =
12031200
dynamicFeatureFlags.disableDefaultPropsExceptForClasses,
1201+
enableDebugTracing = dynamicFeatureFlags.enableDebugTracing,
12041202
enableFastJSX = dynamicFeatureFlags.enableFastJSX,
1203+
enableRenderableContext = dynamicFeatureFlags.enableRenderableContext,
1204+
enableTransitionTracing = dynamicFeatureFlags.enableTransitionTracing,
12051205
renameElementSymbol = dynamicFeatureFlags.renameElementSymbol,
12061206
REACT_LEGACY_ELEMENT_TYPE = Symbol.for("react.element"),
12071207
REACT_ELEMENT_TYPE = renameElementSymbol
@@ -1978,7 +1978,7 @@ __DEV__ &&
19781978
exports.useTransition = function () {
19791979
return resolveDispatcher().useTransition();
19801980
};
1981-
exports.version = "19.0.0-www-modern-2d3f81bb6a-20240710";
1981+
exports.version = "19.0.0-www-modern-fe9828954a-20240710";
19821982
"undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&
19831983
"function" ===
19841984
typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&

compiled/facebook-www/React-prod.classic.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,11 @@
1212

1313
"use strict";
1414
var dynamicFeatureFlags = require("ReactFeatureFlags"),
15-
enableTransitionTracing = dynamicFeatureFlags.enableTransitionTracing,
16-
enableRenderableContext = dynamicFeatureFlags.enableRenderableContext,
1715
disableDefaultPropsExceptForClasses =
1816
dynamicFeatureFlags.disableDefaultPropsExceptForClasses,
1917
enableFastJSX = dynamicFeatureFlags.enableFastJSX,
18+
enableRenderableContext = dynamicFeatureFlags.enableRenderableContext,
19+
enableTransitionTracing = dynamicFeatureFlags.enableTransitionTracing,
2020
renameElementSymbol = dynamicFeatureFlags.renameElementSymbol,
2121
REACT_LEGACY_ELEMENT_TYPE = Symbol.for("react.element"),
2222
REACT_ELEMENT_TYPE = renameElementSymbol
@@ -669,4 +669,4 @@ exports.useSyncExternalStore = function (
669669
exports.useTransition = function () {
670670
return ReactSharedInternals.H.useTransition();
671671
};
672-
exports.version = "19.0.0-www-classic-2d3f81bb6a-20240710";
672+
exports.version = "19.0.0-www-classic-fe9828954a-20240710";

compiled/facebook-www/React-prod.modern.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,11 @@
1212

1313
"use strict";
1414
var dynamicFeatureFlags = require("ReactFeatureFlags"),
15-
enableTransitionTracing = dynamicFeatureFlags.enableTransitionTracing,
16-
enableRenderableContext = dynamicFeatureFlags.enableRenderableContext,
1715
disableDefaultPropsExceptForClasses =
1816
dynamicFeatureFlags.disableDefaultPropsExceptForClasses,
1917
enableFastJSX = dynamicFeatureFlags.enableFastJSX,
18+
enableRenderableContext = dynamicFeatureFlags.enableRenderableContext,
19+
enableTransitionTracing = dynamicFeatureFlags.enableTransitionTracing,
2020
renameElementSymbol = dynamicFeatureFlags.renameElementSymbol,
2121
REACT_LEGACY_ELEMENT_TYPE = Symbol.for("react.element"),
2222
REACT_ELEMENT_TYPE = renameElementSymbol
@@ -669,4 +669,4 @@ exports.useSyncExternalStore = function (
669669
exports.useTransition = function () {
670670
return ReactSharedInternals.H.useTransition();
671671
};
672-
exports.version = "19.0.0-www-modern-2d3f81bb6a-20240710";
672+
exports.version = "19.0.0-www-modern-fe9828954a-20240710";

compiled/facebook-www/React-profiling.classic.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@
1616
typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&
1717
__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());
1818
var dynamicFeatureFlags = require("ReactFeatureFlags"),
19-
enableTransitionTracing = dynamicFeatureFlags.enableTransitionTracing,
20-
enableRenderableContext = dynamicFeatureFlags.enableRenderableContext,
2119
disableDefaultPropsExceptForClasses =
2220
dynamicFeatureFlags.disableDefaultPropsExceptForClasses,
2321
enableFastJSX = dynamicFeatureFlags.enableFastJSX,
22+
enableRenderableContext = dynamicFeatureFlags.enableRenderableContext,
23+
enableTransitionTracing = dynamicFeatureFlags.enableTransitionTracing,
2424
renameElementSymbol = dynamicFeatureFlags.renameElementSymbol,
2525
REACT_LEGACY_ELEMENT_TYPE = Symbol.for("react.element"),
2626
REACT_ELEMENT_TYPE = renameElementSymbol
@@ -673,7 +673,7 @@ exports.useSyncExternalStore = function (
673673
exports.useTransition = function () {
674674
return ReactSharedInternals.H.useTransition();
675675
};
676-
exports.version = "19.0.0-www-classic-2d3f81bb6a-20240710";
676+
exports.version = "19.0.0-www-classic-fe9828954a-20240710";
677677
"undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&
678678
"function" ===
679679
typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&

compiled/facebook-www/React-profiling.modern.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@
1616
typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&
1717
__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());
1818
var dynamicFeatureFlags = require("ReactFeatureFlags"),
19-
enableTransitionTracing = dynamicFeatureFlags.enableTransitionTracing,
20-
enableRenderableContext = dynamicFeatureFlags.enableRenderableContext,
2119
disableDefaultPropsExceptForClasses =
2220
dynamicFeatureFlags.disableDefaultPropsExceptForClasses,
2321
enableFastJSX = dynamicFeatureFlags.enableFastJSX,
22+
enableRenderableContext = dynamicFeatureFlags.enableRenderableContext,
23+
enableTransitionTracing = dynamicFeatureFlags.enableTransitionTracing,
2424
renameElementSymbol = dynamicFeatureFlags.renameElementSymbol,
2525
REACT_LEGACY_ELEMENT_TYPE = Symbol.for("react.element"),
2626
REACT_ELEMENT_TYPE = renameElementSymbol
@@ -673,7 +673,7 @@ exports.useSyncExternalStore = function (
673673
exports.useTransition = function () {
674674
return ReactSharedInternals.H.useTransition();
675675
};
676-
exports.version = "19.0.0-www-modern-2d3f81bb6a-20240710";
676+
exports.version = "19.0.0-www-modern-fe9828954a-20240710";
677677
"undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&
678678
"function" ===
679679
typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&

compiled/facebook-www/ReactART-dev.classic.js

Lines changed: 60 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -14344,9 +14344,48 @@ __DEV__ &&
1434414344
"function" !== typeof Object.preventExtensions ||
1434514345
Object.preventExtensions(this);
1434614346
}
14347-
function createFiber(tag, pendingProps, key, mode) {
14347+
function createFiberImplClass(tag, pendingProps, key, mode) {
1434814348
return new FiberNode(tag, pendingProps, key, mode);
1434914349
}
14350+
function createFiberImplObject(tag, pendingProps, key, mode) {
14351+
tag = {
14352+
elementType: null,
14353+
type: null,
14354+
stateNode: null,
14355+
return: null,
14356+
child: null,
14357+
sibling: null,
14358+
index: 0,
14359+
ref: null,
14360+
refCleanup: null,
14361+
memoizedProps: null,
14362+
updateQueue: null,
14363+
memoizedState: null,
14364+
dependencies: null,
14365+
flags: 0,
14366+
subtreeFlags: 0,
14367+
deletions: null,
14368+
lanes: 0,
14369+
childLanes: 0,
14370+
alternate: null,
14371+
tag: tag,
14372+
key: key,
14373+
pendingProps: pendingProps,
14374+
mode: mode,
14375+
actualDuration: 0,
14376+
actualStartTime: -1,
14377+
selfBaseDuration: 0,
14378+
treeBaseDuration: 0,
14379+
_debugInfo: null,
14380+
_debugOwner: null,
14381+
_debugNeedsRemount: !1,
14382+
_debugHookTypes: null
14383+
};
14384+
hasBadMapPolyfill ||
14385+
"function" !== typeof Object.preventExtensions ||
14386+
Object.preventExtensions(tag);
14387+
return tag;
14388+
}
1435014389
function shouldConstruct(Component) {
1435114390
Component = Component.prototype;
1435214391
return !(!Component || !Component.isReactComponent);
@@ -14889,31 +14928,32 @@ __DEV__ &&
1488914928
suppressWarning = !1,
1489014929
assign = Object.assign,
1489114930
dynamicFeatureFlags = require("ReactFeatureFlags"),
14931+
alwaysThrottleRetries = dynamicFeatureFlags.alwaysThrottleRetries,
14932+
disableDefaultPropsExceptForClasses =
14933+
dynamicFeatureFlags.disableDefaultPropsExceptForClasses,
14934+
disableSchedulerTimeoutInWorkLoop =
14935+
dynamicFeatureFlags.disableSchedulerTimeoutInWorkLoop,
1489214936
enableDebugTracing = dynamicFeatureFlags.enableDebugTracing,
14893-
enableLazyContextPropagation =
14894-
dynamicFeatureFlags.enableLazyContextPropagation,
14895-
enableRetryLaneExpiration = dynamicFeatureFlags.enableRetryLaneExpiration,
14896-
enableTransitionTracing = dynamicFeatureFlags.enableTransitionTracing,
1489714937
enableDeferRootSchedulingToMicrotask =
1489814938
dynamicFeatureFlags.enableDeferRootSchedulingToMicrotask,
14899-
alwaysThrottleRetries = dynamicFeatureFlags.alwaysThrottleRetries,
1490014939
enableDO_NOT_USE_disableStrictPassiveEffect =
1490114940
dynamicFeatureFlags.enableDO_NOT_USE_disableStrictPassiveEffect,
14902-
disableSchedulerTimeoutInWorkLoop =
14903-
dynamicFeatureFlags.disableSchedulerTimeoutInWorkLoop,
14941+
enableInfiniteRenderLoopDetection =
14942+
dynamicFeatureFlags.enableInfiniteRenderLoopDetection,
14943+
enableLazyContextPropagation =
14944+
dynamicFeatureFlags.enableLazyContextPropagation,
14945+
enableNoCloningMemoCache = dynamicFeatureFlags.enableNoCloningMemoCache,
14946+
enableObjectFiber = dynamicFeatureFlags.enableObjectFiber,
14947+
enableRenderableContext = dynamicFeatureFlags.enableRenderableContext,
14948+
enableRetryLaneExpiration = dynamicFeatureFlags.enableRetryLaneExpiration,
14949+
enableTransitionTracing = dynamicFeatureFlags.enableTransitionTracing,
1490414950
enableUseDeferredValueInitialArg =
1490514951
dynamicFeatureFlags.enableUseDeferredValueInitialArg,
14952+
renameElementSymbol = dynamicFeatureFlags.renameElementSymbol,
1490614953
retryLaneExpirationMs = dynamicFeatureFlags.retryLaneExpirationMs,
1490714954
syncLaneExpirationMs = dynamicFeatureFlags.syncLaneExpirationMs,
1490814955
transitionLaneExpirationMs =
1490914956
dynamicFeatureFlags.transitionLaneExpirationMs,
14910-
enableInfiniteRenderLoopDetection =
14911-
dynamicFeatureFlags.enableInfiniteRenderLoopDetection,
14912-
enableRenderableContext = dynamicFeatureFlags.enableRenderableContext,
14913-
disableDefaultPropsExceptForClasses =
14914-
dynamicFeatureFlags.disableDefaultPropsExceptForClasses,
14915-
enableNoCloningMemoCache = dynamicFeatureFlags.enableNoCloningMemoCache,
14916-
renameElementSymbol = dynamicFeatureFlags.renameElementSymbol,
1491714957
enableSchedulingProfiler = dynamicFeatureFlags.enableSchedulingProfiler,
1491814958
disableLegacyMode = dynamicFeatureFlags.disableLegacyMode,
1491914959
REACT_LEGACY_ELEMENT_TYPE = Symbol.for("react.element"),
@@ -16745,6 +16785,9 @@ __DEV__ &&
1674516785
} catch (e) {
1674616786
hasBadMapPolyfill = !0;
1674716787
}
16788+
var createFiber = enableObjectFiber
16789+
? createFiberImplObject
16790+
: createFiberImplClass;
1674816791
var didWarnAboutNestedUpdates = !1;
1674916792
var overrideHookState = null,
1675016793
overrideHookStateDeletePath = null,
@@ -16974,14 +17017,14 @@ __DEV__ &&
1697417017
scheduleRoot: scheduleRoot,
1697517018
setRefreshHandler: setRefreshHandler,
1697617019
getCurrentFiber: getCurrentFiberForDevTools,
16977-
reconcilerVersion: "19.0.0-www-classic-2d3f81bb6a-20240710"
17020+
reconcilerVersion: "19.0.0-www-classic-fe9828954a-20240710"
1697817021
});
1697917022
})({
1698017023
findFiberByHostInstance: function () {
1698117024
return null;
1698217025
},
1698317026
bundleType: 1,
16984-
version: "19.0.0-www-classic-2d3f81bb6a-20240710",
17027+
version: "19.0.0-www-classic-fe9828954a-20240710",
1698517028
rendererPackageName: "react-art"
1698617029
});
1698717030
var ClippingRectangle = TYPES.CLIPPING_RECTANGLE,

0 commit comments

Comments
 (0)