Files
robert millar dbf7d304a2 [Backout] - CL26359042
[FYI] robert.millar
Original CL Desc
-----------------------------------------------------------------
Version of ProvideTelemetry taking a lambda to avoid calculating some statistics if they aren't necessary.

#rb none

[CL 26362025 by robert millar in 5.3 branch]
2023-07-01 00:22:52 -04:00

55 lines
1.5 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "TelemetryRouter.h"
#include "TelemetryUtils.h"
#include "Misc/ScopeRWLock.h"
FTelemetryRouter::FTelemetryRouter()
{
}
FTelemetryRouter::~FTelemetryRouter()
{
}
FTelemetryRouter& FTelemetryRouter::Get()
{
return FTelemetryUtils::GetRouter();
}
void FTelemetryRouter::ProvideTelemetryInternal(FGuid Key, const void* Data)
{
FReadScopeLock Lock(SinkLock);
TGuardValue Guard(ReentrancyGuard, FPlatformTLS::GetCurrentThreadId());
TMap<FDelegateHandle, TFunction<bool(const void*)>>* Sinks = KeyToSinks.Find(Key);
if (Sinks)
{
for (auto It = Sinks->CreateIterator(); It; ++It)
{
bool bStillBound = It->Value(Data);
if (!bStillBound)
{
It.RemoveCurrent();
}
}
}
}
void FTelemetryRouter::RegisterTelemetrySinkInternal(FGuid Key, FDelegateHandle InHandle, TFunction<bool(const void*)> Sink)
{
FWriteScopeLock Lock(SinkLock);
TGuardValue Guard(ReentrancyGuard, FPlatformTLS::GetCurrentThreadId());
TMap<FDelegateHandle, TFunction<bool(const void*)>>& Sinks = KeyToSinks.FindOrAdd(Key);
Sinks.Add(InHandle, MoveTemp(Sink));
}
void FTelemetryRouter::UnregisterTelemetrySinkInternal(FGuid Key, FDelegateHandle InHandle)
{
FWriteScopeLock Lock(SinkLock);
TGuardValue Guard(ReentrancyGuard, FPlatformTLS::GetCurrentThreadId());
TMap<FDelegateHandle, TFunction<bool(const void*)>>* Sinks = KeyToSinks.Find(Key);
if (Sinks)
{
Sinks->Remove(InHandle);
}
}