1 /* 2 * Copyright (c) Meta Platforms, Inc. and affiliates. 3 * 4 * This source code is licensed under the MIT license found in the 5 * LICENSE file in the root directory of this source tree. 6 */ 7 8 #pragma once 9 10 #ifdef __APPLE__ 11 #include <functional> 12 #endif 13 14 namespace ABI49_0_0facebook { 15 namespace ABI49_0_0React { 16 namespace ABI49_0_0ReactMarker { 17 18 enum ABI49_0_0ReactMarkerId { 19 NATIVE_REQUIRE_START, 20 NATIVE_REQUIRE_STOP, 21 RUN_JS_BUNDLE_START, 22 RUN_JS_BUNDLE_STOP, 23 CREATE_REACT_CONTEXT_STOP, 24 JS_BUNDLE_STRING_CONVERT_START, 25 JS_BUNDLE_STRING_CONVERT_STOP, 26 NATIVE_MODULE_SETUP_START, 27 NATIVE_MODULE_SETUP_STOP, 28 REGISTER_JS_SEGMENT_START, 29 REGISTER_JS_SEGMENT_STOP, 30 ABI49_0_0REACT_INSTANCE_INIT_START, 31 ABI49_0_0REACT_INSTANCE_INIT_STOP 32 }; 33 34 #ifdef __APPLE__ 35 using LogTaggedMarker = 36 std::function<void(const ABI49_0_0ReactMarkerId, const char *tag)>; // Bridge only 37 using LogTaggedMarkerBridgeless = 38 std::function<void(const ABI49_0_0ReactMarkerId, const char *tag)>; 39 using GetAppStartTime = std::function<double()>; 40 #else 41 typedef void ( 42 *LogTaggedMarker)(const ABI49_0_0ReactMarkerId, const char *tag); // Bridge only 43 typedef void (*LogTaggedMarkerBridgeless)(const ABI49_0_0ReactMarkerId, const char *tag); 44 typedef double (*GetAppStartTime)(); 45 #endif 46 47 #ifndef ABI49_0_0RN_EXPORT 48 #define ABI49_0_0RN_EXPORT __attribute__((visibility("default"))) 49 #endif 50 51 extern ABI49_0_0RN_EXPORT LogTaggedMarker logTaggedMarkerImpl; // Bridge only 52 extern ABI49_0_0RN_EXPORT LogTaggedMarker logTaggedMarkerBridgelessImpl; 53 extern ABI49_0_0RN_EXPORT GetAppStartTime getAppStartTimeImpl; 54 55 extern ABI49_0_0RN_EXPORT void logMarker(const ABI49_0_0ReactMarkerId markerId); // Bridge only 56 extern ABI49_0_0RN_EXPORT void logTaggedMarker( 57 const ABI49_0_0ReactMarkerId markerId, 58 const char *tag); // Bridge only 59 extern ABI49_0_0RN_EXPORT void logMarkerBridgeless(const ABI49_0_0ReactMarkerId markerId); 60 extern ABI49_0_0RN_EXPORT void logTaggedMarkerBridgeless( 61 const ABI49_0_0ReactMarkerId markerId, 62 const char *tag); 63 extern ABI49_0_0RN_EXPORT double getAppStartTime(); 64 65 struct ABI49_0_0ReactMarkerEvent { 66 const ABI49_0_0ReactMarkerId markerId; 67 const char *tag; 68 double time; 69 }; 70 71 class StartupLogger { 72 public: 73 static StartupLogger &getInstance(); 74 75 void logStartupEvent(const ABI49_0_0ReactMarker::ABI49_0_0ReactMarkerId markerId); 76 double getAppStartTime(); 77 double getRunJSBundleStartTime(); 78 double getRunJSBundleEndTime(); 79 80 private: 81 StartupLogger() = default; 82 StartupLogger(const StartupLogger &) = delete; 83 StartupLogger &operator=(const StartupLogger &) = delete; 84 85 double runJSBundleStartTime; 86 double runJSBundleEndTime; 87 }; 88 89 } // namespace ABI49_0_0ReactMarker 90 } // namespace ABI49_0_0React 91 } // namespace ABI49_0_0facebook 92