package Ġcom . github . qu ill r aven . f le ks . benchmark Ċ Ċ import Ġcom . badlogic . ash ley . core .* Ċ import Ġcom . badlogic . ash ley . systems . Iter ating System Ċ import Ġorg . openjdk . j mh . annotations .* Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ data Ġclass ĠA sh ley Position ( ĊĠĠĠ Ġvar Ġx : ĠFloat Ġ= Ġ 0 f , ĊĠĠĠ Ġvar Ġy : ĠFloat Ġ= Ġ 0 f Ċ ) Ġ: ĠComponent Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠMAP PER : ĠComponent Mapper < A sh ley Position > Ġ= ĠComponent Mapper . get For ( A sh ley Position :: class . java ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ data Ġclass ĠA sh ley Life ( ĊĠĠĠ Ġvar Ġlife : ĠFloat Ġ= Ġ 0 f Ċ ) Ġ: ĠComponent Ċ Ċ data Ġclass ĠA sh ley Sprite ( ĊĠĠĠ Ġvar Ġpath : ĠString Ġ= Ġ"", ĊĠĠĠ Ġvar Ġanimation Time : ĠFloat Ġ= Ġ 0 f Ċ ) Ġ: ĠComponent Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠMAP PER : ĠComponent Mapper < A sh ley Sprite > Ġ= ĠComponent Mapper . get For ( A sh ley Sprite :: class . java ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠA sh ley System Simple Ġ: ĠIter ating System ( Family . all ( A sh ley Position :: class . java ). get ()) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġprocess Entity ( entity : ĠEntity ?, Ġdelta Time : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ ĠA sh ley Position . MAP PER . get ( entity ). x ++ ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠA sh ley System Complex 1 Ġ: ĠIter ating System ( ĊĠĠĠ ĠFamily ĊĠĠĠĠĠĠĠ Ġ. all ( A sh ley Position :: class . java ) ĊĠĠĠĠĠĠĠ Ġ. exclude ( A sh ley Life :: class . java ) ĊĠĠĠĠĠĠĠ Ġ. one ( A sh ley Sprite :: class . java ) ĊĠĠĠĠĠĠĠ Ġ. get () Ċ ) Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġprocess Calls Ġ= Ġ 0 ĊĊĠĠĠ Ġoverride Ġfun Ġprocess Entity ( entity : ĠEntity ?, Ġdelta Time : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( process Calls Ġ% Ġ 2 Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠA sh ley Position . MAP PER . get ( entity ). x ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentity ?. add ( engine . create Component ( A sh ley Life :: class . java )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentity ?. remove ( A sh ley Position :: class . java ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠA sh ley Sprite . MAP PER . get ( entity ). animation Time ++ ĊĠĠĠĠĠĠĠ Ġ++ process Calls ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠA sh ley System Complex 2 Ġ: ĠIter ating System ( ĊĠĠĠ ĠFamily ĊĠĠĠĠĠĠĠ Ġ. one ( A sh ley Position :: class . java , ĠA sh ley Life :: class . java , ĠA sh ley Sprite :: class . java ) ĊĠĠĠĠĠĠĠ Ġ. get () Ċ ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġprocess Entity ( entity : ĠEntity ?, Ġdelta Time : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġentity ?. remove ( A sh ley Life :: class . java ) ĊĠĠĠĠĠĠĠ Ġentity ?. add ( engine . create Component ( A sh ley Position :: class . java )) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ State ( Scope . Benchmark ) Ċ open Ġclass ĠA sh ley State Add Remove Ġ{ ĊĠĠĠ Ġlateinit Ġvar Ġengine : ĠEngine ĊĊĠĠĠ Ġ@ Setup ( value Ġ= ĠLevel . Iteration ) ĊĠĠĠ Ġfun Ġsetup () Ġ{ ĊĠĠĠĠĠĠĠ Ġengine Ġ= ĠEngine () ĊĠĠĠĠĠĠĠ Ġengine . add System ( A sh ley System Simple ()) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ State ( Scope . Benchmark ) Ċ open Ġclass ĠA sh ley State Simple Ġ{ ĊĠĠĠ Ġlateinit Ġvar Ġengine : ĠEngine ĊĊĠĠĠ Ġ@ Setup ( value Ġ= ĠLevel . Iteration ) ĊĠĠĠ Ġfun Ġsetup () Ġ{ ĊĠĠĠĠĠĠĠ Ġengine Ġ= ĠEngine () ĊĠĠĠĠĠĠĠ Ġengine . add System ( A sh ley System Simple ()) ĊĠĠĠĠĠĠĠ Ġrepeat ( NUM _ ENT ITIES ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcmp Ġ= Ġengine . create Component ( A sh ley Position :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġentity Ġ= Ġengine . create Entity () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentity . add ( cmp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġengine . add Entity ( entity ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ State ( Scope . Benchmark ) Ċ open Ġclass ĠA sh ley State Complex Ġ{ ĊĠĠĠ Ġlateinit Ġvar Ġengine : ĠEngine ĊĊĠĠĠ Ġ@ Setup ( value Ġ= ĠLevel . Iteration ) ĊĠĠĠ Ġfun Ġsetup () Ġ{ ĊĠĠĠĠĠĠĠ Ġengine Ġ= ĠEngine () ĊĠĠĠĠĠĠĠ Ġengine . add System ( A sh ley System Complex 1 ()) ĊĠĠĠĠĠĠĠ Ġengine . add System ( A sh ley System Complex 2 ()) ĊĠĠĠĠĠĠĠ Ġrepeat ( NUM _ ENT ITIES ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġentity Ġ= Ġengine . create Entity () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentity . add ( engine . create Component ( A sh ley Position :: class . java )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentity . add ( engine . create Component ( A sh ley Sprite :: class . java )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġengine . add Entity ( entity ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Fork ( 1 ) Ċ @ W arm up ( iterations Ġ= ĠWAR M UP S ) Ċ @ Measurement ( iterations Ġ= ĠI TER ATIONS , Ġtime Ġ= ĠTIME , Ġtime Unit Ġ= ĠTimeUnit . SECONDS ) Ċ open Ġclass ĠA sh ley Benchmark Ġ{ ĊĠĠĠ Ġ@ Benchmark ĊĠĠĠ Ġfun Ġadd Remove ( state : ĠA sh ley State Add Remove ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrepeat ( NUM _ ENT ITIES ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcmp Ġ= Ġstate . engine . create Component ( A sh ley Position :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġentity Ġ= Ġstate . engine . create Entity () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentity . add ( cmp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate . engine . add Entity ( entity ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġstate . engine . removeAll Entities () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Benchmark ĊĠĠĠ Ġfun Ġsimple ( state : ĠA sh ley State Simple ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrepeat ( WORLD _ UP DAT ES ) Ġ{ Ġstate . engine . update ( 1 f ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Benchmark ĊĠĠĠ Ġfun Ġcomplex ( state : ĠA sh ley State Complex ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrepeat ( WORLD _ UP DAT ES ) Ġ{ Ġstate . engine . update ( 1 f ) Ġ} ĊĠĠĠ Ġ} Ċ } Ċ