@esengine/ecs-framework 2.1.30 → 2.1.32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (288) hide show
  1. package/index.cjs +2 -0
  2. package/index.cjs.map +1 -0
  3. package/index.d.ts +6357 -0
  4. package/index.mjs +2 -0
  5. package/index.mjs.map +1 -0
  6. package/index.umd.js +2 -0
  7. package/index.umd.js.map +1 -0
  8. package/package.json +27 -50
  9. package/bin/Core.d.ts +0 -279
  10. package/bin/Core.d.ts.map +0 -1
  11. package/bin/Core.js +0 -400
  12. package/bin/Core.js.map +0 -1
  13. package/bin/ECS/Component.d.ts +0 -120
  14. package/bin/ECS/Component.d.ts.map +0 -1
  15. package/bin/ECS/Component.js +0 -129
  16. package/bin/ECS/Component.js.map +0 -1
  17. package/bin/ECS/Components/IUpdatable.d.ts +0 -22
  18. package/bin/ECS/Components/IUpdatable.d.ts.map +0 -1
  19. package/bin/ECS/Components/IUpdatable.js +0 -17
  20. package/bin/ECS/Components/IUpdatable.js.map +0 -1
  21. package/bin/ECS/Components/SceneComponent.d.ts +0 -40
  22. package/bin/ECS/Components/SceneComponent.d.ts.map +0 -1
  23. package/bin/ECS/Components/SceneComponent.js +0 -57
  24. package/bin/ECS/Components/SceneComponent.js.map +0 -1
  25. package/bin/ECS/Core/ArchetypeSystem.d.ts +0 -100
  26. package/bin/ECS/Core/ArchetypeSystem.d.ts.map +0 -1
  27. package/bin/ECS/Core/ArchetypeSystem.js +0 -193
  28. package/bin/ECS/Core/ArchetypeSystem.js.map +0 -1
  29. package/bin/ECS/Core/ComponentIndex.d.ts +0 -151
  30. package/bin/ECS/Core/ComponentIndex.d.ts.map +0 -1
  31. package/bin/ECS/Core/ComponentIndex.js +0 -405
  32. package/bin/ECS/Core/ComponentIndex.js.map +0 -1
  33. package/bin/ECS/Core/ComponentPool.d.ts +0 -88
  34. package/bin/ECS/Core/ComponentPool.d.ts.map +0 -1
  35. package/bin/ECS/Core/ComponentPool.js +0 -159
  36. package/bin/ECS/Core/ComponentPool.js.map +0 -1
  37. package/bin/ECS/Core/ComponentStorage/ComponentRegistry.d.ts +0 -92
  38. package/bin/ECS/Core/ComponentStorage/ComponentRegistry.d.ts.map +0 -1
  39. package/bin/ECS/Core/ComponentStorage/ComponentRegistry.js +0 -167
  40. package/bin/ECS/Core/ComponentStorage/ComponentRegistry.js.map +0 -1
  41. package/bin/ECS/Core/ComponentStorage.d.ts +0 -233
  42. package/bin/ECS/Core/ComponentStorage.d.ts.map +0 -1
  43. package/bin/ECS/Core/ComponentStorage.js +0 -463
  44. package/bin/ECS/Core/ComponentStorage.js.map +0 -1
  45. package/bin/ECS/Core/DirtyTrackingSystem.d.ts +0 -197
  46. package/bin/ECS/Core/DirtyTrackingSystem.d.ts.map +0 -1
  47. package/bin/ECS/Core/DirtyTrackingSystem.js +0 -297
  48. package/bin/ECS/Core/DirtyTrackingSystem.js.map +0 -1
  49. package/bin/ECS/Core/EntityManager.d.ts +0 -379
  50. package/bin/ECS/Core/EntityManager.d.ts.map +0 -1
  51. package/bin/ECS/Core/EntityManager.js +0 -686
  52. package/bin/ECS/Core/EntityManager.js.map +0 -1
  53. package/bin/ECS/Core/EventBus.d.ts +0 -218
  54. package/bin/ECS/Core/EventBus.d.ts.map +0 -1
  55. package/bin/ECS/Core/EventBus.js +0 -402
  56. package/bin/ECS/Core/EventBus.js.map +0 -1
  57. package/bin/ECS/Core/EventSystem.d.ts +0 -237
  58. package/bin/ECS/Core/EventSystem.d.ts.map +0 -1
  59. package/bin/ECS/Core/EventSystem.js +0 -478
  60. package/bin/ECS/Core/EventSystem.js.map +0 -1
  61. package/bin/ECS/Core/Events/index.d.ts +0 -3
  62. package/bin/ECS/Core/Events/index.d.ts.map +0 -1
  63. package/bin/ECS/Core/Events/index.js +0 -3
  64. package/bin/ECS/Core/Events/index.js.map +0 -1
  65. package/bin/ECS/Core/FluentAPI/ComponentBuilder.d.ts +0 -35
  66. package/bin/ECS/Core/FluentAPI/ComponentBuilder.d.ts.map +0 -1
  67. package/bin/ECS/Core/FluentAPI/ComponentBuilder.js +0 -48
  68. package/bin/ECS/Core/FluentAPI/ComponentBuilder.js.map +0 -1
  69. package/bin/ECS/Core/FluentAPI/ECSFluentAPI.d.ts +0 -135
  70. package/bin/ECS/Core/FluentAPI/ECSFluentAPI.d.ts.map +0 -1
  71. package/bin/ECS/Core/FluentAPI/ECSFluentAPI.js +0 -166
  72. package/bin/ECS/Core/FluentAPI/ECSFluentAPI.js.map +0 -1
  73. package/bin/ECS/Core/FluentAPI/EntityBatchOperator.d.ts +0 -58
  74. package/bin/ECS/Core/FluentAPI/EntityBatchOperator.d.ts.map +0 -1
  75. package/bin/ECS/Core/FluentAPI/EntityBatchOperator.js +0 -85
  76. package/bin/ECS/Core/FluentAPI/EntityBatchOperator.js.map +0 -1
  77. package/bin/ECS/Core/FluentAPI/EntityBuilder.d.ts +0 -110
  78. package/bin/ECS/Core/FluentAPI/EntityBuilder.d.ts.map +0 -1
  79. package/bin/ECS/Core/FluentAPI/EntityBuilder.js +0 -174
  80. package/bin/ECS/Core/FluentAPI/EntityBuilder.js.map +0 -1
  81. package/bin/ECS/Core/FluentAPI/SceneBuilder.d.ts +0 -53
  82. package/bin/ECS/Core/FluentAPI/SceneBuilder.d.ts.map +0 -1
  83. package/bin/ECS/Core/FluentAPI/SceneBuilder.js +0 -79
  84. package/bin/ECS/Core/FluentAPI/SceneBuilder.js.map +0 -1
  85. package/bin/ECS/Core/FluentAPI/index.d.ts +0 -6
  86. package/bin/ECS/Core/FluentAPI/index.d.ts.map +0 -1
  87. package/bin/ECS/Core/FluentAPI/index.js +0 -6
  88. package/bin/ECS/Core/FluentAPI/index.js.map +0 -1
  89. package/bin/ECS/Core/FluentAPI.d.ts +0 -2
  90. package/bin/ECS/Core/FluentAPI.d.ts.map +0 -1
  91. package/bin/ECS/Core/FluentAPI.js +0 -3
  92. package/bin/ECS/Core/FluentAPI.js.map +0 -1
  93. package/bin/ECS/Core/Performance/index.d.ts +0 -4
  94. package/bin/ECS/Core/Performance/index.d.ts.map +0 -1
  95. package/bin/ECS/Core/Performance/index.js +0 -4
  96. package/bin/ECS/Core/Performance/index.js.map +0 -1
  97. package/bin/ECS/Core/Query/index.d.ts +0 -4
  98. package/bin/ECS/Core/Query/index.d.ts.map +0 -1
  99. package/bin/ECS/Core/Query/index.js +0 -4
  100. package/bin/ECS/Core/Query/index.js.map +0 -1
  101. package/bin/ECS/Core/QuerySystem.d.ts +0 -438
  102. package/bin/ECS/Core/QuerySystem.d.ts.map +0 -1
  103. package/bin/ECS/Core/QuerySystem.js +0 -974
  104. package/bin/ECS/Core/QuerySystem.js.map +0 -1
  105. package/bin/ECS/Core/SoAStorage.d.ts +0 -97
  106. package/bin/ECS/Core/SoAStorage.d.ts.map +0 -1
  107. package/bin/ECS/Core/SoAStorage.js +0 -548
  108. package/bin/ECS/Core/SoAStorage.js.map +0 -1
  109. package/bin/ECS/Core/Storage/index.d.ts +0 -4
  110. package/bin/ECS/Core/Storage/index.d.ts.map +0 -1
  111. package/bin/ECS/Core/Storage/index.js +0 -4
  112. package/bin/ECS/Core/Storage/index.js.map +0 -1
  113. package/bin/ECS/CoreEvents.d.ts +0 -131
  114. package/bin/ECS/CoreEvents.d.ts.map +0 -1
  115. package/bin/ECS/CoreEvents.js +0 -163
  116. package/bin/ECS/CoreEvents.js.map +0 -1
  117. package/bin/ECS/Entity.d.ts +0 -455
  118. package/bin/ECS/Entity.d.ts.map +0 -1
  119. package/bin/ECS/Entity.js +0 -837
  120. package/bin/ECS/Entity.js.map +0 -1
  121. package/bin/ECS/Scene.d.ts +0 -225
  122. package/bin/ECS/Scene.d.ts.map +0 -1
  123. package/bin/ECS/Scene.js +0 -325
  124. package/bin/ECS/Scene.js.map +0 -1
  125. package/bin/ECS/Systems/EntitySystem.d.ts +0 -200
  126. package/bin/ECS/Systems/EntitySystem.d.ts.map +0 -1
  127. package/bin/ECS/Systems/EntitySystem.js +0 -431
  128. package/bin/ECS/Systems/EntitySystem.js.map +0 -1
  129. package/bin/ECS/Systems/IntervalSystem.d.ts +0 -33
  130. package/bin/ECS/Systems/IntervalSystem.d.ts.map +0 -1
  131. package/bin/ECS/Systems/IntervalSystem.js +0 -50
  132. package/bin/ECS/Systems/IntervalSystem.js.map +0 -1
  133. package/bin/ECS/Systems/PassiveSystem.d.ts +0 -17
  134. package/bin/ECS/Systems/PassiveSystem.d.ts.map +0 -1
  135. package/bin/ECS/Systems/PassiveSystem.js +0 -19
  136. package/bin/ECS/Systems/PassiveSystem.js.map +0 -1
  137. package/bin/ECS/Systems/ProcessingSystem.d.ts +0 -21
  138. package/bin/ECS/Systems/ProcessingSystem.d.ts.map +0 -1
  139. package/bin/ECS/Systems/ProcessingSystem.js +0 -20
  140. package/bin/ECS/Systems/ProcessingSystem.js.map +0 -1
  141. package/bin/ECS/Systems/index.d.ts +0 -5
  142. package/bin/ECS/Systems/index.d.ts.map +0 -1
  143. package/bin/ECS/Systems/index.js +0 -6
  144. package/bin/ECS/Systems/index.js.map +0 -1
  145. package/bin/ECS/Utils/BigIntCompatibility.d.ts +0 -164
  146. package/bin/ECS/Utils/BigIntCompatibility.d.ts.map +0 -1
  147. package/bin/ECS/Utils/BigIntCompatibility.js +0 -578
  148. package/bin/ECS/Utils/BigIntCompatibility.js.map +0 -1
  149. package/bin/ECS/Utils/Bits.d.ts +0 -163
  150. package/bin/ECS/Utils/Bits.d.ts.map +0 -1
  151. package/bin/ECS/Utils/Bits.js +0 -286
  152. package/bin/ECS/Utils/Bits.js.map +0 -1
  153. package/bin/ECS/Utils/ComponentTypeManager.d.ts +0 -50
  154. package/bin/ECS/Utils/ComponentTypeManager.d.ts.map +0 -1
  155. package/bin/ECS/Utils/ComponentTypeManager.js +0 -84
  156. package/bin/ECS/Utils/ComponentTypeManager.js.map +0 -1
  157. package/bin/ECS/Utils/EntityList.d.ts +0 -108
  158. package/bin/ECS/Utils/EntityList.d.ts.map +0 -1
  159. package/bin/ECS/Utils/EntityList.js +0 -262
  160. package/bin/ECS/Utils/EntityList.js.map +0 -1
  161. package/bin/ECS/Utils/EntityProcessorList.d.ts +0 -56
  162. package/bin/ECS/Utils/EntityProcessorList.d.ts.map +0 -1
  163. package/bin/ECS/Utils/EntityProcessorList.js +0 -102
  164. package/bin/ECS/Utils/EntityProcessorList.js.map +0 -1
  165. package/bin/ECS/Utils/IdentifierPool.d.ts +0 -203
  166. package/bin/ECS/Utils/IdentifierPool.d.ts.map +0 -1
  167. package/bin/ECS/Utils/IdentifierPool.js +0 -325
  168. package/bin/ECS/Utils/IdentifierPool.js.map +0 -1
  169. package/bin/ECS/Utils/Matcher.d.ts +0 -143
  170. package/bin/ECS/Utils/Matcher.d.ts.map +0 -1
  171. package/bin/ECS/Utils/Matcher.js +0 -249
  172. package/bin/ECS/Utils/Matcher.js.map +0 -1
  173. package/bin/ECS/Utils/index.d.ts +0 -8
  174. package/bin/ECS/Utils/index.d.ts.map +0 -1
  175. package/bin/ECS/Utils/index.js +0 -9
  176. package/bin/ECS/Utils/index.js.map +0 -1
  177. package/bin/ECS/index.d.ts +0 -12
  178. package/bin/ECS/index.d.ts.map +0 -1
  179. package/bin/ECS/index.js +0 -12
  180. package/bin/ECS/index.js.map +0 -1
  181. package/bin/Types/index.d.ts +0 -471
  182. package/bin/Types/index.d.ts.map +0 -1
  183. package/bin/Types/index.js +0 -5
  184. package/bin/Types/index.js.map +0 -1
  185. package/bin/Utils/Debug/ComponentDataCollector.d.ts +0 -28
  186. package/bin/Utils/Debug/ComponentDataCollector.d.ts.map +0 -1
  187. package/bin/Utils/Debug/ComponentDataCollector.js +0 -248
  188. package/bin/Utils/Debug/ComponentDataCollector.js.map +0 -1
  189. package/bin/Utils/Debug/DebugDataFormatter.d.ts +0 -22
  190. package/bin/Utils/Debug/DebugDataFormatter.d.ts.map +0 -1
  191. package/bin/Utils/Debug/DebugDataFormatter.js +0 -117
  192. package/bin/Utils/Debug/DebugDataFormatter.js.map +0 -1
  193. package/bin/Utils/Debug/DebugManager.d.ts +0 -104
  194. package/bin/Utils/Debug/DebugManager.d.ts.map +0 -1
  195. package/bin/Utils/Debug/DebugManager.js +0 -647
  196. package/bin/Utils/Debug/DebugManager.js.map +0 -1
  197. package/bin/Utils/Debug/EntityDataCollector.d.ts +0 -92
  198. package/bin/Utils/Debug/EntityDataCollector.d.ts.map +0 -1
  199. package/bin/Utils/Debug/EntityDataCollector.js +0 -864
  200. package/bin/Utils/Debug/EntityDataCollector.js.map +0 -1
  201. package/bin/Utils/Debug/PerformanceDataCollector.d.ts +0 -32
  202. package/bin/Utils/Debug/PerformanceDataCollector.d.ts.map +0 -1
  203. package/bin/Utils/Debug/PerformanceDataCollector.js +0 -217
  204. package/bin/Utils/Debug/PerformanceDataCollector.js.map +0 -1
  205. package/bin/Utils/Debug/SceneDataCollector.d.ts +0 -16
  206. package/bin/Utils/Debug/SceneDataCollector.d.ts.map +0 -1
  207. package/bin/Utils/Debug/SceneDataCollector.js +0 -46
  208. package/bin/Utils/Debug/SceneDataCollector.js.map +0 -1
  209. package/bin/Utils/Debug/SystemDataCollector.d.ts +0 -11
  210. package/bin/Utils/Debug/SystemDataCollector.d.ts.map +0 -1
  211. package/bin/Utils/Debug/SystemDataCollector.js +0 -59
  212. package/bin/Utils/Debug/SystemDataCollector.js.map +0 -1
  213. package/bin/Utils/Debug/WebSocketManager.d.ts +0 -59
  214. package/bin/Utils/Debug/WebSocketManager.d.ts.map +0 -1
  215. package/bin/Utils/Debug/WebSocketManager.js +0 -148
  216. package/bin/Utils/Debug/WebSocketManager.js.map +0 -1
  217. package/bin/Utils/Debug/index.d.ts +0 -8
  218. package/bin/Utils/Debug/index.d.ts.map +0 -1
  219. package/bin/Utils/Debug/index.js +0 -8
  220. package/bin/Utils/Debug/index.js.map +0 -1
  221. package/bin/Utils/Emitter.d.ts +0 -43
  222. package/bin/Utils/Emitter.d.ts.map +0 -1
  223. package/bin/Utils/Emitter.js +0 -69
  224. package/bin/Utils/Emitter.js.map +0 -1
  225. package/bin/Utils/Extensions/NumberExtension.d.ts +0 -13
  226. package/bin/Utils/Extensions/NumberExtension.d.ts.map +0 -1
  227. package/bin/Utils/Extensions/NumberExtension.js +0 -17
  228. package/bin/Utils/Extensions/NumberExtension.js.map +0 -1
  229. package/bin/Utils/Extensions/TypeUtils.d.ts +0 -13
  230. package/bin/Utils/Extensions/TypeUtils.d.ts.map +0 -1
  231. package/bin/Utils/Extensions/TypeUtils.js +0 -15
  232. package/bin/Utils/Extensions/TypeUtils.js.map +0 -1
  233. package/bin/Utils/Extensions/index.d.ts +0 -3
  234. package/bin/Utils/Extensions/index.d.ts.map +0 -1
  235. package/bin/Utils/Extensions/index.js +0 -4
  236. package/bin/Utils/Extensions/index.js.map +0 -1
  237. package/bin/Utils/GlobalManager.d.ts +0 -32
  238. package/bin/Utils/GlobalManager.d.ts.map +0 -1
  239. package/bin/Utils/GlobalManager.js +0 -53
  240. package/bin/Utils/GlobalManager.js.map +0 -1
  241. package/bin/Utils/Logger.d.ts +0 -156
  242. package/bin/Utils/Logger.d.ts.map +0 -1
  243. package/bin/Utils/Logger.js +0 -256
  244. package/bin/Utils/Logger.js.map +0 -1
  245. package/bin/Utils/PerformanceMonitor.d.ts +0 -211
  246. package/bin/Utils/PerformanceMonitor.d.ts.map +0 -1
  247. package/bin/Utils/PerformanceMonitor.js +0 -270
  248. package/bin/Utils/PerformanceMonitor.js.map +0 -1
  249. package/bin/Utils/Pool/IPoolable.d.ts +0 -29
  250. package/bin/Utils/Pool/IPoolable.d.ts.map +0 -1
  251. package/bin/Utils/Pool/IPoolable.js +0 -2
  252. package/bin/Utils/Pool/IPoolable.js.map +0 -1
  253. package/bin/Utils/Pool/Pool.d.ts +0 -109
  254. package/bin/Utils/Pool/Pool.d.ts.map +0 -1
  255. package/bin/Utils/Pool/Pool.js +0 -238
  256. package/bin/Utils/Pool/Pool.js.map +0 -1
  257. package/bin/Utils/Pool/PoolManager.d.ts +0 -91
  258. package/bin/Utils/Pool/PoolManager.d.ts.map +0 -1
  259. package/bin/Utils/Pool/PoolManager.js +0 -197
  260. package/bin/Utils/Pool/PoolManager.js.map +0 -1
  261. package/bin/Utils/Pool/index.d.ts +0 -4
  262. package/bin/Utils/Pool/index.d.ts.map +0 -1
  263. package/bin/Utils/Pool/index.js +0 -4
  264. package/bin/Utils/Pool/index.js.map +0 -1
  265. package/bin/Utils/Time.d.ts +0 -47
  266. package/bin/Utils/Time.d.ts.map +0 -1
  267. package/bin/Utils/Time.js +0 -64
  268. package/bin/Utils/Time.js.map +0 -1
  269. package/bin/Utils/Timers/ITimer.d.ts +0 -16
  270. package/bin/Utils/Timers/ITimer.d.ts.map +0 -1
  271. package/bin/Utils/Timers/ITimer.js +0 -2
  272. package/bin/Utils/Timers/ITimer.js.map +0 -1
  273. package/bin/Utils/Timers/Timer.d.ts +0 -30
  274. package/bin/Utils/Timers/Timer.d.ts.map +0 -1
  275. package/bin/Utils/Timers/Timer.js +0 -58
  276. package/bin/Utils/Timers/Timer.js.map +0 -1
  277. package/bin/Utils/Timers/TimerManager.d.ts +0 -19
  278. package/bin/Utils/Timers/TimerManager.d.ts.map +0 -1
  279. package/bin/Utils/Timers/TimerManager.js +0 -33
  280. package/bin/Utils/Timers/TimerManager.js.map +0 -1
  281. package/bin/Utils/index.d.ts +0 -9
  282. package/bin/Utils/index.d.ts.map +0 -1
  283. package/bin/Utils/index.js +0 -9
  284. package/bin/Utils/index.js.map +0 -1
  285. package/bin/index.d.ts +0 -16
  286. package/bin/index.d.ts.map +0 -1
  287. package/bin/index.js +0 -19
  288. package/bin/index.js.map +0 -1
@@ -1,270 +0,0 @@
1
- /**
2
- * 性能警告类型
3
- */
4
- export var PerformanceWarningType;
5
- (function (PerformanceWarningType) {
6
- PerformanceWarningType["HIGH_EXECUTION_TIME"] = "high_execution_time";
7
- PerformanceWarningType["HIGH_MEMORY_USAGE"] = "high_memory_usage";
8
- PerformanceWarningType["HIGH_CPU_USAGE"] = "high_cpu_usage";
9
- PerformanceWarningType["FREQUENT_GC"] = "frequent_gc";
10
- PerformanceWarningType["LOW_FPS"] = "low_fps";
11
- PerformanceWarningType["HIGH_ENTITY_COUNT"] = "high_entity_count";
12
- })(PerformanceWarningType || (PerformanceWarningType = {}));
13
- /**
14
- * 高性能监控器
15
- * 用于监控ECS系统的性能表现,提供详细的分析和优化建议
16
- */
17
- export class PerformanceMonitor {
18
- /**
19
- * 获取单例实例
20
- */
21
- static get instance() {
22
- if (!PerformanceMonitor._instance) {
23
- PerformanceMonitor._instance = new PerformanceMonitor();
24
- }
25
- return PerformanceMonitor._instance;
26
- }
27
- constructor() {
28
- this._systemData = new Map();
29
- this._systemStats = new Map();
30
- this._warnings = [];
31
- this._isEnabled = false;
32
- this._maxRecentSamples = 60; // 保留最近60帧的数据
33
- this._maxWarnings = 100; // 最大警告数量
34
- // 性能阈值配置
35
- this._thresholds = {
36
- executionTime: { warning: 16.67, critical: 33.33 }, // 60fps和30fps对应的帧时间
37
- memoryUsage: { warning: 100, critical: 200 }, // MB
38
- cpuUsage: { warning: 70, critical: 90 }, // 百分比
39
- fps: { warning: 45, critical: 30 },
40
- entityCount: { warning: 1000, critical: 5000 }
41
- };
42
- // FPS监控
43
- this._fpsHistory = [];
44
- this._lastFrameTime = 0;
45
- this._frameCount = 0;
46
- this._fpsUpdateInterval = 1000; // 1秒更新一次FPS
47
- this._lastFpsUpdate = 0;
48
- this._currentFps = 60;
49
- // 内存监控
50
- this._memoryCheckInterval = 5000; // 5秒检查一次内存
51
- this._lastMemoryCheck = 0;
52
- this._memoryHistory = [];
53
- // GC监控
54
- this._gcCount = 0;
55
- this._lastGcCheck = 0;
56
- this._gcCheckInterval = 1000;
57
- }
58
- /**
59
- * 启用性能监控
60
- */
61
- enable() {
62
- this._isEnabled = true;
63
- }
64
- /**
65
- * 禁用性能监控
66
- */
67
- disable() {
68
- this._isEnabled = false;
69
- }
70
- /**
71
- * 检查是否启用了性能监控
72
- */
73
- get isEnabled() {
74
- return this._isEnabled;
75
- }
76
- /**
77
- * 开始监控系统性能
78
- * @param systemName 系统名称
79
- * @returns 开始时间戳
80
- */
81
- startMonitoring(systemName) {
82
- if (!this._isEnabled) {
83
- return 0;
84
- }
85
- return performance.now();
86
- }
87
- /**
88
- * 结束监控并记录性能数据
89
- * @param systemName 系统名称
90
- * @param startTime 开始时间戳
91
- * @param entityCount 处理的实体数量
92
- */
93
- endMonitoring(systemName, startTime, entityCount = 0) {
94
- if (!this._isEnabled || startTime === 0) {
95
- return;
96
- }
97
- const endTime = performance.now();
98
- const executionTime = endTime - startTime;
99
- const averageTimePerEntity = entityCount > 0 ? executionTime / entityCount : 0;
100
- // 更新当前性能数据
101
- const data = {
102
- name: systemName,
103
- executionTime,
104
- entityCount,
105
- averageTimePerEntity,
106
- lastUpdateTime: endTime
107
- };
108
- this._systemData.set(systemName, data);
109
- // 更新统计信息
110
- this.updateStats(systemName, executionTime);
111
- }
112
- /**
113
- * 更新系统统计信息
114
- * @param systemName 系统名称
115
- * @param executionTime 执行时间
116
- */
117
- updateStats(systemName, executionTime) {
118
- let stats = this._systemStats.get(systemName);
119
- if (!stats) {
120
- stats = {
121
- totalTime: 0,
122
- averageTime: 0,
123
- minTime: Number.MAX_VALUE,
124
- maxTime: 0,
125
- executionCount: 0,
126
- recentTimes: [],
127
- standardDeviation: 0,
128
- percentile95: 0,
129
- percentile99: 0
130
- };
131
- this._systemStats.set(systemName, stats);
132
- }
133
- // 更新基本统计
134
- stats.totalTime += executionTime;
135
- stats.executionCount++;
136
- stats.averageTime = stats.totalTime / stats.executionCount;
137
- stats.minTime = Math.min(stats.minTime, executionTime);
138
- stats.maxTime = Math.max(stats.maxTime, executionTime);
139
- // 更新最近时间列表
140
- stats.recentTimes.push(executionTime);
141
- if (stats.recentTimes.length > this._maxRecentSamples) {
142
- stats.recentTimes.shift();
143
- }
144
- // 计算高级统计信息
145
- this.calculateAdvancedStats(stats);
146
- }
147
- /**
148
- * 计算高级统计信息
149
- * @param stats 统计信息对象
150
- */
151
- calculateAdvancedStats(stats) {
152
- if (stats.recentTimes.length === 0)
153
- return;
154
- // 计算标准差
155
- const mean = stats.recentTimes.reduce((a, b) => a + b, 0) / stats.recentTimes.length;
156
- const variance = stats.recentTimes.reduce((acc, time) => acc + Math.pow(time - mean, 2), 0) / stats.recentTimes.length;
157
- stats.standardDeviation = Math.sqrt(variance);
158
- // 计算百分位数
159
- const sortedTimes = [...stats.recentTimes].sort((a, b) => a - b);
160
- const len = sortedTimes.length;
161
- stats.percentile95 = sortedTimes[Math.floor(len * 0.95)] || 0;
162
- stats.percentile99 = sortedTimes[Math.floor(len * 0.99)] || 0;
163
- }
164
- /**
165
- * 获取系统的当前性能数据
166
- * @param systemName 系统名称
167
- * @returns 性能数据或undefined
168
- */
169
- getSystemData(systemName) {
170
- return this._systemData.get(systemName);
171
- }
172
- /**
173
- * 获取系统的统计信息
174
- * @param systemName 系统名称
175
- * @returns 统计信息或undefined
176
- */
177
- getSystemStats(systemName) {
178
- return this._systemStats.get(systemName);
179
- }
180
- /**
181
- * 获取所有系统的性能数据
182
- * @returns 所有系统的性能数据
183
- */
184
- getAllSystemData() {
185
- return new Map(this._systemData);
186
- }
187
- /**
188
- * 获取所有系统的统计信息
189
- * @returns 所有系统的统计信息
190
- */
191
- getAllSystemStats() {
192
- return new Map(this._systemStats);
193
- }
194
- /**
195
- * 获取性能报告
196
- * @returns 格式化的性能报告字符串
197
- */
198
- getPerformanceReport() {
199
- if (!this._isEnabled) {
200
- return "Performance monitoring is disabled.";
201
- }
202
- const lines = [];
203
- lines.push("=== ECS Performance Report ===");
204
- lines.push("");
205
- // 按平均执行时间排序
206
- const sortedSystems = Array.from(this._systemStats.entries())
207
- .sort((a, b) => b[1].averageTime - a[1].averageTime);
208
- for (const [systemName, stats] of sortedSystems) {
209
- const data = this._systemData.get(systemName);
210
- lines.push(`System: ${systemName}`);
211
- lines.push(` Current: ${data?.executionTime.toFixed(2)}ms (${data?.entityCount} entities)`);
212
- lines.push(` Average: ${stats.averageTime.toFixed(2)}ms`);
213
- lines.push(` Min/Max: ${stats.minTime.toFixed(2)}ms / ${stats.maxTime.toFixed(2)}ms`);
214
- lines.push(` Total: ${stats.totalTime.toFixed(2)}ms (${stats.executionCount} calls)`);
215
- if (data?.averageTimePerEntity && data.averageTimePerEntity > 0) {
216
- lines.push(` Per Entity: ${data.averageTimePerEntity.toFixed(4)}ms`);
217
- }
218
- lines.push("");
219
- }
220
- // 总体统计
221
- const totalCurrentTime = Array.from(this._systemData.values())
222
- .reduce((sum, data) => sum + data.executionTime, 0);
223
- lines.push(`Total Frame Time: ${totalCurrentTime.toFixed(2)}ms`);
224
- lines.push(`Systems Count: ${this._systemData.size}`);
225
- return lines.join('\n');
226
- }
227
- /**
228
- * 重置所有性能数据
229
- */
230
- reset() {
231
- this._systemData.clear();
232
- this._systemStats.clear();
233
- }
234
- /**
235
- * 重置指定系统的性能数据
236
- * @param systemName 系统名称
237
- */
238
- resetSystem(systemName) {
239
- this._systemData.delete(systemName);
240
- this._systemStats.delete(systemName);
241
- }
242
- /**
243
- * 获取性能警告
244
- * @param thresholdMs 警告阈值(毫秒)
245
- * @returns 超过阈值的系统列表
246
- */
247
- getPerformanceWarnings(thresholdMs = 16.67) {
248
- const warnings = [];
249
- for (const [systemName, data] of this._systemData.entries()) {
250
- if (data.executionTime > thresholdMs) {
251
- warnings.push(`${systemName}: ${data.executionTime.toFixed(2)}ms (>${thresholdMs}ms)`);
252
- }
253
- }
254
- return warnings;
255
- }
256
- /**
257
- * 设置最大保留样本数
258
- * @param maxSamples 最大样本数
259
- */
260
- setMaxRecentSamples(maxSamples) {
261
- this._maxRecentSamples = maxSamples;
262
- // 裁剪现有数据
263
- for (const stats of this._systemStats.values()) {
264
- while (stats.recentTimes.length > maxSamples) {
265
- stats.recentTimes.shift();
266
- }
267
- }
268
- }
269
- }
270
- //# sourceMappingURL=PerformanceMonitor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PerformanceMonitor.js","sourceRoot":"","sources":["../../src/Utils/PerformanceMonitor.ts"],"names":[],"mappings":"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"}
@@ -1,29 +0,0 @@
1
- /**
2
- * 可池化对象接口
3
- */
4
- export interface IPoolable {
5
- /**
6
- * 重置对象状态,准备重用
7
- */
8
- reset(): void;
9
- }
10
- /**
11
- * 对象池统计信息
12
- */
13
- export interface PoolStats {
14
- /** 池中对象数量 */
15
- size: number;
16
- /** 池的最大大小 */
17
- maxSize: number;
18
- /** 总共创建的对象数量 */
19
- totalCreated: number;
20
- /** 总共获取的次数 */
21
- totalObtained: number;
22
- /** 总共释放的次数 */
23
- totalReleased: number;
24
- /** 命中率(从池中获取的比例) */
25
- hitRate: number;
26
- /** 内存使用估算(字节) */
27
- estimatedMemoryUsage: number;
28
- }
29
- //# sourceMappingURL=IPoolable.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"IPoolable.d.ts","sourceRoot":"","sources":["../../../src/Utils/Pool/IPoolable.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,SAAS;IACtB;;OAEG;IACH,KAAK,IAAI,IAAI,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACtB,aAAa;IACb,IAAI,EAAE,MAAM,CAAC;IACb,aAAa;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,oBAAoB;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB;IACjB,oBAAoB,EAAE,MAAM,CAAC;CAChC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=IPoolable.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"IPoolable.js","sourceRoot":"","sources":["../../../src/Utils/Pool/IPoolable.ts"],"names":[],"mappings":""}
@@ -1,109 +0,0 @@
1
- import { IPoolable, PoolStats } from './IPoolable';
2
- /**
3
- * 高性能通用对象池
4
- * 支持任意类型的对象池化,包含详细的统计信息
5
- */
6
- export declare class Pool<T extends IPoolable> {
7
- private static _pools;
8
- private _objects;
9
- private _createFn;
10
- private _maxSize;
11
- private _stats;
12
- private _objectSize;
13
- /**
14
- * 构造函数
15
- * @param createFn 创建对象的函数
16
- * @param maxSize 池的最大大小,默认100
17
- * @param estimatedObjectSize 估算的单个对象大小(字节),默认1024
18
- */
19
- constructor(createFn: () => T, maxSize?: number, estimatedObjectSize?: number);
20
- /**
21
- * 获取指定类型的对象池
22
- * @param type 对象类型
23
- * @param maxSize 池的最大大小
24
- * @param estimatedObjectSize 估算的单个对象大小
25
- * @returns 对象池实例
26
- */
27
- static getPool<T extends IPoolable>(type: new (...args: unknown[]) => T, maxSize?: number, estimatedObjectSize?: number): Pool<T>;
28
- /**
29
- * 从池中获取对象
30
- * @returns 对象实例
31
- */
32
- obtain(): T;
33
- /**
34
- * 释放对象回池中
35
- * @param obj 要释放的对象
36
- */
37
- release(obj: T): void;
38
- /**
39
- * 获取池统计信息
40
- * @returns 统计信息对象
41
- */
42
- getStats(): Readonly<PoolStats>;
43
- /**
44
- * 清空池
45
- */
46
- clear(): void;
47
- /**
48
- * 压缩池(移除多余的对象)
49
- * @param targetSize 目标大小,默认为当前大小的一半
50
- */
51
- compact(targetSize?: number): void;
52
- /**
53
- * 预填充池
54
- * @param count 预填充的对象数量
55
- */
56
- prewarm(count: number): void;
57
- /**
58
- * 设置最大池大小
59
- * @param maxSize 新的最大大小
60
- */
61
- setMaxSize(maxSize: number): void;
62
- /**
63
- * 获取池中可用对象数量
64
- * @returns 可用对象数量
65
- */
66
- getAvailableCount(): number;
67
- /**
68
- * 检查池是否为空
69
- * @returns 如果池为空返回true
70
- */
71
- isEmpty(): boolean;
72
- /**
73
- * 检查池是否已满
74
- * @returns 如果池已满返回true
75
- */
76
- isFull(): boolean;
77
- /**
78
- * 获取所有已注册的池类型
79
- * @returns 所有池类型的数组
80
- */
81
- static getAllPoolTypes(): Function[];
82
- /**
83
- * 获取所有池的统计信息
84
- * @returns 包含所有池统计信息的对象
85
- */
86
- static getAllPoolStats(): Record<string, PoolStats>;
87
- /**
88
- * 压缩所有池
89
- */
90
- static compactAllPools(): void;
91
- /**
92
- * 清空所有池
93
- */
94
- static clearAllPools(): void;
95
- /**
96
- * 获取全局池统计信息的格式化字符串
97
- * @returns 格式化的统计信息字符串
98
- */
99
- static getGlobalStatsString(): string;
100
- /**
101
- * 更新命中率
102
- */
103
- private _updateHitRate;
104
- /**
105
- * 更新内存使用估算
106
- */
107
- private _updateMemoryUsage;
108
- }
109
- //# sourceMappingURL=Pool.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Pool.d.ts","sourceRoot":"","sources":["../../../src/Utils/Pool/Pool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAEnD;;;GAGG;AACH,qBAAa,IAAI,CAAC,CAAC,SAAS,SAAS;IACjC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAkC;IAEvD,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,SAAS,CAAU;IAC3B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,WAAW,CAAS;IAE5B;;;;;OAKG;gBACS,QAAQ,EAAE,MAAM,CAAC,EAAE,OAAO,GAAE,MAAY,EAAE,mBAAmB,GAAE,MAAa;IAexF;;;;;;OAMG;WACW,OAAO,CAAC,CAAC,SAAS,SAAS,EACrC,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,EACnC,OAAO,GAAE,MAAY,EACrB,mBAAmB,GAAE,MAAa,GACnC,IAAI,CAAC,CAAC,CAAC;IAWV;;;OAGG;IACI,MAAM,IAAI,CAAC;IAiBlB;;;OAGG;IACI,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI;IAgB5B;;;OAGG;IACI,QAAQ,IAAI,QAAQ,CAAC,SAAS,CAAC;IAItC;;OAEG;IACI,KAAK,IAAI,IAAI;IAWpB;;;OAGG;IACI,OAAO,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI;IAczC;;;OAGG;IACI,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAcnC;;;OAGG;IACI,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAUxC;;;OAGG;IACI,iBAAiB,IAAI,MAAM;IAIlC;;;OAGG;IACI,OAAO,IAAI,OAAO;IAIzB;;;OAGG;IACI,MAAM,IAAI,OAAO;IAIxB;;;OAGG;WACW,eAAe,IAAI,QAAQ,EAAE;IAI3C;;;OAGG;WACW,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC;IAW1D;;OAEG;WACW,eAAe,IAAI,IAAI;IAMrC;;OAEG;WACW,aAAa,IAAI,IAAI;IAOnC;;;OAGG;WACW,oBAAoB,IAAI,MAAM;IAsB5C;;OAEG;IACH,OAAO,CAAC,cAAc;IAStB;;OAEG;IACH,OAAO,CAAC,kBAAkB;CAG7B"}
@@ -1,238 +0,0 @@
1
- /**
2
- * 高性能通用对象池
3
- * 支持任意类型的对象池化,包含详细的统计信息
4
- */
5
- export class Pool {
6
- /**
7
- * 构造函数
8
- * @param createFn 创建对象的函数
9
- * @param maxSize 池的最大大小,默认100
10
- * @param estimatedObjectSize 估算的单个对象大小(字节),默认1024
11
- */
12
- constructor(createFn, maxSize = 100, estimatedObjectSize = 1024) {
13
- this._objects = [];
14
- this._createFn = createFn;
15
- this._maxSize = maxSize;
16
- this._objectSize = estimatedObjectSize;
17
- this._stats = {
18
- size: 0,
19
- maxSize,
20
- totalCreated: 0,
21
- totalObtained: 0,
22
- totalReleased: 0,
23
- hitRate: 0,
24
- estimatedMemoryUsage: 0
25
- };
26
- }
27
- /**
28
- * 获取指定类型的对象池
29
- * @param type 对象类型
30
- * @param maxSize 池的最大大小
31
- * @param estimatedObjectSize 估算的单个对象大小
32
- * @returns 对象池实例
33
- */
34
- static getPool(type, maxSize = 100, estimatedObjectSize = 1024) {
35
- let pool = this._pools.get(type);
36
- if (!pool) {
37
- pool = new Pool(() => new type(), maxSize, estimatedObjectSize);
38
- this._pools.set(type, pool);
39
- }
40
- return pool;
41
- }
42
- /**
43
- * 从池中获取对象
44
- * @returns 对象实例
45
- */
46
- obtain() {
47
- this._stats.totalObtained++;
48
- if (this._objects.length > 0) {
49
- const obj = this._objects.pop();
50
- this._stats.size--;
51
- this._updateHitRate();
52
- this._updateMemoryUsage();
53
- return obj;
54
- }
55
- // 池中没有可用对象,创建新对象
56
- this._stats.totalCreated++;
57
- this._updateHitRate();
58
- return this._createFn();
59
- }
60
- /**
61
- * 释放对象回池中
62
- * @param obj 要释放的对象
63
- */
64
- release(obj) {
65
- if (!obj)
66
- return;
67
- this._stats.totalReleased++;
68
- // 如果池未满,将对象放回池中
69
- if (this._stats.size < this._maxSize) {
70
- // 重置对象状态
71
- obj.reset();
72
- this._objects.push(obj);
73
- this._stats.size++;
74
- this._updateMemoryUsage();
75
- }
76
- // 如果池已满,让对象被垃圾回收
77
- }
78
- /**
79
- * 获取池统计信息
80
- * @returns 统计信息对象
81
- */
82
- getStats() {
83
- return { ...this._stats };
84
- }
85
- /**
86
- * 清空池
87
- */
88
- clear() {
89
- // 重置所有对象
90
- for (const obj of this._objects) {
91
- obj.reset();
92
- }
93
- this._objects.length = 0;
94
- this._stats.size = 0;
95
- this._updateMemoryUsage();
96
- }
97
- /**
98
- * 压缩池(移除多余的对象)
99
- * @param targetSize 目标大小,默认为当前大小的一半
100
- */
101
- compact(targetSize) {
102
- const target = targetSize ?? Math.floor(this._objects.length / 2);
103
- while (this._objects.length > target) {
104
- const obj = this._objects.pop();
105
- if (obj) {
106
- obj.reset();
107
- this._stats.size--;
108
- }
109
- }
110
- this._updateMemoryUsage();
111
- }
112
- /**
113
- * 预填充池
114
- * @param count 预填充的对象数量
115
- */
116
- prewarm(count) {
117
- const actualCount = Math.min(count, this._maxSize - this._objects.length);
118
- for (let i = 0; i < actualCount; i++) {
119
- const obj = this._createFn();
120
- obj.reset();
121
- this._objects.push(obj);
122
- this._stats.totalCreated++;
123
- this._stats.size++;
124
- }
125
- this._updateMemoryUsage();
126
- }
127
- /**
128
- * 设置最大池大小
129
- * @param maxSize 新的最大大小
130
- */
131
- setMaxSize(maxSize) {
132
- this._maxSize = maxSize;
133
- this._stats.maxSize = maxSize;
134
- // 如果当前池大小超过新的最大值,进行压缩
135
- if (this._objects.length > maxSize) {
136
- this.compact(maxSize);
137
- }
138
- }
139
- /**
140
- * 获取池中可用对象数量
141
- * @returns 可用对象数量
142
- */
143
- getAvailableCount() {
144
- return this._objects.length;
145
- }
146
- /**
147
- * 检查池是否为空
148
- * @returns 如果池为空返回true
149
- */
150
- isEmpty() {
151
- return this._objects.length === 0;
152
- }
153
- /**
154
- * 检查池是否已满
155
- * @returns 如果池已满返回true
156
- */
157
- isFull() {
158
- return this._objects.length >= this._maxSize;
159
- }
160
- /**
161
- * 获取所有已注册的池类型
162
- * @returns 所有池类型的数组
163
- */
164
- static getAllPoolTypes() {
165
- return Array.from(this._pools.keys());
166
- }
167
- /**
168
- * 获取所有池的统计信息
169
- * @returns 包含所有池统计信息的对象
170
- */
171
- static getAllPoolStats() {
172
- const stats = {};
173
- for (const [type, pool] of this._pools) {
174
- const typeName = type.name || type.toString();
175
- stats[typeName] = pool.getStats();
176
- }
177
- return stats;
178
- }
179
- /**
180
- * 压缩所有池
181
- */
182
- static compactAllPools() {
183
- for (const pool of this._pools.values()) {
184
- pool.compact();
185
- }
186
- }
187
- /**
188
- * 清空所有池
189
- */
190
- static clearAllPools() {
191
- for (const pool of this._pools.values()) {
192
- pool.clear();
193
- }
194
- this._pools.clear();
195
- }
196
- /**
197
- * 获取全局池统计信息的格式化字符串
198
- * @returns 格式化的统计信息字符串
199
- */
200
- static getGlobalStatsString() {
201
- const stats = this.getAllPoolStats();
202
- const lines = ['=== Object Pool Global Statistics ===', ''];
203
- if (Object.keys(stats).length === 0) {
204
- lines.push('No pools registered');
205
- return lines.join('\n');
206
- }
207
- for (const [typeName, stat] of Object.entries(stats)) {
208
- lines.push(`${typeName}:`);
209
- lines.push(` Size: ${stat.size}/${stat.maxSize}`);
210
- lines.push(` Hit Rate: ${(stat.hitRate * 100).toFixed(1)}%`);
211
- lines.push(` Total Created: ${stat.totalCreated}`);
212
- lines.push(` Total Obtained: ${stat.totalObtained}`);
213
- lines.push(` Memory: ${(stat.estimatedMemoryUsage / 1024).toFixed(1)} KB`);
214
- lines.push('');
215
- }
216
- return lines.join('\n');
217
- }
218
- /**
219
- * 更新命中率
220
- */
221
- _updateHitRate() {
222
- if (this._stats.totalObtained === 0) {
223
- this._stats.hitRate = 0;
224
- }
225
- else {
226
- const hits = this._stats.totalObtained - this._stats.totalCreated;
227
- this._stats.hitRate = hits / this._stats.totalObtained;
228
- }
229
- }
230
- /**
231
- * 更新内存使用估算
232
- */
233
- _updateMemoryUsage() {
234
- this._stats.estimatedMemoryUsage = this._stats.size * this._objectSize;
235
- }
236
- }
237
- Pool._pools = new Map();
238
- //# sourceMappingURL=Pool.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Pool.js","sourceRoot":"","sources":["../../../src/Utils/Pool/Pool.ts"],"names":[],"mappings":"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"}