private void StartIdleMonitor()
 {
     StopIdleMonitor();
     _IdleMonitor              = new IdleMonitor(View.Options.IdleTimeOut);
     _IdleMonitor.IdleTimeout += new EventHandler(_IdleMonitor_IdleTimeout);
     _IdleMonitor.Start();
 }
示例#2
0
        public void GivenIdlingWhenCheckingThenTotalAlwaysIncreases()
        {
            var last         = 10u;
            var mockReporter = new Mock <IIdlingReporter>();
            var monitor      = new IdleMonitor(mockReporter.Object);

            mockReporter
            .Setup(r => r.GetIdleTime())
            .Returns(() =>
            {
                var cached = last;
                last      += 10u;
                return(cached);
            });

            var values = RunMonitor(monitor);

            var total = 0ul;

            foreach (var reportedTotal in values)
            {
                Assert.IsTrue(reportedTotal >= total, "Total should always be increasing when idling.");
                total = reportedTotal;
            }
        }
 private void StopIdleMonitor()
 {
     if (_IdleMonitor != null)
     {
         _IdleMonitor.IdleTimeout -= _IdleMonitor_IdleTimeout;
         _IdleMonitor.Stop();
         _IdleMonitor.Dispose();
         _IdleMonitor = null;
     }
 }
示例#4
0
        private void StartIdleMonitor()
        {
            if (_BackgroundCount != 0)
            {
                return;
            }

            StopIdleMonitor();
            _IdleMonitor              = new IdleMonitor(Math.Max(View.Options.IdleTimeOut, 30));
            _IdleMonitor.IdleTimeout += new EventHandler(_IdleMonitor_IdleTimeout);
            _IdleMonitor.Start();
        }
示例#5
0
        public void GivenActivityWhenCheckingThenTotalShouldNotIncrease()
        {
            var mockReporter = new Mock <IIdlingReporter>();
            var monitor      = new IdleMonitor(mockReporter.Object);

            mockReporter
            .Setup(r => r.GetIdleTime())
            .Returns(0u);

            var values = RunMonitor(monitor);

            foreach (var reportedTotal in values)
            {
                Assert.IsTrue(reportedTotal == 0ul, "Total should always be zero when always active.");
            }
        }
        /// <summary>
        /// Creates a new SelfOptimizingDynamicSpatialIndex.
        /// </summary>
        /// <param name="geoFactory">An <see cref="IGeometryFactory"/> instance.</param>
        /// <param name="restructureStrategy">The strategy used to restructure the index.</param>
        /// <param name="restructureHeuristic">The heuristic to control when the index is restructured.</param>
        /// <param name="insertStrategy">The strategy used to insert entries into the index.</param>
        /// <param name="nodeSplitStrategy">The strategy used to split index nodes.</param>
        /// <param name="indexHeuristic">A heuristic used to balance the index for optimum efficiency.</param>
        /// <param name="idleMonitor">A monitor to determine idle conditions on the executing machine.</param>
        public SelfOptimizingDynamicSpatialIndex(IGeometryFactory geoFactory,
                                                 IIndexRestructureStrategy <IExtents, TItem> restructureStrategy,
                                                 RestructuringHuristic restructureHeuristic,
                                                 IItemInsertStrategy <IExtents, TItem> insertStrategy,
                                                 INodeSplitStrategy <IExtents, TItem> nodeSplitStrategy,
                                                 DynamicRTreeBalanceHeuristic indexHeuristic,
                                                 IdleMonitor idleMonitor)
            : base(geoFactory, insertStrategy, nodeSplitStrategy, indexHeuristic)
        {
            _periodMilliseconds = restructureHeuristic.WhenToRestructure == RestructureOpportunity.Periodic
                                                                        ? (Int32)(restructureHeuristic.Period / 1000.0)
                                                                        : -1;

            _restructureStrategy    = restructureStrategy;
            _restructuringHeuristic = restructureHeuristic;
            _idleMonitor            = idleMonitor;

            _userIdleEvent    = new AutoResetEvent(false);
            _machineIdleEvent = new AutoResetEvent(false);
            _terminateEvent   = new ManualResetEvent(false);

            if (restructureHeuristic.WhenToRestructure != RestructureOpportunity.None)
            {
                _restructureThread = new Thread(doRestructure);
                _restructureThread.Start();
            }

            RestructureOpportunity idle = RestructureOpportunity.OnMachineIdle | RestructureOpportunity.OnUserIdle;

            if (((Int32)(restructureHeuristic.WhenToRestructure & idle)) > 0)
            {
                if (_idleMonitor == null)
                {
                    throw new ArgumentNullException("idleMonitor",
                                                    "If the restructuring heuristic has a value of anything but " +
                                                    "None for WhenToRestructure, the idleMonitor cannot be null.");
                }

                _idleMonitor.UserIdle    += _idleMonitor_UserIdle;
                _idleMonitor.UserBusy    += _idleMonitor_UserBusy;
                _idleMonitor.MachineIdle += _idleMonitor_MachineIdle;
                _idleMonitor.MachineBusy += _idleMonitor_MachineBusy;
            }
        }
示例#7
0
        public void WhenCreatingThenTotalIsZero()
        {
            var monitor = new IdleMonitor(null);

            Assert.AreEqual(0ul, monitor.Total, "Unexpected total - should be zero on creation.");
        }