From f25015ec394e6cf38cc250a6157c199db7bfea0c Mon Sep 17 00:00:00 2001
From: ALEXTANG <574809918@qq.com>
Date: Tue, 6 Sep 2022 20:37:54 +0800
Subject: [PATCH] ObjectPool
ObjectPool
---
...erComponent.ObjectPoolInformationWindow.cs | 87 +++++++++++++++++++
...ponent.ObjectPoolInformationWindow.cs.meta | 3 +
.../Base/Debugger/Imp/DebuggerComponent.cs | 13 +--
3 files changed, 97 insertions(+), 6 deletions(-)
create mode 100644 Assets/TEngine/Scripts/Runtime/Core/Base/Debugger/Imp/DebuggerComponent.ObjectPoolInformationWindow.cs
create mode 100644 Assets/TEngine/Scripts/Runtime/Core/Base/Debugger/Imp/DebuggerComponent.ObjectPoolInformationWindow.cs.meta
diff --git a/Assets/TEngine/Scripts/Runtime/Core/Base/Debugger/Imp/DebuggerComponent.ObjectPoolInformationWindow.cs b/Assets/TEngine/Scripts/Runtime/Core/Base/Debugger/Imp/DebuggerComponent.ObjectPoolInformationWindow.cs
new file mode 100644
index 00000000..6517f605
--- /dev/null
+++ b/Assets/TEngine/Scripts/Runtime/Core/Base/Debugger/Imp/DebuggerComponent.ObjectPoolInformationWindow.cs
@@ -0,0 +1,87 @@
+using TEngine.Runtime.ObjectPool;
+using UnityEngine;
+
+namespace TEngine.Runtime
+{
+ public sealed partial class DebuggerComponent
+ {
+ private sealed class ObjectPoolInformationWindow : ScrollableDebuggerWindowBase
+ {
+ private ObjectPoolComponent m_ObjectPoolComponent = null;
+
+ public override void Initialize(params object[] args)
+ {
+ m_ObjectPoolComponent = ObjectPoolComponent.Instance;
+ if (m_ObjectPoolComponent == null)
+ {
+ Log.Fatal("Object pool component is invalid.");
+ return;
+ }
+ }
+
+ protected override void OnDrawScrollableWindow()
+ {
+ GUILayout.Label("Object Pool Information");
+ GUILayout.BeginVertical("box");
+ {
+ DrawItem("Object Pool Count", m_ObjectPoolComponent.Count.ToString());
+ }
+ GUILayout.EndVertical();
+ ObjectPoolBase[] objectPools = m_ObjectPoolComponent.GetAllObjectPools(true);
+ for (int i = 0; i < objectPools.Length; i++)
+ {
+ DrawObjectPool(objectPools[i]);
+ }
+ }
+
+ private void DrawObjectPool(ObjectPoolBase objectPool)
+ {
+ GUILayout.Label(Utility.Text.Format("Object Pool: {0}", objectPool.FullName));
+ GUILayout.BeginVertical("box");
+ {
+ DrawItem("Name", objectPool.Name);
+ DrawItem("Type", objectPool.ObjectType.FullName);
+ DrawItem("Auto Release Interval", objectPool.AutoReleaseInterval.ToString());
+ DrawItem("Capacity", objectPool.Capacity.ToString());
+ DrawItem("Used Count", objectPool.Count.ToString());
+ DrawItem("Can Release Count", objectPool.CanReleaseCount.ToString());
+ DrawItem("Expire Time", objectPool.ExpireTime.ToString());
+ DrawItem("Priority", objectPool.Priority.ToString());
+ ObjectInfo[] objectInfos = objectPool.GetAllObjectInfos();
+ GUILayout.BeginHorizontal();
+ {
+ GUILayout.Label("Name");
+ GUILayout.Label("Locked", GUILayout.Width(60f));
+ GUILayout.Label(objectPool.AllowMultiSpawn ? "Count" : "In Use", GUILayout.Width(60f));
+ GUILayout.Label("Flag", GUILayout.Width(60f));
+ GUILayout.Label("Priority", GUILayout.Width(60f));
+ GUILayout.Label("Last Use Time", GUILayout.Width(120f));
+ }
+ GUILayout.EndHorizontal();
+
+ if (objectInfos.Length > 0)
+ {
+ for (int i = 0; i < objectInfos.Length; i++)
+ {
+ GUILayout.BeginHorizontal();
+ {
+ GUILayout.Label(string.IsNullOrEmpty(objectInfos[i].Name) ? "" : objectInfos[i].Name);
+ GUILayout.Label(objectInfos[i].Locked.ToString(), GUILayout.Width(60f));
+ GUILayout.Label(objectPool.AllowMultiSpawn ? objectInfos[i].SpawnCount.ToString() : objectInfos[i].IsInUse.ToString(), GUILayout.Width(60f));
+ GUILayout.Label(objectInfos[i].CustomCanReleaseFlag.ToString(), GUILayout.Width(60f));
+ GUILayout.Label(objectInfos[i].Priority.ToString(), GUILayout.Width(60f));
+ GUILayout.Label(objectInfos[i].LastUseTime.ToLocalTime().ToString("yyyy-MM-dd HH:mm:ss"), GUILayout.Width(120f));
+ }
+ GUILayout.EndHorizontal();
+ }
+ }
+ else
+ {
+ GUILayout.Label("Object Pool is Empty ...");
+ }
+ }
+ GUILayout.EndVertical();
+ }
+ }
+ }
+}
diff --git a/Assets/TEngine/Scripts/Runtime/Core/Base/Debugger/Imp/DebuggerComponent.ObjectPoolInformationWindow.cs.meta b/Assets/TEngine/Scripts/Runtime/Core/Base/Debugger/Imp/DebuggerComponent.ObjectPoolInformationWindow.cs.meta
new file mode 100644
index 00000000..589d31bf
--- /dev/null
+++ b/Assets/TEngine/Scripts/Runtime/Core/Base/Debugger/Imp/DebuggerComponent.ObjectPoolInformationWindow.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 84a0c315609844058d56cd62d6ee5d0b
+timeCreated: 1662467627
\ No newline at end of file
diff --git a/Assets/TEngine/Scripts/Runtime/Core/Base/Debugger/Imp/DebuggerComponent.cs b/Assets/TEngine/Scripts/Runtime/Core/Base/Debugger/Imp/DebuggerComponent.cs
index bfa8d29b..2ce50628 100644
--- a/Assets/TEngine/Scripts/Runtime/Core/Base/Debugger/Imp/DebuggerComponent.cs
+++ b/Assets/TEngine/Scripts/Runtime/Core/Base/Debugger/Imp/DebuggerComponent.cs
@@ -34,7 +34,7 @@ namespace TEngine.Runtime
///
[DisallowMultipleComponent]
[AddComponentMenu("TEngine/Debugger")]
- partial class DebuggerComponent : MonoBehaviour
+ partial class DebuggerComponent : UnitySingleton
{
///
/// 默认调试器漂浮框大小。
@@ -147,8 +147,9 @@ namespace TEngine.Runtime
}
}
- private void Awake()
+ public override void Awake()
{
+ base.Awake();
Object.DontDestroyOnLoad(gameObject.transform.parent);
m_DebuggerManager = DebuggerManager.Instance;
if (m_DebuggerManager == null)
@@ -159,7 +160,6 @@ namespace TEngine.Runtime
m_FpsCounter = new FpsCounter(0.5f);
}
-
#region Debug系统
private SystemInformationWindow m_SystemInformationWindow = new SystemInformationWindow();
private EnvironmentInformationWindow m_EnvironmentInformationWindow = new EnvironmentInformationWindow();
@@ -187,7 +187,7 @@ namespace TEngine.Runtime
private RuntimeMemoryInformationWindow m_RuntimeMemoryFontInformationWindow = new RuntimeMemoryInformationWindow();
private RuntimeMemoryInformationWindow m_RuntimeMemoryTextAssetInformationWindow = new RuntimeMemoryInformationWindow();
private RuntimeMemoryInformationWindow m_RuntimeMemoryScriptableObjectInformationWindow = new RuntimeMemoryInformationWindow();
-
+ private ObjectPoolInformationWindow m_ObjectPoolInformationWindow = new ObjectPoolInformationWindow();
private MemoryPoolInformationWindow m_MemoryPoolInformationWindow = new MemoryPoolInformationWindow();
private NetworkInformationWindow m_NetworkInformationWindow = new NetworkInformationWindow();
@@ -228,6 +228,7 @@ namespace TEngine.Runtime
RegisterDebuggerWindow("Profiler/Memory/TextAsset", m_RuntimeMemoryTextAssetInformationWindow);
RegisterDebuggerWindow("Profiler/Memory/ScriptableObject", m_RuntimeMemoryScriptableObjectInformationWindow);
+ RegisterDebuggerWindow("Profiler/Object Pool", m_ObjectPoolInformationWindow);
RegisterDebuggerWindow("Profiler/Memory Pool", m_MemoryPoolInformationWindow);
RegisterDebuggerWindow("Profiler/Network", m_NetworkInformationWindow);
@@ -264,9 +265,9 @@ namespace TEngine.Runtime
m_DebuggerManager.RegisterDebuggerWindow(path, debuggerWindow, args);
}
- private void Update()
+ public override void OnUpdate(float elapseSeconds, float realElapseSeconds)
{
- m_FpsCounter.Update(Time.deltaTime, Time.unscaledDeltaTime);
+ m_FpsCounter.Update(elapseSeconds,realElapseSeconds);
}
private void OnGUI()