Implement warmup for optimized mode (#48150)

Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/48150

Changelog: [internal]

We're starting to have some Fantom tests that run in optimized mode, but we're not currently prewarming for that case. This adds that capability to do proper attribution of run time for tests.

Reviewed By: javache

Differential Revision: D66877991

fbshipit-source-id: dccb80cd6a4f664de7df0661456bad78d960826d
This commit is contained in:
Rubén Norte
2024-12-09 05:43:27 -08:00
committed by Facebook GitHub Bot
parent 47589f53b1
commit 82abba9936
+36 -13
View File
@@ -20,26 +20,49 @@ import Metro from 'metro';
import os from 'os';
import path from 'path';
export default async function warmUp(
globalConfig: {...},
projectConfig: {...},
async function tryOrLog(
fn: () => void | Promise<void>,
message: string,
): Promise<void> {
try {
warmUpHermesCompiler();
warmUpRNTesterCLI();
await warmUpMetro();
await fn();
} catch (e) {
// Sandcastle fails to parse the test output if we log stuff to stdout/stderr.
if ((process.env.SANDCASTLE ?? '') !== '') {
console.error(
'Global warmup failed. Tests will continue to run but will likely fail. Details:\n',
message,
e,
);
}
}
}
async function warmUpMetro(): Promise<void> {
export default async function warmUp(
globalConfig: {...},
projectConfig: {...},
): Promise<void> {
await tryOrLog(
() => warmUpHermesCompiler(false),
'Error warming up Hermes compiler (dev)',
);
await tryOrLog(
() => warmUpHermesCompiler(true),
'Error warming up Hermes compiler (opt)',
);
await tryOrLog(
() => warmUpRNTesterCLI(false),
'Error warming up RN Tester CLI (dev)',
);
await tryOrLog(
() => warmUpRNTesterCLI(true),
'Error warming up RN Tester CLI (opt)',
);
await tryOrLog(() => warmUpMetro(false), 'Error warming up Metro (dev)');
await tryOrLog(() => warmUpMetro(true), 'Error warming up Metro (opt)');
}
async function warmUpMetro(isOptimizedMode: boolean): Promise<void> {
const metroConfig = await Metro.loadConfig({
config: path.resolve(__dirname, '..', '..', 'config', 'metro.config.js'),
});
@@ -61,8 +84,8 @@ async function warmUpMetro(): Promise<void> {
entry: entrypointPath,
out: bundlePath,
platform: 'android',
minify: false,
dev: true,
minify: isOptimizedMode,
dev: !isOptimizedMode,
});
try {
@@ -70,10 +93,10 @@ async function warmUpMetro(): Promise<void> {
} catch {}
}
function warmUpHermesCompiler(): void {
function warmUpHermesCompiler(isOptimizedMode: boolean): void {
const buildHermesCompilerCommandResult = runBuck2([
'build',
getBuckModeForPlatform(),
getBuckModeForPlatform(isOptimizedMode),
'//xplat/hermes/tools/hermesc:hermesc',
]);
@@ -84,10 +107,10 @@ function warmUpHermesCompiler(): void {
}
}
function warmUpRNTesterCLI(): void {
function warmUpRNTesterCLI(isOptimizedMode: boolean): void {
const buildRNTesterCommandResult = runBuck2([
'build',
getBuckModeForPlatform(),
getBuckModeForPlatform(isOptimizedMode),
'//xplat/ReactNative/react-native-cxx/samples/tester:tester',
]);