113 lines
3.2 KiB
C#
113 lines
3.2 KiB
C#
///
|
|
/// Copyright (c) 2013-2015 Sensus Metering Systems
|
|
///
|
|
using System;
|
|
|
|
namespace TBF.UiBridge
|
|
{
|
|
public class TestProgressEventArgs : EventArgs
|
|
{
|
|
public string TestName;
|
|
public int Part;
|
|
public int Repeats;
|
|
public int RepetitionNr;
|
|
|
|
public Config.Entities.Progress Phase;
|
|
public int Progress; /// value in the range 0..100
|
|
public float OveralProgress;
|
|
|
|
|
|
#region Static and base constructor part
|
|
|
|
static int[] estimatedTime; /// Estimated time of each phase to calculate the progress [s]
|
|
static int[] cumulativeSumsOfEstimates;
|
|
static int currentPhaseStartTime;
|
|
static Config.Entities.Progress currentPhase;
|
|
|
|
|
|
static TestProgressEventArgs()
|
|
{
|
|
int[] estTime = new int[(int)Config.Entities.Progress.Count];
|
|
for (int i = 0; i < estTime.Length; i++) estTime[i] = 10;
|
|
cumulativeSumsOfEstimates = new int[(int)Config.Entities.Progress.Count];
|
|
SetEstimatedTimes(estTime);
|
|
|
|
currentPhaseStartTime = BenchControl.StateMachine.Time;
|
|
currentPhase = Config.Entities.Progress.JustStarted;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Set estimated time of each phase in [s] (see Config.Entities.Progress).
|
|
/// </summary>
|
|
/// <param name="estTime">Array: estimated time of each phase in [s]</param>
|
|
public static void SetEstimatedTimes(int[] estTime)
|
|
{
|
|
if (estTime.Length != (int)Config.Entities.Progress.Count) return;
|
|
estimatedTime = estTime;
|
|
for (int i = 0; i < estTime.Length; i++)
|
|
{
|
|
cumulativeSumsOfEstimates[i] = (i > 0) ? cumulativeSumsOfEstimates[i - 1] : 0;
|
|
cumulativeSumsOfEstimates[i] += estTime[i];
|
|
}
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Base constructor which maintains currentPhase, currentPhaseStartTime
|
|
/// and calculates 'Progress'.
|
|
/// </summary>
|
|
/// <param name="progress"></param>
|
|
private TestProgressEventArgs(Config.Entities.Progress phase)
|
|
{
|
|
if (phase != currentPhase)
|
|
{
|
|
currentPhase = phase;
|
|
currentPhaseStartTime = BenchControl.StateMachine.Time;
|
|
}
|
|
|
|
Phase = phase;
|
|
int phaseNr = (int)phase;
|
|
|
|
int currentPhaseTime = Math.Min(BenchControl.StateMachine.Time - currentPhaseStartTime, estimatedTime[phaseNr]);
|
|
int currentTestTime = currentPhaseTime + ((phaseNr == 0) ? 0 : cumulativeSumsOfEstimates[phaseNr - 1]);
|
|
|
|
int add10pct = cumulativeSumsOfEstimates[(int)Config.Entities.Progress.Count - 1] / 9;
|
|
|
|
|
|
Progress = 100 * (currentTestTime + add10pct)
|
|
/ (cumulativeSumsOfEstimates[(int)Config.Entities.Progress.Count - 1] + add10pct);
|
|
}
|
|
|
|
#endregion
|
|
|
|
public TestProgressEventArgs(Config.Entities.Test test, int repetitionNr, Config.Entities.Progress progress)
|
|
: this(progress)
|
|
{
|
|
TestName = Results.Utils.GetTestName(test.Name, test.Repeats, repetitionNr);
|
|
Part = test.Part;
|
|
Repeats = test.Repeats;
|
|
RepetitionNr = repetitionNr;
|
|
}
|
|
|
|
|
|
public TestProgressEventArgs(Config.Entities.Test test, Config.Entities.Progress progress)
|
|
: this(test, 1, progress)
|
|
{
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Used by iPearl communication dialog
|
|
/// </summary>
|
|
public TestProgressEventArgs(string testName, Config.Entities.Progress progress)
|
|
: this(progress)
|
|
{
|
|
TestName = testName;
|
|
Part = 0;
|
|
Repeats = 1;
|
|
RepetitionNr = 1;
|
|
}
|
|
}
|
|
}
|