< Summary

Class:DCL.FPSDisplay.FPSDisplay
Assembly:FPSDisplay
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/Debugging/FPSDisplay/FPSDisplay.cs
Covered lines:0
Uncovered lines:90
Coverable lines:90
Total lines:168
Line coverage:0% (0 of 90)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
FPSDisplay()0%2100%
OnEnable()0%12300%
SetupRealm()0%2100%
SetupKernelConfig()0%2100%
UpdateRealm(...)0%12300%
OnKernelConfigChanged(...)0%2100%
OnKernelConfigChanged(...)0%6200%
OnOtherPlayersModified(...)0%2100%
SetVersion(...)0%2100%
OnDisable()0%2100%
UpdateLabelLoop()0%12300%
UpdateLabel()0%12300%
UpdateBackgroundSize()0%6200%
GetHexColor(...)0%2100%
GetColor(...)0%2100%
GetTitle(...)0%2100%
GetLine(...)0%2100%
GetEmptyLine()0%2100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/Debugging/FPSDisplay/FPSDisplay.cs

#LineLine coverage
 1using System;
 2using System.Collections;
 3using DCL.Helpers;
 4using TMPro;
 5using UnityEngine;
 6using Variables.RealmsInfo;
 7
 8namespace DCL.FPSDisplay
 9{
 10    public class FPSDisplay : MonoBehaviour
 11    {
 12        private const float REFRESH_SECONDS = 0.1f;
 013        [SerializeField] private Vector2 labelPadding = new Vector2(12, 12);
 14
 15        [SerializeField] private TextMeshProUGUI label;
 16        [SerializeField] private RectTransform background;
 17        [SerializeField] private PerformanceMetricsDataVariable performanceData;
 18
 019        public string versions = "Kernel: Unity renderer:";
 20
 021        private BaseDictionary<string, Player> otherPlayers => DataStore.i.player.otherPlayers;
 22        private int lastPlayerCount;
 023        private CurrentRealmVariable currentRealm => DataStore.i.realm.playerRealm;
 24
 25        private Promise<KernelConfigModel> kernelConfigPromise;
 026        private string currentNetwork = string.Empty;
 027        private string currentRealmValue = string.Empty;
 28
 029        private Vector2 minSize = Vector2.zero;
 30
 31        private void OnEnable()
 32        {
 033            if (label == null || performanceData == null)
 034                return;
 35
 036            lastPlayerCount = otherPlayers.Count();
 037            otherPlayers.OnAdded += OnOtherPlayersModified;
 038            otherPlayers.OnRemoved += OnOtherPlayersModified;
 039            DataStore.i.debugConfig.versions.OnChange += SetVersion;
 40
 041            SetupKernelConfig();
 042            SetupRealm();
 43
 044            StartCoroutine(UpdateLabelLoop());
 045        }
 46
 47        private void SetupRealm()
 48        {
 049            currentRealm.OnChange += UpdateRealm;
 050            UpdateRealm(currentRealm.Get(), null);
 051        }
 52
 53        private void SetupKernelConfig()
 54        {
 055            kernelConfigPromise = KernelConfig.i.EnsureConfigInitialized();
 056            kernelConfigPromise.Catch(Debug.Log);
 057            kernelConfigPromise.Then(OnKernelConfigChanged);
 058            KernelConfig.i.OnChange += OnKernelConfigChanged;
 059        }
 60
 61        private void UpdateRealm(CurrentRealmModel current, CurrentRealmModel previous)
 62        {
 063            if (current == null) return;
 064            currentRealmValue = current.serverName ?? string.Empty;
 065        }
 66
 067        private void OnKernelConfigChanged(KernelConfigModel current, KernelConfigModel previous) { OnKernelConfigChange
 068        private void OnKernelConfigChanged(KernelConfigModel kernelConfig) { currentNetwork = kernelConfig.network ?? st
 69
 070        private void OnOtherPlayersModified(string playerName, Player player) { lastPlayerCount = otherPlayers.Count(); 
 71
 72        private void SetVersion(string current, string previous)
 73        {
 074            versions = current;
 075        }
 76
 77        private void OnDisable()
 78        {
 079            otherPlayers.OnAdded -= OnOtherPlayersModified;
 080            otherPlayers.OnRemoved -= OnOtherPlayersModified;
 081            currentRealm.OnChange -= UpdateRealm;
 082            kernelConfigPromise.Dispose();
 083            KernelConfig.i.OnChange -= OnKernelConfigChanged;
 084            DataStore.i.debugConfig.versions.OnChange -= SetVersion;
 085            StopAllCoroutines();
 086        }
 87
 88        private IEnumerator UpdateLabelLoop()
 89        {
 090            while (true)
 91            {
 092                UpdateLabel();
 093                UpdateBackgroundSize();
 94
 095                yield return new WaitForSeconds(REFRESH_SECONDS);
 96            }
 97        }
 98
 99        private void UpdateLabel()
 100        {
 0101            float dt = Time.unscaledDeltaTime;
 102
 0103            float fps = performanceData.Get().fpsCount;
 104
 0105            string fpsFormatted = fps.ToString("##");
 0106            string msFormatted = (dt * 1000).ToString("##");
 107
 0108            string targetText = string.Empty;
 109
 0110            string NO_DECIMALS = "##";
 0111            string TWO_DECIMALS = "##.00";
 112
 0113            Color fpsColor = FPSColoring.GetDisplayColor(fps);
 114
 0115            targetText += GetColor(GetHexColor(Color.white));
 0116            targetText += GetTitle("Version");
 0117            targetText += GetLine($"{versions}");
 0118            targetText += GetTitle("Skybox");
 0119            targetText += GetLine($"Config: {DataStore.i.skyboxConfig.configToLoad.Get()}");
 0120            targetText += GetLine($"Duration: {DataStore.i.skyboxConfig.lifecycleDuration.Get()}");
 0121            targetText += GetLine($"Game Time: {DataStore.i.skyboxConfig.currentVirtualTime.Get().ToString(TWO_DECIMALS)
 0122            targetText += GetLine($"UTC Time: {DataStore.i.worldTimer.GetCurrentTime().ToString()}");
 0123            targetText += GetEmptyLine();
 124
 0125            targetText += GetTitle("General");
 0126            targetText += GetLine($"Network: {currentNetwork.ToUpper()}");
 0127            targetText += GetLine($"Realm: {currentRealmValue.ToUpper()}");
 0128            targetText += GetLine($"Nearby players: {lastPlayerCount}");
 0129            targetText += GetEmptyLine();
 130
 0131            targetText += GetColor(GetHexColor(fpsColor));
 0132            targetText += GetTitle("FPS");
 0133            targetText += GetLine($"Hiccups in the last 1000 frames: {performanceData.Get().hiccupCount}");
 0134            targetText += GetLine($"Hiccup loss: {(100.0f * performanceData.Get().hiccupSum / performanceData.Get().tota
 0135            targetText += GetLine($"Bad Frames Percentile: {((performanceData.Get().hiccupCount) / 10.0f).ToString(NO_DE
 0136            targetText += GetLine($"Current {msFormatted} ms (fps: {fpsFormatted})");
 137
 0138            if (label.text != targetText)
 139            {
 0140                label.text = targetText;
 141            }
 0142        }
 143        private void UpdateBackgroundSize()
 144        {
 0145            var labelSize = label.GetPreferredValues();
 0146            var tempMinSize = labelSize + labelPadding;
 0147            tempMinSize.x = Mathf.Max(tempMinSize.x, minSize.x);
 0148            tempMinSize.y = Mathf.Max(tempMinSize.y, minSize.y);
 149
 0150            if (tempMinSize != minSize)
 151            {
 0152                background.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, tempMinSize.x);
 0153                background.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, tempMinSize.y);
 154
 0155                minSize = tempMinSize;
 156            }
 0157        }
 0158        private static string GetHexColor(Color color) { return $"#{ColorUtility.ToHtmlStringRGB(color)}"; }
 159
 0160        private string GetColor(string color) { return $"<color={color}>"; }
 161
 0162        private string GetTitle(string text) { return $"<voffset=0.1em><u><size=110%>{text}<size=100%></u></voffset><br>
 163
 0164        private string GetLine(string text) { return $"{text}<br>"; }
 165
 0166        private string GetEmptyLine() { return "<br>"; }
 167    }
 168}