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 #include "ABI49_0_0ReactMarker.h" 9 #include <ABI49_0_0cxxreact/ABI49_0_0JSExecutor.h> 10 11 namespace ABI49_0_0facebook { 12 namespace ABI49_0_0React { 13 namespace ABI49_0_0ReactMarker { 14 15 #if __clang__ 16 #pragma clang diagnostic push 17 #pragma clang diagnostic ignored "-Wglobal-constructors" 18 #endif 19 20 LogTaggedMarker logTaggedMarkerImpl = nullptr; 21 LogTaggedMarker logTaggedMarkerBridgelessImpl = nullptr; 22 GetAppStartTime getAppStartTimeImpl = nullptr; 23 24 #if __clang__ 25 #pragma clang diagnostic pop 26 #endif 27 logMarker(const ABI49_0_0ReactMarkerId markerId)28void logMarker(const ABI49_0_0ReactMarkerId markerId) { 29 logTaggedMarker(markerId, nullptr); 30 } 31 logTaggedMarker(const ABI49_0_0ReactMarkerId markerId,const char * tag)32void logTaggedMarker(const ABI49_0_0ReactMarkerId markerId, const char *tag) { 33 StartupLogger::getInstance().logStartupEvent(markerId); 34 logTaggedMarkerImpl(markerId, tag); 35 } 36 logMarkerBridgeless(const ABI49_0_0ReactMarkerId markerId)37void logMarkerBridgeless(const ABI49_0_0ReactMarkerId markerId) { 38 logTaggedMarkerBridgeless(markerId, nullptr); 39 } 40 logTaggedMarkerBridgeless(const ABI49_0_0ReactMarkerId markerId,const char * tag)41void logTaggedMarkerBridgeless(const ABI49_0_0ReactMarkerId markerId, const char *tag) { 42 StartupLogger::getInstance().logStartupEvent(markerId); 43 logTaggedMarkerBridgelessImpl(markerId, tag); 44 } 45 getInstance()46StartupLogger &StartupLogger::getInstance() { 47 static StartupLogger instance; 48 return instance; 49 } 50 logStartupEvent(const ABI49_0_0ReactMarkerId markerId)51void StartupLogger::logStartupEvent(const ABI49_0_0ReactMarkerId markerId) { 52 auto now = JSExecutor::performanceNow(); 53 switch (markerId) { 54 case ABI49_0_0ReactMarkerId::RUN_JS_BUNDLE_START: 55 if (runJSBundleStartTime == 0) { 56 runJSBundleStartTime = now; 57 } 58 return; 59 60 case ABI49_0_0ReactMarkerId::RUN_JS_BUNDLE_STOP: 61 if (runJSBundleEndTime == 0) { 62 runJSBundleEndTime = now; 63 } 64 return; 65 66 default: 67 return; 68 } 69 } 70 getAppStartTime()71double StartupLogger::getAppStartTime() { 72 if (getAppStartTimeImpl == nullptr) { 73 return 0; 74 } 75 76 return getAppStartTimeImpl(); 77 } 78 getRunJSBundleStartTime()79double StartupLogger::getRunJSBundleStartTime() { 80 return runJSBundleStartTime; 81 } 82 getRunJSBundleEndTime()83double StartupLogger::getRunJSBundleEndTime() { 84 return runJSBundleEndTime; 85 } 86 87 } // namespace ABI49_0_0ReactMarker 88 } // namespace ABI49_0_0React 89 } // namespace ABI49_0_0facebook 90