Introduce a faster version of the addProperties function (#28969)

## Summary

This PR introduces a faster version of the `addProperties` function.
This new function is basically the `diffProperties` with `prevProps` set
to `null`, propagated constants, and all the unreachable code paths
collapsed.

## How did you test this change?

I've tested this change with [the benchmark
app](https://github.com/react-native-community/RNNewArchitectureApp/tree/new-architecture-benchmarks)
and got ~4.4% improvement in the view creation time.

DiffTrain build for [73bcdfbae5](https://github.com/facebook/react/commit/73bcdfbae57545aa8f88ecdf67426275610b5573)
This commit is contained in:
dmytrorykun
2024-05-02 16:14:58 +00:00
parent cc2fb92581
commit a73bb0e53e
9 changed files with 25 additions and 17 deletions
+1 -1
View File
@@ -1 +1 @@
c7b1ae5a9ed58abece101d09c47ddd1e0b181fe2
73bcdfbae57545aa8f88ecdf67426275610b5573
@@ -63,7 +63,7 @@ function _assertThisInitialized(self) {
return self;
}
var ReactVersion = '19.0.0-www-classic-f53782f7';
var ReactVersion = '19.0.0-www-classic-0ce7839f';
var LegacyRoot = 0;
var ConcurrentRoot = 1;
@@ -160,7 +160,8 @@ var enableDebugTracing = dynamicFeatureFlags.enableDebugTracing,
enableRenderableContext = dynamicFeatureFlags.enableRenderableContext,
enableRefAsProp = dynamicFeatureFlags.enableRefAsProp,
disableDefaultPropsExceptForClasses = dynamicFeatureFlags.disableDefaultPropsExceptForClasses,
enableNoCloningMemoCache = dynamicFeatureFlags.enableNoCloningMemoCache; // On WWW, false is used for a new modern build.
enableNoCloningMemoCache = dynamicFeatureFlags.enableNoCloningMemoCache;
// On WWW, false is used for a new modern build.
var enableProfilerTimer = true;
var enableProfilerCommitHooks = true;
var enableProfilerNestedUpdatePhase = true;
+3 -2
View File
@@ -63,7 +63,7 @@ function _assertThisInitialized(self) {
return self;
}
var ReactVersion = '19.0.0-www-modern-b38d5faf';
var ReactVersion = '19.0.0-www-modern-3acd2c75';
var LegacyRoot = 0;
var ConcurrentRoot = 1;
@@ -160,7 +160,8 @@ var enableDebugTracing = dynamicFeatureFlags.enableDebugTracing,
enableRenderableContext = dynamicFeatureFlags.enableRenderableContext,
enableRefAsProp = dynamicFeatureFlags.enableRefAsProp,
disableDefaultPropsExceptForClasses = dynamicFeatureFlags.disableDefaultPropsExceptForClasses,
enableNoCloningMemoCache = dynamicFeatureFlags.enableNoCloningMemoCache; // On WWW, true is used for a new modern build.
enableNoCloningMemoCache = dynamicFeatureFlags.enableNoCloningMemoCache;
// On WWW, true is used for a new modern build.
var enableProfilerTimer = true;
var enableProfilerCommitHooks = true;
var enableProfilerNestedUpdatePhase = true;
@@ -125,7 +125,8 @@ var enableTrustedTypesIntegration = dynamicFeatureFlags.enableTrustedTypesIntegr
enableRefAsProp = dynamicFeatureFlags.enableRefAsProp,
favorSafetyOverHydrationPerf = dynamicFeatureFlags.favorSafetyOverHydrationPerf,
disableDefaultPropsExceptForClasses = dynamicFeatureFlags.disableDefaultPropsExceptForClasses,
enableNoCloningMemoCache = dynamicFeatureFlags.enableNoCloningMemoCache; // On WWW, false is used for a new modern build.
enableNoCloningMemoCache = dynamicFeatureFlags.enableNoCloningMemoCache;
// On WWW, false is used for a new modern build.
var enableProfilerTimer = true;
var enableProfilerCommitHooks = true;
var enableProfilerNestedUpdatePhase = true;
@@ -30840,7 +30841,7 @@ identifierPrefix, onUncaughtError, onCaughtError, onRecoverableError, transition
return root;
}
var ReactVersion = '19.0.0-www-classic-512ac9b4';
var ReactVersion = '19.0.0-www-classic-c1bcb6b8';
function createPortal$1(children, containerInfo, // TODO: figure out the API for cross-renderer implementation.
implementation) {
+3 -2
View File
@@ -122,7 +122,8 @@ var enableTrustedTypesIntegration = dynamicFeatureFlags.enableTrustedTypesIntegr
enableRefAsProp = dynamicFeatureFlags.enableRefAsProp,
favorSafetyOverHydrationPerf = dynamicFeatureFlags.favorSafetyOverHydrationPerf,
disableDefaultPropsExceptForClasses = dynamicFeatureFlags.disableDefaultPropsExceptForClasses,
enableNoCloningMemoCache = dynamicFeatureFlags.enableNoCloningMemoCache; // On WWW, true is used for a new modern build.
enableNoCloningMemoCache = dynamicFeatureFlags.enableNoCloningMemoCache;
// On WWW, true is used for a new modern build.
var enableProfilerTimer = true;
var enableProfilerCommitHooks = true;
var enableProfilerNestedUpdatePhase = true;
@@ -30015,7 +30016,7 @@ identifierPrefix, onUncaughtError, onCaughtError, onRecoverableError, transition
return root;
}
var ReactVersion = '19.0.0-www-modern-5ee2f667';
var ReactVersion = '19.0.0-www-modern-2f73daed';
function createPortal$1(children, containerInfo, // TODO: figure out the API for cross-renderer implementation.
implementation) {
@@ -116,7 +116,8 @@ var enableTrustedTypesIntegration = dynamicFeatureFlags.enableTrustedTypesIntegr
enableRefAsProp = dynamicFeatureFlags.enableRefAsProp,
favorSafetyOverHydrationPerf = dynamicFeatureFlags.favorSafetyOverHydrationPerf,
disableDefaultPropsExceptForClasses = dynamicFeatureFlags.disableDefaultPropsExceptForClasses,
enableNoCloningMemoCache = dynamicFeatureFlags.enableNoCloningMemoCache; // On WWW, false is used for a new modern build.
enableNoCloningMemoCache = dynamicFeatureFlags.enableNoCloningMemoCache;
// On WWW, false is used for a new modern build.
var enableProfilerTimer = true;
var enableProfilerCommitHooks = true;
var enableProfilerNestedUpdatePhase = true;
@@ -31403,7 +31404,7 @@ identifierPrefix, onUncaughtError, onCaughtError, onRecoverableError, transition
return root;
}
var ReactVersion = '19.0.0-www-classic-af3b0dd2';
var ReactVersion = '19.0.0-www-classic-547fcced';
function createPortal$1(children, containerInfo, // TODO: figure out the API for cross-renderer implementation.
implementation) {
@@ -113,7 +113,8 @@ var enableTrustedTypesIntegration = dynamicFeatureFlags.enableTrustedTypesIntegr
enableRefAsProp = dynamicFeatureFlags.enableRefAsProp,
favorSafetyOverHydrationPerf = dynamicFeatureFlags.favorSafetyOverHydrationPerf,
disableDefaultPropsExceptForClasses = dynamicFeatureFlags.disableDefaultPropsExceptForClasses,
enableNoCloningMemoCache = dynamicFeatureFlags.enableNoCloningMemoCache; // On WWW, true is used for a new modern build.
enableNoCloningMemoCache = dynamicFeatureFlags.enableNoCloningMemoCache;
// On WWW, true is used for a new modern build.
var enableProfilerTimer = true;
var enableProfilerCommitHooks = true;
var enableProfilerNestedUpdatePhase = true;
@@ -30578,7 +30579,7 @@ identifierPrefix, onUncaughtError, onCaughtError, onRecoverableError, transition
return root;
}
var ReactVersion = '19.0.0-www-modern-1407495b';
var ReactVersion = '19.0.0-www-modern-826b7a52';
function createPortal$1(children, containerInfo, // TODO: figure out the API for cross-renderer implementation.
implementation) {
@@ -116,7 +116,8 @@ var enableDebugTracing = dynamicFeatureFlags.enableDebugTracing,
enableRefAsProp = dynamicFeatureFlags.enableRefAsProp,
favorSafetyOverHydrationPerf = dynamicFeatureFlags.favorSafetyOverHydrationPerf,
disableDefaultPropsExceptForClasses = dynamicFeatureFlags.disableDefaultPropsExceptForClasses,
enableNoCloningMemoCache = dynamicFeatureFlags.enableNoCloningMemoCache; // On WWW, false is used for a new modern build.
enableNoCloningMemoCache = dynamicFeatureFlags.enableNoCloningMemoCache;
// On WWW, false is used for a new modern build.
var enableProfilerTimer = true;
var enableProfilerCommitHooks = true;
var enableProfilerNestedUpdatePhase = true;
@@ -28659,7 +28660,7 @@ identifierPrefix, onUncaughtError, onCaughtError, onRecoverableError, transition
return root;
}
var ReactVersion = '19.0.0-www-classic-0492085a';
var ReactVersion = '19.0.0-www-classic-6ec34ee9';
/*
* The `'' + value` pattern (used in perf-sensitive code) throws for Symbol
@@ -116,7 +116,8 @@ var enableDebugTracing = dynamicFeatureFlags.enableDebugTracing,
enableRefAsProp = dynamicFeatureFlags.enableRefAsProp,
favorSafetyOverHydrationPerf = dynamicFeatureFlags.favorSafetyOverHydrationPerf,
disableDefaultPropsExceptForClasses = dynamicFeatureFlags.disableDefaultPropsExceptForClasses,
enableNoCloningMemoCache = dynamicFeatureFlags.enableNoCloningMemoCache; // On WWW, true is used for a new modern build.
enableNoCloningMemoCache = dynamicFeatureFlags.enableNoCloningMemoCache;
// On WWW, true is used for a new modern build.
var enableProfilerTimer = true;
var enableProfilerCommitHooks = true;
var enableProfilerNestedUpdatePhase = true;
@@ -27925,7 +27926,7 @@ identifierPrefix, onUncaughtError, onCaughtError, onRecoverableError, transition
return root;
}
var ReactVersion = '19.0.0-www-modern-30613c5e';
var ReactVersion = '19.0.0-www-modern-e8748e87';
/*
* The `'' + value` pattern (used in perf-sensitive code) throws for Symbol