Index: base/task_scheduler/task_tracker_unittest.cc |
diff --git a/base/task_scheduler/task_tracker_unittest.cc b/base/task_scheduler/task_tracker_unittest.cc |
index 2a08bc189eddfce1283cbf199996551be723a525..a490fce2b5f6e58a6001ab205af540e954726c32 100644 |
--- a/base/task_scheduler/task_tracker_unittest.cc |
+++ b/base/task_scheduler/task_tracker_unittest.cc |
@@ -5,7 +5,6 @@ |
#include "base/task_scheduler/task_tracker.h" |
#include <memory> |
-#include <queue> |
#include "base/bind.h" |
#include "base/logging.h" |
@@ -75,21 +74,6 @@ class TaskSchedulerTaskTrackerTest |
TaskTraits().WithShutdownBehavior(shutdown_behavior))); |
} |
- // Tries to post |task| via |tracker_|. If |tracker_| approves the operation, |
- // |task| is added to |posted_tasks_|. |
- void PostTaskViaTracker(std::unique_ptr<Task> task) { |
- tracker_.PostTask( |
- Bind(&TaskSchedulerTaskTrackerTest::PostTaskCallback, Unretained(this)), |
- std::move(task)); |
- } |
- |
- // Tries to run the next task in |posted_tasks_| via |tracker_|. |
- void RunNextPostedTaskViaTracker() { |
- ASSERT_FALSE(posted_tasks_.empty()); |
- tracker_.RunTask(posted_tasks_.front().get()); |
- posted_tasks_.pop(); |
- } |
- |
// Calls tracker_->Shutdown() on a new thread. When this returns, Shutdown() |
// method has been entered on the new thread, but it hasn't necessarily |
// returned. |
@@ -119,13 +103,8 @@ class TaskSchedulerTaskTrackerTest |
TaskTracker tracker_; |
size_t num_tasks_executed_ = 0; |
- std::queue<std::unique_ptr<Task>> posted_tasks_; |
private: |
- void PostTaskCallback(std::unique_ptr<Task> task) { |
- posted_tasks_.push(std::move(task)); |
- } |
- |
void RunTaskCallback() { ++num_tasks_executed_; } |
std::unique_ptr<ThreadCallingShutdown> thread_calling_shutdown_; |
@@ -147,36 +126,33 @@ class TaskSchedulerTaskTrackerTest |
} // namespace |
-TEST_P(TaskSchedulerTaskTrackerTest, PostAndRunBeforeShutdown) { |
- std::unique_ptr<Task> task_to_post(CreateTask(GetParam())); |
- const Task* task_to_post_raw = task_to_post.get(); |
+TEST_P(TaskSchedulerTaskTrackerTest, WillPostAndRunBeforeShutdown) { |
+ std::unique_ptr<Task> task(CreateTask(GetParam())); |
- // Post the task. |
- EXPECT_TRUE(posted_tasks_.empty()); |
- PostTaskViaTracker(std::move(task_to_post)); |
- EXPECT_EQ(1U, posted_tasks_.size()); |
- EXPECT_EQ(task_to_post_raw, posted_tasks_.front().get()); |
+ // Inform |task_tracker_| that |task| will be posted. |
+ EXPECT_TRUE(tracker_.WillPostTask(task.get())); |
- // Run the posted task. |
+ // Run the task. |
EXPECT_EQ(0U, num_tasks_executed_); |
- RunNextPostedTaskViaTracker(); |
+ tracker_.RunTask(task.get()); |
EXPECT_EQ(1U, num_tasks_executed_); |
// Shutdown() shouldn't block. |
tracker_.Shutdown(); |
} |
-TEST_P(TaskSchedulerTaskTrackerTest, PostAndRunLongTaskBeforeShutdown) { |
- // Post a task that will block until |event| is signaled. |
- EXPECT_TRUE(posted_tasks_.empty()); |
+TEST_P(TaskSchedulerTaskTrackerTest, WillPostAndRunLongTaskBeforeShutdown) { |
+ // Create a task that will block until |event| is signaled. |
WaitableEvent event(false, false); |
- PostTaskViaTracker(WrapUnique( |
+ std::unique_ptr<Task> blocked_task( |
new Task(FROM_HERE, Bind(&WaitableEvent::Wait, Unretained(&event)), |
- TaskTraits().WithShutdownBehavior(GetParam())))); |
- EXPECT_EQ(1U, posted_tasks_.size()); |
+ TaskTraits().WithShutdownBehavior(GetParam()))); |
+ |
+ // Inform |task_tracker_| that |blocked_task| will be posted. |
+ EXPECT_TRUE(tracker_.WillPostTask(blocked_task.get())); |
// Run the task asynchronouly. |
- ThreadRunningTask thread_running_task(&tracker_, posted_tasks_.front().get()); |
+ ThreadRunningTask thread_running_task(&tracker_, blocked_task.get()); |
thread_running_task.Start(); |
// Initiate shutdown while the task is running. |
@@ -199,47 +175,40 @@ TEST_P(TaskSchedulerTaskTrackerTest, PostAndRunLongTaskBeforeShutdown) { |
WAIT_FOR_ASYNC_SHUTDOWN_COMPLETED(); |
} |
-TEST_P(TaskSchedulerTaskTrackerTest, PostBeforeShutdownRunDuringShutdown) { |
- std::unique_ptr<Task> task_to_post(CreateTask(GetParam())); |
- const Task* task_to_post_raw = task_to_post.get(); |
- |
- // Post the task. |
- EXPECT_TRUE(posted_tasks_.empty()); |
- PostTaskViaTracker(std::move(task_to_post)); |
- EXPECT_EQ(1U, posted_tasks_.size()); |
- EXPECT_EQ(task_to_post_raw, posted_tasks_.front().get()); |
+TEST_P(TaskSchedulerTaskTrackerTest, WillPostBeforeShutdownRunDuringShutdown) { |
+ // Inform |task_tracker_| that a task will be posted. |
+ std::unique_ptr<Task> task(CreateTask(GetParam())); |
+ EXPECT_TRUE(tracker_.WillPostTask(task.get())); |
- // Post a BLOCK_SHUTDOWN task just to block shutdown. |
- PostTaskViaTracker(CreateTask(TaskShutdownBehavior::BLOCK_SHUTDOWN)); |
+ // Inform |task_tracker_| that a BLOCK_SHUTDOWN task will be posted just to |
+ // block shutdown. |
+ std::unique_ptr<Task> block_shutdown_task( |
+ CreateTask(TaskShutdownBehavior::BLOCK_SHUTDOWN)); |
+ EXPECT_TRUE(tracker_.WillPostTask(block_shutdown_task.get())); |
// Call Shutdown() asynchronously. |
CallShutdownAsync(); |
VERIFY_ASYNC_SHUTDOWN_IN_PROGRESS(); |
- // Try to run the first posted task. Only BLOCK_SHUTDOWN tasks should run, |
- // others should be discarded. |
+ // Try to run |task|. It should only run it it's BLOCK_SHUTDOWN. Otherwise it |
+ // should be discarded. |
EXPECT_EQ(0U, num_tasks_executed_); |
- RunNextPostedTaskViaTracker(); |
+ tracker_.RunTask(task.get()); |
EXPECT_EQ(GetParam() == TaskShutdownBehavior::BLOCK_SHUTDOWN ? 1U : 0U, |
num_tasks_executed_); |
VERIFY_ASYNC_SHUTDOWN_IN_PROGRESS(); |
// Unblock shutdown by running the remaining BLOCK_SHUTDOWN task. |
- RunNextPostedTaskViaTracker(); |
+ tracker_.RunTask(block_shutdown_task.get()); |
EXPECT_EQ(GetParam() == TaskShutdownBehavior::BLOCK_SHUTDOWN ? 2U : 1U, |
num_tasks_executed_); |
WAIT_FOR_ASYNC_SHUTDOWN_COMPLETED(); |
} |
-TEST_P(TaskSchedulerTaskTrackerTest, PostBeforeShutdownRunAfterShutdown) { |
- std::unique_ptr<Task> task_to_post(CreateTask(GetParam())); |
- const Task* task_to_post_raw = task_to_post.get(); |
- |
- // Post the task. |
- EXPECT_TRUE(posted_tasks_.empty()); |
- PostTaskViaTracker(std::move(task_to_post)); |
- EXPECT_EQ(1U, posted_tasks_.size()); |
- EXPECT_EQ(task_to_post_raw, posted_tasks_.front().get()); |
+TEST_P(TaskSchedulerTaskTrackerTest, WillPostBeforeShutdownRunAfterShutdown) { |
+ // Inform |task_tracker_| that a task will be posted. |
+ std::unique_ptr<Task> task(CreateTask(GetParam())); |
+ EXPECT_TRUE(tracker_.WillPostTask(task.get())); |
// Call Shutdown() asynchronously. |
CallShutdownAsync(); |
@@ -249,7 +218,7 @@ TEST_P(TaskSchedulerTaskTrackerTest, PostBeforeShutdownRunAfterShutdown) { |
VERIFY_ASYNC_SHUTDOWN_IN_PROGRESS(); |
// Run the task to unblock shutdown. |
- RunNextPostedTaskViaTracker(); |
+ tracker_.RunTask(task.get()); |
EXPECT_EQ(1U, num_tasks_executed_); |
WAIT_FOR_ASYNC_SHUTDOWN_COMPLETED(); |
@@ -260,41 +229,40 @@ TEST_P(TaskSchedulerTaskTrackerTest, PostBeforeShutdownRunAfterShutdown) { |
WAIT_FOR_ASYNC_SHUTDOWN_COMPLETED(); |
// The task shouldn't be allowed to run after shutdown. |
- RunNextPostedTaskViaTracker(); |
+ tracker_.RunTask(task.get()); |
EXPECT_EQ(0U, num_tasks_executed_); |
} |
} |
-TEST_P(TaskSchedulerTaskTrackerTest, PostAndRunDuringShutdown) { |
- // Post a BLOCK_SHUTDOWN task just to block shutdown. |
- PostTaskViaTracker(CreateTask(TaskShutdownBehavior::BLOCK_SHUTDOWN)); |
- std::unique_ptr<Task> block_shutdown_task = std::move(posted_tasks_.front()); |
- posted_tasks_.pop(); |
+TEST_P(TaskSchedulerTaskTrackerTest, WillPostAndRunDuringShutdown) { |
+ // Inform |task_tracker_| that a BLOCK_SHUTDOWN task will be posted just to |
+ // block shutdown. |
+ std::unique_ptr<Task> block_shutdown_task( |
+ CreateTask(TaskShutdownBehavior::BLOCK_SHUTDOWN)); |
+ EXPECT_TRUE(tracker_.WillPostTask(block_shutdown_task.get())); |
// Call Shutdown() asynchronously. |
CallShutdownAsync(); |
VERIFY_ASYNC_SHUTDOWN_IN_PROGRESS(); |
if (GetParam() == TaskShutdownBehavior::BLOCK_SHUTDOWN) { |
- // Post a BLOCK_SHUTDOWN task. This should succeed. |
- EXPECT_TRUE(posted_tasks_.empty()); |
- PostTaskViaTracker(CreateTask(GetParam())); |
- EXPECT_EQ(1U, posted_tasks_.size()); |
+ // Inform |task_tracker_| that a BLOCK_SHUTDOWN task will be posted. |
+ std::unique_ptr<Task> task(CreateTask(GetParam())); |
+ EXPECT_TRUE(tracker_.WillPostTask(task.get())); |
- // Run the BLOCK_SHUTDOWN task. This should succeed. |
+ // Run the BLOCK_SHUTDOWN task. |
EXPECT_EQ(0U, num_tasks_executed_); |
- RunNextPostedTaskViaTracker(); |
+ tracker_.RunTask(task.get()); |
EXPECT_EQ(1U, num_tasks_executed_); |
} else { |
- // It shouldn't be possible to post a non BLOCK_SHUTDOWN task. |
- PostTaskViaTracker(CreateTask(GetParam())); |
- EXPECT_TRUE(posted_tasks_.empty()); |
+ // It shouldn't be allowed to post a non BLOCK_SHUTDOWN task. |
+ std::unique_ptr<Task> task(CreateTask(GetParam())); |
+ EXPECT_FALSE(tracker_.WillPostTask(task.get())); |
- // Don't try to run the task, because it hasn't been posted successfully. |
+ // Don't try to run the task, because it wasn't allowed to be posted. |
} |
- // Unblock shutdown by running the BLOCK_SHUTDOWN task posted at the beginning |
- // of the test. |
+ // Unblock shutdown by running |block_shutdown_task|. |
VERIFY_ASYNC_SHUTDOWN_IN_PROGRESS(); |
tracker_.RunTask(block_shutdown_task.get()); |
EXPECT_EQ(GetParam() == TaskShutdownBehavior::BLOCK_SHUTDOWN ? 2U : 1U, |
@@ -302,18 +270,17 @@ TEST_P(TaskSchedulerTaskTrackerTest, PostAndRunDuringShutdown) { |
WAIT_FOR_ASYNC_SHUTDOWN_COMPLETED(); |
} |
-TEST_P(TaskSchedulerTaskTrackerTest, PostAfterShutdown) { |
- // It is not possible to post a task after shutdown. |
+TEST_P(TaskSchedulerTaskTrackerTest, WillPostAfterShutdown) { |
tracker_.Shutdown(); |
- EXPECT_TRUE(posted_tasks_.empty()); |
+ std::unique_ptr<Task> task(CreateTask(GetParam())); |
+ |
+ // |task_tracker_| shouldn't allow a task to be posted after shutdown. |
if (GetParam() == TaskShutdownBehavior::BLOCK_SHUTDOWN) { |
- EXPECT_DCHECK_DEATH({ PostTaskViaTracker(CreateTask(GetParam())); }, ""); |
+ EXPECT_DCHECK_DEATH({ tracker_.WillPostTask(task.get()); }, ""); |
} else { |
- PostTaskViaTracker(CreateTask(GetParam())); |
+ EXPECT_FALSE(tracker_.WillPostTask(task.get())); |
} |
- |
- EXPECT_TRUE(posted_tasks_.empty()); |
} |
INSTANTIATE_TEST_CASE_P( |