[!WARNING] Benchmark is under active development all API, integrations and set of benchmarks is subject to change!
updated with actions and can be found here
General idea is to hide implementation of each ECS under context abstraction and work with it from benchmark implementations.
Benchmarks design follow 2 rules which I try to balance with:
General flow of any benchmark execution is divided into 3 steps:
[!IMPORTANT] Don't search truth here. There won't be any.
ECS | Version | Implemented | Verified | Notes |
---|---|---|---|---|
Arch | 1.3.3-alpha | ✅ | ❌ | N/A |
fennecs | 0.5.11-beta | ✅ | ❌ | N/A |
Morpeh | 2024.1.0-rc54 | ✅ | ❌ | N/A |
DragonECS | 0.8.54 | ✅ | ❌ | N/A |
LeoECS | 2023.6.22 | ✅ | ❌ | N/A |
LeoECSLite | 2024.5.22 | ✅ | ❌ | N/A |
DefaultECS | 0.18.0-beta01 | ✅ | ❌ | Analyzer 0.17.8 |
FlecsNET | 4.0.2 | ✅ | ❌ | N/A |
TinyEcs | 1.4.0 | ✅ | ❌ | N/A |
Xeno | ❌ | ❌ | N/A | |
FriFlo | 3.0.0-preview.13 | ✅ | ❌ | N/A |
Benchmark | Description |
---|---|
Create Empty Entity | Creates [EntityCount] empty entities |
Create Entity With N Components | Creates [EntityCount] entitites with N components |
Add N Components | Adds N components to [EntityCount] entities |
Remove N Components | Adds N components to [EntityCount] entities |
System with N Components | Performs simple operations on entities (numbers sum) |
System with N Components Multiple Composition | Same as System with N Components but with mixture of other components |
Just call Benchmark.sh
from terminal.
Command line args:
arg | description | sample |
---|---|---|
benchmark | allow to specify single benchmark to run | benchmarks=CreateEmptyEntities,Add1Component |
benchmarks | allow to specify benchmarks to run | benchmark=CreateEmptyEntities |
contexts | allow to specify contexts to run | contexts=Morpeh,Fennecs,... |
--list | prints all benchmarks name | --list |
Since all comparisons is made by string contains you can simply write something like
contexts=Morpeh
instead ofcontext=MorpehContext
andbenchmarks=With1,With2
to launch subset of benchmarks. Selected benchmarks and contexts will be logged to console. BUT benchmark arg requires exact name match with those printed with--list
DeletesEntityOnLastComponentDeletion
is required to be implemented in each
context.