#ifndef V8_LIBPLATFORM_TASK_QUEUE_H_
#define V8_LIBPLATFORM_TASK_QUEUE_H_
#include <memory>
#include <queue>
#include "include/libplatform/libplatform-export.h"
#include "src/base/platform/mutex.h"
#include "src/base/platform/semaphore.h"
#include "testing/gtest/include/gtest/gtest_prod.h"
namespace v8 {
class Task;
namespace platform {
class V8_PLATFORM_EXPORT TaskQueue {
public:
TaskQueue();
~TaskQueue();
TaskQueue(const TaskQueue&) = delete;
TaskQueue& operator=(const TaskQueue&) = delete;
void Append(std::unique_ptr<Task> task);
std::unique_ptr<Task> GetNext();
void Terminate();
private:
FRIEND_TEST(WorkerThreadTest, PostSingleTask);
void BlockUntilQueueEmptyForTesting();
base::Semaphore process_queue_semaphore_;
base::Mutex lock_;
std::queue<std::unique_ptr<Task>> task_queue_;
bool terminated_;
};
}
}
#endif