ImGuiMonitor.cpp 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. /*
  2. * Copyright (c) Contributors to the Open 3D Engine Project.
  3. * For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. *
  5. * SPDX-License-Identifier: Apache-2.0 OR MIT
  6. *
  7. */
  8. #ifdef IMGUI_ENABLED
  9. #include <Allocators.h>
  10. #include <ImGuiMonitor.h>
  11. namespace EMotionFX::MotionMatching
  12. {
  13. AZ_CLASS_ALLOCATOR_IMPL(ImGuiMonitor, MotionMatchAllocator)
  14. ImGuiMonitor::ImGuiMonitor()
  15. {
  16. m_performanceStats.SetName("Performance Statistics");
  17. m_performanceStats.SetHistogramBinCount(500);
  18. m_featureCosts.SetName("Feature Costs");
  19. m_featureCosts.SetHistogramBinCount(100);
  20. ImGui::ImGuiUpdateListenerBus::Handler::BusConnect();
  21. ImGuiMonitorRequestBus::Handler::BusConnect();
  22. }
  23. ImGuiMonitor::~ImGuiMonitor()
  24. {
  25. ImGui::ImGuiUpdateListenerBus::Handler::BusDisconnect();
  26. ImGuiMonitorRequestBus::Handler::BusDisconnect();
  27. }
  28. void ImGuiMonitor::OnImGuiUpdate()
  29. {
  30. if (!m_performanceStats.m_show && !m_featureCosts.m_show)
  31. {
  32. return;
  33. }
  34. if (ImGui::Begin("Motion Matching"))
  35. {
  36. if (ImGui::CollapsingHeader("Motion Database", ImGuiTreeNodeFlags_DefaultOpen | ImGuiTreeNodeFlags_Framed))
  37. {
  38. if (ImGui::BeginTable("MDB", 2))
  39. {
  40. ImGui::TableNextColumn(); ImGui::Text("Memory Usage: %.2f MB", m_frameDatabaseInfo.m_memoryUsedInBytes / 1024.0f / 1024.0f);
  41. ImGui::TableNextColumn(); ImGui::Text("Motion Data: %.0f minutes", m_frameDatabaseInfo.m_motionDataInSeconds / 60.0f);
  42. ImGui::TableNextColumn(); ImGui::Text("Num Frames: %zu", m_frameDatabaseInfo.m_numFrames);
  43. ImGui::TableNextColumn(); ImGui::Text("Num Motions: %zu", m_frameDatabaseInfo.m_numMotions);
  44. ImGui::EndTable();
  45. }
  46. }
  47. if (ImGui::CollapsingHeader("Feature Matrix", ImGuiTreeNodeFlags_DefaultOpen | ImGuiTreeNodeFlags_Framed))
  48. {
  49. if (ImGui::BeginTable("FM", 2))
  50. {
  51. ImGui::TableNextColumn(); ImGui::Text("Memory Usage: %.2f MB", m_featurMatrixInfo.m_memoryUsedInBytes / 1024.0f / 1024.0f);
  52. ImGui::TableNextColumn();
  53. ImGui::TableNextColumn(); ImGui::Text("Num Frames: %zu", m_featurMatrixInfo.m_numFrames);
  54. ImGui::TableNextColumn(); ImGui::Text("Num Feature Components: %zu", m_featurMatrixInfo.m_numDimensions);
  55. ImGui::EndTable();
  56. }
  57. }
  58. if (ImGui::CollapsingHeader("Kd-Tree", ImGuiTreeNodeFlags_DefaultOpen | ImGuiTreeNodeFlags_Framed))
  59. {
  60. if (ImGui::BeginTable("KDT", 2))
  61. {
  62. ImGui::TableNextColumn(); ImGui::Text("Memory Usage: %.2f MB", m_kdTreeInfo.m_memoryUsedInBytes / 1024.0f / 1024.0f);
  63. ImGui::TableNextColumn();
  64. ImGui::TableNextColumn(); ImGui::Text("Num Nodes: %zu", m_kdTreeInfo.m_numNodes);
  65. ImGui::TableNextColumn(); ImGui::Text("Num Dimensions: %zu", m_kdTreeInfo.m_numDimensions);
  66. ImGui::EndTable();
  67. }
  68. }
  69. m_performanceStats.OnImGuiUpdate();
  70. m_featureCosts.OnImGuiUpdate();
  71. }
  72. }
  73. void ImGuiMonitor::OnImGuiMainMenuUpdate()
  74. {
  75. if (ImGui::BeginMenu("Motion Matching"))
  76. {
  77. ImGui::MenuItem(m_performanceStats.GetName(), "", &m_performanceStats.m_show);
  78. ImGui::MenuItem(m_featureCosts.GetName(), "", &m_featureCosts.m_show);
  79. ImGui::EndMenu();
  80. }
  81. }
  82. void ImGuiMonitor::PushPerformanceHistogramValue(const char* performanceMetricName, float value)
  83. {
  84. m_performanceStats.PushHistogramValue(performanceMetricName, value, AZ::Color::CreateFromRgba(229,56,59,255));
  85. }
  86. void ImGuiMonitor::PushCostHistogramValue(const char* costName, float value, const AZ::Color& color)
  87. {
  88. m_featureCosts.PushHistogramValue(costName, value, color);
  89. }
  90. } // namespace EMotionFX::MotionMatching
  91. #endif // IMGUI_ENABLED