Have 3 entity systems updating a position component.
An Entity Deleter system: each 100th tick an entity is deleted and a new entity is created the next tick.
There are 4 types of iteration benchmarks:
baseline: position isn't updated, not included in charts.
plain: position component is the default component type, except gdx-artemis which always pools components.
pooled: pooling all components. Only artemis-odb >= 0.5.0 atm and gdx-artemis.
Ashley 1.0.1 pooled coming, failed to get working in Ashley 1.2.0
packed: packed components (backed by a Bytebuffer). Only artemis-odb >= 0.5.0 atm.
Insert/remove benchmarks:
Precalculates 20 different entity compositions.
Each tick, removes/inserts 1/4 of the total entityCount.
When creating entities, a random composition is selected.
The composition is randomly chosen, but shared across all frameworks/benchmarks.
Benchmark results
As usual, writing microbenchmarks is tricky business - take the numbers with a grain of salt.
These benchmarks should not be interpreted as benchmarking each framework as a whole, though
they aim to give a hint of each framework's performance.
Things that might concern
Overall, ashley-realted benchmarks may be improved; I'm not very familiar with
the framework.
I never got pooling working with Ashley-1.2.0. Ashley-1.0.1:s pooling benchmarks had an
error, but considering it's now so old, I'd rather fix the benchmark for the most recent
version.
artemis-odb's PackedComponent benchmarks only have a single component implementation, skewing
the benchmark results in its favor.
artemis-odb_fast benchmarks
Artemis-odb-0.7.0 added support for automatically rewriting the generated class files
of EntitySystems in order to achieve higher performance. The source code itself remains
identical. More about it on the artemis-odb wiki: Optimizing Entity System.