public static IEnumerable <SampleWithTrace> ParseFromFile(string filename) { var samples = VTuneStackParser.ReadFromFile(filename) .Skip(1) .Select(s => String.Join(",", s.Split(',') .Select(VTuneStackParser.RemovePrePosComma))) .ParseFromStream(); return(samples); }
public static void CPUReportToDWJson(string filename, string outfname, double timeTotal = 0.0) { if (!File.Exists(filename)) { throw new ArgumentException($"Cannot find specified CPU utilization report {filename}"); } if (timeTotal <= 0) { throw new Exception("Invalid runtime specification in CPU utilization report"); } LongInt durationli = TraceUtils.ToNanoseconds(timeTotal); var cpuRecords = VTuneStackParser.ReadFromFile(filename) .Skip(2) .ParseCPURecords(); /* * CPUUtilRecord first = cpuRecords.First(); * CPUUtilRecord last = cpuRecords.Last(); * * CPUUtilTrace trace = new CPUUtilTrace(); * trace.beginTime = new LongInt(0, (long)(first.Start)); * trace.duration = new LongInt(0, (long)(last.End - first.Start)); * trace.counters = new List<ValueTrace> { new ValueTrace(cpuRecords.Select(r => new CPUSample(new LongInt(0, (long)r.Start), (float)r.CPUUtil)).ToList()) }; */ int steps = cpuRecords.Count() - 1; double totalTime = timeTotal; double stepSize = totalTime / steps; List <ValueTrace> vts = new List <ValueTrace>(); vts.Add(new ValueTrace(Enumerable.Range(0, int.MaxValue).Take(steps).Zip(cpuRecords, (x, y) => new CPUSample(TraceUtils.ToNanoseconds(x * stepSize), (float)(y.CPUUtil))))); CPUUtilTrace trace = new CPUUtilTrace { beginTime = new LongInt(0, 0), //duration = new LongInt(0, totalTime), duration = durationli, counters = vts }; string json = JsonConvert.SerializeObject(trace, Formatting.Indented); // var fs = new FileStream(@"C:\users\perf\Sample2.counters", FileMode.Create); var fs = new FileStream(outfname, FileMode.Create); using (StreamWriter writer = new StreamWriter(fs, Encoding.Unicode)) { // encoding in Unicode here is key writer.WriteLine(json); } }