From 5a211bb7c800718178d5d388c1250b9b19a3d760 Mon Sep 17 00:00:00 2001 From: noahlemen Date: Tue, 29 Aug 2023 13:11:41 +0000 Subject: [PATCH] set priority on TaskController instead of on postTask/yield (#27295) ## Summary passing both a signal and a priority to `postTask`/`yield` in chrome causes memory to spike and potentially causes OOMs. a fix for this has landed in chrome 118, but we can avoid the issue in earlier versions by setting priority on just the TaskController instead. https://bugs.chromium.org/p/chromium/issues/detail?id=1469367 ## How did you test this change? ``` yarn test SchedulerPostTask ``` DiffTrain build for [4129ea8c922b950be3964f98d2bb74ff4a1c5431](https://github.com/facebook/react/commit/4129ea8c922b950be3964f98d2bb74ff4a1c5431) --- compiled/facebook-www/REVISION | 2 +- compiled/facebook-www/ReactDOM-dev.classic.js | 2 +- compiled/facebook-www/ReactDOM-prod.classic.js | 6 +++--- compiled/facebook-www/ReactDOM-profiling.classic.js | 6 +++--- .../facebook-www/SchedulerPostTask-dev.classic.js | 10 ++++++---- .../facebook-www/SchedulerPostTask-dev.modern.js | 10 ++++++---- .../facebook-www/SchedulerPostTask-prod.classic.js | 12 +++++------- .../facebook-www/SchedulerPostTask-prod.modern.js | 12 +++++------- .../SchedulerPostTask-profiling.classic.js | 12 +++++------- .../SchedulerPostTask-profiling.modern.js | 12 +++++------- 10 files changed, 40 insertions(+), 44 deletions(-) diff --git a/compiled/facebook-www/REVISION b/compiled/facebook-www/REVISION index 2933b077c4..5c38e60590 100644 --- a/compiled/facebook-www/REVISION +++ b/compiled/facebook-www/REVISION @@ -1 +1 @@ -456d153bb582798effa76c09bec2405ab2e392cf +4129ea8c922b950be3964f98d2bb74ff4a1c5431 diff --git a/compiled/facebook-www/ReactDOM-dev.classic.js b/compiled/facebook-www/ReactDOM-dev.classic.js index 18a3a7e4d8..4c72efb225 100644 --- a/compiled/facebook-www/ReactDOM-dev.classic.js +++ b/compiled/facebook-www/ReactDOM-dev.classic.js @@ -34000,7 +34000,7 @@ function createFiberRoot( return root; } -var ReactVersion = "18.3.0-www-classic-72a2d0d7"; +var ReactVersion = "18.3.0-www-classic-d49923a6"; function createPortal$1( children, diff --git a/compiled/facebook-www/ReactDOM-prod.classic.js b/compiled/facebook-www/ReactDOM-prod.classic.js index f93450f5dd..1ba7199050 100644 --- a/compiled/facebook-www/ReactDOM-prod.classic.js +++ b/compiled/facebook-www/ReactDOM-prod.classic.js @@ -16688,7 +16688,7 @@ Internals.Events = [ var devToolsConfig$jscomp$inline_1782 = { findFiberByHostInstance: getClosestInstanceFromNode, bundleType: 0, - version: "18.3.0-www-classic-a5b8c25c", + version: "18.3.0-www-classic-96d8b30d", rendererPackageName: "react-dom" }; var internals$jscomp$inline_2139 = { @@ -16718,7 +16718,7 @@ var internals$jscomp$inline_2139 = { scheduleRoot: null, setRefreshHandler: null, getCurrentFiber: null, - reconcilerVersion: "18.3.0-www-classic-a5b8c25c" + reconcilerVersion: "18.3.0-www-classic-96d8b30d" }; if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) { var hook$jscomp$inline_2140 = __REACT_DEVTOOLS_GLOBAL_HOOK__; @@ -16957,4 +16957,4 @@ exports.unstable_renderSubtreeIntoContainer = function ( ); }; exports.unstable_runWithPriority = runWithPriority; -exports.version = "18.3.0-www-classic-a5b8c25c"; +exports.version = "18.3.0-www-classic-96d8b30d"; diff --git a/compiled/facebook-www/ReactDOM-profiling.classic.js b/compiled/facebook-www/ReactDOM-profiling.classic.js index 5cc9224963..a48624b04d 100644 --- a/compiled/facebook-www/ReactDOM-profiling.classic.js +++ b/compiled/facebook-www/ReactDOM-profiling.classic.js @@ -17463,7 +17463,7 @@ Internals.Events = [ var devToolsConfig$jscomp$inline_1867 = { findFiberByHostInstance: getClosestInstanceFromNode, bundleType: 0, - version: "18.3.0-www-classic-7b25bc8c", + version: "18.3.0-www-classic-f3aaf916", rendererPackageName: "react-dom" }; (function (internals) { @@ -17507,7 +17507,7 @@ var devToolsConfig$jscomp$inline_1867 = { scheduleRoot: null, setRefreshHandler: null, getCurrentFiber: null, - reconcilerVersion: "18.3.0-www-classic-7b25bc8c" + reconcilerVersion: "18.3.0-www-classic-f3aaf916" }); assign(Internals, { ReactBrowserEventEmitter: { @@ -17733,7 +17733,7 @@ exports.unstable_renderSubtreeIntoContainer = function ( ); }; exports.unstable_runWithPriority = runWithPriority; -exports.version = "18.3.0-www-classic-7b25bc8c"; +exports.version = "18.3.0-www-classic-f3aaf916"; /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */ if ( diff --git a/compiled/facebook-www/SchedulerPostTask-dev.classic.js b/compiled/facebook-www/SchedulerPostTask-dev.classic.js index 59d8452832..7f7c4f1e88 100644 --- a/compiled/facebook-www/SchedulerPostTask-dev.classic.js +++ b/compiled/facebook-www/SchedulerPostTask-dev.classic.js @@ -67,9 +67,10 @@ function unstable_scheduleCallback(priorityLevel, callback, options) { break; } - var controller = new TaskController(); + var controller = new TaskController({ + priority: postTaskPriority + }); var postTaskOptions = { - priority: postTaskPriority, delay: typeof options === "object" && options !== null ? options.delay : 0, signal: controller.signal }; @@ -96,9 +97,10 @@ function runTask(priorityLevel, postTaskPriority, node, callback) { if (typeof result === "function") { // Assume this is a continuation var continuation = result; - var continuationController = new TaskController(); + var continuationController = new TaskController({ + priority: postTaskPriority + }); var continuationOptions = { - priority: postTaskPriority, signal: continuationController.signal }; // Update the original callback node's controller, since even though we're // posting a new task, conceptually it's the same one. diff --git a/compiled/facebook-www/SchedulerPostTask-dev.modern.js b/compiled/facebook-www/SchedulerPostTask-dev.modern.js index 59d8452832..7f7c4f1e88 100644 --- a/compiled/facebook-www/SchedulerPostTask-dev.modern.js +++ b/compiled/facebook-www/SchedulerPostTask-dev.modern.js @@ -67,9 +67,10 @@ function unstable_scheduleCallback(priorityLevel, callback, options) { break; } - var controller = new TaskController(); + var controller = new TaskController({ + priority: postTaskPriority + }); var postTaskOptions = { - priority: postTaskPriority, delay: typeof options === "object" && options !== null ? options.delay : 0, signal: controller.signal }; @@ -96,9 +97,10 @@ function runTask(priorityLevel, postTaskPriority, node, callback) { if (typeof result === "function") { // Assume this is a continuation var continuation = result; - var continuationController = new TaskController(); + var continuationController = new TaskController({ + priority: postTaskPriority + }); var continuationOptions = { - priority: postTaskPriority, signal: continuationController.signal }; // Update the original callback node's controller, since even though we're // posting a new task, conceptually it's the same one. diff --git a/compiled/facebook-www/SchedulerPostTask-prod.classic.js b/compiled/facebook-www/SchedulerPostTask-prod.classic.js index 6b8d241f54..be2f4da6a4 100644 --- a/compiled/facebook-www/SchedulerPostTask-prod.classic.js +++ b/compiled/facebook-www/SchedulerPostTask-prod.classic.js @@ -23,11 +23,10 @@ function runTask(priorityLevel, postTaskPriority, node, callback) { currentPriorityLevel_DEPRECATED = priorityLevel; var result = callback(!1); if ("function" === typeof result) { - var continuationController = new TaskController(), - continuationOptions = { - priority: postTaskPriority, - signal: continuationController.signal - }; + var continuationController = new TaskController({ + priority: postTaskPriority + }), + continuationOptions = { signal: continuationController.signal }; node._controller = continuationController; var nextTask = runTask.bind( null, @@ -121,9 +120,8 @@ exports.unstable_scheduleCallback = function ( default: postTaskPriority = "user-visible"; } - var controller = new TaskController(); + var controller = new TaskController({ priority: postTaskPriority }); options = { - priority: postTaskPriority, delay: "object" === typeof options && null !== options ? options.delay : 0, signal: controller.signal }; diff --git a/compiled/facebook-www/SchedulerPostTask-prod.modern.js b/compiled/facebook-www/SchedulerPostTask-prod.modern.js index 6b8d241f54..be2f4da6a4 100644 --- a/compiled/facebook-www/SchedulerPostTask-prod.modern.js +++ b/compiled/facebook-www/SchedulerPostTask-prod.modern.js @@ -23,11 +23,10 @@ function runTask(priorityLevel, postTaskPriority, node, callback) { currentPriorityLevel_DEPRECATED = priorityLevel; var result = callback(!1); if ("function" === typeof result) { - var continuationController = new TaskController(), - continuationOptions = { - priority: postTaskPriority, - signal: continuationController.signal - }; + var continuationController = new TaskController({ + priority: postTaskPriority + }), + continuationOptions = { signal: continuationController.signal }; node._controller = continuationController; var nextTask = runTask.bind( null, @@ -121,9 +120,8 @@ exports.unstable_scheduleCallback = function ( default: postTaskPriority = "user-visible"; } - var controller = new TaskController(); + var controller = new TaskController({ priority: postTaskPriority }); options = { - priority: postTaskPriority, delay: "object" === typeof options && null !== options ? options.delay : 0, signal: controller.signal }; diff --git a/compiled/facebook-www/SchedulerPostTask-profiling.classic.js b/compiled/facebook-www/SchedulerPostTask-profiling.classic.js index 6b8d241f54..be2f4da6a4 100644 --- a/compiled/facebook-www/SchedulerPostTask-profiling.classic.js +++ b/compiled/facebook-www/SchedulerPostTask-profiling.classic.js @@ -23,11 +23,10 @@ function runTask(priorityLevel, postTaskPriority, node, callback) { currentPriorityLevel_DEPRECATED = priorityLevel; var result = callback(!1); if ("function" === typeof result) { - var continuationController = new TaskController(), - continuationOptions = { - priority: postTaskPriority, - signal: continuationController.signal - }; + var continuationController = new TaskController({ + priority: postTaskPriority + }), + continuationOptions = { signal: continuationController.signal }; node._controller = continuationController; var nextTask = runTask.bind( null, @@ -121,9 +120,8 @@ exports.unstable_scheduleCallback = function ( default: postTaskPriority = "user-visible"; } - var controller = new TaskController(); + var controller = new TaskController({ priority: postTaskPriority }); options = { - priority: postTaskPriority, delay: "object" === typeof options && null !== options ? options.delay : 0, signal: controller.signal }; diff --git a/compiled/facebook-www/SchedulerPostTask-profiling.modern.js b/compiled/facebook-www/SchedulerPostTask-profiling.modern.js index 6b8d241f54..be2f4da6a4 100644 --- a/compiled/facebook-www/SchedulerPostTask-profiling.modern.js +++ b/compiled/facebook-www/SchedulerPostTask-profiling.modern.js @@ -23,11 +23,10 @@ function runTask(priorityLevel, postTaskPriority, node, callback) { currentPriorityLevel_DEPRECATED = priorityLevel; var result = callback(!1); if ("function" === typeof result) { - var continuationController = new TaskController(), - continuationOptions = { - priority: postTaskPriority, - signal: continuationController.signal - }; + var continuationController = new TaskController({ + priority: postTaskPriority + }), + continuationOptions = { signal: continuationController.signal }; node._controller = continuationController; var nextTask = runTask.bind( null, @@ -121,9 +120,8 @@ exports.unstable_scheduleCallback = function ( default: postTaskPriority = "user-visible"; } - var controller = new TaskController(); + var controller = new TaskController({ priority: postTaskPriority }); options = { - priority: postTaskPriority, delay: "object" === typeof options && null !== options ? options.delay : 0, signal: controller.signal };