diff --git a/compiler/apps/playground/lib/stores/store.ts b/compiler/apps/playground/lib/stores/store.ts
index e67578c79bf17..6655efa274089 100644
--- a/compiler/apps/playground/lib/stores/store.ts
+++ b/compiler/apps/playground/lib/stores/store.ts
@@ -71,7 +71,7 @@ export function initStoreFromUrlOrLocalStorage(): Store {
// Make sure all properties are populated
return {
source: raw.source,
- config: 'config' in raw ? raw.config : defaultConfig,
+ config: 'config' in raw && raw['config'] ? raw.config : defaultConfig,
showInternals: 'showInternals' in raw ? raw.showInternals : false,
};
}
diff --git a/compiler/apps/playground/next-env.d.ts b/compiler/apps/playground/next-env.d.ts
index 830fb594ca297..9edff1c7cacb3 100644
--- a/compiler/apps/playground/next-env.d.ts
+++ b/compiler/apps/playground/next-env.d.ts
@@ -1,6 +1,6 @@
///
///
-///
+import "./.next/types/routes.d.ts";
// NOTE: This file should not be edited
// see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
diff --git a/compiler/apps/playground/package.json b/compiler/apps/playground/package.json
index 44c1f101230cd..08aed45e0f33c 100644
--- a/compiler/apps/playground/package.json
+++ b/compiler/apps/playground/package.json
@@ -34,7 +34,7 @@
"invariant": "^2.2.4",
"lz-string": "^1.5.0",
"monaco-editor": "^0.52.0",
- "next": "15.5.2",
+ "next": "15.6.0-canary.7",
"notistack": "^3.0.0-alpha.7",
"prettier": "^3.3.3",
"pretty-format": "^29.3.1",
@@ -44,7 +44,7 @@
},
"devDependencies": {
"@types/node": "18.11.9",
- "@types/react": "19.1.12",
+ "@types/react": "19.1.13",
"@types/react-dom": "19.1.9",
"autoprefixer": "^10.4.13",
"clsx": "^1.2.1",
diff --git a/compiler/apps/playground/tsconfig.json b/compiler/apps/playground/tsconfig.json
index eb7fcfe2b7228..4f70dcef8abb6 100644
--- a/compiler/apps/playground/tsconfig.json
+++ b/compiler/apps/playground/tsconfig.json
@@ -6,6 +6,9 @@
"dom.iterable",
"esnext"
],
+ "types": [
+ "react/experimental"
+ ],
"allowJs": true,
"skipLibCheck": true,
"strict": true,
@@ -16,7 +19,7 @@
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
- "jsx": "preserve",
+ "jsx": "react-jsx",
"incremental": true,
"plugins": [
{
diff --git a/compiler/apps/playground/yarn.lock b/compiler/apps/playground/yarn.lock
index 9bf1bb0687baf..53f0d24db706f 100644
--- a/compiler/apps/playground/yarn.lock
+++ b/compiler/apps/playground/yarn.lock
@@ -715,10 +715,10 @@
dependencies:
"@monaco-editor/loader" "^1.4.0"
-"@next/env@15.5.2":
- version "15.5.2"
- resolved "https://registry.yarnpkg.com/@next/env/-/env-15.5.2.tgz#0c6b959313cd6e71afb69bf0deb417237f1d2f8a"
- integrity sha512-Qe06ew4zt12LeO6N7j8/nULSOe3fMXE4dM6xgpBQNvdzyK1sv5y4oAP3bq4LamrvGCZtmRYnW8URFCeX5nFgGg==
+"@next/env@15.6.0-canary.7":
+ version "15.6.0-canary.7"
+ resolved "https://registry.yarnpkg.com/@next/env/-/env-15.6.0-canary.7.tgz#cdbf2967a9437ef09eef755e203f315acc4d8d8f"
+ integrity sha512-LNZ7Yd3Cl9rKvjYdeJmszf2HmSDP76SQmfafKep2Ux16ZXKoN5OjwVHFTltKNdsB3vt2t+XJzLP2rhw5lBoFBA==
"@next/eslint-plugin-next@15.5.2":
version "15.5.2"
@@ -727,45 +727,45 @@
dependencies:
fast-glob "3.3.1"
-"@next/swc-darwin-arm64@15.5.2":
- version "15.5.2"
- resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.5.2.tgz#f69713326fc08f2eff3726fe19165cdb429d67c7"
- integrity sha512-8bGt577BXGSd4iqFygmzIfTYizHb0LGWqH+qgIF/2EDxS5JsSdERJKA8WgwDyNBZgTIIA4D8qUtoQHmxIIquoQ==
-
-"@next/swc-darwin-x64@15.5.2":
- version "15.5.2"
- resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-15.5.2.tgz#560a9da4126bae75cbbd6899646ad7a2e4fdcc9b"
- integrity sha512-2DjnmR6JHK4X+dgTXt5/sOCu/7yPtqpYt8s8hLkHFK3MGkka2snTv3yRMdHvuRtJVkPwCGsvBSwmoQCHatauFQ==
-
-"@next/swc-linux-arm64-gnu@15.5.2":
- version "15.5.2"
- resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.5.2.tgz#80b2be276e775e5a9286369ae54e536b0cdf8c3a"
- integrity sha512-3j7SWDBS2Wov/L9q0mFJtEvQ5miIqfO4l7d2m9Mo06ddsgUK8gWfHGgbjdFlCp2Ek7MmMQZSxpGFqcC8zGh2AA==
-
-"@next/swc-linux-arm64-musl@15.5.2":
- version "15.5.2"
- resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.5.2.tgz#68cf676301755fd99aca11a7ebdb5eae88d7c2e4"
- integrity sha512-s6N8k8dF9YGc5T01UPQ08yxsK6fUow5gG1/axWc1HVVBYQBgOjca4oUZF7s4p+kwhkB1bDSGR8QznWrFZ/Rt5g==
-
-"@next/swc-linux-x64-gnu@15.5.2":
- version "15.5.2"
- resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.5.2.tgz#209d9a79d0f2333544f863b0daca3f7e29f2eaff"
- integrity sha512-o1RV/KOODQh6dM6ZRJGZbc+MOAHww33Vbs5JC9Mp1gDk8cpEO+cYC/l7rweiEalkSm5/1WGa4zY7xrNwObN4+Q==
-
-"@next/swc-linux-x64-musl@15.5.2":
- version "15.5.2"
- resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.5.2.tgz#d4ad1cfb5e99e51db669fe2145710c1abeadbd7f"
- integrity sha512-/VUnh7w8RElYZ0IV83nUcP/J4KJ6LLYliiBIri3p3aW2giF+PAVgZb6mk8jbQSB3WlTai8gEmCAr7kptFa1H6g==
-
-"@next/swc-win32-arm64-msvc@15.5.2":
- version "15.5.2"
- resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.5.2.tgz#070e10e370a5447a198c2db100389646aca2c496"
- integrity sha512-sMPyTvRcNKXseNQ/7qRfVRLa0VhR0esmQ29DD6pqvG71+JdVnESJaHPA8t7bc67KD5spP3+DOCNLhqlEI2ZgQg==
-
-"@next/swc-win32-x64-msvc@15.5.2":
- version "15.5.2"
- resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.5.2.tgz#9237d40b82eaf2efc88baeba15b784d4126caf4a"
- integrity sha512-W5VvyZHnxG/2ukhZF/9Ikdra5fdNftxI6ybeVKYvBPDtyx7x4jPPSNduUkfH5fo3zG0JQ0bPxgy41af2JX5D4Q==
+"@next/swc-darwin-arm64@15.6.0-canary.7":
+ version "15.6.0-canary.7"
+ resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.6.0-canary.7.tgz#628cd34ce9120000f1cb5b08963426431174fc57"
+ integrity sha512-POsBrxhrR3qvqXV+JZ6ZoBc8gJf8rhYe+OedceI1piPVqtJYOJa3EB4eaqcc+kMsllKRrH/goNlhLwtyhE+0Qg==
+
+"@next/swc-darwin-x64@15.6.0-canary.7":
+ version "15.6.0-canary.7"
+ resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-15.6.0-canary.7.tgz#37d4ebab14da74a2f8028daf6d76aab410153e06"
+ integrity sha512-lmk9ysBuSiPlAJZTCo/3O4mXNFosg6EDIf4GrmynIwCG2as6/KxzyD1WqFp56Exp8eFDjP7SFapD10sV43vCsA==
+
+"@next/swc-linux-arm64-gnu@15.6.0-canary.7":
+ version "15.6.0-canary.7"
+ resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.6.0-canary.7.tgz#ce700cc0e0d24763136838223105a524b36694fa"
+ integrity sha512-why8k6d0SBm3AKoOD5S7ir3g+BF34l9oFKIoZrLaZaKBvNGpFcjc7Ovc2TunNMeaMJzv9k1dHYSap0EI5oSuzg==
+
+"@next/swc-linux-arm64-musl@15.6.0-canary.7":
+ version "15.6.0-canary.7"
+ resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.6.0-canary.7.tgz#c791b8e15bf2c338b4cc0387fe7afb3ef83ecfcf"
+ integrity sha512-HzvTRsKvYj32Va4YuJN3n3xOxvk+6QwB63d/EsgmdkeA/vrqciUAmJDYpuzZEvRc3Yp2nyPq8KZxtHAr6ISZ2Q==
+
+"@next/swc-linux-x64-gnu@15.6.0-canary.7":
+ version "15.6.0-canary.7"
+ resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.6.0-canary.7.tgz#c01c3a3d8e71660c49298dd053d078379b6b5919"
+ integrity sha512-6yRFrg2qWXOqa+1BI53J9EmHWFzKg9U2r+5R7n7BFUp8PH5SC92WBsmYTnh/RkvAYvdupiVzMervwwswCs6kFg==
+
+"@next/swc-linux-x64-musl@15.6.0-canary.7":
+ version "15.6.0-canary.7"
+ resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.6.0-canary.7.tgz#3f4b39faef4a5f88b13e4c726b008ddc9717f819"
+ integrity sha512-O/JjvOvNK/Wao/OIQaA6evDkxkmFFQgJ1/hI1dVk6/PAeKmW2/Q+6Dodh97eAkOwedS1ZdQl2mojf87TzLvzdQ==
+
+"@next/swc-win32-arm64-msvc@15.6.0-canary.7":
+ version "15.6.0-canary.7"
+ resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.6.0-canary.7.tgz#9bc5da0907b7ce67eedda02a6d56a09d9a539ccf"
+ integrity sha512-p9DvrDgnePofZCtiWVY7qZtwXxiOGJlAyy2LoGPYSGOUDhjbTG8j6XMUFXpV9UwpH+l7st522psO1BVzbpT8IQ==
+
+"@next/swc-win32-x64-msvc@15.6.0-canary.7":
+ version "15.6.0-canary.7"
+ resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.6.0-canary.7.tgz#5b271c591ccbe67d5fa966dd22db86c547414fd1"
+ integrity sha512-f1ywT3xWu4StWKA1mZRyGfelu/h+W0OEEyBxQNXzXyYa0VGZb9LyCNb5cYoNKBm0Bw18Hp1PVe0bHuusemGCcw==
"@nodelib/fs.scandir@2.1.5":
version "2.1.5"
@@ -866,6 +866,13 @@
dependencies:
csstype "^3.0.2"
+"@types/react@19.1.13":
+ version "19.1.13"
+ resolved "https://registry.yarnpkg.com/@types/react/-/react-19.1.13.tgz#fc650ffa680d739a25a530f5d7ebe00cdd771883"
+ integrity sha512-hHkbU/eoO3EG5/MZkuFSKmYqPbSVk5byPFa3e7y/8TybHiLMACgI8seVYlicwk7H5K/rI2px9xrQp/C+AUDTiQ==
+ dependencies:
+ csstype "^3.0.2"
+
"@typescript-eslint/eslint-plugin@^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0":
version "8.10.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.10.0.tgz#9c8218ed62f9a322df10ded7c34990f014df44f2"
@@ -3199,25 +3206,25 @@ natural-compare@^1.4.0:
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==
-next@15.5.2:
- version "15.5.2"
- resolved "https://registry.yarnpkg.com/next/-/next-15.5.2.tgz#5e50102443fb0328a9dfcac2d82465c7bac93693"
- integrity sha512-H8Otr7abj1glFhbGnvUt3gz++0AF1+QoCXEBmd/6aKbfdFwrn0LpA836Ed5+00va/7HQSDD+mOoVhn3tNy3e/Q==
+next@15.6.0-canary.7:
+ version "15.6.0-canary.7"
+ resolved "https://registry.yarnpkg.com/next/-/next-15.6.0-canary.7.tgz#bfc2ac3c9a78e23d550c303d18247a263e6b5bc1"
+ integrity sha512-4ukX2mxat9wWT6E0Gw/3TOR9ULV1q399E42F86cwsPSFgTWa04ABhcTqO0r9J/QR1YWPR8WEgh9qUzmWA/1yEw==
dependencies:
- "@next/env" "15.5.2"
+ "@next/env" "15.6.0-canary.7"
"@swc/helpers" "0.5.15"
caniuse-lite "^1.0.30001579"
postcss "8.4.31"
styled-jsx "5.1.6"
optionalDependencies:
- "@next/swc-darwin-arm64" "15.5.2"
- "@next/swc-darwin-x64" "15.5.2"
- "@next/swc-linux-arm64-gnu" "15.5.2"
- "@next/swc-linux-arm64-musl" "15.5.2"
- "@next/swc-linux-x64-gnu" "15.5.2"
- "@next/swc-linux-x64-musl" "15.5.2"
- "@next/swc-win32-arm64-msvc" "15.5.2"
- "@next/swc-win32-x64-msvc" "15.5.2"
+ "@next/swc-darwin-arm64" "15.6.0-canary.7"
+ "@next/swc-darwin-x64" "15.6.0-canary.7"
+ "@next/swc-linux-arm64-gnu" "15.6.0-canary.7"
+ "@next/swc-linux-arm64-musl" "15.6.0-canary.7"
+ "@next/swc-linux-x64-gnu" "15.6.0-canary.7"
+ "@next/swc-linux-x64-musl" "15.6.0-canary.7"
+ "@next/swc-win32-arm64-msvc" "15.6.0-canary.7"
+ "@next/swc-win32-x64-msvc" "15.6.0-canary.7"
sharp "^0.34.3"
node-releases@^2.0.18:
diff --git a/packages/internal-test-utils/ReactInternalTestUtils.js b/packages/internal-test-utils/ReactInternalTestUtils.js
index 317a07262c5ad..ed9b822457a2b 100644
--- a/packages/internal-test-utils/ReactInternalTestUtils.js
+++ b/packages/internal-test-utils/ReactInternalTestUtils.js
@@ -16,6 +16,7 @@ import {
clearErrors,
createLogAssertion,
} from './consoleMock';
+export {getDebugInfo} from './debugInfo';
export {act, serverAct} from './internalAct';
const {assertConsoleLogsCleared} = require('internal-test-utils/consoleMock');
diff --git a/packages/internal-test-utils/debugInfo.js b/packages/internal-test-utils/debugInfo.js
new file mode 100644
index 0000000000000..7b9c730ba6537
--- /dev/null
+++ b/packages/internal-test-utils/debugInfo.js
@@ -0,0 +1,131 @@
+'use strict';
+
+const path = require('path');
+
+const repoRoot = path.resolve(__dirname, '../../');
+
+type DebugInfoConfig = {
+ ignoreProps?: boolean,
+ ignoreRscStreamInfo?: boolean,
+ useFixedTime?: boolean,
+ useV8Stack?: boolean,
+};
+
+function formatV8Stack(stack) {
+ let v8StyleStack = '';
+ if (stack) {
+ for (let i = 0; i < stack.length; i++) {
+ const [name] = stack[i];
+ if (v8StyleStack !== '') {
+ v8StyleStack += '\n';
+ }
+ v8StyleStack += ' in ' + name + ' (at **)';
+ }
+ }
+ return v8StyleStack;
+}
+
+function normalizeStack(stack) {
+ if (!stack) {
+ return stack;
+ }
+ const copy = [];
+ for (let i = 0; i < stack.length; i++) {
+ const [name, file, line, col, enclosingLine, enclosingCol] = stack[i];
+ copy.push([
+ name,
+ file.replace(repoRoot, ''),
+ line,
+ col,
+ enclosingLine,
+ enclosingCol,
+ ]);
+ }
+ return copy;
+}
+
+function normalizeIOInfo(config: DebugInfoConfig, ioInfo) {
+ const {debugTask, debugStack, debugLocation, ...copy} = ioInfo;
+ if (ioInfo.stack) {
+ copy.stack = config.useV8Stack
+ ? formatV8Stack(ioInfo.stack)
+ : normalizeStack(ioInfo.stack);
+ }
+ if (ioInfo.owner) {
+ copy.owner = normalizeDebugInfo(config, ioInfo.owner);
+ }
+ if (typeof ioInfo.start === 'number' && config.useFixedTime) {
+ copy.start = 0;
+ }
+ if (typeof ioInfo.end === 'number' && config.useFixedTime) {
+ copy.end = 0;
+ }
+ const promise = ioInfo.value;
+ if (promise) {
+ promise.then(); // init
+ if (promise.status === 'fulfilled') {
+ if (ioInfo.name === 'RSC stream') {
+ copy.byteSize = 0;
+ copy.value = {
+ value: 'stream',
+ };
+ } else {
+ copy.value = {
+ value: promise.value,
+ };
+ }
+ } else if (promise.status === 'rejected') {
+ copy.value = {
+ reason: promise.reason,
+ };
+ } else {
+ copy.value = {
+ status: promise.status,
+ };
+ }
+ }
+ return copy;
+}
+
+function normalizeDebugInfo(config: DebugInfoConfig, original) {
+ const {debugTask, debugStack, debugLocation, ...debugInfo} = original;
+ if (original.owner) {
+ debugInfo.owner = normalizeDebugInfo(config, original.owner);
+ }
+ if (original.awaited) {
+ debugInfo.awaited = normalizeIOInfo(config, original.awaited);
+ }
+ if (debugInfo.props && config.ignoreProps) {
+ debugInfo.props = {};
+ }
+ if (Array.isArray(debugInfo.stack)) {
+ debugInfo.stack = config.useV8Stack
+ ? formatV8Stack(debugInfo.stack)
+ : normalizeStack(debugInfo.stack);
+ return debugInfo;
+ } else if (typeof debugInfo.time === 'number' && config.useFixedTime) {
+ return {...debugInfo, time: 0};
+ } else {
+ return debugInfo;
+ }
+}
+
+export function getDebugInfo(config: DebugInfoConfig, obj) {
+ const debugInfo = obj._debugInfo;
+ if (debugInfo) {
+ const copy = [];
+ for (let i = 0; i < debugInfo.length; i++) {
+ if (
+ debugInfo[i].awaited &&
+ debugInfo[i].awaited.name === 'RSC stream' &&
+ config.ignoreRscStreamInfo
+ ) {
+ // Ignore RSC stream I/O info.
+ } else {
+ copy.push(normalizeDebugInfo(config, debugInfo[i]));
+ }
+ }
+ return copy;
+ }
+ return debugInfo;
+}
diff --git a/packages/react-client/src/__tests__/ReactFlight-test.js b/packages/react-client/src/__tests__/ReactFlight-test.js
index da1dff04820fc..0baee5a1f5098 100644
--- a/packages/react-client/src/__tests__/ReactFlight-test.js
+++ b/packages/react-client/src/__tests__/ReactFlight-test.js
@@ -33,20 +33,6 @@ function normalizeCodeLocInfo(str) {
);
}
-function formatV8Stack(stack) {
- let v8StyleStack = '';
- if (stack) {
- for (let i = 0; i < stack.length; i++) {
- const [name] = stack[i];
- if (v8StyleStack !== '') {
- v8StyleStack += '\n';
- }
- v8StyleStack += ' in ' + name + ' (at **)';
- }
- }
- return v8StyleStack;
-}
-
const repoRoot = path.resolve(__dirname, '../../../../');
function normalizeReactCodeLocInfo(str) {
const repoRootForRegexp = repoRoot.replace(/\//g, '\\/');
@@ -67,35 +53,6 @@ function getErrorForJestMatcher(error) {
};
}
-function normalizeComponentInfo(debugInfo) {
- if (Array.isArray(debugInfo.stack)) {
- const {debugTask, debugStack, debugLocation, ...copy} = debugInfo;
- copy.stack = formatV8Stack(debugInfo.stack);
- if (debugInfo.owner) {
- copy.owner = normalizeComponentInfo(debugInfo.owner);
- }
- return copy;
- } else {
- return debugInfo;
- }
-}
-
-function getDebugInfo(obj) {
- const debugInfo = obj._debugInfo;
- if (debugInfo) {
- const copy = [];
- for (let i = 0; i < debugInfo.length; i++) {
- if (debugInfo[i].awaited && debugInfo[i].awaited.name === 'RSC stream') {
- // Ignore RSC stream I/O info.
- } else {
- copy.push(normalizeComponentInfo(debugInfo[i]));
- }
- }
- return copy;
- }
- return debugInfo;
-}
-
const finalizationRegistries = [];
function FinalizationRegistryMock(callback) {
this._heldValues = [];
@@ -132,6 +89,7 @@ let NoErrorExpected;
let Scheduler;
let assertLog;
let assertConsoleErrorDev;
+let getDebugInfo;
describe('ReactFlight', () => {
beforeEach(() => {
@@ -169,6 +127,11 @@ describe('ReactFlight', () => {
assertLog = InternalTestUtils.assertLog;
assertConsoleErrorDev = InternalTestUtils.assertConsoleErrorDev;
+ getDebugInfo = InternalTestUtils.getDebugInfo.bind(null, {
+ useV8Stack: true,
+ ignoreRscStreamInfo: true,
+ });
+
ErrorBoundary = class extends React.Component {
state = {hasError: false, error: null};
static getDerivedStateFromError(error) {
diff --git a/packages/react-client/src/__tests__/ReactFlightDebugChannel-test.js b/packages/react-client/src/__tests__/ReactFlightDebugChannel-test.js
index e9428c3ba4074..6d69169261477 100644
--- a/packages/react-client/src/__tests__/ReactFlightDebugChannel-test.js
+++ b/packages/react-client/src/__tests__/ReactFlightDebugChannel-test.js
@@ -18,50 +18,12 @@ if (typeof File === 'undefined' || typeof FormData === 'undefined') {
global.FormData = require('undici').FormData;
}
-function formatV8Stack(stack) {
- let v8StyleStack = '';
- if (stack) {
- for (let i = 0; i < stack.length; i++) {
- const [name] = stack[i];
- if (v8StyleStack !== '') {
- v8StyleStack += '\n';
- }
- v8StyleStack += ' in ' + name + ' (at **)';
- }
- }
- return v8StyleStack;
-}
-
-function normalizeComponentInfo(debugInfo) {
- if (Array.isArray(debugInfo.stack)) {
- const {debugTask, debugStack, ...copy} = debugInfo;
- copy.stack = formatV8Stack(debugInfo.stack);
- if (debugInfo.owner) {
- copy.owner = normalizeComponentInfo(debugInfo.owner);
- }
- return copy;
- } else {
- return debugInfo;
- }
-}
-
-function getDebugInfo(obj) {
- const debugInfo = obj._debugInfo;
- if (debugInfo) {
- const copy = [];
- for (let i = 0; i < debugInfo.length; i++) {
- copy.push(normalizeComponentInfo(debugInfo[i]));
- }
- return copy;
- }
- return debugInfo;
-}
-
let act;
let React;
let ReactNoop;
let ReactNoopFlightServer;
let ReactNoopFlightClient;
+let getDebugInfo;
describe('ReactFlight', () => {
beforeEach(() => {
@@ -91,6 +53,11 @@ describe('ReactFlight', () => {
ReactNoop = require('react-noop-renderer');
ReactNoopFlightClient = require('react-noop-renderer/flight-client');
act = require('internal-test-utils').act;
+
+ getDebugInfo = require('internal-test-utils').getDebugInfo.bind(null, {
+ useV8Stack: true,
+ ignoreRscStreamInfo: true,
+ });
});
afterEach(() => {
diff --git a/packages/react-dom-bindings/src/client/ReactFiberConfigDOM.js b/packages/react-dom-bindings/src/client/ReactFiberConfigDOM.js
index fc80826678e23..8f67e12db1e1f 100644
--- a/packages/react-dom-bindings/src/client/ReactFiberConfigDOM.js
+++ b/packages/react-dom-bindings/src/client/ReactFiberConfigDOM.js
@@ -125,6 +125,7 @@ import {
enableViewTransition,
enableHydrationChangeEvent,
enableFragmentRefsScrollIntoView,
+ enableProfilerTimer,
} from 'shared/ReactFeatureFlags';
import {
HostComponent,
@@ -2098,6 +2099,7 @@ export function startViewTransition(
spawnedWorkCallback: () => void,
passiveCallback: () => mixed,
errorCallback: mixed => void,
+ blockedCallback: string => void, // Profiling-only
): null | RunningViewTransition {
const ownerDocument: Document =
rootContainer.nodeType === DOCUMENT_NODE
@@ -2131,10 +2133,10 @@ export function startViewTransition(
blockingPromises.push(ownerDocument.fonts.ready);
}
}
+ const blockingIndexSnapshot = blockingPromises.length;
if (suspendedState !== null) {
// Suspend on any images that still haven't loaded and are in the viewport.
const suspenseyImages = suspendedState.suspenseyImages;
- const blockingIndexSnapshot = blockingPromises.length;
let imgBytes = 0;
for (let i = 0; i < suspenseyImages.length; i++) {
const suspenseyImage = suspenseyImages[i];
@@ -2162,6 +2164,15 @@ export function startViewTransition(
}
}
if (blockingPromises.length > 0) {
+ if (enableProfilerTimer) {
+ const blockedReason =
+ blockingIndexSnapshot > 0
+ ? blockingPromises.length > blockingIndexSnapshot
+ ? 'Waiting on Fonts and Images'
+ : 'Waiting on Fonts'
+ : 'Waiting on Images';
+ blockedCallback(blockedReason);
+ }
const blockingReady = Promise.race([
Promise.all(blockingPromises),
new Promise(resolve =>
diff --git a/packages/react-native-renderer/src/ReactFiberConfigNative.js b/packages/react-native-renderer/src/ReactFiberConfigNative.js
index c9a5fb591bfd8..8271a62327aea 100644
--- a/packages/react-native-renderer/src/ReactFiberConfigNative.js
+++ b/packages/react-native-renderer/src/ReactFiberConfigNative.js
@@ -673,6 +673,7 @@ export function startViewTransition(
spawnedWorkCallback: () => void,
passiveCallback: () => mixed,
errorCallback: mixed => void,
+ blockedCallback: string => void, // Profiling-only
): null | RunningViewTransition {
mutationCallback();
layoutCallback();
diff --git a/packages/react-reconciler/src/ReactFiberPerformanceTrack.js b/packages/react-reconciler/src/ReactFiberPerformanceTrack.js
index 92ca7e00e2696..67438b7f817e8 100644
--- a/packages/react-reconciler/src/ReactFiberPerformanceTrack.js
+++ b/packages/react-reconciler/src/ReactFiberPerformanceTrack.js
@@ -1254,6 +1254,45 @@ export function logSuspendedCommitPhase(
}
}
+export function logSuspendedViewTransitionPhase(
+ startTime: number,
+ endTime: number,
+ reason: string,
+ debugTask: null | ConsoleTask,
+): void {
+ // This means the commit was suspended on CSS or images.
+ if (supportsUserTiming) {
+ if (endTime <= startTime) {
+ return;
+ }
+ // TODO: Include the exact reason and URLs of what resources suspended.
+ // TODO: This might also be Suspended while waiting on a View Transition.
+ if (__DEV__ && debugTask) {
+ debugTask.run(
+ // $FlowFixMe[method-unbinding]
+ console.timeStamp.bind(
+ console,
+ reason,
+ startTime,
+ endTime,
+ currentTrack,
+ LANES_TRACK_GROUP,
+ 'secondary-light',
+ ),
+ );
+ } else {
+ console.timeStamp(
+ reason,
+ startTime,
+ endTime,
+ currentTrack,
+ LANES_TRACK_GROUP,
+ 'secondary-light',
+ );
+ }
+ }
+}
+
export function logCommitErrored(
startTime: number,
endTime: number,
diff --git a/packages/react-reconciler/src/ReactFiberWorkLoop.js b/packages/react-reconciler/src/ReactFiberWorkLoop.js
index d141c2855f66e..b2b53281b9234 100644
--- a/packages/react-reconciler/src/ReactFiberWorkLoop.js
+++ b/packages/react-reconciler/src/ReactFiberWorkLoop.js
@@ -81,6 +81,7 @@ import {
logSuspendedWithDelayPhase,
logSuspenseThrottlePhase,
logSuspendedCommitPhase,
+ logSuspendedViewTransitionPhase,
logCommitPhase,
logPaintYieldPhase,
logStartViewTransitionYieldPhase,
@@ -704,6 +705,7 @@ let pendingTransitionTypes: null | TransitionTypes = null;
let pendingDidIncludeRenderPhaseUpdate: boolean = false;
let pendingSuspendedCommitReason: SuspendedCommitReason = IMMEDIATE_COMMIT; // Profiling-only
let pendingDelayedCommitReason: DelayedCommitReason = IMMEDIATE_COMMIT; // Profiling-only
+let pendingSuspendedViewTransitionReason: null | string = null; // Profiling-only
// Use these to prevent an infinite loop of nested updates
const NESTED_UPDATE_LIMIT = 50;
@@ -3445,6 +3447,7 @@ function commitRoot(
pendingEffectsRenderEndTime = completedRenderEndTime;
pendingSuspendedCommitReason = suspendedCommitReason;
pendingDelayedCommitReason = IMMEDIATE_COMMIT;
+ pendingSuspendedViewTransitionReason = null;
}
if (enableGestureTransition && isGestureRender(lanes)) {
@@ -3604,6 +3607,7 @@ function commitRoot(
flushSpawnedWork,
flushPassiveEffects,
reportViewTransitionError,
+ enableProfilerTimer ? suspendedViewTransition : (null: any),
);
} else {
// Flush synchronously.
@@ -3624,6 +3628,24 @@ function reportViewTransitionError(error: mixed) {
onRecoverableError(error, makeErrorInfo(null));
}
+function suspendedViewTransition(reason: string): void {
+ if (enableProfilerTimer && enableComponentPerformanceTrack) {
+ // We'll split the commit into two phases, because we're suspended in the middle.
+ recordCommitEndTime();
+ logCommitPhase(
+ pendingSuspendedCommitReason === IMMEDIATE_COMMIT
+ ? pendingEffectsRenderEndTime
+ : commitStartTime,
+ commitEndTime,
+ commitErrors,
+ pendingDelayedCommitReason === ABORTED_VIEW_TRANSITION_COMMIT,
+ workInProgressUpdateTask,
+ );
+ pendingSuspendedViewTransitionReason = reason;
+ pendingSuspendedCommitReason = SUSPENDED_COMMIT;
+ }
+}
+
function flushAfterMutationEffects(): void {
if (pendingEffectsStatus !== PENDING_AFTER_MUTATION_PHASE) {
return;
@@ -3688,6 +3710,21 @@ function flushLayoutEffects(): void {
}
pendingEffectsStatus = NO_PENDING_EFFECTS;
+ if (enableProfilerTimer && enableComponentPerformanceTrack) {
+ const suspendedViewTransitionReason = pendingSuspendedViewTransitionReason;
+ if (suspendedViewTransitionReason !== null) {
+ // We suspended in the middle of the commit for the view transition.
+ // We'll start a new commit track now.
+ recordCommitTime();
+ logSuspendedViewTransitionPhase(
+ commitEndTime, // The start is the end of the first commit part.
+ commitStartTime, // The end is the start of the second commit part.
+ suspendedViewTransitionReason,
+ workInProgressUpdateTask,
+ );
+ }
+ }
+
const root = pendingEffectsRoot;
const finishedWork = pendingFinishedWork;
const lanes = pendingEffectsLanes;
diff --git a/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js b/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js
index ab4a054b019be..b7d7959f21db3 100644
--- a/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js
+++ b/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js
@@ -3,8 +3,6 @@
*/
'use strict';
-const path = require('path');
-
import {patchSetImmediate} from '../../../../scripts/jest/patchSetImmediate';
let React;
@@ -14,106 +12,12 @@ let ReactServerDOMServer;
let ReactServerDOMClient;
let Stream;
let observer;
+let getDebugInfo;
const streamOptions = {
objectMode: true,
};
-const repoRoot = path.resolve(__dirname, '../../../../');
-
-function normalizeStack(stack) {
- if (!stack) {
- return stack;
- }
- const copy = [];
- for (let i = 0; i < stack.length; i++) {
- const [name, file, line, col, enclosingLine, enclosingCol] = stack[i];
- copy.push([
- name,
- file.replace(repoRoot, ''),
- line,
- col,
- enclosingLine,
- enclosingCol,
- ]);
- }
- return copy;
-}
-
-function normalizeIOInfo(ioInfo) {
- const {debugTask, debugStack, debugLocation, ...copy} = ioInfo;
- if (ioInfo.stack) {
- copy.stack = normalizeStack(ioInfo.stack);
- }
- if (ioInfo.owner) {
- copy.owner = normalizeDebugInfo(ioInfo.owner);
- }
- if (typeof ioInfo.start === 'number') {
- copy.start = 0;
- }
- if (typeof ioInfo.end === 'number') {
- copy.end = 0;
- }
- const promise = ioInfo.value;
- if (promise) {
- promise.then(); // init
- if (promise.status === 'fulfilled') {
- if (ioInfo.name === 'RSC stream') {
- copy.byteSize = 0;
- copy.value = {
- value: 'stream',
- };
- } else {
- copy.value = {
- value: promise.value,
- };
- }
- } else if (promise.status === 'rejected') {
- copy.value = {
- reason: promise.reason,
- };
- } else {
- copy.value = {
- status: promise.status,
- };
- }
- }
- return copy;
-}
-
-function normalizeDebugInfo(original) {
- const {debugTask, debugStack, debugLocation, ...debugInfo} = original;
- if (original.owner) {
- debugInfo.owner = normalizeDebugInfo(original.owner);
- }
- if (original.awaited) {
- debugInfo.awaited = normalizeIOInfo(original.awaited);
- }
- if (debugInfo.props) {
- debugInfo.props = {};
- }
- if (Array.isArray(debugInfo.stack)) {
- debugInfo.stack = normalizeStack(debugInfo.stack);
- return debugInfo;
- } else if (typeof debugInfo.time === 'number') {
- return {...debugInfo, time: 0};
- } else {
- return debugInfo;
- }
-}
-
-function getDebugInfo(obj) {
- const debugInfo = obj._debugInfo;
- if (debugInfo) {
- const copy = [];
- for (let i = 0; i < debugInfo.length; i++) {
- copy.push(normalizeDebugInfo(debugInfo[i]));
- }
- return copy;
- }
- return debugInfo;
-}
-
function filterStackFrame(filename, functionName) {
return (
!filename.startsWith('node:') &&
@@ -153,6 +57,11 @@ describe('ReactFlightAsyncDebugInfo', () => {
React = require('react');
ReactServerDOMClient = require('react-server-dom-webpack/client');
Stream = require('stream');
+
+ getDebugInfo = require('internal-test-utils').getDebugInfo.bind(null, {
+ ignoreProps: true,
+ useFixedTime: true,
+ });
});
afterEach(() => {
@@ -247,9 +156,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"Object.
",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 216,
+ 125,
109,
- 196,
+ 105,
50,
],
],
@@ -271,9 +180,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"Object.",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 216,
+ 125,
109,
- 196,
+ 105,
50,
],
],
@@ -282,25 +191,25 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"delay",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 174,
+ 83,
12,
- 173,
+ 82,
3,
],
[
"getData",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 198,
+ 107,
13,
- 197,
+ 106,
5,
],
[
"Component",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 205,
+ 114,
26,
- 204,
+ 113,
5,
],
],
@@ -319,9 +228,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"Object.",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 216,
+ 125,
109,
- 196,
+ 105,
50,
],
],
@@ -330,17 +239,17 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"getData",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 198,
+ 107,
13,
- 197,
+ 106,
5,
],
[
"Component",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 205,
+ 114,
26,
- 204,
+ 113,
5,
],
],
@@ -365,9 +274,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"Object.",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 216,
+ 125,
109,
- 196,
+ 105,
50,
],
],
@@ -376,25 +285,25 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"delay",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 174,
+ 83,
12,
- 173,
+ 82,
3,
],
[
"getData",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 199,
+ 108,
21,
- 197,
+ 106,
5,
],
[
"Component",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 205,
+ 114,
20,
- 204,
+ 113,
5,
],
],
@@ -413,9 +322,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"Object.",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 216,
+ 125,
109,
- 196,
+ 105,
50,
],
],
@@ -424,17 +333,17 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"getData",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 200,
+ 109,
21,
- 197,
+ 106,
5,
],
[
"Component",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 205,
+ 114,
20,
- 204,
+ 113,
5,
],
],
@@ -454,9 +363,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"Component",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 207,
+ 116,
60,
- 204,
+ 113,
5,
],
],
@@ -478,9 +387,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"Object.",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 216,
+ 125,
109,
- 196,
+ 105,
50,
],
],
@@ -489,17 +398,17 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"delay",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 174,
+ 83,
12,
- 173,
+ 82,
3,
],
[
"getData",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 199,
+ 108,
21,
- 197,
+ 106,
5,
],
],
@@ -518,9 +427,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"Component",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 207,
+ 116,
60,
- 204,
+ 113,
5,
],
],
@@ -529,9 +438,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"InnerComponent",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 213,
+ 122,
35,
- 210,
+ 119,
5,
],
],
@@ -712,9 +621,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"Object.",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 676,
+ 585,
40,
- 657,
+ 566,
49,
],
[
@@ -744,9 +653,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"Object.",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 676,
+ 585,
40,
- 657,
+ 566,
49,
],
[
@@ -763,25 +672,25 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"delay",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 174,
+ 83,
12,
- 173,
+ 82,
3,
],
[
"getData",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 659,
+ 568,
13,
- 658,
+ 567,
5,
],
[
"Component",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 664,
+ 573,
36,
- 663,
+ 572,
5,
],
],
@@ -800,9 +709,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"Object.",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 676,
+ 585,
40,
- 657,
+ 566,
49,
],
[
@@ -819,17 +728,17 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"getData",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 659,
+ 568,
13,
- 658,
+ 567,
5,
],
[
"Component",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 664,
+ 573,
36,
- 663,
+ 572,
5,
],
],
@@ -849,9 +758,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"Component",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 666,
+ 575,
60,
- 663,
+ 572,
5,
],
],
@@ -870,9 +779,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"Object.",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 676,
+ 585,
40,
- 657,
+ 566,
49,
],
[
@@ -889,25 +798,25 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"delay",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 174,
+ 83,
12,
- 173,
+ 82,
3,
],
[
"getData",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 659,
+ 568,
13,
- 658,
+ 567,
5,
],
[
"Component",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 665,
+ 574,
22,
- 663,
+ 572,
5,
],
],
@@ -926,9 +835,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"Component",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 666,
+ 575,
60,
- 663,
+ 572,
5,
],
],
@@ -937,9 +846,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"InnerComponent",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 672,
+ 581,
40,
- 669,
+ 578,
5,
],
],
@@ -1014,9 +923,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"Object.",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 983,
+ 892,
109,
- 970,
+ 879,
80,
],
],
@@ -1035,9 +944,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"Object.",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 983,
+ 892,
109,
- 970,
+ 879,
80,
],
],
@@ -1054,9 +963,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"Object.",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 983,
+ 892,
109,
- 970,
+ 879,
80,
],
],
@@ -1128,9 +1037,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"Object.",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 1097,
+ 1006,
109,
- 1088,
+ 997,
94,
],
],
@@ -1213,9 +1122,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"Object.",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 1182,
+ 1091,
109,
- 1158,
+ 1067,
50,
],
],
@@ -1309,9 +1218,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"Object.",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 1278,
+ 1187,
109,
- 1261,
+ 1170,
63,
],
],
@@ -1328,17 +1237,17 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"fetchThirdParty",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 181,
+ 90,
40,
- 179,
+ 88,
3,
],
[
"Component",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 1274,
+ 1183,
24,
- 1273,
+ 1182,
5,
],
],
@@ -1360,17 +1269,17 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"fetchThirdParty",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 181,
+ 90,
40,
- 179,
+ 88,
3,
],
[
"Component",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 1274,
+ 1183,
24,
- 1273,
+ 1182,
5,
],
],
@@ -1379,25 +1288,25 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"delay",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 174,
+ 83,
12,
- 173,
+ 82,
3,
],
[
"getData",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 1263,
+ 1172,
13,
- 1262,
+ 1171,
5,
],
[
"ThirdPartyComponent",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 1269,
+ 1178,
24,
- 1268,
+ 1177,
5,
],
],
@@ -1416,17 +1325,17 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"fetchThirdParty",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 181,
+ 90,
40,
- 179,
+ 88,
3,
],
[
"Component",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 1274,
+ 1183,
24,
- 1273,
+ 1182,
5,
],
],
@@ -1435,17 +1344,17 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"getData",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 1263,
+ 1172,
13,
- 1262,
+ 1171,
5,
],
[
"ThirdPartyComponent",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 1269,
+ 1178,
24,
- 1268,
+ 1177,
5,
],
],
@@ -1470,17 +1379,17 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"fetchThirdParty",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 181,
+ 90,
40,
- 179,
+ 88,
3,
],
[
"Component",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 1274,
+ 1183,
24,
- 1273,
+ 1182,
5,
],
],
@@ -1489,25 +1398,25 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"delay",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 174,
+ 83,
12,
- 173,
+ 82,
3,
],
[
"getData",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 1264,
+ 1173,
13,
- 1262,
+ 1171,
5,
],
[
"ThirdPartyComponent",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 1269,
+ 1178,
18,
- 1268,
+ 1177,
5,
],
],
@@ -1526,17 +1435,17 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"fetchThirdParty",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 181,
+ 90,
40,
- 179,
+ 88,
3,
],
[
"Component",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 1274,
+ 1183,
24,
- 1273,
+ 1182,
5,
],
],
@@ -1545,17 +1454,17 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"getData",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 1264,
+ 1173,
13,
- 1262,
+ 1171,
5,
],
[
"ThirdPartyComponent",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 1269,
+ 1178,
18,
- 1268,
+ 1177,
5,
],
],
@@ -1653,9 +1562,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"Object.",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 1617,
+ 1526,
40,
- 1600,
+ 1509,
62,
],
[
@@ -1685,9 +1594,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"Object.",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 1617,
+ 1526,
40,
- 1600,
+ 1509,
62,
],
[
@@ -1704,25 +1613,25 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"delay",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 174,
+ 83,
12,
- 173,
+ 82,
3,
],
[
"getData",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 1602,
+ 1511,
13,
- 1601,
+ 1510,
25,
],
[
"Component",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 1612,
+ 1521,
13,
- 1611,
+ 1520,
5,
],
],
@@ -1741,9 +1650,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"Object.",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 1617,
+ 1526,
40,
- 1600,
+ 1509,
62,
],
[
@@ -1760,17 +1669,17 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"getData",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 1602,
+ 1511,
13,
- 1601,
+ 1510,
25,
],
[
"Component",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 1612,
+ 1521,
13,
- 1611,
+ 1520,
5,
],
],
@@ -1790,9 +1699,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"Component",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 1613,
+ 1522,
60,
- 1611,
+ 1520,
5,
],
],
@@ -1814,9 +1723,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"Object.",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 1617,
+ 1526,
40,
- 1600,
+ 1509,
62,
],
[
@@ -1833,25 +1742,25 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"delay",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 174,
+ 83,
12,
- 173,
+ 82,
3,
],
[
"getData",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 1602,
+ 1511,
13,
- 1601,
+ 1510,
25,
],
[
"Component",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 1612,
+ 1521,
13,
- 1611,
+ 1520,
5,
],
],
@@ -1870,9 +1779,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"Component",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 1613,
+ 1522,
60,
- 1611,
+ 1520,
5,
],
],
@@ -1881,9 +1790,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"Child",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 1607,
+ 1516,
28,
- 1606,
+ 1515,
5,
],
],
@@ -1966,9 +1875,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"Object.",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 1930,
+ 1839,
40,
- 1914,
+ 1823,
57,
],
[
@@ -1998,9 +1907,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"Object.",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 1930,
+ 1839,
40,
- 1914,
+ 1823,
57,
],
[
@@ -2017,25 +1926,25 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"delay",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 174,
+ 83,
12,
- 173,
+ 82,
3,
],
[
"getData",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 1916,
+ 1825,
13,
- 1915,
+ 1824,
25,
],
[
"Component",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 1925,
+ 1834,
23,
- 1924,
+ 1833,
5,
],
],
@@ -2054,9 +1963,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"Object.",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 1930,
+ 1839,
40,
- 1914,
+ 1823,
57,
],
[
@@ -2073,17 +1982,17 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"getData",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 1916,
+ 1825,
13,
- 1915,
+ 1824,
25,
],
[
"Component",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 1925,
+ 1834,
23,
- 1924,
+ 1833,
5,
],
],
@@ -2103,9 +2012,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"Component",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 1926,
+ 1835,
60,
- 1924,
+ 1833,
5,
],
],
@@ -2124,9 +2033,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"Object.",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 1930,
+ 1839,
40,
- 1914,
+ 1823,
57,
],
[
@@ -2143,25 +2052,25 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"delay",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 174,
+ 83,
12,
- 173,
+ 82,
3,
],
[
"getData",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 1916,
+ 1825,
13,
- 1915,
+ 1824,
25,
],
[
"Component",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 1925,
+ 1834,
23,
- 1924,
+ 1833,
5,
],
],
@@ -2175,9 +2084,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"Component",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 1926,
+ 1835,
60,
- 1924,
+ 1833,
5,
],
],
@@ -2262,9 +2171,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"Object.",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 2226,
+ 2135,
40,
- 2208,
+ 2117,
80,
],
[
@@ -2294,9 +2203,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"Object.",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 2226,
+ 2135,
40,
- 2208,
+ 2117,
80,
],
[
@@ -2313,25 +2222,25 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"delay",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 174,
+ 83,
12,
- 173,
+ 82,
3,
],
[
"delayTrice",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 2216,
+ 2125,
13,
- 2214,
+ 2123,
5,
],
[
"Bar",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 2221,
+ 2130,
13,
- 2220,
+ 2129,
5,
],
],
@@ -2350,9 +2259,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"Object.",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 2226,
+ 2135,
40,
- 2208,
+ 2117,
80,
],
[
@@ -2369,17 +2278,17 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"delayTrice",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 2216,
+ 2125,
13,
- 2214,
+ 2123,
5,
],
[
"Bar",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 2221,
+ 2130,
13,
- 2220,
+ 2129,
5,
],
],
@@ -2401,9 +2310,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"Object.",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 2226,
+ 2135,
40,
- 2208,
+ 2117,
80,
],
[
@@ -2420,33 +2329,33 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"delay",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 174,
+ 83,
12,
- 173,
+ 82,
3,
],
[
"delayTwice",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 2210,
+ 2119,
13,
- 2209,
+ 2118,
5,
],
[
"delayTrice",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 2215,
+ 2124,
15,
- 2214,
+ 2123,
5,
],
[
"Bar",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 2221,
+ 2130,
13,
- 2220,
+ 2129,
5,
],
],
@@ -2465,9 +2374,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"Object.",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 2226,
+ 2135,
40,
- 2208,
+ 2117,
80,
],
[
@@ -2484,25 +2393,25 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"delayTwice",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 2210,
+ 2119,
13,
- 2209,
+ 2118,
5,
],
[
"delayTrice",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 2215,
+ 2124,
15,
- 2214,
+ 2123,
5,
],
[
"Bar",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 2221,
+ 2130,
13,
- 2220,
+ 2129,
5,
],
],
@@ -2524,9 +2433,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"Object.",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 2226,
+ 2135,
40,
- 2208,
+ 2117,
80,
],
[
@@ -2543,17 +2452,17 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"delay",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 174,
+ 83,
12,
- 173,
+ 82,
3,
],
[
"delayTwice",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 2211,
+ 2120,
13,
- 2209,
+ 2118,
5,
],
],
@@ -2572,9 +2481,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"Object.",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 2226,
+ 2135,
40,
- 2208,
+ 2117,
80,
],
[
@@ -2591,9 +2500,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"delayTwice",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 2211,
+ 2120,
13,
- 2209,
+ 2118,
5,
],
],
@@ -2666,9 +2575,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"Object.",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 2635,
+ 2544,
109,
- 2624,
+ 2533,
58,
],
],
@@ -2690,9 +2599,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"Object.",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 2635,
+ 2544,
109,
- 2624,
+ 2533,
58,
],
],
@@ -2701,25 +2610,25 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"delay",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 174,
+ 83,
12,
- 173,
+ 82,
3,
],
[
"getData",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 2626,
+ 2535,
14,
- 2625,
+ 2534,
5,
],
[
"Component",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 2632,
+ 2541,
20,
- 2631,
+ 2540,
5,
],
],
@@ -2738,9 +2647,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"Object.",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 2635,
+ 2544,
109,
- 2624,
+ 2533,
58,
],
],
@@ -2749,17 +2658,17 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"getData",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 2626,
+ 2535,
23,
- 2625,
+ 2534,
5,
],
[
"Component",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 2632,
+ 2541,
20,
- 2631,
+ 2540,
5,
],
],
@@ -2838,9 +2747,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"Object.",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 2802,
+ 2711,
40,
- 2790,
+ 2699,
56,
],
[
@@ -2870,9 +2779,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"Object.",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 2802,
+ 2711,
40,
- 2790,
+ 2699,
56,
],
[
@@ -2889,17 +2798,17 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"delay",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 174,
+ 83,
12,
- 173,
+ 82,
3,
],
[
"Component",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 2798,
+ 2707,
20,
- 2797,
+ 2706,
5,
],
],
@@ -2918,9 +2827,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"Object.",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 2802,
+ 2711,
40,
- 2790,
+ 2699,
56,
],
[
@@ -2937,9 +2846,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"Component",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 2798,
+ 2707,
20,
- 2797,
+ 2706,
5,
],
],
@@ -3032,9 +2941,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"Object.",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 2991,
+ 2900,
40,
- 2970,
+ 2879,
42,
],
[
@@ -3064,9 +2973,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"Object.",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 2991,
+ 2900,
40,
- 2970,
+ 2879,
42,
],
[
@@ -3083,17 +2992,17 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 2977,
+ 2886,
15,
- 2976,
+ 2885,
15,
],
[
"Component",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 2986,
+ 2895,
19,
- 2985,
+ 2894,
5,
],
],
@@ -3112,9 +3021,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"Object.",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 2991,
+ 2900,
40,
- 2970,
+ 2879,
42,
],
[
@@ -3131,17 +3040,17 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 2977,
+ 2886,
15,
- 2976,
+ 2885,
15,
],
[
"Component",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 2986,
+ 2895,
19,
- 2985,
+ 2894,
5,
],
],
@@ -3163,9 +3072,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"Object.",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 2991,
+ 2900,
40,
- 2970,
+ 2879,
42,
],
[
@@ -3182,9 +3091,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"Component",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 2986,
+ 2895,
25,
- 2985,
+ 2894,
5,
],
],
@@ -3203,9 +3112,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"Object.",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 2991,
+ 2900,
40,
- 2970,
+ 2879,
42,
],
[
@@ -3222,9 +3131,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
[
"Component",
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
- 2986,
+ 2895,
25,
- 2985,
+ 2894,
5,
],
],
diff --git a/packages/react-test-renderer/src/ReactFiberConfigTestHost.js b/packages/react-test-renderer/src/ReactFiberConfigTestHost.js
index 86621f68480b8..7b1477fa25602 100644
--- a/packages/react-test-renderer/src/ReactFiberConfigTestHost.js
+++ b/packages/react-test-renderer/src/ReactFiberConfigTestHost.js
@@ -423,6 +423,7 @@ export function startViewTransition(
spawnedWorkCallback: () => void,
passiveCallback: () => mixed,
errorCallback: mixed => void,
+ blockedCallback: string => void, // Profiling-only
): null | RunningViewTransition {
mutationCallback();
layoutCallback();