diff --git a/packages/react-native/Libraries/LogBox/Data/LogBoxData.js b/packages/react-native/Libraries/LogBox/Data/LogBoxData.js index 37fb35b9f5d3..3ba76ae2cdfe 100644 --- a/packages/react-native/Libraries/LogBox/Data/LogBoxData.js +++ b/packages/react-native/Libraries/LogBox/Data/LogBoxData.js @@ -20,7 +20,6 @@ import type { import DebuggerSessionObserver from '../../../src/private/devsupport/rndevtools/FuseboxSessionObserver'; import parseErrorStack from '../../Core/Devtools/parseErrorStack'; -import NativeDevSettings from '../../NativeModules/specs/NativeDevSettings'; import NativeLogBox from '../../NativeModules/specs/NativeLogBox'; import LogBoxLog from './LogBoxLog'; import {parseLogBoxException} from './parseLogBoxLog'; @@ -493,6 +492,10 @@ function showFuseboxWarningsMigrationMessageOnce() { return; } hasShownFuseboxWarningsMigrationMessage = true; + + const NativeDevSettings = + require('../../NativeModules/specs/NativeDevSettings').default; + appendNewLog( new LogBoxLog({ level: 'warn', diff --git a/packages/react-native/src/private/webapis/performance/__tests__/Performance-benchmark-itest.js b/packages/react-native/src/private/webapis/performance/__tests__/Performance-benchmark-itest.js index 2076f696cf06..b35b952b40e8 100644 --- a/packages/react-native/src/private/webapis/performance/__tests__/Performance-benchmark-itest.js +++ b/packages/react-native/src/private/webapis/performance/__tests__/Performance-benchmark-itest.js @@ -135,4 +135,7 @@ Fantom.unstable_benchmark }, afterEach: clearMarksAndMeasures, }, - ); + ) + .test('console.timeStamp', () => { + console.timeStamp('label'); + }); diff --git a/private/react-native-fantom/runner/formatFantomConfig.js b/private/react-native-fantom/runner/formatFantomConfig.js index 642a8f647db3..702a49db475f 100644 --- a/private/react-native-fantom/runner/formatFantomConfig.js +++ b/private/react-native-fantom/runner/formatFantomConfig.js @@ -14,6 +14,7 @@ import type {HermesVariant} from '../runner/utils'; import { FantomTestConfigHermesVariant, + FantomTestConfigJsMode, FantomTestConfigMode, } from '../runner/getFantomTestConfigs'; import {getOverrides} from './getFantomTestConfigs'; @@ -29,6 +30,15 @@ function formatFantomMode(mode: FantomTestConfigMode): string { } } +function formatFantomJsMode(mode: FantomTestConfigJsMode): string { + switch (mode) { + case FantomTestConfigJsMode.Development: + return 'jsMode 🐛'; + case FantomTestConfigJsMode.Optimized: + return 'jsMode 🚀'; + } +} + function formatFantomHermesVariant(hermesVariant: HermesVariant): string { switch (hermesVariant) { case FantomTestConfigHermesVariant.Hermes: @@ -61,6 +71,16 @@ export default function formatFantomConfig(config: FantomTestConfig): string { parts.push(formatFantomMode(overrides.mode)); } + // Show if the jsMode is different from the mode + if ( + (config.jsMode === FantomTestConfigJsMode.Optimized && + config.mode !== FantomTestConfigMode.Optimized) || + (config.jsMode === FantomTestConfigJsMode.Development && + config.mode === FantomTestConfigMode.Optimized) + ) { + parts.push(formatFantomJsMode(config.jsMode)); + } + if (overrides.hermesVariant) { parts.push(formatFantomHermesVariant(overrides.hermesVariant)); } diff --git a/private/react-native-fantom/runner/getFantomTestConfigs.js b/private/react-native-fantom/runner/getFantomTestConfigs.js index 2b9ba1e3028e..1db14343ed96 100644 --- a/private/react-native-fantom/runner/getFantomTestConfigs.js +++ b/private/react-native-fantom/runner/getFantomTestConfigs.js @@ -26,6 +26,11 @@ export enum FantomTestConfigMode { Optimized, } +export enum FantomTestConfigJsMode { + Development, + Optimized, +} + export type FantomTestConfigCommonFeatureFlags = Partial<{ [key in keyof CommonFeatureFlags]: CommonFeatureFlags[key]['defaultValue'], }>; @@ -46,12 +51,14 @@ export type FantomTestConfigFeatureFlags = { export type FantomTestConfig = { mode: FantomTestConfigMode, + jsMode: FantomTestConfigJsMode, hermesVariant: HermesVariant, flags: FantomTestConfigFeatureFlags, }; export type PartialFantomTestConfig = { mode?: FantomTestConfigMode, + jsMode?: FantomTestConfigJsMode, hermesVariant?: HermesVariant, flags?: Partial, }; @@ -61,6 +68,9 @@ export const FantomTestConfigHermesVariant = HermesVariant; export const DEFAULT_MODE: FantomTestConfigMode = FantomTestConfigMode.DevelopmentWithSource; +export const DEFAULT_JS_MODE: FantomTestConfigJsMode = + FantomTestConfigJsMode.Development; + export const DEFAULT_HERMES_VARIANT: HermesVariant = HermesVariant.Hermes; export const DEFAULT_FEATURE_FLAGS: FantomTestConfigFeatureFlags = { @@ -84,6 +94,7 @@ const MAX_FANTOM_CONFIGURATION_VARIATIONS = 12; const VALID_FANTOM_PRAGMAS = [ 'fantom_mode', + 'fantom_js_mode', 'fantom_flags', 'fantom_hermes_variant', 'fantom_react_fb_flags', @@ -131,6 +142,7 @@ export function getOverrides( * /** * * @flow strict-local * * @fantom_mode opt + * * @fantom_js_mode dev * * @fantom_hermes_variant static_hermes_stable * * @fantom_flags commonTestFlag:true * * @fantom_flags jsOnlyTestFlag:true @@ -163,6 +175,7 @@ export default function getFantomTestConfigs( const config: FantomTestConfig = { mode: DEFAULT_MODE, + jsMode: DEFAULT_JS_MODE, hermesVariant: DEFAULT_HERMES_VARIANT, flags: { common: { @@ -217,6 +230,39 @@ export default function getFantomTestConfigs( } } + const maybeJsMode = pragmas.fantom_js_mode; + + if (maybeJsMode != null) { + if (Array.isArray(maybeJsMode)) { + throw new Error('Expected a single value for @fantom_js_mode'); + } + + const jsMode = maybeJsMode; + + switch (jsMode) { + case 'dev': + config.jsMode = FantomTestConfigJsMode.Development; + break; + case 'opt': + config.jsMode = FantomTestConfigJsMode.Optimized; + break; + case '*': + configVariations.push([ + {jsMode: FantomTestConfigJsMode.Development}, + {jsMode: FantomTestConfigJsMode.Optimized}, + ]); + break; + default: + throw new Error(`Invalid Fantom jsMode: ${jsMode}`); + } + } else { + // If not set, match the native mode + config.jsMode = + config.mode === FantomTestConfigMode.Optimized + ? FantomTestConfigJsMode.Optimized + : FantomTestConfigJsMode.Development; + } + const maybeHermesVariant = pragmas.fantom_hermes_variant; if (maybeHermesVariant != null) { @@ -378,6 +424,7 @@ function getConfigurationVariations( for (const currentConfigVariation of currentConfigVariations) { const currentConfigWithVariation = { mode: currentConfigVariation.mode ?? config.mode, + jsMode: currentConfigVariation.jsMode ?? config.jsMode, hermesVariant: currentConfigVariation.hermesVariant ?? config.hermesVariant, flags: { diff --git a/private/react-native-fantom/runner/runner.js b/private/react-native-fantom/runner/runner.js index 453beb282023..edb4f202b295 100644 --- a/private/react-native-fantom/runner/runner.js +++ b/private/react-native-fantom/runner/runner.js @@ -24,7 +24,10 @@ import entrypointTemplate from './entrypoint-template'; import * as EnvironmentOptions from './EnvironmentOptions'; import formatFantomConfig from './formatFantomConfig'; import getFantomTestConfigs from './getFantomTestConfigs'; -import {FantomTestConfigMode} from './getFantomTestConfigs'; +import { + FantomTestConfigJsMode, + FantomTestConfigMode, +} from './getFantomTestConfigs'; import { getInitialSnapshotData, updateSnapshotsAndGetJestSnapshotResult, @@ -317,12 +320,14 @@ module.exports = async function runTest( path.basename(testJSBundlePath, '.js') + '.map', ); + const devMode = testConfig.jsMode !== FantomTestConfigJsMode.Optimized; + await Metro.runBuild(metroConfig, { entry: entrypointPath, out: testJSBundlePath, platform: 'android', - minify: testConfig.mode === FantomTestConfigMode.Optimized, - dev: testConfig.mode !== FantomTestConfigMode.Optimized, + minify: !devMode, + dev: devMode, sourceMap: true, sourceMapUrl: sourceMapPath, });