1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
3 /* This Source Code Form is subject to the terms of the Mozilla Public
4  * License, v. 2.0. If a copy of the MPL was not distributed with this
5  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 
7 #include "mozilla/EventQueue.h"
8 #include "nsIRunnable.h"
9 
10 using namespace mozilla;
11 
EventQueue(EventPriority aPriority)12 EventQueue::EventQueue(EventPriority aPriority) {}
13 
PutEvent(already_AddRefed<nsIRunnable> && aEvent,EventPriority aPriority,const MutexAutoLock & aProofOfLock)14 void EventQueue::PutEvent(already_AddRefed<nsIRunnable>&& aEvent,
15                           EventPriority aPriority,
16                           const MutexAutoLock& aProofOfLock) {
17   nsCOMPtr<nsIRunnable> event(aEvent);
18   mQueue.Push(Move(event));
19 }
20 
GetEvent(EventPriority * aPriority,const MutexAutoLock & aProofOfLock)21 already_AddRefed<nsIRunnable> EventQueue::GetEvent(
22     EventPriority* aPriority, const MutexAutoLock& aProofOfLock) {
23   if (mQueue.IsEmpty()) {
24     return nullptr;
25   }
26 
27   if (aPriority) {
28     *aPriority = EventPriority::Normal;
29   }
30 
31   nsCOMPtr<nsIRunnable> result = mQueue.Pop();
32   return result.forget();
33 }
34 
IsEmpty(const MutexAutoLock & aProofOfLock)35 bool EventQueue::IsEmpty(const MutexAutoLock& aProofOfLock) {
36   return mQueue.IsEmpty();
37 }
38 
HasReadyEvent(const MutexAutoLock & aProofOfLock)39 bool EventQueue::HasReadyEvent(const MutexAutoLock& aProofOfLock) {
40   return !IsEmpty(aProofOfLock);
41 }
42 
PeekEvent(const MutexAutoLock & aProofOfLock)43 already_AddRefed<nsIRunnable> EventQueue::PeekEvent(
44     const MutexAutoLock& aProofOfLock) {
45   if (mQueue.IsEmpty()) {
46     return nullptr;
47   }
48 
49   nsCOMPtr<nsIRunnable> result = mQueue.FirstElement();
50   return result.forget();
51 }
52 
Count(const MutexAutoLock & aProofOfLock) const53 size_t EventQueue::Count(const MutexAutoLock& aProofOfLock) const {
54   return mQueue.Count();
55 }
56