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)12EventQueue::EventQueue(EventPriority aPriority) {} 13 PutEvent(already_AddRefed<nsIRunnable> && aEvent,EventPriority aPriority,const MutexAutoLock & aProofOfLock)14void 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)21already_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)35bool EventQueue::IsEmpty(const MutexAutoLock& aProofOfLock) { 36 return mQueue.IsEmpty(); 37 } 38 HasReadyEvent(const MutexAutoLock & aProofOfLock)39bool EventQueue::HasReadyEvent(const MutexAutoLock& aProofOfLock) { 40 return !IsEmpty(aProofOfLock); 41 } 42 PeekEvent(const MutexAutoLock & aProofOfLock)43already_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) const53size_t EventQueue::Count(const MutexAutoLock& aProofOfLock) const { 54 return mQueue.Count(); 55 } 56