Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(534)

Unified Diff: cc/test/ordered_simple_task_runner_unittest.cc

Issue 396063011: Extending the OrderedSimpleTaskRunner unit tests to show ordering issues. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase onto master after 3 weeks away. Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..9e8cbb9b6d3807b2376561748734600821a2fbd6 100644
--- a/cc/test/ordered_simple_task_runner_unittest.cc
+++ b/cc/test/ordered_simple_task_runner_unittest.cc
@@ -11,6 +11,11 @@
#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 +26,202 @@ 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);
}
+ 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 2 3");
+ 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 2 3");
+ RUN_AND_CHECK_RESULT("-1 -2 -3");
+ 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 2 3");
+ RUN_AND_CHECK_RESULT("-1 -2 -3");
+ 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 2 3");
+ RUN_AND_CHECK_RESULT("-2 -3 -1");
+ RUN_AND_CHECK_RESULT("");
+}
+
+TEST_F(OrderedSimpleTaskRunnerTest,
+ SimpleOrderingTestPostingReordingDelayedTasksOverlap) {
+ // 1@1ms, -1@6ms
+ PostTaskWhichPostsDelayedTask(1,
+ base::TimeDelta::FromMilliseconds(1),
+ base::TimeDelta::FromMilliseconds(5));
+ // 2@5ms, -2@15ms
+ PostTaskWhichPostsDelayedTask(2,
+ base::TimeDelta::FromMilliseconds(5),
+ base::TimeDelta::FromMilliseconds(10));
+ // 3@10ms, -3@11ms
+ PostTaskWhichPostsDelayedTask(3,
+ base::TimeDelta::FromMilliseconds(10),
+ base::TimeDelta::FromMilliseconds(1));
+
+ /* Correct behaviour
+ RUN_AND_CHECK_RESULT("1 2");
+ RUN_AND_CHECK_RESULT("-1 3");
+ RUN_AND_CHECK_RESULT("-3 -2");
+ RUN_AND_CHECK_RESULT("");
+ */
+ RUN_AND_CHECK_RESULT("1 2 3");
+ RUN_AND_CHECK_RESULT("-3 -1 -2"); // <---- !!!!!! -1@6ms, -3@11ms
+ RUN_AND_CHECK_RESULT("");
+}
+
+TEST_F(OrderedSimpleTaskRunnerTest, SimpleOrderingTestPostingAndRentrantTasks) {
+ PostTaskWhichPostsInstantTask(1, base::TimeDelta());
+ PostTaskWhichCallsRun(2, base::TimeDelta());
+ PostTaskWhichPostsInstantTask(3, base::TimeDelta());
+
+ /* Correct behaviour
+ RUN_AND_CHECK_RESULT("1 2 3");
+ RUN_AND_CHECK_RESULT("-1 -3");
+ RUN_AND_CHECK_RESULT("");
+ */
+ RUN_AND_CHECK_RESULT("1 2 -1 3");
+ RUN_AND_CHECK_RESULT("-3");
+ 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));
+
+ /* Correct behaviour
+ RUN_AND_CHECK_RESULT("1 2 3");
+ RUN_AND_CHECK_RESULT("-1 -3");
+ RUN_AND_CHECK_RESULT("");
+ */
+ RUN_AND_CHECK_RESULT("1 2 -1 3");
+ RUN_AND_CHECK_RESULT("-3");
+ 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 3 4 2");
+ 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));
- RunAndCheckResult("1 3 4 2");
+ /* Correct behaviour
+ RUN_AND_CHECK_RESULT("1 3");
+ RUN_AND_CHECK_RESULT("-1 -3 4");
+ RUN_AND_CHECK_RESULT("-4 2");
+ RUN_AND_CHECK_RESULT("-2");
+ RUN_AND_CHECK_RESULT("");
+ */
+ RUN_AND_CHECK_RESULT("1 3 4 2");
+ RUN_AND_CHECK_RESULT("-1 -3 -4 -2");
+ RUN_AND_CHECK_RESULT("");
}
} // namespace cc
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698