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

Download history 151/week @ 2024-08-17 10/week @ 2024-08-24 13/week @ 2024-09-14 16/week @ 2024-09-21 4/week @ 2024-09-28 437/week @ 2024-10-12 42/week @ 2024-10-19 2/week @ 2024-10-26

1,479 downloads per month

MIT/Apache

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