OLD | NEW |
---|---|
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <string> | 5 #include <string> |
6 | 6 |
7 #include "base/cancelable_callback.h" | 7 #include "base/cancelable_callback.h" |
8 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
9 #include "base/strings/stringprintf.h" | 9 #include "base/strings/stringprintf.h" |
10 #include "base/test/test_pending_task.h" | 10 #include "base/test/test_pending_task.h" |
11 #include "cc/test/ordered_simple_task_runner.h" | 11 #include "cc/test/ordered_simple_task_runner.h" |
12 #include "testing/gtest/include/gtest/gtest.h" | 12 #include "testing/gtest/include/gtest/gtest.h" |
13 | 13 |
14 #define RUN_AND_CHECK_RESULT(expected_result) \ | |
15 task_runner_->RunPendingTasks(); \ | |
Sami
2014/07/16 14:36:54
nit: indent by two more?
| |
16 EXPECT_EQ(expected_result, executed_tasks_); \ | |
17 executed_tasks_ = ""; | |
18 | |
14 namespace cc { | 19 namespace cc { |
15 | 20 |
16 class OrderedSimpleTaskRunnerTest : public testing::Test { | 21 class OrderedSimpleTaskRunnerTest : public testing::Test { |
17 public: | 22 public: |
18 OrderedSimpleTaskRunnerTest() { | 23 OrderedSimpleTaskRunnerTest() { |
19 task_runner_ = new OrderedSimpleTaskRunner; | 24 task_runner_ = new OrderedSimpleTaskRunner; |
20 } | 25 } |
21 virtual ~OrderedSimpleTaskRunnerTest() {} | 26 virtual ~OrderedSimpleTaskRunnerTest() {} |
22 | 27 |
23 protected: | 28 protected: |
24 void CreateAndPostTask(int task_num, base::TimeDelta delay) { | 29 std::string executed_tasks_; |
30 scoped_refptr<OrderedSimpleTaskRunner> task_runner_; | |
31 | |
32 void PostTask(int task_num, base::TimeDelta delay) { | |
25 base::Closure test_task = base::Bind(&OrderedSimpleTaskRunnerTest::Task, | 33 base::Closure test_task = base::Bind(&OrderedSimpleTaskRunnerTest::Task, |
26 base::Unretained(this), | 34 base::Unretained(this), |
27 task_num); | 35 task_num); |
28 task_runner_->PostDelayedTask(FROM_HERE, test_task, delay); | 36 task_runner_->PostDelayedTask(FROM_HERE, test_task, delay); |
29 } | 37 } |
30 | 38 |
31 void RunAndCheckResult(const std::string expected_result) { | 39 void PostTaskWhichPostsInstantTask(int task_num, base::TimeDelta delay) { |
32 task_runner_->RunPendingTasks(); | 40 base::Closure test_task = |
33 EXPECT_EQ(expected_result, executed_tasks_); | 41 base::Bind(&OrderedSimpleTaskRunnerTest::TaskWhichPostsInstantTask, |
42 base::Unretained(this), | |
43 task_num); | |
44 task_runner_->PostDelayedTask(FROM_HERE, test_task, delay); | |
45 } | |
46 | |
47 void PostTaskWhichPostsDelayedTask(int task_num, | |
brianderson
2014/07/18 00:23:16
PostDelayedTaskWhichPostsDelayedTask?
| |
48 base::TimeDelta delay1, | |
49 base::TimeDelta delay2) { | |
50 base::Closure test_task = | |
51 base::Bind(&OrderedSimpleTaskRunnerTest::TaskWhichPostsDelayedTask, | |
52 base::Unretained(this), | |
53 task_num, | |
54 delay2); | |
55 task_runner_->PostDelayedTask(FROM_HERE, test_task, delay1); | |
56 } | |
57 | |
58 void PostTaskWhichCallsRun(int task_num, base::TimeDelta delay) { | |
59 base::Closure test_task = | |
60 base::Bind(&OrderedSimpleTaskRunnerTest::TaskWhichCallsRun, | |
61 base::Unretained(this), | |
62 task_num); | |
63 task_runner_->PostDelayedTask(FROM_HERE, test_task, delay); | |
34 } | 64 } |
35 | 65 |
36 private: | 66 private: |
37 std::string executed_tasks_; | |
38 scoped_refptr<OrderedSimpleTaskRunner> task_runner_; | |
39 | |
40 void Task(int task_num) { | 67 void Task(int task_num) { |
41 if (!executed_tasks_.empty()) | 68 if (!executed_tasks_.empty()) |
42 executed_tasks_ += " "; | 69 executed_tasks_ += " "; |
43 executed_tasks_ += base::StringPrintf("%d", task_num); | 70 executed_tasks_ += base::StringPrintf("%d", task_num); |
44 } | 71 } |
45 | 72 |
73 void TaskWhichPostsInstantTask(int task_num) { | |
74 Task(task_num); | |
75 PostTask(-task_num, base::TimeDelta()); | |
76 } | |
77 | |
78 void TaskWhichPostsDelayedTask(int task_num, base::TimeDelta delay) { | |
79 Task(task_num); | |
80 PostTask(-task_num, delay); | |
brianderson
2014/07/18 00:23:16
Using -task_num is a simple trick to figure out if
| |
81 } | |
82 | |
83 void TaskWhichCallsRun(int task_num) { | |
84 Task(task_num); | |
85 task_runner_->RunPendingTasks(); | |
86 } | |
87 | |
46 DISALLOW_COPY_AND_ASSIGN(OrderedSimpleTaskRunnerTest); | 88 DISALLOW_COPY_AND_ASSIGN(OrderedSimpleTaskRunnerTest); |
47 }; | 89 }; |
48 | 90 |
49 TEST_F(OrderedSimpleTaskRunnerTest, BasicOrderingTest) { | 91 TEST_F(OrderedSimpleTaskRunnerTest, SimpleOrderingTest) { |
50 CreateAndPostTask(1, base::TimeDelta()); | 92 PostTask(1, base::TimeDelta()); |
51 CreateAndPostTask(2, base::TimeDelta()); | 93 PostTask(2, base::TimeDelta()); |
52 CreateAndPostTask(3, base::TimeDelta()); | 94 PostTask(3, base::TimeDelta()); |
53 | 95 |
54 RunAndCheckResult("1 2 3"); | 96 RUN_AND_CHECK_RESULT("1 2 3"); |
97 RUN_AND_CHECK_RESULT(""); | |
98 } | |
99 | |
100 TEST_F(OrderedSimpleTaskRunnerTest, SimpleOrderingTestPostingTasks) { | |
101 PostTaskWhichPostsInstantTask(1, base::TimeDelta()); | |
102 PostTaskWhichPostsInstantTask(2, base::TimeDelta()); | |
103 PostTaskWhichPostsInstantTask(3, base::TimeDelta()); | |
104 | |
105 RUN_AND_CHECK_RESULT("1 2 3"); | |
106 RUN_AND_CHECK_RESULT("-1 -2 -3"); | |
107 RUN_AND_CHECK_RESULT(""); | |
108 } | |
109 | |
110 TEST_F(OrderedSimpleTaskRunnerTest, SimpleOrderingTestPostingDelayedTasks) { | |
111 PostTaskWhichPostsDelayedTask( | |
112 1, base::TimeDelta(), base::TimeDelta::FromMilliseconds(1)); | |
113 PostTaskWhichPostsDelayedTask( | |
114 2, base::TimeDelta(), base::TimeDelta::FromMilliseconds(1)); | |
115 PostTaskWhichPostsDelayedTask( | |
116 3, base::TimeDelta(), base::TimeDelta::FromMilliseconds(1)); | |
117 | |
118 RUN_AND_CHECK_RESULT("1 2 3"); | |
119 RUN_AND_CHECK_RESULT("-1 -2 -3"); | |
120 RUN_AND_CHECK_RESULT(""); | |
121 } | |
122 | |
123 TEST_F(OrderedSimpleTaskRunnerTest, | |
124 SimpleOrderingTestPostingReordingDelayedTasks) { | |
125 PostTaskWhichPostsDelayedTask(1, | |
126 base::TimeDelta::FromMilliseconds(1), | |
127 base::TimeDelta::FromMilliseconds(20)); | |
128 PostTaskWhichPostsDelayedTask(2, | |
129 base::TimeDelta::FromMilliseconds(2), | |
130 base::TimeDelta::FromMilliseconds(5)); | |
131 PostTaskWhichPostsDelayedTask(3, | |
132 base::TimeDelta::FromMilliseconds(3), | |
133 base::TimeDelta::FromMilliseconds(5)); | |
134 | |
135 RUN_AND_CHECK_RESULT("1 2 3"); | |
136 RUN_AND_CHECK_RESULT("-2 -3 -1"); | |
137 RUN_AND_CHECK_RESULT(""); | |
138 } | |
139 | |
140 TEST_F(OrderedSimpleTaskRunnerTest, | |
141 SimpleOrderingTestPostingReordingDelayedTasksOverlap) { | |
142 // 1@1ms, -1@6ms | |
143 PostTaskWhichPostsDelayedTask(1, | |
144 base::TimeDelta::FromMilliseconds(1), | |
145 base::TimeDelta::FromMilliseconds(5)); | |
146 // 2@5ms, -2@15ms | |
147 PostTaskWhichPostsDelayedTask(2, | |
148 base::TimeDelta::FromMilliseconds(5), | |
149 base::TimeDelta::FromMilliseconds(10)); | |
150 // 3@10ms, -3@11ms | |
151 PostTaskWhichPostsDelayedTask(3, | |
152 base::TimeDelta::FromMilliseconds(10), | |
153 base::TimeDelta::FromMilliseconds(1)); | |
154 | |
155 /* Correct behaviour | |
156 RUN_AND_CHECK_RESULT("1 2"); | |
157 RUN_AND_CHECK_RESULT("-1 3"); | |
158 RUN_AND_CHECK_RESULT("-3 -2"); | |
159 RUN_AND_CHECK_RESULT(""); | |
160 */ | |
161 RUN_AND_CHECK_RESULT("1 2 3"); | |
162 RUN_AND_CHECK_RESULT("-3 -1 -2"); // <---- !!!!!! -1@6ms, -3@11ms | |
163 RUN_AND_CHECK_RESULT(""); | |
164 } | |
165 | |
166 TEST_F(OrderedSimpleTaskRunnerTest, SimpleOrderingTestPostingAndRentrantTasks) { | |
167 PostTaskWhichPostsInstantTask(1, base::TimeDelta()); | |
168 PostTaskWhichCallsRun(2, base::TimeDelta()); | |
169 PostTaskWhichPostsInstantTask(3, base::TimeDelta()); | |
170 | |
171 /* Correct behaviour | |
172 RUN_AND_CHECK_RESULT("1 2 3"); | |
173 RUN_AND_CHECK_RESULT("-1 -3"); | |
174 RUN_AND_CHECK_RESULT(""); | |
175 */ | |
176 RUN_AND_CHECK_RESULT("1 2 -1 3"); | |
177 RUN_AND_CHECK_RESULT("-3"); | |
178 RUN_AND_CHECK_RESULT(""); | |
179 } | |
180 | |
181 TEST_F(OrderedSimpleTaskRunnerTest, | |
182 SimpleOrderingTestPostingDelayedAndRentrantTasks) { | |
183 PostTaskWhichPostsDelayedTask( | |
184 1, base::TimeDelta(), base::TimeDelta::FromMilliseconds(1)); | |
185 PostTaskWhichCallsRun(2, base::TimeDelta()); | |
186 PostTaskWhichPostsDelayedTask( | |
187 3, base::TimeDelta(), base::TimeDelta::FromMilliseconds(1)); | |
188 | |
189 /* Correct behaviour | |
190 RUN_AND_CHECK_RESULT("1 2 3"); | |
191 RUN_AND_CHECK_RESULT("-1 -3"); | |
192 RUN_AND_CHECK_RESULT(""); | |
193 */ | |
194 RUN_AND_CHECK_RESULT("1 2 -1 3"); | |
195 RUN_AND_CHECK_RESULT("-3"); | |
196 RUN_AND_CHECK_RESULT(""); | |
55 } | 197 } |
56 | 198 |
57 TEST_F(OrderedSimpleTaskRunnerTest, OrderingTestWithDelayedTasks) { | 199 TEST_F(OrderedSimpleTaskRunnerTest, OrderingTestWithDelayedTasks) { |
58 CreateAndPostTask(1, base::TimeDelta()); | 200 PostTask(1, base::TimeDelta()); |
59 CreateAndPostTask(2, base::TimeDelta::FromMilliseconds(15)); | 201 PostTask(2, base::TimeDelta::FromMilliseconds(15)); |
60 CreateAndPostTask(3, base::TimeDelta()); | 202 PostTask(3, base::TimeDelta()); |
61 CreateAndPostTask(4, base::TimeDelta::FromMilliseconds(8)); | 203 PostTask(4, base::TimeDelta::FromMilliseconds(8)); |
62 | 204 |
63 RunAndCheckResult("1 3 4 2"); | 205 RUN_AND_CHECK_RESULT("1 3 4 2"); |
206 RUN_AND_CHECK_RESULT(""); | |
207 } | |
208 | |
209 TEST_F(OrderedSimpleTaskRunnerTest, OrderingTestWithDelayedPostingTasks) { | |
210 PostTaskWhichPostsInstantTask(1, base::TimeDelta()); | |
211 PostTaskWhichPostsInstantTask(2, base::TimeDelta::FromMilliseconds(15)); | |
212 PostTaskWhichPostsInstantTask(3, base::TimeDelta()); | |
213 PostTaskWhichPostsInstantTask(4, base::TimeDelta::FromMilliseconds(8)); | |
214 | |
215 /* Correct behaviour | |
216 RUN_AND_CHECK_RESULT("1 3"); | |
217 RUN_AND_CHECK_RESULT("-1 -3 4"); | |
218 RUN_AND_CHECK_RESULT("-4 2"); | |
219 RUN_AND_CHECK_RESULT("-2"); | |
220 RUN_AND_CHECK_RESULT(""); | |
221 */ | |
222 RUN_AND_CHECK_RESULT("1 3 4 2"); | |
223 RUN_AND_CHECK_RESULT("-1 -3 -4 -2"); | |
224 RUN_AND_CHECK_RESULT(""); | |
64 } | 225 } |
65 | 226 |
66 } // namespace cc | 227 } // namespace cc |
OLD | NEW |