/* * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ #include #include #include #include "NativePerformance.h" #include "PerformanceEntryReporter.h" #include "Plugins.h" std::shared_ptr NativePerformanceModuleProvider( std::shared_ptr jsInvoker) { return std::make_shared( std::move(jsInvoker)); } namespace facebook::react { NativePerformance::NativePerformance(std::shared_ptr jsInvoker) : NativePerformanceCxxSpec(std::move(jsInvoker)) {} void NativePerformance::mark( jsi::Runtime &rt, std::string name, double startTime, double duration) { PerformanceEntryReporter::getInstance().mark(name, startTime, duration); } void NativePerformance::measure( jsi::Runtime &rt, std::string name, double startTime, double endTime, std::optional duration, std::optional startMark, std::optional endMark) { PerformanceEntryReporter::getInstance().measure( name, startTime, endTime, duration, startMark, endMark); } std::unordered_map NativePerformance::getSimpleMemoryInfo( jsi::Runtime &rt) { auto heapInfo = rt.instrumentation().getHeapInfo(false); std::unordered_map heapInfoToJs; for (auto &entry : heapInfo) { heapInfoToJs[entry.first] = static_cast(entry.second); } return heapInfoToJs; } ReactNativeStartupTiming NativePerformance::getReactNativeStartupTiming( jsi::Runtime &rt) { ReactNativeStartupTiming result = {0, 0, 0, 0}; ReactMarker::StartupLogger &startupLogger = ReactMarker::StartupLogger::getInstance(); result.startTime = startupLogger.getAppStartTime(); result.executeJavaScriptBundleEntryPointStart = startupLogger.getRunJSBundleStartTime(); result.executeJavaScriptBundleEntryPointEnd = startupLogger.getRunJSBundleEndTime(); result.endTime = startupLogger.getRunJSBundleEndTime(); return result; } } // namespace facebook::react