1902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com// Copyright 2013 the V8 project authors. All rights reserved. 2902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com// Use of this source code is governed by a BSD-style license that can be 3902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com// found in the LICENSE file. 4902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 5902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com#ifndef V8_LIBPLATFORM_TASK_QUEUE_H_ 6902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com#define V8_LIBPLATFORM_TASK_QUEUE_H_ 7902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 8902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com#include <queue> 9902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 10902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com#include "src/base/macros.h" 11902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com#include "src/base/platform/mutex.h" 12902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com#include "src/base/platform/semaphore.h" 13902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 14902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comnamespace v8 { 15902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 168a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.comclass Task; 1797cee9735350cb472249ce1a827ba1aa6b2a5f59chudy@google.com 18902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comnamespace platform { 1932bbcf828d66ad244fa25b468bc3a229e531491frobertphillips@google.com 2032bbcf828d66ad244fa25b468bc3a229e531491frobertphillips@google.comclass TaskQueue { 2186681b37bd20204e47a492119b345c01d00bc939fmalita@google.com public: 22902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com TaskQueue(); 2380a4a60f96c33ccd850f9b0eb4b69ab08c198196chudy@google.com ~TaskQueue(); 24f4741c1322944e194ca34a8f5cf8188fe2c0efe2robertphillips@google.com 25902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com // Appends a task to the queue. The queue takes ownership of |task|. 26768ac85655017d4106444bf3ad044680a575ccaacommit-bot@chromium.org void Append(Task* task); 27768ac85655017d4106444bf3ad044680a575ccaacommit-bot@chromium.org 28768ac85655017d4106444bf3ad044680a575ccaacommit-bot@chromium.org // Returns the next task to process. Blocks if no task is available. Returns 2957f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org // NULL if the queue is terminated. 30902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com Task* GetNext(); 31902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 32f4741c1322944e194ca34a8f5cf8188fe2c0efe2robertphillips@google.com // Terminate the queue. 33f4741c1322944e194ca34a8f5cf8188fe2c0efe2robertphillips@google.com void Terminate(); 34f4741c1322944e194ca34a8f5cf8188fe2c0efe2robertphillips@google.com 3557f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org private: 3657f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org base::Mutex lock_; 3757f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org base::Semaphore process_queue_semaphore_; 3857f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org std::queue<Task*> task_queue_; 3957f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org bool terminated_; 4057f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org 41f4741c1322944e194ca34a8f5cf8188fe2c0efe2robertphillips@google.com DISALLOW_COPY_AND_ASSIGN(TaskQueue); 42f4741c1322944e194ca34a8f5cf8188fe2c0efe2robertphillips@google.com}; 4332bbcf828d66ad244fa25b468bc3a229e531491frobertphillips@google.com 4432bbcf828d66ad244fa25b468bc3a229e531491frobertphillips@google.com} } // namespace v8::platform 45f84ad8f7fc0194389a8099da2c5e8fff9f092890skia.committer@gmail.com 4632bbcf828d66ad244fa25b468bc3a229e531491frobertphillips@google.com 4732bbcf828d66ad244fa25b468bc3a229e531491frobertphillips@google.com#endif // V8_LIBPLATFORM_TASK_QUEUE_H_ 48902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com