using UnityEngine; using UnityEngine.UI; using UnityEngine.XR; namespace Unity.XR.XREAL.Samples { /// /// This class is used to display the metrics of the XR display subsystem. /// public class MetricsPanel : MonoBehaviour { [SerializeField] Text m_MotionToPhotonText, m_DroppedFrameText, m_FramePresentText, m_DisplayRefreshRateText, m_ExtendedFrameText, m_EarlyFrameText, m_TearedFrameText; XRDisplaySubsystem m_DisplaySubsystem; bool m_EnableTearedFrameCount = false; bool m_EnableRenderBackColor = false; void Start() { m_DisplaySubsystem = XREALUtility.GetLoadedSubsystem(); if (m_DisplaySubsystem == null) enabled = false; } void Update() { if (m_DisplaySubsystem.TryGetMotionToPhoton(out float motionToPhoton)) { m_MotionToPhotonText.text = string.Format("{0:F2}ms", motionToPhoton * 1000); } if (m_DisplaySubsystem.TryGetDroppedFrameCount(out int droppedFrameCount)) { m_DroppedFrameText.text = droppedFrameCount.ToString(); } if (m_DisplaySubsystem.TryGetFramePresentCount(out int framePresentCount)) { m_FramePresentText.text = framePresentCount.ToString(); } if (m_DisplaySubsystem.TryGetDisplayRefreshRate(out float displayRefreshRate)) { m_DisplayRefreshRateText.text = displayRefreshRate.ToString(); } if (UnityEngine.XR.Provider.XRStats.TryGetStat(m_DisplaySubsystem, "ExtendedFrameCount", out float extendedFrameCount)) { m_ExtendedFrameText.text = extendedFrameCount.ToString(); } if (UnityEngine.XR.Provider.XRStats.TryGetStat(m_DisplaySubsystem, "EarlyFrameCount", out float earlyFrameCount)) { m_EarlyFrameText.text = earlyFrameCount.ToString(); } if (UnityEngine.XR.Provider.XRStats.TryGetStat(m_DisplaySubsystem, "TearedFrameCount", out float tearedFrameCount)) { m_TearedFrameText.text = tearedFrameCount.ToString(); } } /// /// Enable or disable the teared frame count. /// public void EnableTearedFrameCount() { m_EnableTearedFrameCount = !m_EnableTearedFrameCount; m_DisplaySubsystem.EnableTearedFrameCount(m_EnableTearedFrameCount); } /// /// Enable or disable the render back color. /// public void EnableRenderBackColor() { m_EnableRenderBackColor = !m_EnableRenderBackColor; m_DisplaySubsystem.EnableRenderBackColor(m_EnableRenderBackColor); } } }