zworld-em/Plugins/sentry-unreal/Source/Sentry/Private/SentrySpan.cpp

118 lines
2.7 KiB
C++
Raw Permalink Normal View History

2025-05-11 22:07:21 +08:00
// Copyright (c) 2023 Sentry. All Rights Reserved.
#include "SentrySpan.h"
#include "Interface/SentrySpanInterface.h"
#if PLATFORM_ANDROID
#include "Android/SentrySpanAndroid.h"
#elif PLATFORM_IOS || PLATFORM_MAC
#include "Apple/SentrySpanApple.h"
#elif PLATFORM_WINDOWS || PLATFORM_LINUX
#include "Desktop/SentrySpanDesktop.h"
#endif
USentrySpan::USentrySpan()
{
}
USentrySpan* USentrySpan::StartChild(const FString& Operation, const FString& Description)
{
if (!SentrySpanNativeImpl || SentrySpanNativeImpl->IsFinished())
return nullptr;
TSharedPtr<ISentrySpan> spanNativeImpl = SentrySpanNativeImpl->StartChild(Operation, Description);
USentrySpan* unrealSpan = NewObject<USentrySpan>();
unrealSpan->InitWithNativeImpl(spanNativeImpl);
return unrealSpan;
}
USentrySpan* USentrySpan::StartChildWithTimestamp(const FString& Operation, const FString& Description, int64 Timestamp)
{
if (!SentrySpanNativeImpl || SentrySpanNativeImpl->IsFinished())
return nullptr;
TSharedPtr<ISentrySpan> spanNativeImpl = SentrySpanNativeImpl->StartChildWithTimestamp(Operation, Description, Timestamp);
USentrySpan* unrealSpan = NewObject<USentrySpan>();
unrealSpan->InitWithNativeImpl(spanNativeImpl);
return unrealSpan;
}
void USentrySpan::Finish()
{
if (!SentrySpanNativeImpl)
return;
SentrySpanNativeImpl->Finish();
}
void USentrySpan::FinishWithTimestamp(int64 Timestamp)
{
if (!SentrySpanNativeImpl)
return;
SentrySpanNativeImpl->FinishWithTimestamp(Timestamp);
}
bool USentrySpan::IsFinished() const
{
if (!SentrySpanNativeImpl)
return false;
return SentrySpanNativeImpl->IsFinished();
}
void USentrySpan::SetTag(const FString& key, const FString& value)
{
if (!SentrySpanNativeImpl || SentrySpanNativeImpl->IsFinished())
return;
SentrySpanNativeImpl->SetTag(key, value);
}
void USentrySpan::RemoveTag(const FString& key)
{
if (!SentrySpanNativeImpl || SentrySpanNativeImpl->IsFinished())
return;
SentrySpanNativeImpl->RemoveTag(key);
}
void USentrySpan::SetData(const FString& key, const TMap<FString, FString>& values)
{
if (!SentrySpanNativeImpl || SentrySpanNativeImpl->IsFinished())
return;
SentrySpanNativeImpl->SetData(key, values);
}
void USentrySpan::RemoveData(const FString& key)
{
if (!SentrySpanNativeImpl || SentrySpanNativeImpl->IsFinished())
return;
SentrySpanNativeImpl->RemoveData(key);
}
void USentrySpan::GetTrace(FString& name, FString& value)
{
if (!SentrySpanNativeImpl || SentrySpanNativeImpl->IsFinished())
return;
SentrySpanNativeImpl->GetTrace(name, value);
}
void USentrySpan::InitWithNativeImpl(TSharedPtr<ISentrySpan> spanImpl)
{
SentrySpanNativeImpl = spanImpl;
}
TSharedPtr<ISentrySpan> USentrySpan::GetNativeImpl()
{
return SentrySpanNativeImpl;
}