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

Side by Side Diff: base/task_scheduler/sequence_unittest.cc

Issue 1685423002: Task Scheduler. (Closed) Base URL: https://luckyluke-private.googlesource.com/src@a_master
Patch Set: Created 4 years, 10 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
OLDNEW
(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 task_scheduler {
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_;
36 Task task_b_;
37 Task task_c_;
38 Task task_d_;
39 };
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) {
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 task_scheduler
141 } // namespace base
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698