Show More
Commit Description:
Optimize PreserveCounts and only recalculate when needed....
Commit Description:
Optimize PreserveCounts and only recalculate when needed.
Previously would recalculate preservecounts every Update call (~1 per frame), which isn't necessary
when there's no tick. Might be some room to tweak, like doing these updates only when preserves change.
Some measurements: This takes about 30ms versus the .25 ms with no preserve (then like .0002ms).
When the map is filled up with preserve, about 35ms and 9ms. With a handful of
cells, it's more like 0.8ms (before JIT optimizes most of it away).
References:
File last commit:
Show/Diff file:
Action:
encompass-cs/test/SpawnerTest.cs
46 lines | 1.2 KiB | text/x-csharp | CSharpLexer
46 lines | 1.2 KiB | text/x-csharp | CSharpLexer
r169 | using Encompass; | |||
using NUnit.Framework; | ||||
namespace Tests | ||||
{ | ||||
public class SpawnerTest | ||||
{ | ||||
struct TestComponent : IComponent { } | ||||
struct SpawnMessageA : IMessage { } | ||||
static Entity resultEntity; | ||||
[Sends(typeof(SpawnMessageA))] | ||||
class MessageEmitter : Engine | ||||
{ | ||||
public override void Update(double dt) | ||||
{ | ||||
SendMessage(new SpawnMessageA()); | ||||
} | ||||
} | ||||
[WritesImmediate(typeof(TestComponent))] | ||||
[Writes(typeof(TestComponent))] | ||||
class TestSpawner : Spawner<SpawnMessageA> | ||||
{ | ||||
protected override void Spawn(in SpawnMessageA message) | ||||
{ | ||||
resultEntity = CreateEntity(); | ||||
SetComponent(resultEntity, new TestComponent()); | ||||
Assert.Pass(); | ||||
} | ||||
} | ||||
[Test] | ||||
public void RunsSpawnMethodOnMessageRead() | ||||
{ | ||||
var worldBuilder = new WorldBuilder(); | ||||
worldBuilder.AddEngine(new MessageEmitter()); | ||||
worldBuilder.AddEngine(new TestSpawner()); | ||||
var world = worldBuilder.Build(); | ||||
world.Update(0.01); | ||||
} | ||||
} | ||||
} | ||||