首页 > 代码库 > 16011301(统计指令数影响耗时)

16011301(统计指令数影响耗时)

【目标】

统计指令数影响耗时

【思路】

1 相同模型,换材质之后


2 看下ShaderComplexity

技术分享


配置文件中

技术分享

usf中计算颜色方式

技术分享

也就是越复杂,就颜色 绿->红->白


3 耗时统计显示

将有用的集合起来吧


4 每个Component的耗时


5 添加一列百分比,用于选中某一列排序时,进行百分比计算

技术分享


WxTextureStatsBrowser这个是做啥的??

WxGameStatsVisualizer ?


技术分享

上面的耗时统计方法

appCycle

计算公式

GSecondsPerCycle * 1000.f * dwTimes

技术分享




【步骤】

1 添加一列Percent

下图

技术分享



WxPrimitiveStatsBrowser.UpdatePercentList.

  1. void WxPrimitiveStatsBrowser::UpdatePercentList(UBOOL bResizeColumns/*=TRUE*/)
  2. {
  3. BeginUpdate();
  4. ListControl->Freeze();
  5. {
  6. INT nCount = ListControl->GetItemCount();
  7. //Get the aggregate count
  8. wxListItem ItemData;
  9. ItemData.SetId(0);// 行
  10. ItemData.SetColumn(WxPrimitiveStatsBrowser::PrimarySortIndex);
  11. ItemData.SetMask(wxLIST_MASK_TEXT);
  12. ListControl->GetItem(ItemData);
  13. //Get the value
  14. FString TotalValue = ItemData.GetText();
  15. // Strip off
  16. INT NameStartIndex = TotalValue.InStr(TEXT(","));
  17. while(NameStartIndex != INDEX_NONE)
  18. {
  19. TotalValue = TotalValue.Left(NameStartIndex)+ TotalValue.RightChop(NameStartIndex+1);
  20. NameStartIndex = TotalValue.InStr(TEXT(","));
  21. }
  22. INT nTotalValue = appAtoi(*TotalValue);
  23. for( INT RowIndex=0; RowIndex<nCount; RowIndex++ )
  24. {
  25. //Get the aggregate count
  26. wxListItem ItemData;
  27. ItemData.SetId(RowIndex);// 行
  28. ItemData.SetColumn(WxPrimitiveStatsBrowser::PrimarySortIndex);
  29. ItemData.SetMask(wxLIST_MASK_TEXT);
  30. ListControl->GetItem(ItemData);
  31. //Get the value
  32. //Get the value
  33. FString ItemValue = ItemData.GetText();
  34. // Strip off
  35. INT NameStartIndex = ItemValue.InStr(TEXT(","));
  36. while(NameStartIndex != INDEX_NONE)
  37. {
  38. ItemValue = ItemValue.Left(NameStartIndex) + ItemValue.RightChop(NameStartIndex+1);
  39. NameStartIndex = ItemValue.InStr(TEXT(","));
  40. }
  41. INT nValue = appAtoi(*ItemValue);
  42. FLOAT Percent = (FLOAT)nValue / (FLOAT)nTotalValue;
  43. ListControl->SetItem( RowIndex, PCSBC_Percent, *FString::Printf(TEXT("%.3f%%"),Percent* 100.f) ); // Percent
  44. }
  45. // Set proper column width.
  46. if(bResizeColumns == TRUE)
  47. {
  48. SetAutoColumnWidth();
  49. }
  50. }
  51. ListControl->Thaw();
  52. EndUpdate();
  53. }
技术分享
3 测试StaticMesh的时间消耗统计,在TStaticMeshDrawList.DrawElement 中
  1. #if STATS
  2. ...
  3. // Grab our start time
  4. DWORD StartCycles = appCycles();
  5. #endif
  6. ....
  7. #if STATS
  8. // thread while be updated by this thread
  9. Element.Mesh->PrimitiveSceneInfo->Component->DrawTimes += (appCycles() - StartCycles) * GSecondsPerCycle * 1000.f;
  10. #endif

技术分享


4 把它显示列表中
技术分享

5
技术分享
图中Stat面板统计的DrawCall数量和DrawTimes于Stat指令统计的有出入


6 添加分类统计,添加隐藏显示勾选
技术分享技术分享

7










null


16011301(统计指令数影响耗时)