Index: base/task_scheduler/task_scheduler_impl_unittest.cc |
diff --git a/base/task_scheduler/task_scheduler_impl_unittest.cc b/base/task_scheduler/task_scheduler_impl_unittest.cc |
index 8e22b69ecbc6d2884b28f8ba17bd78ecc73ce9e7..cda06063ed7444fee2a4d7b2c4818332095f7313 100644 |
--- a/base/task_scheduler/task_scheduler_impl_unittest.cc |
+++ b/base/task_scheduler/task_scheduler_impl_unittest.cc |
@@ -20,6 +20,7 @@ |
#include "base/task_scheduler/scheduler_worker_pool_params.h" |
#include "base/task_scheduler/task_traits.h" |
#include "base/task_scheduler/test_task_factory.h" |
+#include "base/test/test_timeouts.h" |
#include "base/threading/platform_thread.h" |
#include "base/threading/simple_thread.h" |
#include "base/threading/thread.h" |
@@ -53,7 +54,7 @@ bool GetIOAllowed() { |
// Verify that the current thread priority and I/O restrictions are appropriate |
// to run a Task with |traits|. |
// Note: ExecutionMode is verified inside TestTaskFactory. |
-void VerifyTaskEnvironement(const TaskTraits& traits) { |
+void VerifyTaskEnvironment(const TaskTraits& traits) { |
const bool supports_background_priority = |
Lock::HandlesMultipleThreadPriorities() && |
PlatformThread::CanIncreaseCurrentThreadPriority(); |
@@ -81,10 +82,19 @@ void VerifyTaskEnvironement(const TaskTraits& traits) { |
current_thread_name.find("Blocking") != std::string::npos); |
} |
-void VerifyTaskEnvironementAndSignalEvent(const TaskTraits& traits, |
- WaitableEvent* event) { |
+void VerifyTaskEnvironmentAndSignalEvent(const TaskTraits& traits, |
+ WaitableEvent* event) { |
DCHECK(event); |
- VerifyTaskEnvironement(traits); |
+ VerifyTaskEnvironment(traits); |
+ event->Signal(); |
+} |
+ |
+void VerifyTimeAndTaskEnvironmentAndSignalEvent(const TaskTraits& traits, |
+ TimeTicks expected_time, |
+ WaitableEvent* event) { |
+ DCHECK(event); |
+ EXPECT_LE(expected_time, TimeTicks::Now()); |
+ VerifyTaskEnvironment(traits); |
event->Signal(); |
} |
@@ -127,7 +137,7 @@ class ThreadPostingTasks : public SimpleThread { |
const size_t kNumTasksPerThread = 150; |
for (size_t i = 0; i < kNumTasksPerThread; ++i) { |
factory_.PostTask(test::TestTaskFactory::PostNestedTask::NO, |
- Bind(&VerifyTaskEnvironement, traits_)); |
+ Bind(&VerifyTaskEnvironment, traits_)); |
} |
} |
@@ -220,16 +230,33 @@ class TaskSchedulerImplTest |
} // namespace |
-// Verifies that a Task posted via PostTaskWithTraits with parameterized |
-// TaskTraits runs on a thread with the expected priority and I/O restrictions. |
-// The ExecutionMode parameter is ignored by this test. |
-TEST_P(TaskSchedulerImplTest, PostTaskWithTraits) { |
+// Verifies that a Task posted via PostDelayedTaskWithTraits with parameterized |
+// TaskTraits and no delay runs on a thread with the expected priority and I/O |
+// restrictions. The ExecutionMode parameter is ignored by this test. |
+TEST_P(TaskSchedulerImplTest, PostDelayedTaskWithTraitsNoDelay) { |
+ WaitableEvent task_ran(WaitableEvent::ResetPolicy::MANUAL, |
+ WaitableEvent::InitialState::NOT_SIGNALED); |
+ scheduler_->PostDelayedTaskWithTraits( |
+ FROM_HERE, GetParam().traits, |
+ Bind(&VerifyTaskEnvironmentAndSignalEvent, GetParam().traits, |
+ Unretained(&task_ran)), |
+ TimeDelta()); |
+ task_ran.Wait(); |
+} |
+ |
+// Verifies that a Task posted via PostDelayedTaskWithTraits with parameterized |
+// TaskTraits and a non-zero delay runs on a thread with the expected priority |
+// and I/O restrictions after the delay expires. The ExecutionMode parameter is |
+// ignored by this test. |
+TEST_P(TaskSchedulerImplTest, PostDelayedTaskWithTraitsWithDelay) { |
WaitableEvent task_ran(WaitableEvent::ResetPolicy::MANUAL, |
WaitableEvent::InitialState::NOT_SIGNALED); |
- scheduler_->PostTaskWithTraits( |
+ scheduler_->PostDelayedTaskWithTraits( |
FROM_HERE, GetParam().traits, |
- Bind(&VerifyTaskEnvironementAndSignalEvent, GetParam().traits, |
- Unretained(&task_ran))); |
+ Bind(&VerifyTimeAndTaskEnvironmentAndSignalEvent, GetParam().traits, |
+ TimeTicks::Now() + TestTimeouts::tiny_timeout(), |
+ Unretained(&task_ran)), |
+ TestTimeouts::tiny_timeout()); |
task_ran.Wait(); |
} |
@@ -246,7 +273,7 @@ TEST_P(TaskSchedulerImplTest, PostTasksViaTaskRunner) { |
const size_t kNumTasksPerTest = 150; |
for (size_t i = 0; i < kNumTasksPerTest; ++i) { |
factory.PostTask(test::TestTaskFactory::PostNestedTask::NO, |
- Bind(&VerifyTaskEnvironement, GetParam().traits)); |
+ Bind(&VerifyTaskEnvironment, GetParam().traits)); |
} |
factory.WaitForAllTasksToRun(); |