Add detail to Fabric perf logs (median, average, max)

Summary:
I'm finding it useful to keep track of a few additional numbers when doing perf analysis in Fabric.

Also making it easier to enable just these perf logs without all of the other verbose Fabric logs.

Changelog: [Internal]

Reviewed By: mdvacca

Differential Revision: D36500518

fbshipit-source-id: e57e1e75131c5d59da876d1decb96d4da386f025
This commit is contained in:
Joshua Gross
2022-05-19 18:55:56 -07:00
committed by Facebook GitHub Bot
parent 4fc0630faa
commit 0fc42fd35c
2 changed files with 126 additions and 17 deletions
@@ -106,6 +106,7 @@ public class FabricUIManager implements UIManager, LifecycleEventListener {
ReactFeatureFlags.enableFabricLogs
|| PrinterHolder.getPrinter()
.shouldDisplayLogMessage(ReactDebugOverlayTags.FABRIC_UI_MANAGER);
public static final boolean ENABLE_FABRIC_PERF_LOGS = ENABLE_FABRIC_LOGS || false;
public DevToolsReactPerfLogger mDevToolsReactPerfLogger;
static {
@@ -366,30 +367,53 @@ public class FabricUIManager implements UIManager, LifecycleEventListener {
public void initialize() {
mEventDispatcher.registerEventEmitter(FABRIC, new FabricEventEmitter(this));
mEventDispatcher.addBatchEventDispatchedListener(mEventBeatManager);
if (ENABLE_FABRIC_LOGS) {
if (ENABLE_FABRIC_PERF_LOGS) {
mDevToolsReactPerfLogger = new DevToolsReactPerfLogger();
mDevToolsReactPerfLogger.addDevToolsReactPerfLoggerListener(
new DevToolsReactPerfLogger.DevToolsReactPerfLoggerListener() {
@Override
public void onFabricCommitEnd(DevToolsReactPerfLogger.FabricCommitPoint commitPoint) {
long commitDuration = commitPoint.getCommitDuration();
long layoutDuration = commitPoint.getLayoutDuration();
long diffDuration = commitPoint.getDiffDuration();
long transactionEndDuration = commitPoint.getTransactionEndDuration();
long batchExecutionDuration = commitPoint.getBatchExecutionDuration();
DevToolsReactPerfLogger.mStreamingCommitStats.add(commitDuration);
DevToolsReactPerfLogger.mStreamingLayoutStats.add(layoutDuration);
DevToolsReactPerfLogger.mStreamingDiffStats.add(diffDuration);
DevToolsReactPerfLogger.mStreamingTransactionEndStats.add(transactionEndDuration);
DevToolsReactPerfLogger.mStreamingBatchExecutionStats.add(batchExecutionDuration);
FLog.i(
TAG,
"Statistic of Fabric commit #: "
+ commitPoint.getCommitNumber()
+ "\n - Total commit time: "
+ (commitPoint.getFinishTransactionEnd() - commitPoint.getCommitStart())
+ " ms.\n - Layout: "
+ (commitPoint.getLayoutEnd() - commitPoint.getLayoutStart())
+ " ms.\n - Diffing: "
+ (commitPoint.getDiffEnd() - commitPoint.getDiffStart())
+ " ms.\n"
+ " - FinishTransaction (Diffing + JNI serialization): "
+ (commitPoint.getFinishTransactionEnd()
- commitPoint.getFinishTransactionStart())
+ " ms.\n"
+ " - Mounting: "
+ (commitPoint.getBatchExecutionEnd() - commitPoint.getBatchExecutionStart())
+ " ms.");
"Statistics of Fabric commit #%d:\n"
+ " - Total commit time: %d ms. Avg: %.2f. Median: %.2f ms. Max: %d ms.\n"
+ " - Layout time: %d ms. Avg: %.2f. Median: %.2f ms. Max: %d ms.\n"
+ " - Diffing time: %d ms. Avg: %.2f. Median: %.2f ms. Max: %d ms.\n"
+ " - FinishTransaction (Diffing + JNI serialization): %d ms. Avg: %.2f. Median: %.2f ms. Max: %d ms.\n"
+ " - Mounting: %d ms. Avg: %.2f. Median: %.2f ms. Max: %d ms.\n",
commitPoint.getCommitNumber(),
commitDuration,
DevToolsReactPerfLogger.mStreamingCommitStats.getAverage(),
DevToolsReactPerfLogger.mStreamingCommitStats.getMedian(),
DevToolsReactPerfLogger.mStreamingCommitStats.getMax(),
layoutDuration,
DevToolsReactPerfLogger.mStreamingLayoutStats.getAverage(),
DevToolsReactPerfLogger.mStreamingLayoutStats.getMedian(),
DevToolsReactPerfLogger.mStreamingLayoutStats.getMax(),
diffDuration,
DevToolsReactPerfLogger.mStreamingDiffStats.getAverage(),
DevToolsReactPerfLogger.mStreamingDiffStats.getMedian(),
DevToolsReactPerfLogger.mStreamingDiffStats.getMax(),
transactionEndDuration,
DevToolsReactPerfLogger.mStreamingTransactionEndStats.getAverage(),
DevToolsReactPerfLogger.mStreamingTransactionEndStats.getMedian(),
DevToolsReactPerfLogger.mStreamingTransactionEndStats.getMax(),
batchExecutionDuration,
DevToolsReactPerfLogger.mStreamingBatchExecutionStats.getAverage(),
DevToolsReactPerfLogger.mStreamingBatchExecutionStats.getMedian(),
DevToolsReactPerfLogger.mStreamingBatchExecutionStats.getMax());
}
});
ReactMarker.addFabricListener(mDevToolsReactPerfLogger);