diff --git a/Assets/XChartsDemo/Runtime/Demo_Performance.cs b/Assets/XChartsDemo/Runtime/Demo_Performance.cs new file mode 100644 index 00000000..9b099240 --- /dev/null +++ b/Assets/XChartsDemo/Runtime/Demo_Performance.cs @@ -0,0 +1,131 @@ +/******************************************/ +/* */ +/* Copyright (c) 2018 monitor1394 */ +/* https://github.com/monitor1394 */ +/* */ +/******************************************/ + +using UnityEngine; +using UnityEngine.UI; +using UnityEngine.Events; +using XCharts; + +namespace XChartsDemo +{ + [DisallowMultipleComponent] + [ExecuteInEditMode] + public class Demo_Performance : MonoBehaviour + { + [SerializeField] private float fps = 0; + [SerializeField] private int m_MaxCacheDataNumber = 3000; + + private const float INTERVAL = 0.2f; + private int frameCount = 0; + private float lastTime = 0f; + private int initCount = 0; + private System.DateTime timeNow; + + private LineChart fpsChart; + private LineChart lineChart; + private BarChart barChart; + private Text fpsText; + + void Awake() + { + fpsChart = transform.Find("fps/FpsChart").gameObject.GetComponent(); + lineChart = transform.Find("charts/LineChart").gameObject.GetComponent(); + barChart = transform.Find("charts/BarChart").gameObject.GetComponent(); + fpsText = transform.Find("settings/txtFps").gameObject.GetComponent(); + fpsChart.ClearData(); + lineChart.ClearData(); + barChart.ClearData(); + InitCharts(); + } + + void Start() + { + lastTime = Time.realtimeSinceStartup; + } + + void Update() + { + frameCount++; + if (initCount < m_MaxCacheDataNumber) + { + for (int i = 0; i < 10; i++) + { + initCount++; + if (initCount > m_MaxCacheDataNumber) break; + AddOneData(); + } + } + if (Time.realtimeSinceStartup - lastTime >= INTERVAL) + { + fps = frameCount / (Time.realtimeSinceStartup - lastTime); + frameCount = 0; + lastTime = Time.realtimeSinceStartup; + fpsChart.AddData(0, fps); + fpsChart.AddXAxisData(Time.frameCount.ToString()); + fpsText.text = string.Format("FPS:{0:f1}", fps); + if (initCount >= m_MaxCacheDataNumber) + { + AddOneData(); + initCount++; + } + } + } + + void AddOneData() + { + lineChart.title.text = initCount + "数据"; + barChart.title.text = initCount + "数据"; + timeNow = timeNow.AddSeconds(1); + string category = timeNow.ToString("hh:mm:ss"); + float xvalue = Mathf.PI / 180 * initCount; + float yvalue = 15 + Mathf.Sin(xvalue) * 2; + + lineChart.AddData(0, yvalue); + lineChart.AddXAxisData(category); + barChart.AddData(0, yvalue); + barChart.AddXAxisData(category); + } + + void InitCharts() + { + fpsChart.SetMaxCache(1000); + lineChart.SetMaxCache(m_MaxCacheDataNumber); + barChart.SetMaxCache(m_MaxCacheDataNumber); + SetInputField("settings/fadeIn/InputField", m_MaxCacheDataNumber, OnFadeInDurationChanged); + } + + void SetInputField(string path, int value, UnityAction act) + { + var input = transform.Find(path).gameObject.GetComponent(); + input.onEndEdit.AddListener(act); + input.text = value.ToString(); + } + + Button TryInitButton(string name, UnityAction act) + { + var trans = transform.Find(name); + if (trans) + { + var btn = trans.gameObject.GetComponent