MultiplayerDebugSystemComponent.h 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  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. #pragma once
  9. #include "MultiplayerDebugAuditTrail.h"
  10. #include "MultiplayerDebugHierarchyReporter.h"
  11. #include "MultiplayerDebugPerEntityReporter.h"
  12. #include <AzCore/Component/Component.h>
  13. #include <AzCore/Interface/Interface.h>
  14. #include <Debug/MultiplayerDebugNetworkMetrics.h>
  15. #include <Debug/MultiplayerDebugMultiplayerMetrics.h>
  16. #include <Multiplayer/IMultiplayerDebug.h>
  17. #ifdef IMGUI_ENABLED
  18. # include <imgui/imgui.h>
  19. # include <ImGuiBus.h>
  20. # include <LYImGuiUtils/HistogramContainer.h>
  21. #endif
  22. namespace Multiplayer
  23. {
  24. class MultiplayerDebugSystemComponent final
  25. : public AZ::Component
  26. , public AZ::Interface<IMultiplayerDebug>::Registrar
  27. #ifdef IMGUI_ENABLED
  28. , public ImGui::ImGuiUpdateListenerBus::Handler
  29. #endif
  30. {
  31. public:
  32. static constexpr char HostLevelMenuTitle[] = "Host Level";
  33. static constexpr char LaunchLocalClientButtonTitle[] = "Launch Local Client";
  34. static constexpr char NoMultiplayerLevelsFound[] = "No multiplayer levels found";
  35. AZ_COMPONENT(MultiplayerDebugSystemComponent, "{060BF3F1-0BFE-4FCE-9C3C-EE991F0DA581}");
  36. static void Reflect(AZ::ReflectContext* context);
  37. static void GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provided);
  38. static void GetRequiredServices(AZ::ComponentDescriptor::DependencyArrayType& required);
  39. static void GetIncompatibleServices(AZ::ComponentDescriptor::DependencyArrayType& incompatible);
  40. ~MultiplayerDebugSystemComponent() override = default;
  41. //! AZ::Component overrides
  42. //! @{
  43. void Activate() override;
  44. void Deactivate() override;
  45. //! @}
  46. //! IMultiplayerDebug overrides
  47. //! @{
  48. void ShowEntityBandwidthDebugOverlay() override;
  49. void HideEntityBandwidthDebugOverlay() override;
  50. void AddAuditEntry(
  51. const AuditCategory category,
  52. const ClientInputId inputId,
  53. const HostFrameId frameId,
  54. const AZStd::string& name,
  55. AZStd::vector<MultiplayerAuditingElement>&& entryDetails) override;
  56. //! @}
  57. #ifdef IMGUI_ENABLED
  58. //! ImGui::ImGuiUpdateListenerBus overrides
  59. //! @{
  60. void OnImGuiMainMenuUpdate() override;
  61. void OnImGuiUpdate() override;
  62. //! @}
  63. private:
  64. //! Constructs a filtered version of the audit trail based on a search string
  65. void FilterAuditTrail();
  66. bool m_displayNetworkingStats = false;
  67. AZStd::unique_ptr<MultiplayerDebugNetworkMetrics> m_networkMetrics;
  68. bool m_displayMultiplayerStats = false;
  69. AZStd::unique_ptr<MultiplayerDebugMultiplayerMetrics> m_multiplayerMetrics;
  70. bool m_displayPerEntityStats = false;
  71. AZStd::unique_ptr<MultiplayerDebugPerEntityReporter> m_reporter;
  72. bool m_displayHierarchyDebugger = false;
  73. AZStd::unique_ptr<MultiplayerDebugHierarchyReporter> m_hierarchyDebugger;
  74. bool m_displayNetAuditTrail = false;
  75. AZStd::unique_ptr<MultiplayerDebugAuditTrail> m_auditTrail;
  76. AZStd::string m_lastFilter;
  77. AZStd::deque<AuditTrailInput> m_auditTrailElems;
  78. AZStd::deque<AuditTrailInput> m_committedAuditTrail;
  79. AZStd::deque<AuditTrailInput> m_pendingAuditTrail;
  80. AZStd::deque<AuditTrailInput> m_filteredAuditTrail;
  81. AZ::ApplicationTypeQuery m_applicationType;
  82. #endif
  83. };
  84. }