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

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

Issue 2077093002: Rename SchedulerWorkerThread* to SchedulerWorker* (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@rename2
Patch Set: CR Feedback Created 4 years, 6 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
1 // Copyright 2016 The Chromium Authors. All rights reserved. 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 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 "base/task_scheduler/scheduler_worker_thread_stack.h" 5 #include "base/task_scheduler/scheduler_worker_stack.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/memory/ptr_util.h" 8 #include "base/memory/ptr_util.h"
9 #include "base/memory/ref_counted.h" 9 #include "base/memory/ref_counted.h"
10 #include "base/task_scheduler/scheduler_worker_thread.h" 10 #include "base/task_scheduler/scheduler_worker.h"
11 #include "base/task_scheduler/sequence.h" 11 #include "base/task_scheduler/sequence.h"
12 #include "base/task_scheduler/task_tracker.h" 12 #include "base/task_scheduler/task_tracker.h"
13 #include "base/task_scheduler/test_utils.h" 13 #include "base/task_scheduler/test_utils.h"
14 #include "base/threading/platform_thread.h" 14 #include "base/threading/platform_thread.h"
15 #include "base/time/time.h" 15 #include "base/time/time.h"
16 #include "testing/gtest/include/gtest/gtest.h" 16 #include "testing/gtest/include/gtest/gtest.h"
17 17
18 namespace base { 18 namespace base {
19 namespace internal { 19 namespace internal {
20 20
21 namespace { 21 namespace {
22 22
23 class MockSchedulerWorkerThreadDelegate 23 class MockSchedulerWorkerDelegate : public SchedulerWorker::Delegate {
24 : public SchedulerWorkerThread::Delegate {
25 public: 24 public:
26 void OnMainEntry(SchedulerWorkerThread* worker_thread) override {} 25 void OnMainEntry(SchedulerWorker* worker) override {}
27 scoped_refptr<Sequence> GetWork( 26 scoped_refptr<Sequence> GetWork(SchedulerWorker* worker) override {
28 SchedulerWorkerThread* worker_thread) override {
29 return nullptr; 27 return nullptr;
30 } 28 }
31 void ReEnqueueSequence(scoped_refptr<Sequence> sequence) override { 29 void ReEnqueueSequence(scoped_refptr<Sequence> sequence) override {
32 ADD_FAILURE() << "This delegate not expect to have sequences to reenqueue."; 30 ADD_FAILURE() << "This delegate not expect to have sequences to reenqueue.";
33 } 31 }
34 TimeDelta GetSleepTimeout() override { 32 TimeDelta GetSleepTimeout() override {
35 ADD_FAILURE() <<
36 "The mock thread is not expected to be woken before it is shutdown";
37 return TimeDelta::Max(); 33 return TimeDelta::Max();
38 } 34 }
39 }; 35 };
40 36
41 class TaskSchedulerWorkerThreadStackTest : public testing::Test { 37 class TaskSchedulerWorkerStackTest : public testing::Test {
42 protected: 38 protected:
43 void SetUp() override { 39 void SetUp() override {
44 thread_a_ = SchedulerWorkerThread::Create( 40 worker_a_ = SchedulerWorker::Create(
45 ThreadPriority::NORMAL, 41 ThreadPriority::NORMAL,
46 WrapUnique(new MockSchedulerWorkerThreadDelegate), &task_tracker_); 42 WrapUnique(new MockSchedulerWorkerDelegate), &task_tracker_);
47 ASSERT_TRUE(thread_a_); 43 ASSERT_TRUE(worker_a_);
48 thread_b_ = SchedulerWorkerThread::Create( 44 worker_b_ = SchedulerWorker::Create(
49 ThreadPriority::NORMAL, 45 ThreadPriority::NORMAL,
50 WrapUnique(new MockSchedulerWorkerThreadDelegate), &task_tracker_); 46 WrapUnique(new MockSchedulerWorkerDelegate), &task_tracker_);
51 ASSERT_TRUE(thread_b_); 47 ASSERT_TRUE(worker_b_);
52 thread_c_ = SchedulerWorkerThread::Create( 48 worker_c_ = SchedulerWorker::Create(
53 ThreadPriority::NORMAL, 49 ThreadPriority::NORMAL,
54 WrapUnique(new MockSchedulerWorkerThreadDelegate), &task_tracker_); 50 WrapUnique(new MockSchedulerWorkerDelegate), &task_tracker_);
55 ASSERT_TRUE(thread_c_); 51 ASSERT_TRUE(worker_c_);
56 } 52 }
57 53
58 void TearDown() override { 54 void TearDown() override {
59 thread_a_->JoinForTesting(); 55 worker_a_->JoinForTesting();
60 thread_b_->JoinForTesting(); 56 worker_b_->JoinForTesting();
61 thread_c_->JoinForTesting(); 57 worker_c_->JoinForTesting();
62 } 58 }
63 59
64 std::unique_ptr<SchedulerWorkerThread> thread_a_; 60 std::unique_ptr<SchedulerWorker> worker_a_;
65 std::unique_ptr<SchedulerWorkerThread> thread_b_; 61 std::unique_ptr<SchedulerWorker> worker_b_;
66 std::unique_ptr<SchedulerWorkerThread> thread_c_; 62 std::unique_ptr<SchedulerWorker> worker_c_;
67 63
68 private: 64 private:
69 TaskTracker task_tracker_; 65 TaskTracker task_tracker_;
70 }; 66 };
71 67
72 } // namespace 68 } // namespace
73 69
74 // Verify that Push() and Pop() add/remove values in FIFO order. 70 // Verify that Push() and Pop() add/remove values in FIFO order.
75 TEST_F(TaskSchedulerWorkerThreadStackTest, PushPop) { 71 TEST_F(TaskSchedulerWorkerStackTest, PushPop) {
76 SchedulerWorkerThreadStack stack; 72 SchedulerWorkerStack stack;
77 EXPECT_TRUE(stack.IsEmpty()); 73 EXPECT_TRUE(stack.IsEmpty());
78 EXPECT_EQ(0U, stack.Size()); 74 EXPECT_EQ(0U, stack.Size());
79 75
80 stack.Push(thread_a_.get()); 76 stack.Push(worker_a_.get());
81 EXPECT_FALSE(stack.IsEmpty()); 77 EXPECT_FALSE(stack.IsEmpty());
82 EXPECT_EQ(1U, stack.Size()); 78 EXPECT_EQ(1U, stack.Size());
83 79
84 stack.Push(thread_b_.get()); 80 stack.Push(worker_b_.get());
85 EXPECT_FALSE(stack.IsEmpty()); 81 EXPECT_FALSE(stack.IsEmpty());
86 EXPECT_EQ(2U, stack.Size()); 82 EXPECT_EQ(2U, stack.Size());
87 83
88 stack.Push(thread_c_.get()); 84 stack.Push(worker_c_.get());
89 EXPECT_FALSE(stack.IsEmpty()); 85 EXPECT_FALSE(stack.IsEmpty());
90 EXPECT_EQ(3U, stack.Size()); 86 EXPECT_EQ(3U, stack.Size());
91 87
92 EXPECT_EQ(thread_c_.get(), stack.Pop()); 88 EXPECT_EQ(worker_c_.get(), stack.Pop());
93 EXPECT_FALSE(stack.IsEmpty()); 89 EXPECT_FALSE(stack.IsEmpty());
94 EXPECT_EQ(2U, stack.Size()); 90 EXPECT_EQ(2U, stack.Size());
95 91
96 stack.Push(thread_c_.get()); 92 stack.Push(worker_c_.get());
97 EXPECT_FALSE(stack.IsEmpty()); 93 EXPECT_FALSE(stack.IsEmpty());
98 EXPECT_EQ(3U, stack.Size()); 94 EXPECT_EQ(3U, stack.Size());
99 95
100 EXPECT_EQ(thread_c_.get(), stack.Pop()); 96 EXPECT_EQ(worker_c_.get(), stack.Pop());
101 EXPECT_FALSE(stack.IsEmpty()); 97 EXPECT_FALSE(stack.IsEmpty());
102 EXPECT_EQ(2U, stack.Size()); 98 EXPECT_EQ(2U, stack.Size());
103 99
104 EXPECT_EQ(thread_b_.get(), stack.Pop()); 100 EXPECT_EQ(worker_b_.get(), stack.Pop());
105 EXPECT_FALSE(stack.IsEmpty()); 101 EXPECT_FALSE(stack.IsEmpty());
106 EXPECT_EQ(1U, stack.Size()); 102 EXPECT_EQ(1U, stack.Size());
107 103
108 EXPECT_EQ(thread_a_.get(), stack.Pop()); 104 EXPECT_EQ(worker_a_.get(), stack.Pop());
109 EXPECT_TRUE(stack.IsEmpty()); 105 EXPECT_TRUE(stack.IsEmpty());
110 EXPECT_EQ(0U, stack.Size()); 106 EXPECT_EQ(0U, stack.Size());
111 } 107 }
112 108
113 // Verify that a value can be removed by Remove(). 109 // Verify that a value can be removed by Remove().
114 TEST_F(TaskSchedulerWorkerThreadStackTest, Remove) { 110 TEST_F(TaskSchedulerWorkerStackTest, Remove) {
115 SchedulerWorkerThreadStack stack; 111 SchedulerWorkerStack stack;
116 EXPECT_TRUE(stack.IsEmpty()); 112 EXPECT_TRUE(stack.IsEmpty());
117 EXPECT_EQ(0U, stack.Size()); 113 EXPECT_EQ(0U, stack.Size());
118 114
119 stack.Push(thread_a_.get()); 115 stack.Push(worker_a_.get());
120 EXPECT_FALSE(stack.IsEmpty()); 116 EXPECT_FALSE(stack.IsEmpty());
121 EXPECT_EQ(1U, stack.Size()); 117 EXPECT_EQ(1U, stack.Size());
122 118
123 stack.Push(thread_b_.get()); 119 stack.Push(worker_b_.get());
124 EXPECT_FALSE(stack.IsEmpty()); 120 EXPECT_FALSE(stack.IsEmpty());
125 EXPECT_EQ(2U, stack.Size()); 121 EXPECT_EQ(2U, stack.Size());
126 122
127 stack.Push(thread_c_.get()); 123 stack.Push(worker_c_.get());
128 EXPECT_FALSE(stack.IsEmpty()); 124 EXPECT_FALSE(stack.IsEmpty());
129 EXPECT_EQ(3U, stack.Size()); 125 EXPECT_EQ(3U, stack.Size());
130 126
131 stack.Remove(thread_b_.get()); 127 stack.Remove(worker_b_.get());
132 EXPECT_FALSE(stack.IsEmpty()); 128 EXPECT_FALSE(stack.IsEmpty());
133 EXPECT_EQ(2U, stack.Size()); 129 EXPECT_EQ(2U, stack.Size());
134 130
135 EXPECT_EQ(thread_c_.get(), stack.Pop()); 131 EXPECT_EQ(worker_c_.get(), stack.Pop());
136 EXPECT_FALSE(stack.IsEmpty()); 132 EXPECT_FALSE(stack.IsEmpty());
137 EXPECT_EQ(1U, stack.Size()); 133 EXPECT_EQ(1U, stack.Size());
138 134
139 EXPECT_EQ(thread_a_.get(), stack.Pop()); 135 EXPECT_EQ(worker_a_.get(), stack.Pop());
140 EXPECT_TRUE(stack.IsEmpty()); 136 EXPECT_TRUE(stack.IsEmpty());
141 EXPECT_EQ(0U, stack.Size()); 137 EXPECT_EQ(0U, stack.Size());
142 } 138 }
143 139
144 // Verify that a value can be pushed again after it has been removed. 140 // Verify that a value can be pushed again after it has been removed.
145 TEST_F(TaskSchedulerWorkerThreadStackTest, PushAfterRemove) { 141 TEST_F(TaskSchedulerWorkerStackTest, PushAfterRemove) {
146 SchedulerWorkerThreadStack stack; 142 SchedulerWorkerStack stack;
147 EXPECT_EQ(0U, stack.Size()); 143 EXPECT_EQ(0U, stack.Size());
148 EXPECT_TRUE(stack.IsEmpty()); 144 EXPECT_TRUE(stack.IsEmpty());
149 145
150 stack.Push(thread_a_.get()); 146 stack.Push(worker_a_.get());
151 EXPECT_EQ(1U, stack.Size()); 147 EXPECT_EQ(1U, stack.Size());
152 EXPECT_FALSE(stack.IsEmpty()); 148 EXPECT_FALSE(stack.IsEmpty());
153 149
154 stack.Remove(thread_a_.get()); 150 stack.Remove(worker_a_.get());
155 EXPECT_EQ(0U, stack.Size()); 151 EXPECT_EQ(0U, stack.Size());
156 EXPECT_TRUE(stack.IsEmpty()); 152 EXPECT_TRUE(stack.IsEmpty());
157 153
158 stack.Push(thread_a_.get()); 154 stack.Push(worker_a_.get());
159 EXPECT_EQ(1U, stack.Size()); 155 EXPECT_EQ(1U, stack.Size());
160 EXPECT_FALSE(stack.IsEmpty()); 156 EXPECT_FALSE(stack.IsEmpty());
161 } 157 }
162 158
163 // Verify that Push() DCHECKs when a value is inserted twice. 159 // Verify that Push() DCHECKs when a value is inserted twice.
164 TEST_F(TaskSchedulerWorkerThreadStackTest, PushTwice) { 160 TEST_F(TaskSchedulerWorkerStackTest, PushTwice) {
165 SchedulerWorkerThreadStack stack; 161 SchedulerWorkerStack stack;
166 stack.Push(thread_a_.get()); 162 stack.Push(worker_a_.get());
167 EXPECT_DCHECK_DEATH({ stack.Push(thread_a_.get()); }, ""); 163 EXPECT_DCHECK_DEATH({ stack.Push(worker_a_.get()); }, "");
168 } 164 }
169 165
170 } // namespace internal 166 } // namespace internal
171 } // namespace base 167 } // namespace base
OLDNEW
« no previous file with comments | « base/task_scheduler/scheduler_worker_stack.cc ('k') | base/task_scheduler/scheduler_worker_thread.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698