5 #include "src/libplatform/task-queue.h" 7 #include "include/v8-platform.h" 8 #include "src/base/logging.h" 9 #include "src/base/platform/platform.h" 10 #include "src/base/platform/time.h" 15 TaskQueue::TaskQueue() : process_queue_semaphore_(0), terminated_(false) {}
18 TaskQueue::~TaskQueue() {
19 base::MutexGuard guard(&lock_);
21 DCHECK(task_queue_.empty());
24 void TaskQueue::Append(std::unique_ptr<Task> task) {
25 base::MutexGuard guard(&lock_);
27 task_queue_.push(std::move(task));
28 process_queue_semaphore_.Signal();
31 std::unique_ptr<Task> TaskQueue::GetNext() {
34 base::MutexGuard guard(&lock_);
35 if (!task_queue_.empty()) {
36 std::unique_ptr<Task> result = std::move(task_queue_.front());
41 process_queue_semaphore_.Signal();
45 process_queue_semaphore_.Wait();
50 void TaskQueue::Terminate() {
51 base::MutexGuard guard(&lock_);
54 process_queue_semaphore_.Signal();
57 void TaskQueue::BlockUntilQueueEmptyForTesting() {
60 base::MutexGuard guard(&lock_);
61 if (task_queue_.empty())
return;
63 base::OS::Sleep(base::TimeDelta::FromMilliseconds(5));