private string BuildTraceFileName(BuildTimeline.BuildData data) { StringBuilder builder = new StringBuilder(); builder.Append("Trace - "); builder.Append($"{Path.GetFileNameWithoutExtension(data.BuildConfiguration.SolutionPath)} - "); if (data.BuildConfiguration.Project != null) { builder.Append($"{data.BuildConfiguration.Project} - "); // MSBuild requires it in the form "Project:Target" builder.Append($"{data.BuildConfiguration.Target.Split(':')[1]} - "); } else { builder.Append($"{data.BuildConfiguration.Target} - "); } builder.Append($"{data.BuildConfiguration.Configuration} - "); builder.Append($"{data.BuildConfiguration.Platform}"); return(builder.ToString()); }
private void CreateTimeline() { OpenFileDialog openEventsFileDialog = new OpenFileDialog(); openEventsFileDialog.Filter = "Events dump file|*.json"; if (openEventsFileDialog.ShowDialog() == true) { // load data from file string eventsJSON = File.ReadAllText(openEventsFileDialog.FileName); BuildTimeline.BuildData data = JsonConvert.DeserializeObject <BuildTimeline.BuildData>(eventsJSON, new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.Auto }); SaveFileDialog saveTimelineFileDialog = new SaveFileDialog(); saveTimelineFileDialog.Filter = "JSON file (*.json)|*.json"; saveTimelineFileDialog.FileName = BuildTraceFileName(data); if (saveTimelineFileDialog.ShowDialog() == true) { // build a hierarchical timeline of the events BuildTimeline.TimelineBuilder builder = new BuildTimeline.TimelineBuilder(data); // include some post-processing BuildTimeline.TimelineEntryPostProcessor.Processor postProcessors = null; if (data.BuildConfiguration.UseBtPlusFlag) { postProcessors += BuildTimeline.TimelineEntryPostProcessor.TaskCLSingleThread; postProcessors += BuildTimeline.TimelineEntryPostProcessor.TaskCLMultiThread; } if (data.BuildConfiguration.UseTimePlusFlag) { postProcessors += BuildTimeline.TimelineEntryPostProcessor.TaskLink; } if (data.BuildConfiguration.UseD1ReportTimeFlag) { postProcessors += BuildTimeline.TimelineEntryPostProcessor.FlagD1ReportTime; } // build a hierarchical timeline of the events BuildTimeline.Timeline timeline = builder.Build(postProcessors); // dump it to file TimelineSerializer.ChromeTrace trace = TimelineSerializer.ChromeTracingSerializer.BuildTrace(timeline); string json = JsonConvert.SerializeObject(trace, Formatting.Indented, new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore }); File.WriteAllText(saveTimelineFileDialog.FileName, json); MessageBox.Show("Timeline built and saved successfully", "File saved"); } } }