Ejemplo n.º 1
0
        private void AddEdges()
        {
            var nodes = MutableDataflowGraph.Nodes.ToArray();
            int count = 0;

            Parallel.ForEach(nodes, node =>
            {
                var consumes = m_pipConsumes[node.Value];
                if (consumes != null)
                {
                    foreach (var consumed in consumes)
                    {
                        var producer = m_pipProducers.GetOrAdd(consumed, MutableDataflowGraph, (consumed0, graph) =>
                        {
                            var sourceNode       = graph.CreateNode();
                            PipTypes[sourceNode] = PipType.HashSourceFile;
                            return(sourceNode);
                        }).Item.Value;

                        MutableDataflowGraph.AddEdge(producer, node);
                    }

                    int incrementedCount = Interlocked.Increment(ref count);
                    if ((incrementedCount % 10000) == 0)
                    {
                        Console.WriteLine("Added edges: {0} / {1} ({2} %)", incrementedCount, nodes.Length, ((double)incrementedCount * 100) / nodes.Length);
                    }
                }
            });
        }
Ejemplo n.º 2
0
        private NodeId GetNodeForId(int id)
        {
            NodeId node;

            if (!m_pipIdToNode.TryGetValue(id, out node))
            {
                node = MutableDataflowGraph.CreateNode();
                m_pipIdToNode[id] = node;
                PipIds[node]      = id;
            }

            return(node);
        }
Ejemplo n.º 3
0
        public void ReadGraph(JsonFilter reader)
        {
            Dictionary <string, PipType> pipTypeLookup = new Dictionary <string, PipType>();

            foreach (PipType pt in Enum.GetValues(typeof(PipType)))
            {
                pipTypeLookup[pt.ToString()] = pt;
            }

            AssertPostRead(reader, JsonToken.StartArray);
            while (reader.Read() && reader.TokenType == JsonToken.StartObject)
            {
                AssertPostRead(reader, JsonToken.PropertyName);
                var    id   = (int)reader.ReadAsInt32();
                NodeId node = GetNodeForId(id);


                while (reader.Read() && reader.TokenType == JsonToken.PropertyName)
                {
                    int    value        = 0;
                    string propertyName = (string)reader.Value;
                    switch (propertyName)
                    {
                    case "type":
                        PipTypes[node] = pipTypeLookup[reader.ReadAsString()];
                        break;

                    case "stableId":
                        SemiStableHashes[node] = ulong.Parse(reader.ReadAsString(), NumberStyles.HexNumber);
                        break;

                    case "dependsOn":
                        AssertPostRead(reader, JsonToken.StartArray);
                        while (reader.TryReadInt32(out value))
                        {
                            MutableDataflowGraph.AddEdge(GetNodeForId(value), node);
                        }

                        AssertToken(reader, JsonToken.EndArray);
                        break;

                    case "consumes":
                        AssertPostRead(reader, JsonToken.StartArray);
                        while (reader.TryReadInt32(out value))
                        {
                            var list = GetOrAddDependenciesList(node);
                            list.Add(value);
                        }

                        AssertToken(reader, JsonToken.EndArray);
                        break;

                    case "produces":
                        AssertPostRead(reader, JsonToken.StartArray);
                        while (reader.TryReadInt32(out value))
                        {
                            m_pipProducers[value] = node;
                        }

                        AssertToken(reader, JsonToken.EndArray);
                        break;

                    case "provenance":
                        AssertPostRead(reader, JsonToken.StartObject);
                        while (reader.Read() && reader.TokenType == JsonToken.PropertyName)
                        {
                            if (reader.Value.Equals("value"))
                            {
                                var outputValue = FullSymbol.Create(SymbolTable, reader.ReadAsString());
                                OutputValues[node] = outputValue;
                                continue;
                            }

                            reader.Skip();
                        }

                        AssertToken(reader, JsonToken.EndObject);
                        break;

                    default:
                        reader.Skip();
                        break;
                    }
                }

                AssertToken(reader, JsonToken.EndObject);
            }

            AssertToken(reader, JsonToken.EndArray);
        }