/// <summary> /// Initializes a new instance of the <see cref="LegacyUnitRunData"/> class. /// </summary> /// <param name="other">The other instance from which data will be copied.</param> public LegacyUnitRunData(LegacyUnitRunData other) : base(other) { if (other == null) { return; } Threads = other.Threads; ClientCoreCommunicationsError = other.ClientCoreCommunicationsError; TotalCompletedUnits = other.TotalCompletedUnits; }
public void LegacyUnitRunData_CopyConstructor_OtherIsNull_Test() { // Act var copy = new LegacyUnitRunData(null); // Assert Assert.AreEqual(0, copy.FramesObserved); Assert.AreEqual(null, copy.CoreVersion); Assert.AreEqual(0, copy.ProjectID); Assert.AreEqual(0, copy.ProjectRun); Assert.AreEqual(0, copy.ProjectClone); Assert.AreEqual(0, copy.ProjectGen); Assert.AreEqual(null, copy.WorkUnitResult); Assert.AreEqual(null, copy.FrameDataDictionary); Assert.AreEqual(0, copy.Threads); Assert.AreEqual(false, copy.ClientCoreCommunicationsError); Assert.AreEqual(null, copy.TotalCompletedUnits); }
public void LegacyUnitRunData_CopyConstructor_Test() { // Arrange var data = new LegacyUnitRunData { FramesObserved = 50, CoreVersion = "1.23", ProjectID = 1, ProjectRun = 2, ProjectClone = 3, ProjectGen = 4, WorkUnitResult = WorkUnitResult.FINISHED_UNIT, FrameDataDictionary = new Dictionary <int, WorkUnitFrameData> { { 1, new WorkUnitFrameData { ID = 1 } } }, Threads = 4, ClientCoreCommunicationsError = true, TotalCompletedUnits = 1025 }; // Act var copy = new LegacyUnitRunData(data); // Assert Assert.AreEqual(data.FramesObserved, copy.FramesObserved); Assert.AreEqual(data.CoreVersion, copy.CoreVersion); Assert.AreEqual(data.ProjectID, copy.ProjectID); Assert.AreEqual(data.ProjectRun, copy.ProjectRun); Assert.AreEqual(data.ProjectClone, copy.ProjectClone); Assert.AreEqual(data.ProjectGen, copy.ProjectGen); Assert.AreEqual(data.WorkUnitResult, copy.WorkUnitResult); Assert.AreNotSame(data.FrameDataDictionary, copy.FrameDataDictionary); Assert.AreNotSame(data.FrameDataDictionary[1], copy.FrameDataDictionary[1]); Assert.AreEqual(data.FrameDataDictionary[1].ID, copy.FrameDataDictionary[1].ID); Assert.AreEqual(data.Threads, copy.Threads); Assert.AreEqual(data.ClientCoreCommunicationsError, copy.ClientCoreCommunicationsError); Assert.AreEqual(data.TotalCompletedUnits, copy.TotalCompletedUnits); }
/// <summary> /// Creates a new <see cref="UnitRunData"/> object from the information contained in the <see cref="UnitRun"/> object. /// </summary> protected override UnitRunData OnGetUnitRunData(UnitRun unitRun) { bool clientWasPaused = false; bool lookForProject = true; var unitRunData = new LegacyUnitRunData(); var frameDataDictionary = new Dictionary <int, WorkUnitFrameData>(); foreach (var line in unitRun.LogLines) { #region Unit Start if ((line.LineType == LogLineType.WorkUnitProcessing || line.LineType == LogLineType.WorkUnitWorking || line.LineType == LogLineType.WorkUnitCoreStart || line.LineType == LogLineType.WorkUnitFrame) && unitRunData.UnitStartTimeStamp == null) { unitRunData.UnitStartTimeStamp = line.TimeStamp; } if (line.LineType == LogLineType.WorkUnitPaused || line.LineType == LogLineType.WorkUnitPausedForBattery) { clientWasPaused = true; } else if ((line.LineType == LogLineType.WorkUnitWorking || line.LineType == LogLineType.WorkUnitResumeFromBattery || line.LineType == LogLineType.WorkUnitFrame) && clientWasPaused) { clientWasPaused = false; // Reset the Frames Observed Count // This will cause the Instance to only use frames beyond this point to // set frame times and determine status - Issue 13 (Revised) unitRunData.FramesObserved = 0; // Reset the Unit Start Time unitRunData.UnitStartTimeStamp = line.TimeStamp; } #endregion #region Project if (lookForProject) { // If we encounter a work unit frame, we should have // already seen the Project Information, stop looking if (line.LineType == LogLineType.WorkUnitFrame) { lookForProject = false; } if (line.LineType == LogLineType.WorkUnitProject) { if (line.Data != null && !(line.Data is LogLineDataParserError)) { var data = (WorkUnitProjectData)line.Data; unitRunData.ProjectID = data.ProjectID; unitRunData.ProjectRun = data.ProjectRun; unitRunData.ProjectClone = data.ProjectClone; unitRunData.ProjectGen = data.ProjectGen; } } } #endregion switch (line.LineType) { case LogLineType.WorkUnitFrame: if (line.Data != null && !(line.Data is LogLineDataParserError)) { unitRunData.FramesObserved++; if (line.Data is WorkUnitFrameData frameData) { // Make a copy so UnitRunData is not holding a reference to the same // WorkUnitFrameData instance as the LogLine it was sourced from. frameDataDictionary.TryAdd(frameData.ID, new WorkUnitFrameData(frameData)); } } break; case LogLineType.WorkUnitCoreVersion: if (line.Data != null && !(line.Data is LogLineDataParserError)) { unitRunData.CoreVersion = (string)line.Data; } break; case LogLineType.WorkUnitCoreShutdown: unitRunData.WorkUnitResult = (string)line.Data; break; case LogLineType.ClientCoreCommunicationsError: unitRunData.ClientCoreCommunicationsError = true; break; case LogLineType.WorkUnitCallingCore: unitRunData.Threads = (int)line.Data; break; case LogLineType.ClientNumberOfUnitsCompleted: unitRunData.TotalCompletedUnits = (int)line.Data; break; } } Internal.CommonRunDataAggregator.CalculateFrameDataDurations(frameDataDictionary); unitRunData.FrameDataDictionary = frameDataDictionary; return(unitRunData); }