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

Side by Side 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: Created 6 years, 5 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
OLDNEW
« 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