mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Refactor performance memory API implementation
Summary: This diff refactors performance memory API and the RN Tester example. - The returned value from C++ is number, so no need to cast - Reuse `MemoryInfo` in RNTester example Changelog: [General][Internal] - Code refactor for performance memory API implementation Reviewed By: rubennorte Differential Revision: D43523878 fbshipit-source-id: 37d1f6a829a8eac45f7e3791ad36be0c199c6041
This commit is contained in:
committed by
Facebook GitHub Bot
parent
96659f8e83
commit
f4e56fdf19
@@ -31,14 +31,23 @@ export default class MemoryInfo {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The maximum size of the heap, in bytes, that is available to the context
|
||||
*/
|
||||
get jsHeapSizeLimit(): ?number {
|
||||
return this._jsHeapSizeLimit;
|
||||
}
|
||||
|
||||
/**
|
||||
* The total allocated heap size, in bytes
|
||||
*/
|
||||
get totalJSHeapSize(): ?number {
|
||||
return this._totalJSHeapSize;
|
||||
}
|
||||
|
||||
/**
|
||||
* The currently active segment of JS heap, in bytes.
|
||||
*/
|
||||
get usedJSHeapSize(): ?number {
|
||||
return this._usedJSHeapSize;
|
||||
}
|
||||
|
||||
@@ -110,14 +110,15 @@ export default class Performance {
|
||||
const memoryInfo = NativePerformance.getSimpleMemoryInfo();
|
||||
if (memoryInfo.hasOwnProperty('hermes_heapSize')) {
|
||||
// We got memory information from Hermes
|
||||
const {hermes_heapSize, hermes_allocatedBytes} = memoryInfo;
|
||||
const totalJSHeapSize = Number(hermes_heapSize);
|
||||
const usedJSHeapSize = Number(hermes_allocatedBytes);
|
||||
const {
|
||||
hermes_heapSize: totalJSHeapSize,
|
||||
hermes_allocatedBytes: usedJSHeapSize,
|
||||
} = memoryInfo;
|
||||
|
||||
return new MemoryInfo({
|
||||
jsHeapSizeLimit: null, // We don't know the heap size limit from Hermes.
|
||||
totalJSHeapSize: isNaN(totalJSHeapSize) ? null : totalJSHeapSize,
|
||||
usedJSHeapSize: isNaN(usedJSHeapSize) ? null : usedJSHeapSize,
|
||||
totalJSHeapSize,
|
||||
usedJSHeapSize,
|
||||
});
|
||||
} else {
|
||||
// JSC and V8 has no native implementations for memory information in JSI::Instrumentation
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
import type MemoryInfo from '../../../../../Libraries/WebPerformance/MemoryInfo';
|
||||
import type ReactNativeStartupTiming from '../../../../../Libraries/WebPerformance/ReactNativeStartupTiming';
|
||||
|
||||
import * as React from 'react';
|
||||
@@ -22,11 +23,7 @@ const performance = new Performance();
|
||||
|
||||
function MemoryExample(): React.Node {
|
||||
// Memory API testing
|
||||
const [memoryInfo, setMemoryInfo] = useState<{
|
||||
jsHeapSizeLimit?: ?number,
|
||||
totalJSHeapSize?: ?number,
|
||||
usedJSHeapSize?: ?number,
|
||||
}>({});
|
||||
const [memoryInfo, setMemoryInfo] = useState<?MemoryInfo>(null);
|
||||
const onGetMemoryInfo = useCallback(() => {
|
||||
// performance.memory is not included in bom.js yet.
|
||||
// Once we release the change in flow this can be removed.
|
||||
@@ -40,25 +37,13 @@ function MemoryExample(): React.Node {
|
||||
<Button onPress={onGetMemoryInfo} title="Click to update memory info" />
|
||||
<View>
|
||||
<Text>
|
||||
{`jsHeapSizeLimit: ${
|
||||
memoryInfo.jsHeapSizeLimit == null
|
||||
? 'N/A'
|
||||
: memoryInfo.jsHeapSizeLimit
|
||||
} bytes`}
|
||||
{`jsHeapSizeLimit: ${String(memoryInfo?.jsHeapSizeLimit)} bytes`}
|
||||
</Text>
|
||||
<Text>
|
||||
{`totalJSHeapSize: ${
|
||||
memoryInfo.totalJSHeapSize == null
|
||||
? 'N/A'
|
||||
: memoryInfo.totalJSHeapSize
|
||||
} bytes`}
|
||||
{`totalJSHeapSize: ${String(memoryInfo?.totalJSHeapSize)} bytes`}
|
||||
</Text>
|
||||
<Text>
|
||||
{`usedJSHeapSize: ${
|
||||
memoryInfo.usedJSHeapSize == null
|
||||
? 'N/A'
|
||||
: memoryInfo.usedJSHeapSize
|
||||
} bytes`}
|
||||
{`usedJSHeapSize: ${String(memoryInfo?.usedJSHeapSize)} bytes`}
|
||||
</Text>
|
||||
</View>
|
||||
</View>
|
||||
|
||||
Reference in New Issue
Block a user