/// <summary> /// Time per frame (TPF) of the unit /// </summary> public TimeSpan GetFrameTime(PPDCalculation ppdCalculation) { int rawTime = GetRawTime(ppdCalculation); if (rawTime != 0) { return(TimeSpan.FromSeconds(rawTime)); } var benchmark = SlotModel.Client.BenchmarkService.GetBenchmark(SlotModel.SlotIdentifier, BenchmarkIdentifier); return(benchmark?.AverageFrameTime ?? TimeSpan.Zero); }
/// <summary> /// Frame Time per section based on current PPD calculation setting (readonly) /// </summary> public int GetRawTime(PPDCalculation ppdCalculation) { switch (ppdCalculation) { case PPDCalculation.LastFrame: return(WorkUnit.FramesObserved > 1 ? Convert.ToInt32(WorkUnit.CurrentFrame.Duration.TotalSeconds) : 0); case PPDCalculation.LastThreeFrames: return(WorkUnit.FramesObserved > 3 ? GetDurationInSeconds(3) : 0); case PPDCalculation.AllFrames: return(WorkUnit.FramesObserved > 0 ? GetDurationInSeconds(WorkUnit.FramesObserved) : 0); case PPDCalculation.EffectiveRate: return(GetRawTimePerUnitDownload()); } return(0); }
public void ShowProductionTrace(ILogger logger, string slotName, SlotStatus status, PPDCalculation ppdCalculation, BonusCalculation bonusCalculation) { // test the level if (!logger.IsDebugEnabled) { return; } if (ProteinIsUnknown(CurrentProtein)) { logger.Debug(String.Format(Logger.NameFormat, slotName, "Protein is unknown... 0 PPD.")); return; } switch (bonusCalculation) { case BonusCalculation.DownloadTime: logger.Debug(String.Format(Logger.NameFormat, slotName, status == SlotStatus.RunningNoFrameTimes ? "Calculate Bonus PPD by Frame Time." : "Calculate Bonus PPD by Download Time.")); break; case BonusCalculation.FrameTime: logger.Debug(String.Format(Logger.NameFormat, slotName, "Calculate Bonus PPD by Frame Time.")); break; default: logger.Debug(String.Format(Logger.NameFormat, slotName, "Calculate Standard PPD.")); break; } TimeSpan frameTime = GetFrameTime(ppdCalculation); var noBonus = CurrentProtein.GetProteinProduction(frameTime, TimeSpan.Zero); TimeSpan unitTimeByDownloadTime = GetUnitTimeByDownloadTime(frameTime); var bonusByDownload = CurrentProtein.GetProteinProduction(frameTime, unitTimeByDownloadTime); TimeSpan unitTimeByFrameTime = GetUnitTimeByFrameTime(frameTime); var bonusByFrame = CurrentProtein.GetProteinProduction(frameTime, unitTimeByFrameTime); logger.Debug(CreateProductionDebugOutput(WorkUnit.ToShortProjectString(), frameTime, CurrentProtein, noBonus, unitTimeByDownloadTime, bonusByDownload, unitTimeByFrameTime, bonusByFrame)); }
/// <summary> /// Estimated time of arrival (ETA) for this unit /// </summary> public DateTime GetEtaDate(PPDCalculation ppdCalculation) { return(WorkUnit.UnitRetrievalTime.Add(GetEta(ppdCalculation))); }
/// <summary> /// Estimated time of arrival (ETA) for this unit /// </summary> public TimeSpan GetEta(PPDCalculation ppdCalculation) { return(GetEta(GetFrameTime(ppdCalculation))); }
/// <summary> /// Points per day (PPD) rating for this unit /// </summary> public double GetPPD(SlotStatus status, PPDCalculation ppdCalculation, BonusCalculation calculateBonus) { TimeSpan frameTime = GetFrameTime(ppdCalculation); return(GetPPD(frameTime, GetUnitTimeByDownloadTime(frameTime), GetUnitTimeByFrameTime(frameTime), status, calculateBonus)); }
/// <summary> /// Units per day (UPD) rating for this unit /// </summary> public double GetUPD(PPDCalculation ppdCalculation) { return(ProductionCalculator.GetUPD(GetFrameTime(ppdCalculation), CurrentProtein.Frames)); }
public bool IsUsingBenchmarkFrameTime(PPDCalculation ppdCalculation) { return(GetRawTime(ppdCalculation) == 0); }