Exemplo n.º 1
0
        public void ReadJsonGraph(string path, string targetPath = null, bool loadTargetIfApplicable = true)
        {
            if (loadTargetIfApplicable && targetPath != null && File.Exists(targetPath))
            {
                if (Deserialize(targetPath))
                {
                    return;
                }
            }

            MutableDataflowGraph = new MutableDirectedGraph();
            DataflowGraph        = MutableDataflowGraph;
            using (var stream = new ProgressStream(new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read, 64 << 10), "JsonData"))
                using (var textReader = new StreamReader(stream))
                    using (var textWriter = new StreamWriter(Path.ChangeExtension(targetPath, ".filter.json")))
                        using (var reader = new JsonFilter(path, new JsonTextReader(textReader), new JsonTextWriter(textWriter)))
                        {
                            AssertPostRead(reader, JsonToken.StartObject);
                            while (reader.Read() && reader.TokenType == JsonToken.PropertyName)
                            {
                                string propertyName = (string)reader.Value;
                                switch (propertyName)
                                {
                                case "graph":
                                    ReadGraph(reader);
                                    break;

                                case "execution":
                                    ReadExecutions(reader);
                                    break;

                                case "pips":
                                    ReadPips(reader);
                                    break;

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

            AddEdges();

            Compute();

            if (targetPath != null)
            {
                Serialize(targetPath);
            }
        }
Exemplo n.º 2
0
        public bool Deserialize(string path)
        {
            Console.WriteLine("Deserializing data...");
            using (var fs = new ProgressStream(File.Open(path, FileMode.Open), "DeserializedData"))
                using (var reader = new BuildXLReader(false, fs, false))
                {
                    Guid readVersion = reader.ReadGuid();
                    if (readVersion != VersionGuid)
                    {
                        return(false);
                    }

                    DataflowGraph = DeserializedDirectedGraph.DeserializeAsync(reader).Result;
                    var maxNode = (uint)DataflowGraph.NodeCount;
                    //reader.Read(maxNode, AggregateCosts, r => r.ReadUInt64());
                    reader.Read(maxNode, PipIds, r => r.ReadInt32());
                    reader.Read(maxNode, SemiStableHashes, r => r.ReadUInt64());
                    reader.Read(maxNode, StartTimes, r => r.ReadUInt64());
                    reader.Read(maxNode, Durations, r => r.ReadUInt64());
                    reader.Read(maxNode, PipTypes, r => (PipType)r.ReadByte());
                    //reader.Read(maxNode, CriticalChain, ReadNode);
                    MinStartTime  = reader.ReadUInt64();
                    MaxEndTime    = reader.ReadUInt64();
                    TotalDuration = reader.ReadUInt64();
                    //MaxAggregateCost = reader.ReadUInt64();
                    //CriticalPathHeadNode = ReadNode(reader);
                    //reader.Read(CriticalPath, ReadNode);
                    var stringTable = StringTable.DeserializeAsync(reader).Result;
                    SymbolTable = SymbolTable.DeserializeAsync(reader, Task.FromResult(stringTable)).Result;
                    reader.Read(maxNode, OutputValues, r => r.ReadFullSymbol());
                }

            Console.WriteLine("End deserializing data");
            Compute();
            return(true);
        }