Index: cc/test/ordered_simple_task_runner_unittest.cc |
diff --git a/cc/test/ordered_simple_task_runner_unittest.cc b/cc/test/ordered_simple_task_runner_unittest.cc |
index 3fbfd3b73ccff069f1ac7b58bf259254ec6a56e6..4d0c2a9d6a55906d0d2780fe66ab3fec8d840a3c 100644 |
--- a/cc/test/ordered_simple_task_runner_unittest.cc |
+++ b/cc/test/ordered_simple_task_runner_unittest.cc |
@@ -5,12 +5,18 @@ |
#include <string> |
#include "base/cancelable_callback.h" |
+#include "base/format_macros.h" |
#include "base/memory/scoped_ptr.h" |
#include "base/strings/stringprintf.h" |
#include "base/test/test_pending_task.h" |
#include "cc/test/ordered_simple_task_runner.h" |
#include "testing/gtest/include/gtest/gtest.h" |
+#define RUN_AND_CHECK_RESULT(expected_result) \ |
+ task_runner_->RunPendingTasks(); \ |
+ EXPECT_EQ(expected_result, executed_tasks_); \ |
+ executed_tasks_ = ""; |
+ |
namespace cc { |
class OrderedSimpleTaskRunnerTest : public testing::Test { |
@@ -21,46 +27,209 @@ class OrderedSimpleTaskRunnerTest : public testing::Test { |
virtual ~OrderedSimpleTaskRunnerTest() {} |
protected: |
- void CreateAndPostTask(int task_num, base::TimeDelta delay) { |
+ std::string executed_tasks_; |
+ scoped_refptr<OrderedSimpleTaskRunner> task_runner_; |
+ |
+ void PostTask(int task_num, base::TimeDelta delay) { |
base::Closure test_task = base::Bind(&OrderedSimpleTaskRunnerTest::Task, |
base::Unretained(this), |
task_num); |
task_runner_->PostDelayedTask(FROM_HERE, test_task, delay); |
} |
- void RunAndCheckResult(const std::string expected_result) { |
- task_runner_->RunPendingTasks(); |
- EXPECT_EQ(expected_result, executed_tasks_); |
+ void PostTaskWhichPostsInstantTask(int task_num, base::TimeDelta delay) { |
+ base::Closure test_task = |
+ base::Bind(&OrderedSimpleTaskRunnerTest::TaskWhichPostsInstantTask, |
+ base::Unretained(this), |
+ task_num); |
+ task_runner_->PostDelayedTask(FROM_HERE, test_task, delay); |
} |
- private: |
- std::string executed_tasks_; |
- scoped_refptr<OrderedSimpleTaskRunner> task_runner_; |
+ void PostTaskWhichPostsDelayedTask(int task_num, |
+ base::TimeDelta delay1, |
+ base::TimeDelta delay2) { |
+ base::Closure test_task = |
+ base::Bind(&OrderedSimpleTaskRunnerTest::TaskWhichPostsDelayedTask, |
+ base::Unretained(this), |
+ task_num, |
+ delay2); |
+ task_runner_->PostDelayedTask(FROM_HERE, test_task, delay1); |
+ } |
+ void PostTaskWhichCallsRun(int task_num, base::TimeDelta delay) { |
+ base::Closure test_task = |
+ base::Bind(&OrderedSimpleTaskRunnerTest::TaskWhichCallsRun, |
+ base::Unretained(this), |
+ task_num); |
+ task_runner_->PostDelayedTask(FROM_HERE, test_task, delay); |
+ } |
+ |
+ private: |
void Task(int task_num) { |
if (!executed_tasks_.empty()) |
executed_tasks_ += " "; |
- executed_tasks_ += base::StringPrintf("%d", task_num); |
+ executed_tasks_ += |
+ base::StringPrintf("%d(%" PRId64 "ms)", |
+ task_num, |
+ task_runner_->Now().ToInternalValue() / |
+ base::Time::kMicrosecondsPerMillisecond); |
+ } |
+ |
+ void TaskWhichPostsInstantTask(int task_num) { |
+ Task(task_num); |
+ PostTask(-task_num, base::TimeDelta()); |
+ } |
+ |
+ void TaskWhichPostsDelayedTask(int task_num, base::TimeDelta delay) { |
+ Task(task_num); |
+ PostTask(-task_num, delay); |
+ } |
+ |
+ void TaskWhichCallsRun(int task_num) { |
+ Task(task_num); |
+ task_runner_->RunPendingTasks(); |
} |
DISALLOW_COPY_AND_ASSIGN(OrderedSimpleTaskRunnerTest); |
}; |
-TEST_F(OrderedSimpleTaskRunnerTest, BasicOrderingTest) { |
- CreateAndPostTask(1, base::TimeDelta()); |
- CreateAndPostTask(2, base::TimeDelta()); |
- CreateAndPostTask(3, base::TimeDelta()); |
+TEST_F(OrderedSimpleTaskRunnerTest, SimpleOrderingTest) { |
+ PostTask(1, base::TimeDelta()); |
+ PostTask(2, base::TimeDelta()); |
+ PostTask(3, base::TimeDelta()); |
- RunAndCheckResult("1 2 3"); |
+ RUN_AND_CHECK_RESULT("1(0ms) 2(0ms) 3(0ms)"); |
+ RUN_AND_CHECK_RESULT(""); |
+} |
+ |
+TEST_F(OrderedSimpleTaskRunnerTest, SimpleOrderingTestPostingTasks) { |
+ PostTaskWhichPostsInstantTask(1, base::TimeDelta()); |
+ PostTaskWhichPostsInstantTask(2, base::TimeDelta()); |
+ PostTaskWhichPostsInstantTask(3, base::TimeDelta()); |
+ |
+ RUN_AND_CHECK_RESULT("1(0ms) 2(0ms) 3(0ms)"); |
+ RUN_AND_CHECK_RESULT("-1(0ms) -2(0ms) -3(0ms)"); |
+ RUN_AND_CHECK_RESULT(""); |
+} |
+ |
+TEST_F(OrderedSimpleTaskRunnerTest, SimpleOrderingTestPostingDelayedTasks) { |
+ PostTaskWhichPostsDelayedTask( |
+ 1, base::TimeDelta(), base::TimeDelta::FromMilliseconds(1)); |
+ PostTaskWhichPostsDelayedTask( |
+ 2, base::TimeDelta(), base::TimeDelta::FromMilliseconds(1)); |
+ PostTaskWhichPostsDelayedTask( |
+ 3, base::TimeDelta(), base::TimeDelta::FromMilliseconds(1)); |
+ |
+ RUN_AND_CHECK_RESULT("1(0ms) 2(0ms) 3(0ms)"); |
+ RUN_AND_CHECK_RESULT("-1(1ms) -2(1ms) -3(1ms)"); |
+ RUN_AND_CHECK_RESULT(""); |
+} |
+ |
+TEST_F(OrderedSimpleTaskRunnerTest, |
+ SimpleOrderingTestPostingReordingDelayedTasks) { |
+ PostTaskWhichPostsDelayedTask(1, |
+ base::TimeDelta::FromMilliseconds(1), |
+ base::TimeDelta::FromMilliseconds(20)); |
+ PostTaskWhichPostsDelayedTask(2, |
+ base::TimeDelta::FromMilliseconds(2), |
+ base::TimeDelta::FromMilliseconds(5)); |
+ PostTaskWhichPostsDelayedTask(3, |
+ base::TimeDelta::FromMilliseconds(3), |
+ base::TimeDelta::FromMilliseconds(5)); |
+ |
+ RUN_AND_CHECK_RESULT("1(1ms) 2(2ms) 3(3ms)"); |
+ RUN_AND_CHECK_RESULT("-2(7ms) -3(8ms) -1(21ms)"); |
+ RUN_AND_CHECK_RESULT(""); |
+} |
+ |
+TEST_F(OrderedSimpleTaskRunnerTest, |
+ SimpleOrderingTestPostingReordingDelayedTasksOverlap) { |
+ PostTaskWhichPostsDelayedTask(1, |
+ base::TimeDelta::FromMilliseconds(1), |
+ base::TimeDelta::FromMilliseconds(5)); |
+ PostTaskWhichPostsDelayedTask(2, |
+ base::TimeDelta::FromMilliseconds(5), |
+ base::TimeDelta::FromMilliseconds(10)); |
+ PostTaskWhichPostsDelayedTask(3, |
+ base::TimeDelta::FromMilliseconds(10), |
+ base::TimeDelta::FromMilliseconds(1)); |
+ |
+ RUN_AND_CHECK_RESULT("1(1ms) 2(5ms)"); |
+ RUN_AND_CHECK_RESULT("-1(6ms) 3(10ms)"); |
+ RUN_AND_CHECK_RESULT("-3(11ms) -2(15ms)"); |
+ RUN_AND_CHECK_RESULT(""); |
+} |
+ |
+TEST_F(OrderedSimpleTaskRunnerTest, SimpleOrderingTestPostingAndRentrantTasks) { |
+ PostTaskWhichPostsInstantTask(1, base::TimeDelta()); |
+ PostTaskWhichCallsRun(2, base::TimeDelta()); |
+ PostTaskWhichPostsInstantTask(3, base::TimeDelta()); |
+ |
+ RUN_AND_CHECK_RESULT("1(0ms) 2(0ms) 3(0ms)"); |
+ RUN_AND_CHECK_RESULT("-1(0ms) -3(0ms)"); |
+ RUN_AND_CHECK_RESULT(""); |
+} |
+ |
+TEST_F(OrderedSimpleTaskRunnerTest, |
+ SimpleOrderingTestPostingDelayedAndRentrantTasks) { |
+ PostTaskWhichPostsDelayedTask( |
+ 1, base::TimeDelta(), base::TimeDelta::FromMilliseconds(1)); |
+ PostTaskWhichCallsRun(2, base::TimeDelta()); |
+ PostTaskWhichPostsDelayedTask( |
+ 3, base::TimeDelta(), base::TimeDelta::FromMilliseconds(1)); |
+ |
+ RUN_AND_CHECK_RESULT("1(0ms) 2(0ms) 3(0ms)"); |
+ RUN_AND_CHECK_RESULT("-1(1ms) -3(1ms)"); |
+ RUN_AND_CHECK_RESULT(""); |
} |
TEST_F(OrderedSimpleTaskRunnerTest, OrderingTestWithDelayedTasks) { |
- CreateAndPostTask(1, base::TimeDelta()); |
- CreateAndPostTask(2, base::TimeDelta::FromMilliseconds(15)); |
- CreateAndPostTask(3, base::TimeDelta()); |
- CreateAndPostTask(4, base::TimeDelta::FromMilliseconds(8)); |
+ PostTask(1, base::TimeDelta()); |
+ PostTask(2, base::TimeDelta::FromMilliseconds(15)); |
+ PostTask(3, base::TimeDelta()); |
+ PostTask(4, base::TimeDelta::FromMilliseconds(8)); |
+ |
+ RUN_AND_CHECK_RESULT("1(0ms) 3(0ms) 4(8ms) 2(15ms)"); |
+ RUN_AND_CHECK_RESULT(""); |
+} |
+ |
+TEST_F(OrderedSimpleTaskRunnerTest, OrderingTestWithDelayedPostingTasks) { |
+ PostTaskWhichPostsInstantTask(1, base::TimeDelta()); |
+ PostTaskWhichPostsInstantTask(2, base::TimeDelta::FromMilliseconds(15)); |
+ PostTaskWhichPostsInstantTask(3, base::TimeDelta()); |
+ PostTaskWhichPostsInstantTask(4, base::TimeDelta::FromMilliseconds(8)); |
+ |
+ RUN_AND_CHECK_RESULT("1(0ms) 3(0ms)"); |
+ RUN_AND_CHECK_RESULT("-1(0ms) -3(0ms) 4(8ms)"); |
+ RUN_AND_CHECK_RESULT("-4(8ms) 2(15ms)"); |
+ RUN_AND_CHECK_RESULT("-2(15ms)"); |
+ RUN_AND_CHECK_RESULT(""); |
+} |
+ |
+TEST_F(OrderedSimpleTaskRunnerTest, OrderingTestWithDelayedTasksManualNow) { |
+ task_runner_->SetAutoAdvanceNowToPendingTasks(false); |
+ PostTask(1, base::TimeDelta()); |
+ PostTask(2, base::TimeDelta::FromMilliseconds(15)); |
+ PostTask(3, base::TimeDelta()); |
+ PostTask(4, base::TimeDelta::FromMilliseconds(8)); |
- RunAndCheckResult("1 3 4 2"); |
+ RUN_AND_CHECK_RESULT("1(0ms) 3(0ms)"); |
+ RUN_AND_CHECK_RESULT(""); |
+ EXPECT_EQ(task_runner_->NextPendingTaskDelay(), |
+ base::TimeDelta::FromMilliseconds(8)); |
+ EXPECT_EQ(task_runner_->DelayToNextPendingTask(), |
+ base::TimeDelta::FromMilliseconds(8)); |
+ task_runner_->SetNow(base::TimeTicks::FromInternalValue(5000)); |
+ EXPECT_EQ(task_runner_->NextPendingTaskDelay(), |
+ base::TimeDelta::FromMilliseconds(8)); |
+ EXPECT_EQ(task_runner_->DelayToNextPendingTask(), |
+ base::TimeDelta::FromMilliseconds(3)); |
+ task_runner_->SetNow(base::TimeTicks::FromInternalValue(25000)); |
+ EXPECT_EQ(task_runner_->NextPendingTaskDelay(), |
+ base::TimeDelta::FromMilliseconds(8)); |
+ EXPECT_EQ(task_runner_->DelayToNextPendingTask(), base::TimeDelta()); |
+ RUN_AND_CHECK_RESULT("4(25ms) 2(25ms)"); |
+ RUN_AND_CHECK_RESULT(""); |
} |
} // namespace cc |