mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
789fc57254
Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/53071 Changelog: [internal] The current API to take JS heap snapshots has some problems: 1. Ergonomics: it requires you to input the filepath where you want to store the snapshot. This isn't aligned with the behavior we have for JS traces where the output path is provided to you. 2. It doesn't work in optimized builds, as it requires a specific option in Hermes. For 1), this replaces `Fantom.saveJSMemoryHeapSnapshot(filePath)` with `Fantom.takeJSMemoryHeapSnapshot()` that outputs the snapshot in a predefined path and prints it to the console. For 2), this adds a new environment variable to force building Hermes with memory instrumentation (`FANTOM_ENABLE_JS_MEMORY_INSTRUMENTATION`). This is exposed as an option and not set by default because it has a performance overhead at runtime that we don't want to pay (especially in benchmarks). This option only works when using Buck in development, because we want to generate this new binary type on demand when necessary, instead of making it part of the prebuilts we do before running tests in OSS and CI. Reviewed By: lenaic Differential Revision: D79642314 fbshipit-source-id: a2980616a495bd6dca29c0709a9581db6fb3f2cc
96 lines
2.4 KiB
JavaScript
96 lines
2.4 KiB
JavaScript
/**
|
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*
|
|
* @flow strict-local
|
|
* @format
|
|
*/
|
|
|
|
import type {FantomTestConfig} from './getFantomTestConfigs';
|
|
|
|
import formatFantomConfig from './formatFantomConfig';
|
|
import path from 'path';
|
|
|
|
export const OUTPUT_PATH: string = path.resolve(__dirname, '..', '.out');
|
|
export const JS_BUILD_OUTPUT_PATH: string = path.join(OUTPUT_PATH, 'js-builds');
|
|
export const NATIVE_BUILD_OUTPUT_PATH: string = path.join(
|
|
OUTPUT_PATH,
|
|
'native-builds',
|
|
);
|
|
export const JS_TRACES_OUTPUT_PATH: string = path.join(
|
|
OUTPUT_PATH,
|
|
'js-traces',
|
|
);
|
|
export const JS_HEAP_SNAPSHOTS_OUTPUT_PATH: string = path.join(
|
|
OUTPUT_PATH,
|
|
'js-heap-snapshots',
|
|
);
|
|
|
|
export function getTestBuildOutputPath(): string {
|
|
const fantomRunID = process.env.__FANTOM_RUN_ID__;
|
|
if (fantomRunID == null) {
|
|
throw new Error(
|
|
'Expected Fantom run ID to be set by global setup, but it was not (process.env.__FANTOM_RUN_ID__ is null)',
|
|
);
|
|
}
|
|
|
|
return path.join(JS_BUILD_OUTPUT_PATH, fantomRunID);
|
|
}
|
|
|
|
export function buildJSTracesOutputPath({
|
|
testPath,
|
|
testConfig,
|
|
isMultiConfigTest,
|
|
}: {
|
|
testPath: string,
|
|
testConfig: FantomTestConfig,
|
|
isMultiConfigTest: boolean,
|
|
}): string {
|
|
const fileNameParts = [path.basename(testPath)];
|
|
|
|
if (isMultiConfigTest) {
|
|
const configSummary = formatFantomConfig(testConfig, {style: 'short'});
|
|
if (configSummary !== '') {
|
|
fileNameParts.push(configSummary);
|
|
}
|
|
}
|
|
|
|
fileNameParts.push(new Date().toISOString());
|
|
|
|
const fileName = fileNameParts.join('-') + '.cpuprofile';
|
|
|
|
return path.join(JS_TRACES_OUTPUT_PATH, fileName);
|
|
}
|
|
|
|
const JS_HEAP_SNAPSHOT_OUTPUT_PATH_TOKEN = '${timestamp}';
|
|
|
|
export function buildJSHeapSnapshotsOutputPathTemplate({
|
|
testPath,
|
|
testConfig,
|
|
isMultiConfigTest,
|
|
}: {
|
|
testPath: string,
|
|
testConfig: FantomTestConfig,
|
|
isMultiConfigTest: boolean,
|
|
}): [string, string] {
|
|
const fileNameParts = [path.basename(testPath)];
|
|
|
|
if (isMultiConfigTest) {
|
|
const configSummary = formatFantomConfig(testConfig, {style: 'short'});
|
|
if (configSummary !== '') {
|
|
fileNameParts.push(configSummary);
|
|
}
|
|
}
|
|
|
|
fileNameParts.push(JS_HEAP_SNAPSHOT_OUTPUT_PATH_TOKEN);
|
|
|
|
const fileName = fileNameParts.join('-') + '.heapsnapshot';
|
|
|
|
return [
|
|
path.join(JS_HEAP_SNAPSHOTS_OUTPUT_PATH, fileName),
|
|
JS_HEAP_SNAPSHOT_OUTPUT_PATH_TOKEN,
|
|
];
|
|
}
|