private double CalculateRelativeStartPosition(BxlPipData pip, BxlBuildMeta meta) { var pos = 0.0; var buildStart = new DateTime(meta.BuildStartTimeTicks); var buildEnd = buildStart.AddMilliseconds(meta.BuildDurationMs); var duration = buildEnd - buildStart; var pipStart = new DateTime(pip.StartTimeTicks); var pipRelativeStart = pipStart - buildStart; if (pipStart >= buildStart && pipStart.AddMilliseconds(pip.DurationMs) <= buildEnd && duration.TotalMilliseconds > 0) { pos = ((1.0 * pipRelativeStart.Ticks) / (1.0 * duration.Ticks)); } else if (pipStart >= buildStart && pipStart.AddMilliseconds(pip.DurationMs) > buildEnd && duration.TotalMilliseconds > 0) { pos = 1.0; } return(pos); }
private BxlPipData BuildBxlPipFromExecutionData( Pip pip, PipExecutionPerformanceEventData executionData, MultiValueDictionary <uint, byte> scheduledPipDependencyCount, MultiValueDictionary <uint, byte> scheduledPipInputCount, MultiValueDictionary <uint, byte> scheduledPipOutputCount) { var pipData = new BxlPipData { SemiStableHash = pip.FormattedSemiStableHash, DurationMs = (executionData.ExecutionPerformance.ExecutionStop - executionData.ExecutionPerformance.ExecutionStart).TotalMilliseconds, Type = pip.PipType.ToString(), ExecutionLevel = executionData.ExecutionPerformance.ExecutionLevel.ToString(), StartTimeTicks = executionData.ExecutionPerformance.ExecutionStart.Ticks, TagCount = pip.Tags.Count() }; if (scheduledPipDependencyCount.TryGetValue(pip.PipId.Value, out var deps)) { pipData.DependencyCount = deps.Count; } if (scheduledPipInputCount.TryGetValue(pip.PipId.Value, out var inputs)) { pipData.InputCount = inputs.Count; } if (scheduledPipOutputCount.TryGetValue(pip.PipId.Value, out var outputs)) { pipData.OutputCount = outputs.Count; } if (pip.PipType == PipType.Process) { var process = pip as Pips.Operations.Process; pipData.Priority = process.Priority; pipData.Weight = process.Weight; pipData.SemaphoreCount = process.Semaphores.Length; } // done... return(pipData); }