OLD | NEW |
---|---|
(Empty) | |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "base/task_scheduler/sequence.h" | |
6 | |
7 #include "base/task_scheduler/test_util.h" | |
8 #include "base/time/time.h" | |
9 #include "testing/gtest/include/gtest/gtest.h" | |
10 | |
11 namespace base { | |
12 namespace internal { | |
13 | |
14 class TaskSchedulerSequenceTest : public testing::Test { | |
15 public: | |
16 TaskSchedulerSequenceTest() | |
17 : task_a_(FROM_HERE, | |
18 Closure(), | |
19 TaskTraits().WithPriority(TaskPriority::BACKGROUND), | |
20 TimeTicks::FromInternalValue(1)), | |
21 task_b_(FROM_HERE, | |
22 Closure(), | |
23 TaskTraits().WithPriority(TaskPriority::USER_VISIBLE), | |
24 TimeTicks::FromInternalValue(2)), | |
25 task_c_(FROM_HERE, | |
26 Closure(), | |
27 TaskTraits().WithPriority(TaskPriority::USER_BLOCKING), | |
28 TimeTicks::FromInternalValue(3)), | |
29 task_d_(FROM_HERE, | |
30 Closure(), | |
31 TaskTraits().WithPriority(TaskPriority::USER_BLOCKING), | |
32 TimeTicks::FromInternalValue(4)) {} | |
33 | |
34 protected: | |
35 Task task_a_; | |
fdoray
2016/02/18 01:46:11
const Task task_a_;
fdoray
2016/02/18 14:56:13
Done.
| |
36 Task task_b_; | |
37 Task task_c_; | |
38 Task task_d_; | |
39 }; | |
gab
2016/02/18 03:00:46
private:
DISALLOW_COPY_AND_ASSIGN(TaskSchedulerS
fdoray
2016/02/18 14:56:13
Done.
| |
40 | |
41 TEST_F(TaskSchedulerSequenceTest, PushPopPeek) { | |
42 scoped_refptr<Sequence> sequence(new Sequence); | |
43 size_t prev_num_tasks; | |
44 | |
45 sequence->PushTask(scoped_ptr<Task>(new Task(task_a_)), &prev_num_tasks); | |
46 EXPECT_EQ(0u, prev_num_tasks); | |
47 EXPECT_EQ(task_a_.post_time, sequence->PeekTask()->post_time); | |
48 | |
49 sequence->PushTask(scoped_ptr<Task>(new Task(task_b_)), &prev_num_tasks); | |
50 EXPECT_EQ(1u, prev_num_tasks); | |
51 EXPECT_EQ(task_a_.post_time, sequence->PeekTask()->post_time); | |
52 | |
53 sequence->PushTask(scoped_ptr<Task>(new Task(task_c_)), &prev_num_tasks); | |
54 EXPECT_EQ(2u, prev_num_tasks); | |
55 EXPECT_EQ(task_a_.post_time, sequence->PeekTask()->post_time); | |
56 | |
57 sequence->PushTask(scoped_ptr<Task>(new Task(task_d_)), &prev_num_tasks); | |
58 EXPECT_EQ(3u, prev_num_tasks); | |
59 EXPECT_EQ(task_a_.post_time, sequence->PeekTask()->post_time); | |
60 | |
61 size_t new_num_tasks; | |
62 sequence->PopTask(&new_num_tasks); | |
63 EXPECT_EQ(3u, new_num_tasks); | |
64 EXPECT_EQ(task_b_.post_time, sequence->PeekTask()->post_time); | |
65 | |
66 sequence->PopTask(&new_num_tasks); | |
67 EXPECT_EQ(2u, new_num_tasks); | |
68 EXPECT_EQ(task_c_.post_time, sequence->PeekTask()->post_time); | |
69 | |
70 sequence->PopTask(&new_num_tasks); | |
71 EXPECT_EQ(1u, new_num_tasks); | |
72 EXPECT_EQ(task_d_.post_time, sequence->PeekTask()->post_time); | |
73 | |
74 sequence->PushTask(scoped_ptr<Task>(new Task(task_a_)), &prev_num_tasks); | |
75 EXPECT_EQ(1u, prev_num_tasks); | |
76 EXPECT_EQ(task_d_.post_time, sequence->PeekTask()->post_time); | |
77 | |
78 sequence->PopTask(&new_num_tasks); | |
79 EXPECT_EQ(1u, new_num_tasks); | |
80 EXPECT_EQ(task_a_.post_time, sequence->PeekTask()->post_time); | |
81 | |
82 sequence->PopTask(&new_num_tasks); | |
83 EXPECT_EQ(0u, new_num_tasks); | |
84 EXPECT_EQ(nullptr, sequence->PeekTask()); | |
85 } | |
86 | |
87 TEST_F(TaskSchedulerSequenceTest, GetSequenceSortKey) { | |
fdoray
2016/02/18 01:46:11
*GetSortKey
fdoray
2016/02/18 14:56:13
Done.
| |
88 scoped_refptr<Sequence> sequence(new Sequence); | |
89 size_t prev_num_tasks; | |
90 size_t new_num_tasks; | |
91 | |
92 sequence->PushTask(scoped_ptr<Task>(new Task(task_a_)), &prev_num_tasks); | |
93 SequenceSortKey sort_key = sequence->GetSortKey(); | |
94 EXPECT_EQ(TaskPriority::BACKGROUND, sort_key.priority_); | |
95 EXPECT_EQ(task_a_.post_time, sort_key.next_task_post_time_); | |
96 | |
97 sequence->PushTask(scoped_ptr<Task>(new Task(task_b_)), &prev_num_tasks); | |
98 sort_key = sequence->GetSortKey(); | |
99 EXPECT_EQ(TaskPriority::USER_VISIBLE, sort_key.priority_); | |
100 EXPECT_EQ(task_a_.post_time, sort_key.next_task_post_time_); | |
101 | |
102 sequence->PushTask(scoped_ptr<Task>(new Task(task_c_)), &prev_num_tasks); | |
103 sort_key = sequence->GetSortKey(); | |
104 EXPECT_EQ(TaskPriority::USER_BLOCKING, sort_key.priority_); | |
105 EXPECT_EQ(task_a_.post_time, sort_key.next_task_post_time_); | |
106 | |
107 sequence->PushTask(scoped_ptr<Task>(new Task(task_d_)), &prev_num_tasks); | |
108 sort_key = sequence->GetSortKey(); | |
109 EXPECT_EQ(TaskPriority::USER_BLOCKING, sort_key.priority_); | |
110 EXPECT_EQ(task_a_.post_time, sort_key.next_task_post_time_); | |
111 | |
112 sequence->PopTask(&new_num_tasks); | |
113 sort_key = sequence->GetSortKey(); | |
114 EXPECT_EQ(TaskPriority::USER_BLOCKING, sort_key.priority_); | |
115 EXPECT_EQ(task_b_.post_time, sort_key.next_task_post_time_); | |
116 | |
117 sequence->PopTask(&new_num_tasks); | |
118 sort_key = sequence->GetSortKey(); | |
119 EXPECT_EQ(TaskPriority::USER_BLOCKING, sort_key.priority_); | |
120 EXPECT_EQ(task_c_.post_time, sort_key.next_task_post_time_); | |
121 | |
122 sequence->PopTask(&new_num_tasks); | |
123 sort_key = sequence->GetSortKey(); | |
124 EXPECT_EQ(TaskPriority::USER_BLOCKING, sort_key.priority_); | |
125 EXPECT_EQ(task_d_.post_time, sort_key.next_task_post_time_); | |
126 | |
127 sequence->PushTask(scoped_ptr<Task>(new Task(task_a_)), &prev_num_tasks); | |
128 sort_key = sequence->GetSortKey(); | |
129 EXPECT_EQ(TaskPriority::USER_BLOCKING, sort_key.priority_); | |
130 EXPECT_EQ(task_d_.post_time, sort_key.next_task_post_time_); | |
131 | |
132 sequence->PopTask(&new_num_tasks); | |
133 sort_key = sequence->GetSortKey(); | |
134 EXPECT_EQ(TaskPriority::BACKGROUND, sort_key.priority_); | |
135 EXPECT_EQ(task_a_.post_time, sort_key.next_task_post_time_); | |
136 | |
137 sequence->PopTask(&new_num_tasks); | |
138 } | |
139 | |
140 } // namespace internal | |
141 } // namespace base | |
OLD | NEW |