diff --git a/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/TurboModuleManager.java b/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/TurboModuleManager.java index ff656b93a48..35f393a82e4 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/TurboModuleManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/TurboModuleManager.java @@ -156,7 +156,16 @@ public class TurboModuleManager implements JSIModule, TurboModuleRegistry { moduleHolder = mTurboModuleHolders.get(moduleName); } - return getModule(moduleName, moduleHolder); + TurboModulePerfLogger.moduleCreateStart(moduleName, moduleHolder.getModuleId()); + TurboModule module = getModule(moduleName, moduleHolder, true); + + if (module != null) { + TurboModulePerfLogger.moduleCreateEnd(moduleName, moduleHolder.getModuleId()); + } else { + TurboModulePerfLogger.moduleCreateFail(moduleName, moduleHolder.getModuleId()); + } + + return module; } /** @@ -167,11 +176,16 @@ public class TurboModuleManager implements JSIModule, TurboModuleRegistry { * initialized. */ @Nullable - private TurboModule getModule(String moduleName, @NonNull TurboModuleHolder moduleHolder) { + private TurboModule getModule( + String moduleName, @NonNull TurboModuleHolder moduleHolder, boolean shouldPerfLog) { boolean shouldCreateModule = false; synchronized (moduleHolder) { if (moduleHolder.isDoneCreatingModule()) { + if (shouldPerfLog) { + TurboModulePerfLogger.moduleCreateCacheHit(moduleName, moduleHolder.getModuleId()); + } + return moduleHolder.getModule(); } @@ -183,12 +197,16 @@ public class TurboModuleManager implements JSIModule, TurboModuleRegistry { } if (shouldCreateModule) { + TurboModulePerfLogger.moduleCreateConstructStart(moduleName, moduleHolder.getModuleId()); TurboModule turboModule = mJavaModuleProvider.getModule(moduleName); if (turboModule == null) { turboModule = mCxxModuleProvider.getModule(moduleName); } + TurboModulePerfLogger.moduleCreateConstructEnd(moduleName, moduleHolder.getModuleId()); + TurboModulePerfLogger.moduleCreateSetUpStart(moduleName, moduleHolder.getModuleId()); + if (turboModule != null) { synchronized (moduleHolder) { moduleHolder.setModule(turboModule); @@ -206,6 +224,7 @@ public class TurboModuleManager implements JSIModule, TurboModuleRegistry { "TurboModuleManager.getModule: TurboModule " + moduleName + " not found in delegate"); } + TurboModulePerfLogger.moduleCreateSetUpEnd(moduleName, moduleHolder.getModuleId()); synchronized (moduleHolder) { moduleHolder.endCreatingModule(); moduleHolder.notifyAll(); @@ -312,7 +331,7 @@ public class TurboModuleManager implements JSIModule, TurboModuleRegistry { * initialized. In this case, we should wait for initialization to complete, before destroying * the TurboModule. */ - final TurboModule turboModule = getModule(moduleName, moduleHolder); + final TurboModule turboModule = getModule(moduleName, moduleHolder, false); if (turboModule != null) { // TODO(T48014458): Rename this to invalidate() @@ -338,6 +357,17 @@ public class TurboModuleManager implements JSIModule, TurboModuleRegistry { private volatile TurboModule mModule = null; private volatile boolean mIsTryingToCreate = false; private volatile boolean mIsDoneCreatingModule = false; + private static volatile int sHolderCount = 0; + private volatile int mModuleId; + + public TurboModuleHolder() { + mModuleId = sHolderCount; + sHolderCount += 1; + } + + int getModuleId() { + return mModuleId; + } void setModule(@NonNull TurboModule module) { mModule = module; diff --git a/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/TurboModulePerfLogger.java b/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/TurboModulePerfLogger.java index 19d84a41a5a..fdb95884b3c 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/TurboModulePerfLogger.java +++ b/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/TurboModulePerfLogger.java @@ -72,6 +72,12 @@ public class TurboModulePerfLogger { } } + public static void moduleCreateFail(String moduleName, int id) { + if (sNativeModulePerfLogger != null) { + sNativeModulePerfLogger.moduleCreateFail(moduleName, id); + } + } + private static native void jniEnableCppLogging(NativeModulePerfLogger perfLogger); public static void enableLogging(NativeModulePerfLogger perfLogger) {