| 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..f5f89204ad64ecc13095ca3d23ab974c985a4238 100644
|
| --- a/cc/test/ordered_simple_task_runner_unittest.cc
|
| +++ b/cc/test/ordered_simple_task_runner_unittest.cc
|
| @@ -5,62 +5,232 @@
|
| #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 {
|
| public:
|
| - OrderedSimpleTaskRunnerTest() {
|
| - task_runner_ = new OrderedSimpleTaskRunner;
|
| + OrderedSimpleTaskRunnerTest() : now_src_() {
|
| + task_runner_ = new OrderedSimpleTaskRunner(now_src_, true);
|
| }
|
| virtual ~OrderedSimpleTaskRunnerTest() {}
|
|
|
| protected:
|
| - void CreateAndPostTask(int task_num, base::TimeDelta delay) {
|
| + std::string executed_tasks_;
|
| + scoped_refptr<TestNowSource> now_src_;
|
| + 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,
|
| + now_src_->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));
|
| + now_src_->SetNow(base::TimeTicks::FromInternalValue(5000));
|
| + EXPECT_EQ(task_runner_->NextPendingTaskDelay(),
|
| + base::TimeDelta::FromMilliseconds(8));
|
| + EXPECT_EQ(task_runner_->DelayToNextPendingTask(),
|
| + base::TimeDelta::FromMilliseconds(3));
|
| + now_src_->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
|
|
|