Index: base/test/scoped_task_environment.h |
diff --git a/base/test/scoped_task_environment.h b/base/test/scoped_task_environment.h |
index f46b516d7c16ddea6d7a6b710fd9a7832045dc29..6156c21537cab850680119852432b1232ec3009d 100644 |
--- a/base/test/scoped_task_environment.h |
+++ b/base/test/scoped_task_environment.h |
@@ -26,7 +26,9 @@ namespace test { |
// RunLoop::Run(UntilIdle) or ScopedTaskEnvironment::RunUntilIdle is called on |
// the thread where the ScopedTaskEnvironment lives. |
// |
-// Tasks posted through base/task_scheduler/post_task.h run on dedicated threads |
+// Tasks posted through base/task_scheduler/post_task.h run on dedicated |
+// threads. If ExecutionControlMode is QUEUED, they run when RunUntilIdle() or |
+// ~ScopedTaskEnvironment is called. If ExecutionControlMode is ASYNC, they run |
// as they are posted. |
// |
// All methods of ScopedTaskEnvironment must be called from the same thread. |
@@ -61,8 +63,17 @@ class ScopedTaskEnvironment { |
IO, |
}; |
+ enum class ExecutionControlMode { |
gab
2017/05/23 15:26:13
I'd say "ExecutionMode" is enough (especially beca
fdoray
2017/05/25 19:17:34
Done.
|
+ // Tasks are queued and executed when RunUntilIdle() is called. |
gab
2017/05/23 15:26:13
only executed
^^^^
is explicitly called
^^^^^^
fdoray
2017/05/25 19:17:34
Done.
|
+ QUEUED, |
+ // Tasks run as they are posted. |
gab
2017/05/23 15:26:13
+ "RunUntilIdle() can still be used to block until
fdoray
2017/05/25 19:17:33
Done.
|
+ ASYNC, |
+ }; |
+ |
ScopedTaskEnvironment( |
- MainThreadType main_thread_type = MainThreadType::DEFAULT); |
+ MainThreadType main_thread_type = MainThreadType::DEFAULT, |
+ ExecutionControlMode execution_control_mode = |
+ ExecutionControlMode::ASYNC); |
// Waits until no undelayed TaskScheduler tasks remain. Then, unregisters the |
// TaskScheduler and the (Thread|Sequenced)TaskRunnerHandle. |
@@ -71,11 +82,15 @@ class ScopedTaskEnvironment { |
// Returns a TaskRunner that schedules tasks on the main thread. |
scoped_refptr<base::SingleThreadTaskRunner> GetMainThreadTaskRunner(); |
- // Synchronously runs (Thread|Sequenced)TaskRunnerHandle tasks until no |
- // undelayed (Thread|Sequenced)TaskRunnerHandle or TaskScheduler tasks remain. |
+ // Runs tasks until both the (Thread|Sequenced)TaskRunnerHandle and the |
+ // TaskScheduler queues are empty. |
void RunUntilIdle(); |
private: |
+ class TestTaskTracker; |
+ |
+ const ExecutionControlMode execution_control_mode_; |
+ |
// Note: |message_loop_| is an implementation detail and will be replaced in |
// the future, do NOT rely on the presence of a MessageLoop beyond |
// (Thread|Sequenced)TaskRunnerHandle and RunLoop. |
@@ -83,6 +98,9 @@ class ScopedTaskEnvironment { |
const TaskScheduler* task_scheduler_ = nullptr; |
+ // Owned by |task_scheduler_|. |
+ TestTaskTracker* const task_tracker_; |
+ |
DISALLOW_COPY_AND_ASSIGN(ScopedTaskEnvironment); |
}; |