diff --git a/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java b/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java index 57d669b395c..642dd331dba 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java @@ -109,6 +109,54 @@ public class FabricUIManager implements UIManager, LifecycleEventListener { public static final boolean ENABLE_FABRIC_PERF_LOGS = ENABLE_FABRIC_LOGS || false; public DevToolsReactPerfLogger mDevToolsReactPerfLogger; + private static final DevToolsReactPerfLogger.DevToolsReactPerfLoggerListener FABRIC_PERF_LOGGER = + 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, + "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()); + } + }; + static { FabricSoLoader.staticInit(); } @@ -369,53 +417,8 @@ public class FabricUIManager implements UIManager, LifecycleEventListener { mEventDispatcher.addBatchEventDispatchedListener(mEventBeatManager); 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(); + mDevToolsReactPerfLogger.addDevToolsReactPerfLoggerListener(FABRIC_PERF_LOGGER); - DevToolsReactPerfLogger.mStreamingCommitStats.add(commitDuration); - DevToolsReactPerfLogger.mStreamingLayoutStats.add(layoutDuration); - DevToolsReactPerfLogger.mStreamingDiffStats.add(diffDuration); - DevToolsReactPerfLogger.mStreamingTransactionEndStats.add(transactionEndDuration); - DevToolsReactPerfLogger.mStreamingBatchExecutionStats.add(batchExecutionDuration); - - FLog.i( - TAG, - "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); } } @@ -428,6 +431,7 @@ public class FabricUIManager implements UIManager, LifecycleEventListener { FLog.i(TAG, "FabricUIManager.onCatalystInstanceDestroy"); if (mDevToolsReactPerfLogger != null) { + mDevToolsReactPerfLogger.removeDevToolsReactPerfLoggerListener(FABRIC_PERF_LOGGER); ReactMarker.removeFabricListener(mDevToolsReactPerfLogger); }