Ejemplo n.º 1
0
            /// <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);
        }
Ejemplo n.º 4
0
            /// <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);
            }