25 releases
0.1.25 | Oct 17, 2024 |
---|---|
0.1.24 | Oct 15, 2024 |
0.1.22 | Aug 19, 2024 |
0.1.21 | Jun 12, 2024 |
0.1.10 | Mar 15, 2024 |
#116 in Memory management
1,479 downloads per month
515KB
10K
SLoC
已知问题
ecs的性能测试 不太满意,
schedule 多线程运行时会卡住
差 ExecGraph的多线程 测试用例的覆盖率
差 Query的异步迭代,Insert异步并行插入,提供一个异步的劈分方法?为世界矩阵的层脏做个异步多线程的测试用例
差 测试用例的覆盖率
差 文档
差 代码注释
需要构建一个Component的静态依赖图-转成位图集, 如果两个system检查在该图上可以并行,则同一个原型下的两个system也是可以并行的。构建2个图,一个普通的完全图,动态修改时加锁,里面的节点包括:System 运行集 原型-组件 单例资源 多例资源。在该图上分析依赖,如果两个system被明确指定了依赖,则在读写分析时发现循环时,遵循指定的依赖。还有一个System的依赖表(小的ComponentIndex加大的ComponentIndex为键,值为强制读写或弱读写),也是加锁操作。还有1个仅system的执行图,这个需要线程安全的添加边。
需要把执行图的图部分拆成单独的crate,这样静态依赖图和渲染图都可以重用这个图,同时也好检查是否循环引用。
优化原型名字的表达,类似use 模块。
可查看出整个world的原型内存状态。
测试get性能 去掉Queryer和Alteror Inserter, 去掉SafeVec, 提出pi_listener(将settle trait 放入pi_append_vec)
ecs world 上提供mem_size
检查 world settle ,否则没法解释为啥get 和 iter慢, 也有可能是Mut慢?
单例和多例需要提供mem_size?
v0.1.11
已经支持异步system
新实现Local的SystemParm
v0.2
增加World的tick
单例上加tick
多例上加tick
支持了Insert空原型,及alter从空原型变为有组件原型
增加Ticker, 支持查询组件is_changed
合并Added和Changed,常用的单组件改变查询的情况下,性能有提升
如果一个原型的Component被Ticker查询或有Changed过滤,则会在Column上增加Tick记录,
增加Destroyed的entity,保留其Component,直到所以监听Destroyed的system都执行完毕再删除Entity
增加Removed<组件>, 原型上加remove_columns的监听
增加了ArchetypeInfo的查询对象,显示实体所在的原型及行
优化了Query.iter, 根据是否有脏监听过滤器分为三种情况迭代,iter_normal, iter_dirty, iter_dirtys,多个脏监听内部使用bitset去重
v0.3
ArcheypeWorldIndex ComponentIndex ColumnIndex Row 改成类型
将原型图节点拆成了原型组件节点
优化Query的CacheMapping,及alter的Mapping
优化SingleRes的init_state, 抽成多个函数,这样相同的T可以共用函数
v0.4
有Changed或Removed的组件,全部原型上对应组件的Column和RemovedColumn都增加Tick记录,这样全局跟踪Tick,并根据该Tick来剔除已经读取过的变化,同时确保系统读取时不会丢失变化。同时,也会根据最旧的System的last_run,来尽量减少脏列表中Row的长度。
根据ComponentInfo及其world_index,优化了alter时计算相应原型的过程。
v0.5
调整了alter的代码,将泛型部分分离
将alter改为立即执行,这样可以更好的复用,并且在一个system内可连续修改(要求修改后的原型也要被Query捕获)
v0.6
alter还是改为延迟,EntityEditor的alter为立即执行
ComponentRemoved是一个SystemParam,可迭代出上次运行到这次的运行期间被删除的组件的实体
v0.7
调整了Archetype和Column的关系, Column包含多个Archetype的Blob
优化了Query的get方法的性能
v0.8
SetDefault改为SetFromWorld
单例多例都提前downcast
meta将单例多例资源记录关系,事件支持安全的读写,所以不记录关系
增加ComponentAdded和Changed
增加OrDefaultRef
Dependencies
~13–41MB
~635K SLoC