UE4 C++ 源码分析stat GPU

2021/07/25

stat gpu数据从何而来

  • Stats2.h
//宏定义 函数
#define SET_CYCLE_COUNTER(Stat,Cycles) \
{\
	if (FThreadStats::IsCollectingData() || !GET_STATISEVERYFRAME(Stat)) \
		FThreadStats::AddMessage(GET_STATFNAME(Stat), EStatOperation::Set, int64(Cycles), true);\
}



template<typename TValue>
	static FORCEINLINE_STATS void AddMessage(FName InStatName, EStatOperation::Type InStatOperation, TValue Value, bool bIsCycle = false)
	{
   
		if (!InStatName.IsNone() && WillEverCollectData() && IsThreadingReady())
		{
   
			FThreadStats* ThreadStats = GetThreadStats();
			{
   
				FStatMessage temp(InStatName, InStatOperation, Value, bIsCycle);
				if (temp.NameAndInfo.GetShortName() == FName("Stat_GPU_RenderDeferredLighting")) 
				{
   
					UE_LOG(LogTemp, Warning, TEXT("stat name: %s, InStatOperate: %d, Value: %f, IsCycle: %d"), *InStatName.ToString(),InStatOperation,double(Value),bIsCycle);

				}
			}
			
			ThreadStats->AddStatMessage(FStatMessage(InStatName, InStatOperation, Value, bIsCycle));
			if(!ThreadStats->ScopeCount)
			{
   
				ThreadStats->Flush();
			}
			else if( bIsRawStatsActive )
			{
   
				ThreadStats->FlushRawStats();
			}
		}
	}
  1. Stats 数据通常在Engine/Source/Runtime/Cores/Private/Stats 文件中
  2. 上述代码获取stat数据名字,当前收集到的值等等
  3. 宏定义中:SET_CYCLE_COUNTER,INC_DWORD_STAT,INC_MEMORY_STAT_BY等等都调用了AddMessage函数
  4. FThreadStats* ThreadStats = GetThreadStats(); 获取Stats名字,如果没有创建一个

Stat GPU

  1. RealtimeGPUProfiler.h: 单例
  2. TArray<FRealtimeGPUProfilerFrame*> Frames: stat gpu 存储数据的容器
  3. FRealtimeGPUProfilerFrame还有几个容器是存储数据时间的容器

UpdateStats函数

bool UpdateStats(FRHICommandListImmediate& RHICmdList)
{
   
	// Gather any remaining results and check all the results are ready
	const int32 NumEventsThisFramePlusOne = NextEventIdx;

	for (; NextResultPendingEventIdx < NumEventsThisFramePlusOne; ++NextResultPendingEventIdx)
	{
   
		FRealtimeGPUProfilerEvent& Event = GpuProfilerEvents[NextResultPendingEventIdx];

		if (!Event.GatherQueryResults(RHICmdList))
		{
   
#if !(UE_BUILD_SHIPPING || UE_BUILD_TEST)
			UE_LOG(LogRendererCore, Warning, TEXT(
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值