92 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			92 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C#
		
	
	
	
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();
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |