Skip to content

Commit 568caec

Browse files
author
kriswright
committed
Bug 1678149 - Use a mozilla::Queue in TaskQueue r=xpcom-reviewers,mccr8
It looks like we can do a mostly direct swap from `std::Queue` to `mozilla::Queue` without needing to expose any new API, so that's what I've done here. Differential Revision: https://phabricator.services.mozilla.com/D123523
1 parent 69af86d commit 568caec

File tree

2 files changed

+10
-11
lines changed

2 files changed

+10
-11
lines changed

xpcom/threads/TaskQueue.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ nsresult TaskQueue::DispatchLocked(nsCOMPtr<nsIRunnable>& aRunnable,
5959
}
6060

6161
LogRunnable::LogDispatch(aRunnable);
62-
mTasks.push({std::move(aRunnable), aFlags});
62+
mTasks.Push({std::move(aRunnable), aFlags});
6363

6464
if (mIsRunning) {
6565
return NS_OK;
@@ -87,7 +87,7 @@ void TaskQueue::AwaitIdleLocked() {
8787
!AbstractThread::GetCurrent()->HasTailTasksFor(this));
8888

8989
mQueueMonitor.AssertCurrentThreadOwns();
90-
MOZ_ASSERT(mIsRunning || mTasks.empty());
90+
MOZ_ASSERT(mIsRunning || mTasks.IsEmpty());
9191
while (mIsRunning) {
9292
mQueueMonitor.Wait();
9393
}
@@ -170,7 +170,7 @@ RefPtr<ShutdownPromise> TaskQueue::BeginShutdown() {
170170

171171
bool TaskQueue::IsEmpty() {
172172
MonitorAutoLock mon(mQueueMonitor);
173-
return mTasks.empty();
173+
return mTasks.IsEmpty();
174174
}
175175

176176
bool TaskQueue::IsCurrentThreadIn() const {
@@ -183,14 +183,14 @@ nsresult TaskQueue::Runner::Run() {
183183
{
184184
MonitorAutoLock mon(mQueue->mQueueMonitor);
185185
MOZ_ASSERT(mQueue->mIsRunning);
186-
if (mQueue->mTasks.empty()) {
186+
if (mQueue->mTasks.IsEmpty()) {
187187
mQueue->mIsRunning = false;
188188
mQueue->MaybeResolveShutdown();
189189
mon.NotifyAll();
190190
return NS_OK;
191191
}
192-
event = std::move(mQueue->mTasks.front());
193-
mQueue->mTasks.pop();
192+
event = std::move(mQueue->mTasks.FirstElement());
193+
mQueue->mTasks.Pop();
194194
}
195195
MOZ_ASSERT(event.event);
196196

@@ -218,7 +218,7 @@ nsresult TaskQueue::Runner::Run() {
218218

219219
{
220220
MonitorAutoLock mon(mQueue->mQueueMonitor);
221-
if (mQueue->mTasks.empty()) {
221+
if (mQueue->mTasks.IsEmpty()) {
222222
// No more events to run. Exit the task runner.
223223
mQueue->mIsRunning = false;
224224
mQueue->MaybeResolveShutdown();
@@ -236,7 +236,7 @@ nsresult TaskQueue::Runner::Run() {
236236
{
237237
MonitorAutoLock mon(mQueue->mQueueMonitor);
238238
rv = mQueue->mTarget->Dispatch(
239-
this, mQueue->mTasks.front().flags | NS_DISPATCH_AT_END);
239+
this, mQueue->mTasks.FirstElement().flags | NS_DISPATCH_AT_END);
240240
}
241241
if (NS_FAILED(rv)) {
242242
// Failed to dispatch, shutdown!

xpcom/threads/TaskQueue.h

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,11 @@
77
#ifndef TaskQueue_h_
88
#define TaskQueue_h_
99

10-
#include <queue>
11-
1210
#include "mozilla/AbstractThread.h"
1311
#include "mozilla/Maybe.h"
1412
#include "mozilla/Monitor.h"
1513
#include "mozilla/MozPromise.h"
14+
#include "mozilla/Queue.h"
1615
#include "mozilla/RefPtr.h"
1716
#include "mozilla/TaskDispatcher.h"
1817
#include "nsIDelayedRunnableObserver.h"
@@ -166,7 +165,7 @@ class TaskQueue : public AbstractThread,
166165
} TaskStruct;
167166

168167
// Queue of tasks to run.
169-
std::queue<TaskStruct> mTasks;
168+
Queue<TaskStruct> mTasks;
170169

171170
// DelayedRunnables (from DelayedDispatch) that are managed by their
172171
// respective timers, but have not yet run. Accessed only on this

0 commit comments

Comments
 (0)