Cache sync hash functions per actor for faster sync calculations.
Caching the result of the function lookup allows the actor to calculate all the sync hashes for its syncable traits faster as it does not need to repeat the lookup each time.
This commit is contained in:
@@ -63,31 +63,29 @@ namespace OpenRA.Network
|
||||
report.SyncedRandom = orderManager.World.SharedRandom.Last;
|
||||
report.TotalCount = orderManager.World.SharedRandom.TotalCount;
|
||||
report.Traits.Clear();
|
||||
foreach (var a in orderManager.World.ActorsWithTrait<ISync>())
|
||||
{
|
||||
var sync = Sync.CalculateSyncHash(a.Trait);
|
||||
if (sync != 0)
|
||||
report.Traits.Add(new TraitReport()
|
||||
{
|
||||
ActorID = a.Actor.ActorID,
|
||||
Type = a.Actor.Info.Name,
|
||||
Owner = (a.Actor.Owner == null) ? "null" : a.Actor.Owner.PlayerName,
|
||||
Trait = a.Trait.GetType().Name,
|
||||
Hash = sync,
|
||||
NamesValues = DumpSyncTrait(a.Trait)
|
||||
});
|
||||
}
|
||||
foreach (var actor in orderManager.World.ActorsHavingTrait<ISync>())
|
||||
foreach (var syncHash in actor.SyncHashes)
|
||||
if (syncHash.Hash != 0)
|
||||
report.Traits.Add(new TraitReport()
|
||||
{
|
||||
ActorID = actor.ActorID,
|
||||
Type = actor.Info.Name,
|
||||
Owner = (actor.Owner == null) ? "null" : actor.Owner.PlayerName,
|
||||
Trait = syncHash.Trait.GetType().Name,
|
||||
Hash = syncHash.Hash,
|
||||
NamesValues = DumpSyncTrait(syncHash.Trait)
|
||||
});
|
||||
|
||||
foreach (var e in orderManager.World.Effects)
|
||||
{
|
||||
var sync = e as ISync;
|
||||
if (sync != null)
|
||||
{
|
||||
var hash = Sync.CalculateSyncHash(sync);
|
||||
var hash = Sync.Hash(sync);
|
||||
if (hash != 0)
|
||||
report.Effects.Add(new EffectReport()
|
||||
{
|
||||
Name = sync.ToString().Split('.').Last(),
|
||||
Name = sync.GetType().Name,
|
||||
Hash = hash,
|
||||
NamesValues = DumpSyncTrait(sync)
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user