public void Checkpoint(object interestObj, WorldStep step) { var hash = interestObj.GetHashCode(); var key = MathUtils.GetKey(hash, (int)step); Watcher watcher; if (this.dic.TryGetValue(key, out watcher) == true) { double watcherMeasured; if (this.dicMeasured.TryGetValue(key, out watcherMeasured) == true) { this.dicMeasured[key] = watcherMeasured + watcher.GetElapsedMs(); } else { this.dicMeasured.Add(key, watcher.GetElapsedMs()); } watcher.Stop(); this.dic.Remove(key); var checkpoint = new CheckpointInfo(); checkpoint.obj = interestObj; checkpoint.step = step; if (this.checkpoints.Contains(checkpoint) == false) { this.checkpoints.Add(checkpoint); } } else { this.dic.Add(key, new Watcher(interestObj)); } }
public Node AddNode(Node prevNode, Node node, object checkpoint = null, WorldStep step = WorldStep.None) { node.checkpoint = checkpoint; node.worldStep = step; this.nodes.Add(node); prevNode.ConnectTo(node); return(node); }
public double GetWatcher(object interestObj, WorldStep step) { var hash = interestObj.GetHashCode(); var key = MathUtils.GetKey(hash, (int)step); if (this.dicMeasured.TryGetValue(key, out var watcherMeasured) == true) { return(watcherMeasured); } return(0d); }
private Graph CreateSubGraph <T>(IEnumerable list, string methodName, WorldStep step) where T : Node { var innerGraph = new Graph(this.checkpointCollector); innerGraph.worldGraph = this; innerGraph.vertical = true; var enter = innerGraph.AddNode(new SubmoduleEnterNode(null)); var lastNode = enter; foreach (var item in list) { if (WorldHelper.HasMethod(item, methodName) == true) { lastNode = innerGraph.AddNode(lastNode, (T)System.Activator.CreateInstance(typeof(T), item), item, step); } } innerGraph.AddNode(lastNode, new SubmoduleExitNode(lastNode)); return(innerGraph); }
private Graph CreateSubGraph <T>(ME.ECS.Collections.IBufferArray list, string methodName, WorldStep step) where T : Node { var innerGraph = new Graph(this.checkpointCollector); innerGraph.worldGraph = this; innerGraph.vertical = true; var enter = innerGraph.AddNode(new SubmoduleEnterNode(null)); var lastNode = enter; var arr = list.GetArray(); for (int i = 0; i < list.Count; ++i) { var item = arr.GetValue(i); if (WorldHelper.HasMethod(item, methodName) == true) { lastNode = innerGraph.AddNode(lastNode, (T)System.Activator.CreateInstance(typeof(T), item), item, step); } } innerGraph.AddNode(lastNode, new SubmoduleExitNode(lastNode)); return(innerGraph); }