diff --git a/packages/react-native-performance/android/src/main/java/com/oblador/performance/PerformanceModule.java b/packages/react-native-performance/android/src/main/java/com/oblador/performance/PerformanceModule.java index 4a187bb..0c457ce 100644 --- a/packages/react-native-performance/android/src/main/java/com/oblador/performance/PerformanceModule.java +++ b/packages/react-native-performance/android/src/main/java/com/oblador/performance/PerformanceModule.java @@ -25,12 +25,74 @@ public class PerformanceModule extends ReactContextBaseJavaModule implements Tur private static final Queue markBuffer = new ConcurrentLinkedQueue<>(); private static boolean didEmit = false; + private static final ReactMarker.MarkerListener startupMarkerListener = (name, tag, instanceKey) -> { + switch (name) { + case RELOAD: + clearMarkBuffer(); + addMark(new PerformanceMark(BRIDGE_SETUP_START, SystemClock.uptimeMillis())); + break; + case ATTACH_MEASURED_ROOT_VIEWS_END: + case ATTACH_MEASURED_ROOT_VIEWS_START: + case BUILD_NATIVE_MODULE_REGISTRY_END: + case BUILD_NATIVE_MODULE_REGISTRY_START: + case CONTENT_APPEARED: + case CREATE_CATALYST_INSTANCE_END: + case CREATE_CATALYST_INSTANCE_START: + case CREATE_REACT_CONTEXT_END: + case CREATE_REACT_CONTEXT_START: + case CREATE_UI_MANAGER_MODULE_CONSTANTS_END: + case CREATE_UI_MANAGER_MODULE_CONSTANTS_START: + case CREATE_UI_MANAGER_MODULE_END: + case CREATE_UI_MANAGER_MODULE_START: + case CREATE_VIEW_MANAGERS_END: + case CREATE_VIEW_MANAGERS_START: + case DOWNLOAD_END: + case DOWNLOAD_START: + case LOAD_REACT_NATIVE_SO_FILE_END: + case LOAD_REACT_NATIVE_SO_FILE_START: + case PRE_RUN_JS_BUNDLE_START: + case PRE_SETUP_REACT_CONTEXT_END: + case PRE_SETUP_REACT_CONTEXT_START: + case PROCESS_CORE_REACT_PACKAGE_END: + case PROCESS_CORE_REACT_PACKAGE_START: + case REACT_CONTEXT_THREAD_END: + case REACT_CONTEXT_THREAD_START: + case RUN_JS_BUNDLE_END: + case RUN_JS_BUNDLE_START: + case SETUP_REACT_CONTEXT_END: + case SETUP_REACT_CONTEXT_START: + case VM_INIT: + long startTime = SystemClock.uptimeMillis(); + addMark(new PerformanceMark(getMarkName(name), startTime)); + break; + } + }; + + private final ReactMarker.MarkerListener contentAppearedListener = (name, tag, instanceKey) -> { + switch (name) { + case CONTENT_APPEARED: + eventsBuffered = false; + emitNativeStartupTime(); + emitBufferedMarks(); + break; + case RELOAD: + eventsBuffered = true; + break; + } + }; + public PerformanceModule(@NonNull final ReactApplicationContext reactContext) { super(reactContext); setupMarkerListener(); setupNativeMarkerListener(); } + private void setupMarkerListener() { + ReactMarker.addListener( + contentAppearedListener + ); + } + private void setupNativeMarkerListener() { RNPerformance.getInstance().addListener(this); } @@ -38,51 +100,7 @@ private void setupNativeMarkerListener() { // Need to set up the marker listener before the react module is initialized // to capture all events public static void setupListener() { - ReactMarker.addListener( - (name, tag, instanceKey) -> { - switch (name) { - case RELOAD: - clearMarkBuffer(); - addMark(new PerformanceMark(BRIDGE_SETUP_START, SystemClock.uptimeMillis())); - break; - case ATTACH_MEASURED_ROOT_VIEWS_END: - case ATTACH_MEASURED_ROOT_VIEWS_START: - case BUILD_NATIVE_MODULE_REGISTRY_END: - case BUILD_NATIVE_MODULE_REGISTRY_START: - case CONTENT_APPEARED: - case CREATE_CATALYST_INSTANCE_END: - case CREATE_CATALYST_INSTANCE_START: - case CREATE_REACT_CONTEXT_END: - case CREATE_REACT_CONTEXT_START: - case CREATE_UI_MANAGER_MODULE_CONSTANTS_END: - case CREATE_UI_MANAGER_MODULE_CONSTANTS_START: - case CREATE_UI_MANAGER_MODULE_END: - case CREATE_UI_MANAGER_MODULE_START: - case CREATE_VIEW_MANAGERS_END: - case CREATE_VIEW_MANAGERS_START: - case DOWNLOAD_END: - case DOWNLOAD_START: - case LOAD_REACT_NATIVE_SO_FILE_END: - case LOAD_REACT_NATIVE_SO_FILE_START: - case PRE_RUN_JS_BUNDLE_START: - case PRE_SETUP_REACT_CONTEXT_END: - case PRE_SETUP_REACT_CONTEXT_START: - case PROCESS_CORE_REACT_PACKAGE_END: - case PROCESS_CORE_REACT_PACKAGE_START: - case REACT_CONTEXT_THREAD_END: - case REACT_CONTEXT_THREAD_START: - case RUN_JS_BUNDLE_END: - case RUN_JS_BUNDLE_START: - case SETUP_REACT_CONTEXT_END: - case SETUP_REACT_CONTEXT_START: - case VM_INIT: - long startTime = SystemClock.uptimeMillis(); - addMark(new PerformanceMark(getMarkName(name), startTime)); - break; - - } - } - ); + ReactMarker.addListener(startupMarkerListener); } private static void clearMarkBuffer() { @@ -118,28 +136,19 @@ public String getName() { return PERFORMANCE_MODULE; } + public void addListener(String eventName) { + + } + + public void removeListeners(double count) { + + } + private void emitNativeStartupTime() { safelyEmitMark(new PerformanceMark("nativeLaunchStart", StartTimeProvider.getStartTime())); safelyEmitMark(new PerformanceMark("nativeLaunchEnd", StartTimeProvider.getEndTime())); } - private void setupMarkerListener() { - ReactMarker.addListener( - (name, tag, instanceKey) -> { - switch (name) { - case CONTENT_APPEARED: - eventsBuffered = false; - emitNativeStartupTime(); - emitBufferedMarks(); - break; - case RELOAD: - eventsBuffered = true; - break; - } - } - ); - } - private void safelyEmitMark(PerformanceEntry entry) { if (eventsBuffered) { addMark(entry); @@ -215,13 +224,9 @@ public void logMarker(PerformanceEntry entry) { } @Override - public void onCatalystInstanceDestroy() { - super.onCatalystInstanceDestroy(); + public void invalidate() { + super.invalidate(); RNPerformance.getInstance().removeListener(this); - } - - // Fix new arch runtime error - public void addListener(String eventName) { - + ReactMarker.removeListener(contentAppearedListener); } } diff --git a/packages/react-native-performance/android/src/main/java/com/oblador/performance/RNPerformance.java b/packages/react-native-performance/android/src/main/java/com/oblador/performance/RNPerformance.java index 4d6223b..2f6643b 100644 --- a/packages/react-native-performance/android/src/main/java/com/oblador/performance/RNPerformance.java +++ b/packages/react-native-performance/android/src/main/java/com/oblador/performance/RNPerformance.java @@ -43,7 +43,7 @@ protected void addListener(MarkerListener listener) { @DoNotStrip protected void removeListener(MarkerListener listener) { - if (!sListeners.contains(listener)) { + if (sListeners.contains(listener)) { sListeners.remove(listener); } }