michangarrito/apps/backend/node_modules/react-native/ReactCommon/reactperflogger/reactperflogger/ReactPerfettoLogger.cpp
rckrdmrd 48dea7a5d0 feat: Initial commit - michangarrito
Marketplace móvil para negocios locales mexicanos.

Estructura inicial:
- apps/backend (NestJS API)
- apps/frontend (React Web)
- apps/mobile (Expo/React Native)
- apps/mcp-server (Claude MCP Server)
- apps/whatsapp-service (WhatsApp Business API)
- database/ (PostgreSQL DDL)
- docs/ (Documentación)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-07 04:41:02 -06:00

119 lines
3.5 KiB
C++

/*
* 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 "ReactPerfettoLogger.h"
#if defined(WITH_PERFETTO)
#include "ReactPerfetto.h"
#elif defined(WITH_FBSYSTRACE)
#include <fbsystrace.h>
#endif
namespace facebook::react {
namespace {
#if defined(WITH_PERFETTO)
const HighResTimeStamp PROGRAM_INIT_TIME = HighResTimeStamp::now();
const std::string PERFETTO_DEFAULT_TRACK_NAME = "# Web Performance";
const std::string PERFETTO_TRACK_NAME_PREFIX = "# Web Performance: ";
std::string toPerfettoTrackName(
const std::optional<std::string_view>& trackName,
const std::optional<std::string_view>& trackGroup) {
std::string perfettoTrackName = PERFETTO_DEFAULT_TRACK_NAME;
if (trackName || trackGroup) {
perfettoTrackName += ": ";
if (trackGroup) {
perfettoTrackName += *trackGroup;
if (trackName) {
perfettoTrackName += " | ";
}
}
if (trackName) {
perfettoTrackName += *trackName;
}
}
return perfettoTrackName;
}
#elif defined(WITH_FBSYSTRACE)
int64_t getDeltaNanos(HighResTimeStamp jsTime) {
auto now = HighResTimeStamp::now();
return (jsTime - now).toNanoseconds();
}
#endif
} // namespace
/* static */ bool ReactPerfettoLogger::isTracing() {
#if defined(WITH_PERFETTO)
return TRACE_EVENT_CATEGORY_ENABLED("react-native");
#elif defined(WITH_FBSYSTRACE)
return fbsystrace_is_tracing(TRACE_TAG_REACT);
#else
return false;
#endif
}
/* static */ void ReactPerfettoLogger::measure(
const std::string_view& eventName,
HighResTimeStamp startTime,
HighResTimeStamp endTime,
const std::optional<std::string_view>& trackName,
const std::optional<std::string_view>& trackGroup) {
#if defined(WITH_PERFETTO)
if (TRACE_EVENT_CATEGORY_ENABLED("react-native")) {
if (startTime < PROGRAM_INIT_TIME || endTime < PROGRAM_INIT_TIME) {
return;
}
auto track = getPerfettoWebPerfTrackAsync(
toPerfettoTrackName(trackName, trackGroup));
TRACE_EVENT_BEGIN(
"react-native",
perfetto::DynamicString(eventName.data(), eventName.size()),
track,
highResTimeStampToPerfettoTraceTime(startTime));
TRACE_EVENT_END(
"react-native", track, highResTimeStampToPerfettoTraceTime(endTime));
}
#elif defined(WITH_FBSYSTRACE)
static int cookie = 0;
fbsystrace_begin_async_section_with_timedelta(
TRACE_TAG_REACT, eventName.data(), cookie, getDeltaNanos(startTime));
fbsystrace_end_async_section_with_timedelta(
TRACE_TAG_REACT, eventName.data(), cookie, getDeltaNanos(endTime));
cookie++;
#endif
}
/* static */ void ReactPerfettoLogger::mark(
const std::string_view& eventName,
HighResTimeStamp startTime,
const std::optional<std::string_view>& trackName,
const std::optional<std::string_view>& trackGroup) {
#if defined(WITH_PERFETTO)
if (TRACE_EVENT_CATEGORY_ENABLED("react-native")) {
TRACE_EVENT_INSTANT(
"react-native",
perfetto::DynamicString(eventName.data(), eventName.size()),
getPerfettoWebPerfTrackSync(toPerfettoTrackName(trackName, trackGroup)),
highResTimeStampToPerfettoTraceTime(startTime));
}
#elif defined(WITH_FBSYSTRACE)
static const char* kTrackName = "# Web Performance: Markers";
fbsystrace_instant_for_track_with_timedelta(
TRACE_TAG_REACT, kTrackName, eventName.data(), getDeltaNanos(startTime));
#endif
}
} // namespace facebook::react