Example #1
0
 public MockEventLoop(IBrowsingContext context)
 {
     _queues  = new Dictionary <TaskPriority, Queue <TaskEventLoopEntry> >();
     _count   = 0;
     _current = null;
     //Scan();
 }
Example #2
0
        public ICancellable Enqueue(Action<CancellationToken> task, TaskPriority priority)
        {
            var entry = new TaskEventLoopEntry(task);

            lock (this)
            {
                var entries = default(Queue<TaskEventLoopEntry>);

                if (!_queues.TryGetValue(priority, out entries))
                {
                    entries = new Queue<TaskEventLoopEntry>();
                    _queues.Add(priority, entries);
                }

                if (_current == null)
                {
                    SetCurrent(entry);
                }
                else
                {
                    entries.Enqueue(entry);
                }
            }

            return entry;
        }
Example #3
0
        public IEventLoopEntry Enqueue(Action <CancellationToken> task, TaskPriority priority)
        {
            var entry = new TaskEventLoopEntry(task);

            lock (this)
            {
                var entries = default(Queue <TaskEventLoopEntry>);

                if (!_queues.TryGetValue(priority, out entries))
                {
                    entries = new Queue <TaskEventLoopEntry>();
                    _queues.Add(priority, entries);
                }

                if (_current == null)
                {
                    _current = entry;
                    RunCurrent();
                }
                else
                {
                    entries.Enqueue(entry);
                }
            }

            return(entry);
        }
Example #4
0
        public ICancellable Enqueue(Action <CancellationToken> task, TaskPriority priority)
        {
            var entry = new TaskEventLoopEntry(task);

            lock (_lockObj)
            {
                Debug.WriteLine("Enter lock 1");
                if (!_queues.TryGetValue(priority, out var entries))
                {
                    entries = new Queue <TaskEventLoopEntry>();
                    _queues.Add(priority, entries);
                }

                _count++;

                if (_current == null)
                {
                    SetCurrent(entry);
                }
                else
                {
                    entries.Enqueue(entry);
                }
                Debug.WriteLine("Exit lock 1");
            }

            return(entry);
        }
Example #5
0
        private void Continue()
        {
            lock (this)
            {
                _current = null;
            }

            Spin();
        }
Example #6
0
 void RunCurrent()
 {
     _current.Run(() =>
     {
         lock (this)
         {
             _current = null;
             Spin();
         }
     });
 }
Example #7
0
 private void SetCurrent(TaskEventLoopEntry entry)
 {
     _current = entry;
     entry?.Run(() =>
     {
         lock (_lockObj)
         {
             _current = null;
             SpinInternal();
         }
     });
 }
Example #8
0
        private void SetCurrent(TaskEventLoopEntry entry)
        {
            _current = entry;
            entry?.Run(() =>
            {
                _count--;

                lock (_lockObj)
                {
                    Debug.WriteLine("Enter lock 4");
                    _current = null;
                    SpinInternal();
                    Debug.WriteLine("Exit lock 4");
                }
            });
        }
Example #9
0
        public void Spin()
        {
            lock (this)
            {
                if (_current != null && _current.IsRunning)
                {
                    return;
                }

                _current = Dequeue(TaskPriority.Critical) ?? 
                           Dequeue(TaskPriority.Microtask) ?? 
                           Dequeue(TaskPriority.Normal) ?? 
                           Dequeue(TaskPriority.None);
            }

            if (_current != null)
            {
                RunCurrent();
            }
        }
Example #10
0
        public void Spin()
        {
            lock (this)
            {
                if (_current != null && _current.IsRunning)
                {
                    return;
                }

                _current = Dequeue(TaskPriority.Critical) ??
                           Dequeue(TaskPriority.Microtask) ??
                           Dequeue(TaskPriority.Normal) ??
                           Dequeue(TaskPriority.None);
            }

            if (_current != null)
            {
                RunCurrent();
            }
        }
Example #11
0
        public ICancellable Enqueue(Action <CancellationToken> task, TaskPriority priority)
        {
            var entry = new TaskEventLoopEntry(task);

            lock (this)
            {
                if (!_queues.TryGetValue(priority, out var entries))
                {
                    entries = new Queue <TaskEventLoopEntry>();
                    _queues.Add(priority, entries);
                }

                if (_current == null)
                {
                    SetCurrent(entry);
                }
                else
                {
                    entries.Enqueue(entry);
                }
            }

            return(entry);
        }
Example #12
0
 private void SetCurrent(TaskEventLoopEntry entry)
 {
     _current = entry;
     entry?.Run(Continue);
 }
Example #13
0
        private void Continue()
        {
            lock (this)
            {
                _current = null;
            }

            Spin();
        }
Example #14
0
 private void SetCurrent(TaskEventLoopEntry entry)
 {
     _current = entry;
     entry?.Run(Continue);
 }
Example #15
0
 public TaskEventLoop()
 {
     _queues = new Dictionary<TaskPriority, Queue<TaskEventLoopEntry>>();
     _current = null;
 }
Example #16
0
 void RunCurrent()
 {
     _current.Run(() =>
     {
         lock (this)
         {
             _current = null;
             Spin();
         }
     });
 }
Example #17
0
 public TaskEventLoop()
 {
     _queues  = new Dictionary <TaskPriority, Queue <TaskEventLoopEntry> >();
     _current = null;
 }