Remove DevToolsReactPerfLoggerListener when FabricUIManager is deallocated

Summary:
Remove DevToolsReactPerfLoggerListener when FabricUIManager is deallocated

changelog: [internal] internal

Reviewed By: JoshuaGross

Differential Revision: D36500223

fbshipit-source-id: d44e0d07390724191360540e04a51261803eb57c
This commit is contained in:
David Vacca
2022-05-25 12:22:29 -07:00
committed by Facebook GitHub Bot
parent 40769f2212
commit ddad5d1265
@@ -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);
}