You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
CrowdControl/Assets/3rd/StompyRobot/SRDebugger/Scripts/UI/Controls/Profiler/ProfilerMonoBlock.cs

92 lines
2.3 KiB
C#

3 months ago
namespace SRDebugger.UI.Controls
{
using System;
using SRF;
using UnityEngine;
using UnityEngine.UI;
#if UNITY_5_5_OR_NEWER
using UnityEngine.Profiling;
#endif
public class ProfilerMonoBlock : SRMonoBehaviourEx
{
private float _lastRefresh;
[RequiredField]
public Text CurrentUsedText;
[RequiredField]
public GameObject NotSupportedMessage;
[RequiredField]
public Slider Slider;
[RequiredField]
public Text TotalAllocatedText;
private bool _isSupported;
protected override void OnEnable()
{
base.OnEnable();
#if UNITY_5_6_OR_NEWER
_isSupported = Profiler.GetMonoUsedSizeLong() > 0;
#else
_isSupported = Profiler.GetMonoUsedSize() > 0;
#endif
NotSupportedMessage.SetActive(!_isSupported);
CurrentUsedText.gameObject.SetActive(_isSupported);
TriggerRefresh();
}
protected override void Update()
{
base.Update();
if (SRDebug.Instance.IsDebugPanelVisible && (Time.realtimeSinceStartup - _lastRefresh > 1f))
{
TriggerRefresh();
_lastRefresh = Time.realtimeSinceStartup;
}
}
public void TriggerRefresh()
{
long max;
long current;
#if UNITY_5_6_OR_NEWER
max = _isSupported ? Profiler.GetMonoHeapSizeLong() : GC.GetTotalMemory(false);
current = Profiler.GetMonoUsedSizeLong();
#else
max = _isSupported ? Profiler.GetMonoHeapSize() : GC.GetTotalMemory(false);
current = Profiler.GetMonoUsedSize();
#endif
var maxMb = (max >> 10);
maxMb /= 1024; // On new line to workaround IL2CPP bug
var currentMb = (current >> 10);
currentMb /= 1024;
Slider.maxValue = maxMb;
Slider.value = currentMb;
TotalAllocatedText.text = "Total: <color=#FFFFFF>{0}</color>MB".Fmt(maxMb);
if (currentMb > 0)
{
CurrentUsedText.text = "<color=#FFFFFF>{0}</color>MB".Fmt(currentMb);
}
}
public void TriggerCollection()
{
GC.Collect();
TriggerRefresh();
}
}
}