• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2013 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef V8_LIBPLATFORM_TASK_QUEUE_H_
6 #define V8_LIBPLATFORM_TASK_QUEUE_H_
7 
8 #include <queue>
9 
10 #include "include/libplatform/libplatform-export.h"
11 #include "src/base/macros.h"
12 #include "src/base/platform/mutex.h"
13 #include "src/base/platform/semaphore.h"
14 #include "testing/gtest/include/gtest/gtest_prod.h"
15 
16 namespace v8 {
17 
18 class Task;
19 
20 namespace platform {
21 
22 class V8_PLATFORM_EXPORT TaskQueue {
23  public:
24   TaskQueue();
25   ~TaskQueue();
26 
27   // Appends a task to the queue. The queue takes ownership of |task|.
28   void Append(Task* task);
29 
30   // Returns the next task to process. Blocks if no task is available. Returns
31   // NULL if the queue is terminated.
32   Task* GetNext();
33 
34   // Terminate the queue.
35   void Terminate();
36 
37  private:
38   FRIEND_TEST(WorkerThreadTest, PostSingleTask);
39 
40   void BlockUntilQueueEmptyForTesting();
41 
42   base::Semaphore process_queue_semaphore_;
43   base::Mutex lock_;
44   std::queue<Task*> task_queue_;
45   bool terminated_;
46 
47   DISALLOW_COPY_AND_ASSIGN(TaskQueue);
48 };
49 
50 }  // namespace platform
51 }  // namespace v8
52 
53 
54 #endif  // V8_LIBPLATFORM_TASK_QUEUE_H_
55