82 lines
2.6 KiB
C++
82 lines
2.6 KiB
C++
// Copyright (c) 2023 Sentry. All Rights Reserved.
|
|
|
|
#include "SentrySpanAndroid.h"
|
|
|
|
#include "SentryDefines.h"
|
|
|
|
#include "Infrastructure/SentryConvertorsAndroid.h"
|
|
#include "Infrastructure/SentryJavaClasses.h"
|
|
|
|
SentrySpanAndroid::SentrySpanAndroid(jobject span)
|
|
: FSentryJavaObjectWrapper(SentryJavaClasses::Span, span)
|
|
{
|
|
SetupClassMethods();
|
|
}
|
|
|
|
void SentrySpanAndroid::SetupClassMethods()
|
|
{
|
|
StartChildMethod = GetMethod("startChild", "(Ljava/lang/String;Ljava/lang/String;)Lio/sentry/ISpan;");
|
|
FinishMethod = GetMethod("finish", "()V");
|
|
IsFinishedMethod = GetMethod("isFinished", "()Z");
|
|
SetTagMethod = GetMethod("setTag", "(Ljava/lang/String;Ljava/lang/String;)V");
|
|
SetDataMethod = GetMethod("setData", "(Ljava/lang/String;Ljava/lang/Object;)V");
|
|
ToSentryTraceMethod = GetMethod("toSentryTrace", "()Lio/sentry/SentryTraceHeader;");
|
|
}
|
|
|
|
TSharedPtr<ISentrySpan> SentrySpanAndroid::StartChild(const FString& operation, const FString& desctiption)
|
|
{
|
|
auto span = CallObjectMethod<jobject>(StartChildMethod, *GetJString(operation), *GetJString(desctiption));
|
|
return MakeShareable(new SentrySpanAndroid(*span));
|
|
}
|
|
|
|
TSharedPtr<ISentrySpan> SentrySpanAndroid::StartChildWithTimestamp(const FString& operation, const FString& desctiption, int64 timestamp)
|
|
{
|
|
UE_LOG(LogSentrySdk, Log, TEXT("Starting child span with explicit timestamp not supported on Android."));
|
|
return StartChild(operation, desctiption);
|
|
}
|
|
|
|
void SentrySpanAndroid::Finish()
|
|
{
|
|
CallMethod<void>(FinishMethod);
|
|
}
|
|
|
|
void SentrySpanAndroid::FinishWithTimestamp(int64 timestamp)
|
|
{
|
|
UE_LOG(LogSentrySdk, Log, TEXT("Finishing span with explicit timestamp not supported on Android."));
|
|
Finish();
|
|
}
|
|
|
|
bool SentrySpanAndroid::IsFinished() const
|
|
{
|
|
return CallMethod<bool>(IsFinishedMethod);;
|
|
}
|
|
|
|
void SentrySpanAndroid::SetTag(const FString& key, const FString& value)
|
|
{
|
|
CallMethod<void>(SetTagMethod, *GetJString(key), *GetJString(value));
|
|
}
|
|
|
|
void SentrySpanAndroid::RemoveTag(const FString& key)
|
|
{
|
|
SetTag(key, TEXT(""));
|
|
}
|
|
|
|
void SentrySpanAndroid::SetData(const FString& key, const TMap<FString, FString>& values)
|
|
{
|
|
CallMethod<void>(SetDataMethod, *GetJString(key), SentryConvertorsAndroid::StringMapToNative(values)->GetJObject());
|
|
}
|
|
|
|
void SentrySpanAndroid::RemoveData(const FString& key)
|
|
{
|
|
SetData(key, TMap<FString, FString>());
|
|
}
|
|
|
|
void SentrySpanAndroid::GetTrace(FString& name, FString& value)
|
|
{
|
|
FSentryJavaObjectWrapper NativeTraceHeader(SentryJavaClasses::SentryTraceHeader, *CallObjectMethod<jobject>(ToSentryTraceMethod));
|
|
FSentryJavaMethod GetValueMethod = NativeTraceHeader.GetMethod("getValue", "()Ljava/lang/String;");
|
|
|
|
name = TEXT("sentry-trace");
|
|
value = NativeTraceHeader.CallMethod<FString>(GetValueMethod);
|
|
}
|