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);
        }
Example #4
0
        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);
        }