Index: base/test/test_simple_task_runner.h |
diff --git a/base/test/test_simple_task_runner.h b/base/test/test_simple_task_runner.h |
index 338c634c8d9d5533ecf94ef8364ef19d36620d35..eb600f40c3a68c9396614537993f1468b138b0bb 100644 |
--- a/base/test/test_simple_task_runner.h |
+++ b/base/test/test_simple_task_runner.h |
@@ -10,8 +10,9 @@ |
#include "base/compiler_specific.h" |
#include "base/macros.h" |
#include "base/single_thread_task_runner.h" |
+#include "base/synchronization/lock.h" |
#include "base/test/test_pending_task.h" |
-#include "base/threading/thread_checker.h" |
+#include "base/threading/platform_thread.h" |
namespace base { |
@@ -25,8 +26,6 @@ class TimeDelta; |
// |
// TestSimpleTaskRunner has the following properties which make it simple: |
// |
-// - It is non-thread safe; all member functions must be called on |
-// the same thread. |
// - Tasks are simply stored in a queue in FIFO order, ignoring delay |
// and nestability. |
// - Tasks aren't guaranteed to be destroyed immediately after |
@@ -36,10 +35,6 @@ class TimeDelta; |
// handles the running of tasks that in turn call back into itself |
// (e.g., to post more tasks). |
// |
-// If you need more complicated properties, consider using this class |
-// as a template for writing a test TaskRunner implementation using |
-// TestPendingTask. |
-// |
// Note that, like any TaskRunner, TestSimpleTaskRunner is |
// ref-counted. |
class TestSimpleTaskRunner : public SingleThreadTaskRunner { |
@@ -56,27 +51,35 @@ class TestSimpleTaskRunner : public SingleThreadTaskRunner { |
bool RunsTasksOnCurrentThread() const override; |
- const std::deque<TestPendingTask>& GetPendingTasks() const; |
+ std::deque<TestPendingTask> GetPendingTasks() const; |
+ size_t NumPendingTasks() const; |
bool HasPendingTask() const; |
base::TimeDelta NextPendingTaskDelay() const; |
// Clears the queue of pending tasks without running them. |
void ClearPendingTasks(); |
- // Runs each current pending task in order and clears the queue. |
- // Any tasks posted by the tasks are not run. |
- virtual void RunPendingTasks(); |
+ // Runs each current pending task in order and clears the queue. Tasks posted |
+ // by the tasks that run within this call do not run within this call. Can |
+ // only be called on the thread that created this TestSimpleTaskRunner. |
+ void RunPendingTasks(); |
- // Runs pending tasks until the queue is empty. |
+ // Runs pending tasks until the queue is empty. Can only be called on the |
+ // thread that created this TestSimpleTaskRunner. |
void RunUntilIdle(); |
protected: |
~TestSimpleTaskRunner() override; |
danakj
2016/09/01 21:22:18
nit: idk why this is protected.. maybe make this p
fdoray
2016/09/02 17:39:16
TestSimpleTaskRunner is ref-counted. Having a prot
danakj
2016/09/02 20:00:07
Oh I missed that since it's inheriting that. Thank
|
+ private: |
+ // Thread on which this was instantiated. |
+ const PlatformThreadRef thread_ref_ = PlatformThread::CurrentRef(); |
+ |
+ // Synchronizes access to |pending_tasks_|. |
+ mutable Lock lock_; |
+ |
std::deque<TestPendingTask> pending_tasks_; |
- ThreadChecker thread_checker_; |
- private: |
DISALLOW_COPY_AND_ASSIGN(TestSimpleTaskRunner); |
}; |