Beispiel #1
0
        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);
        }