【目标】
统计指令数影响耗时
【思路】
1 相同模型,换材质之后
2 看下ShaderComplexity
配置文件中
usf中计算颜色方式
也就是越复杂,就颜色 绿->红->白
3 耗时统计显示
将有用的集合起来吧
4 每个Component的耗时
5 添加一列百分比,用于选中某一列排序时,进行百分比计算
6 WxTextureStatsBrowser这个是做啥的??
WxGameStatsVisualizer ?
7
上面的耗时统计方法
appCycle
计算公式
GSecondsPerCycle * 1000.f * dwTimes
【步骤】
1 添加一列Percent
下图
2 WxPrimitiveStatsBrowser.UpdatePercentList.
void WxPrimitiveStatsBrowser::UpdatePercentList(UBOOL bResizeColumns/*=TRUE*/)
{
BeginUpdate();
ListControl->Freeze();
{
INT nCount = ListControl->GetItemCount();
//Get the aggregate count
wxListItem ItemData;
ItemData.SetId(0);// 行
ItemData.SetColumn(WxPrimitiveStatsBrowser::PrimarySortIndex);
ItemData.SetMask(wxLIST_MASK_TEXT);
ListControl->GetItem(ItemData);
//Get the value
FString TotalValue = ItemData.GetText();
// Strip off
INT NameStartIndex = TotalValue.InStr(TEXT(","));
while(NameStartIndex != INDEX_NONE)
{
TotalValue = TotalValue.Left(NameStartIndex)+ TotalValue.RightChop(NameStartIndex+1);
NameStartIndex = TotalValue.InStr(TEXT(","));
}
INT nTotalValue = appAtoi(*TotalValue);
for( INT RowIndex=0; RowIndex<nCount; RowIndex++ )
{
//Get the aggregate count
wxListItem ItemData;
ItemData.SetId(RowIndex);// 行
ItemData.SetColumn(WxPrimitiveStatsBrowser::PrimarySortIndex);
ItemData.SetMask(wxLIST_MASK_TEXT);
ListControl->GetItem(ItemData);
//Get the value
//Get the value
FString ItemValue = ItemData.GetText();
// Strip off
INT NameStartIndex = ItemValue.InStr(TEXT(","));
while(NameStartIndex != INDEX_NONE)
{
ItemValue = ItemValue.Left(NameStartIndex) + ItemValue.RightChop(NameStartIndex+1);
NameStartIndex = ItemValue.InStr(TEXT(","));
}
INT nValue = appAtoi(*ItemValue);
FLOAT Percent = (FLOAT)nValue / (FLOAT)nTotalValue;
ListControl->SetItem( RowIndex, PCSBC_Percent, *FString::Printf(TEXT("%.3f%%"),Percent* 100.f) ); // Percent
}
// Set proper column width.
if(bResizeColumns == TRUE)
{
SetAutoColumnWidth();
}
}
ListControl->Thaw();
EndUpdate();
}
![](https://images2015.cnblogs.com/blog/442386/201705/442386-20170510204934910-885947512.png)
3 测试StaticMesh的时间消耗统计,在TStaticMeshDrawList.DrawElement 中
#if STATS
...
// Grab our start time
DWORD StartCycles = appCycles();
#endif
....
#if STATS
// thread while be updated by this thread
Element.Mesh->PrimitiveSceneInfo->Component->DrawTimes += (appCycles() - StartCycles) * GSecondsPerCycle * 1000.f;
#endif
![](https://images2015.cnblogs.com/blog/442386/201705/442386-20170510204935926-1149373325.png)
4 把它显示列表中
![](https://images2015.cnblogs.com/blog/442386/201705/442386-20170510204936629-1741307044.png)
5
![](https://images2015.cnblogs.com/blog/442386/201705/442386-20170510204951738-1734011239.png)
图中Stat面板统计的DrawCall数量和DrawTimes于Stat指令统计的有出入
6 添加分类统计,添加隐藏显示勾选
![](https://images2015.cnblogs.com/blog/442386/201705/442386-20170510205016941-1384024631.png)
![](https://images2015.cnblogs.com/blog/442386/201705/442386-20170510205018332-1861293789.png)
7