You've already forked UnrealEngineUWP
mirror of
https://github.com/izzy2lost/UnrealEngineUWP.git
synced 2026-03-26 18:15:20 -07:00
118 lines
2.6 KiB
C++
118 lines
2.6 KiB
C++
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
#include "MetasoundInstanceCounter.h"
|
|
|
|
namespace Metasound
|
|
{
|
|
FConcurrentMetasoundInstanceCounter::FConcurrentMetasoundInstanceCounter(const FName& InName)
|
|
: InstanceName(InName)
|
|
{
|
|
Increment();
|
|
}
|
|
|
|
// dtor
|
|
FConcurrentMetasoundInstanceCounter::~FConcurrentMetasoundInstanceCounter()
|
|
{
|
|
Decrement();
|
|
}
|
|
|
|
void FConcurrentMetasoundInstanceCounter::Init(const FName& InName)
|
|
{
|
|
InstanceName = InName;
|
|
Increment();
|
|
}
|
|
|
|
// static interface
|
|
int64 FConcurrentMetasoundInstanceCounter::GetCountForName(const FName& InName)
|
|
{
|
|
FScopeLock Lock(&MapCritSec);
|
|
if (FStats* Stats = StatsMap.Find(InName))
|
|
{
|
|
return Stats->GetCount();
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
int64 FConcurrentMetasoundInstanceCounter::GetPeakCountForName(const FName& InName)
|
|
{
|
|
FScopeLock Lock(&MapCritSec);
|
|
if (FStats* Stats = StatsMap.Find(InName))
|
|
{
|
|
return Stats->GetPeakCount();
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
void FConcurrentMetasoundInstanceCounter::Increment()
|
|
{
|
|
FScopeLock Lock(&MapCritSec);
|
|
GetOrAddStats().Increment();
|
|
}
|
|
|
|
void FConcurrentMetasoundInstanceCounter::Decrement()
|
|
{
|
|
FScopeLock Lock(&MapCritSec);
|
|
GetOrAddStats().Decrement();
|
|
}
|
|
|
|
static const FString InstanceCounterCategory(TEXT("Metasound/Active_Generators"));
|
|
FConcurrentMetasoundInstanceCounter::FStats& FConcurrentMetasoundInstanceCounter::GetOrAddStats()
|
|
{
|
|
FScopeLock Lock(&MapCritSec);
|
|
|
|
// avoid re-constructing the trace counter string unless it's new
|
|
if (StatsMap.Contains(InstanceName))
|
|
{
|
|
return StatsMap[InstanceName];
|
|
}
|
|
|
|
#if COUNTERSTRACE_ENABLED
|
|
return StatsMap.Emplace(InstanceName, FString::Printf(TEXT("%s - %s"), *InstanceCounterCategory, *InstanceName.ToString()));
|
|
#else
|
|
return StatsMap.Add(InstanceName);
|
|
#endif
|
|
}
|
|
|
|
// ctor
|
|
#if COUNTERSTRACE_ENABLED
|
|
FConcurrentMetasoundInstanceCounter::FStats::FStats(const FString& InName)
|
|
: TraceCounter(MakeUnique<FCountersTrace::FCounterInt>(TraceCounterNameType_Dynamic, *InName, TraceCounterDisplayHint_None))
|
|
{
|
|
}
|
|
#endif
|
|
|
|
// FConcurrentMetasoundInstanceCounter::FStats::
|
|
|
|
void FConcurrentMetasoundInstanceCounter::FStats::Increment()
|
|
{
|
|
ensure(TraceCounter);
|
|
TraceCounter->Increment();
|
|
PeakCount = FMath::Max(PeakCount, GetCount());
|
|
}
|
|
|
|
|
|
void FConcurrentMetasoundInstanceCounter::FStats::Decrement()
|
|
{
|
|
ensure(TraceCounter);
|
|
TraceCounter->Decrement();
|
|
}
|
|
|
|
int64 FConcurrentMetasoundInstanceCounter::FStats::GetCount()
|
|
{
|
|
ensure(TraceCounter);
|
|
#if COUNTERSTRACE_ENABLED
|
|
return TraceCounter->Get();
|
|
#else
|
|
return TraceCounter->GetValue();
|
|
#endif
|
|
}
|
|
|
|
int64 FConcurrentMetasoundInstanceCounter::FStats::GetPeakCount()
|
|
{
|
|
return PeakCount;
|
|
}
|
|
|
|
} // namespace Metasound
|