| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 | using System;using System.Collections.Generic;using System.Text;using UnityEngine;namespace XCharts.Runtime{    [Serializable]    public class DebugInfo    {#pragma warning disable 0414        [SerializeField] private bool m_Show = true;#pragma warning restore 0414        [SerializeField] private bool m_ShowDebugInfo = false;        [SerializeField] protected bool m_ShowAllChartObject = false;        [SerializeField] protected bool m_FoldSeries = false;        [SerializeField]        private LabelStyle m_LabelStyle = new LabelStyle()        {            background = new ImageStyle()            {            color = new Color32(32, 32, 32, 170)            },            textStyle = new TextStyle()            {            fontSize = 18,            color = Color.white            }        };        private static StringBuilder s_Sb = new StringBuilder();        private static readonly float INTERVAL = 0.2f;        private static readonly float MAXCACHE = 20;        private int m_FrameCount = 0;        private float m_LastTime = 0f;        private float m_LastCheckShowTime = 0f;        private int m_LastRefreshCount = 0;        private BaseChart m_Chart;        private ChartLabel m_Label;        private List<float> m_FpsList = new List<float>();        /// <summary>        /// Whether show debug component.        /// ||是否显示Debug组件。        /// </summary>        public bool show { get { return m_Show; } set { m_Show = value; } }        /// <summary>        /// Whether show children components of chart in hierarchy view.        /// ||是否在Hierarchy试图显示所有chart下的节点。        /// </summary>        public bool showAllChartObject { get { return m_ShowAllChartObject; } set { m_ShowAllChartObject = value; } }        /// <summary>        /// Whether to fold series in inspector view.        /// ||是否在Inspector上折叠Serie。        /// </summary>        public bool foldSeries { get { return m_FoldSeries; } set { m_FoldSeries = value; } }        /// <summary>        /// frame rate.        /// ||当前帧率。        /// </summary>        public float fps { get; private set; }        /// <summary>        /// The average frame rate.        /// ||平均帧率。        /// </summary>        public float avgFps { get; private set; }        /// <summary>        /// The fefresh count of chart per second.        /// ||图表每秒刷新次数。        /// </summary>        public int refreshCount { get; internal set; }        internal int clickChartCount { get; set; }        public void Init(BaseChart chart)        {            m_Chart = chart;            m_Label = AddDebugInfoObject("debug", chart.transform, m_LabelStyle, chart.theme);        }        public void Update()        {            if (clickChartCount > 2)            {                m_ShowDebugInfo = !m_ShowDebugInfo;                ChartHelper.SetActive(m_Label.transform, m_ShowDebugInfo);                clickChartCount = 0;                m_LastCheckShowTime = Time.realtimeSinceStartup;                return;            }            if (Time.realtimeSinceStartup - m_LastCheckShowTime > 0.5f)            {                m_LastCheckShowTime = Time.realtimeSinceStartup;                clickChartCount = 0;            }            if (!m_ShowDebugInfo || m_Label == null)                return;            m_FrameCount++;            if (Time.realtimeSinceStartup - m_LastTime >= INTERVAL)            {                fps = m_FrameCount / (Time.realtimeSinceStartup - m_LastTime);                m_FrameCount = 0;                m_LastTime = Time.realtimeSinceStartup;                if (m_LastRefreshCount == refreshCount)                {                    m_LastRefreshCount = 0;                    refreshCount = 0;                }                m_LastRefreshCount = refreshCount;                if (m_FpsList.Count > MAXCACHE)                {                    m_FpsList.RemoveAt(0);                }                m_FpsList.Add(fps);                avgFps = GetAvg(m_FpsList);                if (m_Label != null)                {                    s_Sb.Length = 0;                    s_Sb.AppendFormat("v{0}\n", XChartsMgr.version);                    s_Sb.AppendFormat("fps : {0:f0} / {1:f0}\n", fps, avgFps);                    s_Sb.AppendFormat("draw : {0}\n", refreshCount);                    var dataCount = m_Chart.GetAllSerieDataCount();                    SetValueWithKInfo(s_Sb, "data", dataCount);                    var vertCount = 0;                    foreach (var serie in m_Chart.series)                        vertCount += serie.context.vertCount;                    SetValueWithKInfo(s_Sb, "b-vert", m_Chart.m_BasePainterVertCount);                    SetValueWithKInfo(s_Sb, "s-vert", vertCount);                    SetValueWithKInfo(s_Sb, "t-vert", m_Chart.m_TopPainterVertCount, false);                    m_Label.SetText(s_Sb.ToString());                }            }        }        private static void SetValueWithKInfo(StringBuilder s_Sb, string key, int value, bool newLine = true)        {            if (value >= 1000)                s_Sb.AppendFormat("{0} : {1:f1}k", key, value * 0.001f);            else                s_Sb.AppendFormat("{0} : {1}", key, value);            if (newLine)                s_Sb.Append("\n");        }        private static float GetAvg(List<float> list)        {            var total = 0f;            foreach (var v in list) total += v;            return total / list.Count;        }        private ChartLabel AddDebugInfoObject(string name, Transform parent, LabelStyle labelStyle,            ThemeStyle theme)        {            var anchorMax = new Vector2(0, 1);            var anchorMin = new Vector2(0, 1);            var pivot = new Vector2(0, 1);            var sizeDelta = new Vector2(100, 100);            var labelGameObject = ChartHelper.AddObject(name, parent, anchorMin, anchorMax, pivot, sizeDelta);            labelGameObject.transform.SetAsLastSibling();            labelGameObject.hideFlags = m_Chart.chartHideFlags;            ChartHelper.SetActive(labelGameObject, m_ShowDebugInfo);            var label = ChartHelper.AddChartLabel("info", labelGameObject.transform, labelStyle, theme.common,                "", Color.clear, TextAnchor.UpperLeft);            label.SetActive(labelStyle.show);            return label;        }    }}
 |