/src/mozilla-central/xpcom/threads/MainThreadQueue.h
Line | Count | Source (jump to first uncovered line) |
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 | | #ifndef mozilla_MainThreadQueue_h |
8 | | #define mozilla_MainThreadQueue_h |
9 | | |
10 | | #include "mozilla/Attributes.h" |
11 | | #include "mozilla/EventQueue.h" |
12 | | #include "mozilla/RefPtr.h" |
13 | | #include "mozilla/UniquePtr.h" |
14 | | #include "nsThread.h" |
15 | | #include "PrioritizedEventQueue.h" |
16 | | |
17 | | namespace mozilla { |
18 | | |
19 | | template<typename SynchronizedQueueT, typename InnerQueueT> |
20 | | inline already_AddRefed<nsThread> |
21 | | CreateMainThread(nsIIdlePeriod* aIdlePeriod, SynchronizedQueueT** aSynchronizedQueue = nullptr) |
22 | 3 | { |
23 | 3 | using MainThreadQueueT = PrioritizedEventQueue<InnerQueueT>; |
24 | 3 | |
25 | 3 | auto queue = MakeUnique<MainThreadQueueT>( |
26 | 3 | MakeUnique<InnerQueueT>(EventPriority::High), |
27 | 3 | MakeUnique<InnerQueueT>(EventPriority::Input), |
28 | 3 | MakeUnique<InnerQueueT>(EventPriority::Normal), |
29 | 3 | MakeUnique<InnerQueueT>(EventPriority::Idle), |
30 | 3 | do_AddRef(aIdlePeriod)); |
31 | 3 | |
32 | 3 | MainThreadQueueT* prioritized = queue.get(); |
33 | 3 | |
34 | 3 | RefPtr<SynchronizedQueueT> synchronizedQueue = new SynchronizedQueueT(std::move(queue)); |
35 | 3 | |
36 | 3 | prioritized->SetMutexRef(synchronizedQueue->MutexRef()); |
37 | 3 | |
38 | 3 | // Setup "main" thread |
39 | 3 | RefPtr<nsThread> mainThread = new nsThread(WrapNotNull(synchronizedQueue), nsThread::MAIN_THREAD, 0); |
40 | 3 | |
41 | 3 | #ifndef RELEASE_OR_BETA |
42 | 3 | prioritized->SetNextIdleDeadlineRef(mainThread->NextIdleDeadlineRef()); |
43 | 3 | #endif |
44 | 3 | |
45 | 3 | if (aSynchronizedQueue) { |
46 | 0 | synchronizedQueue.forget(aSynchronizedQueue); |
47 | 0 | } |
48 | 3 | return mainThread.forget(); |
49 | 3 | } Unexecuted instantiation: already_AddRefed<nsThread> mozilla::CreateMainThread<mozilla::detail::SchedulerEventQueue, mozilla::LabeledEventQueue>(nsIIdlePeriod*, mozilla::detail::SchedulerEventQueue**) Unexecuted instantiation: already_AddRefed<nsThread> mozilla::CreateMainThread<mozilla::detail::SchedulerEventQueue, mozilla::EventQueue>(nsIIdlePeriod*, mozilla::detail::SchedulerEventQueue**) Unexecuted instantiation: already_AddRefed<nsThread> mozilla::CreateMainThread<mozilla::ThreadEventQueue<mozilla::PrioritizedEventQueue<mozilla::LabeledEventQueue> >, mozilla::LabeledEventQueue>(nsIIdlePeriod*, mozilla::ThreadEventQueue<mozilla::PrioritizedEventQueue<mozilla::LabeledEventQueue> >**) already_AddRefed<nsThread> mozilla::CreateMainThread<mozilla::ThreadEventQueue<mozilla::PrioritizedEventQueue<mozilla::EventQueue> >, mozilla::EventQueue>(nsIIdlePeriod*, mozilla::ThreadEventQueue<mozilla::PrioritizedEventQueue<mozilla::EventQueue> >**) Line | Count | Source | 22 | 3 | { | 23 | 3 | using MainThreadQueueT = PrioritizedEventQueue<InnerQueueT>; | 24 | 3 | | 25 | 3 | auto queue = MakeUnique<MainThreadQueueT>( | 26 | 3 | MakeUnique<InnerQueueT>(EventPriority::High), | 27 | 3 | MakeUnique<InnerQueueT>(EventPriority::Input), | 28 | 3 | MakeUnique<InnerQueueT>(EventPriority::Normal), | 29 | 3 | MakeUnique<InnerQueueT>(EventPriority::Idle), | 30 | 3 | do_AddRef(aIdlePeriod)); | 31 | 3 | | 32 | 3 | MainThreadQueueT* prioritized = queue.get(); | 33 | 3 | | 34 | 3 | RefPtr<SynchronizedQueueT> synchronizedQueue = new SynchronizedQueueT(std::move(queue)); | 35 | 3 | | 36 | 3 | prioritized->SetMutexRef(synchronizedQueue->MutexRef()); | 37 | 3 | | 38 | 3 | // Setup "main" thread | 39 | 3 | RefPtr<nsThread> mainThread = new nsThread(WrapNotNull(synchronizedQueue), nsThread::MAIN_THREAD, 0); | 40 | 3 | | 41 | 3 | #ifndef RELEASE_OR_BETA | 42 | 3 | prioritized->SetNextIdleDeadlineRef(mainThread->NextIdleDeadlineRef()); | 43 | 3 | #endif | 44 | 3 | | 45 | 3 | if (aSynchronizedQueue) { | 46 | 0 | synchronizedQueue.forget(aSynchronizedQueue); | 47 | 0 | } | 48 | 3 | return mainThread.forget(); | 49 | 3 | } |
|
50 | | |
51 | | } // namespace mozilla |
52 | | |
53 | | #endif // mozilla_MainThreadQueue_h |