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

Unified Diff: base/task_scheduler/scheduler_worker_thread_unittest.cc

Issue 1903103007: TaskScheduler: Make SchedulerWorkerThread own its delegate. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@sched_2b_remove_utils
Patch Set: rebase Created 4 years, 8 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « base/task_scheduler/scheduler_worker_thread_stack_unittest.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/task_scheduler/scheduler_worker_thread_unittest.cc
diff --git a/base/task_scheduler/scheduler_worker_thread_unittest.cc b/base/task_scheduler/scheduler_worker_thread_unittest.cc
index dd414d0a6426ad0f9e6f9a3484c8910cc6cdf5bd..9e9e28862572ead1422520821f43215291440082 100644
--- a/base/task_scheduler/scheduler_worker_thread_unittest.cc
+++ b/base/task_scheduler/scheduler_worker_thread_unittest.cc
@@ -27,16 +27,17 @@ namespace {
const size_t kNumSequencesPerTest = 150;
// The test parameter is the number of Tasks per Sequence returned by GetWork().
-class TaskSchedulerWorkerThreadTest : public testing::TestWithParam<size_t>,
- public SchedulerWorkerThread::Delegate {
+class TaskSchedulerWorkerThreadTest : public testing::TestWithParam<size_t> {
protected:
TaskSchedulerWorkerThreadTest()
: main_entry_called_(true, false),
num_get_work_cv_(lock_.CreateConditionVariable()) {}
void SetUp() override {
- worker_thread_ = SchedulerWorkerThread::CreateSchedulerWorkerThread(
- ThreadPriority::NORMAL, this, &task_tracker_);
+ worker_thread_ = SchedulerWorkerThread::Create(
+ ThreadPriority::NORMAL,
+ WrapUnique(new TestSchedulerWorkerThreadDelegate(this)),
+ &task_tracker_);
ASSERT_TRUE(worker_thread_);
main_entry_called_.Wait();
}
@@ -83,74 +84,85 @@ class TaskSchedulerWorkerThreadTest : public testing::TestWithParam<size_t>,
std::unique_ptr<SchedulerWorkerThread> worker_thread_;
private:
- // SchedulerWorkerThread::Delegate:
- void OnMainEntry() override {
- // Without this |auto_lock|, OnMainEntry() could be called twice without
- // generating an error.
- AutoSchedulerLock auto_lock(lock_);
- EXPECT_FALSE(main_entry_called_.IsSignaled());
- main_entry_called_.Signal();
- }
-
- scoped_refptr<Sequence> GetWork(
- SchedulerWorkerThread* worker_thread) override {
- EXPECT_EQ(worker_thread_.get(), worker_thread);
-
- {
- AutoSchedulerLock auto_lock(lock_);
-
- // Increment the number of times that this method has been called.
- ++num_get_work_;
- num_get_work_cv_->Signal();
-
- // Verify that this method isn't called more times than expected.
- EXPECT_LE(num_get_work_, max_get_work_);
-
- // Check if a Sequence should be returned.
- if (num_sequences_to_create_ == 0)
- return nullptr;
- --num_sequences_to_create_;
+ class TestSchedulerWorkerThreadDelegate
+ : public SchedulerWorkerThread::Delegate {
+ public:
+ TestSchedulerWorkerThreadDelegate(TaskSchedulerWorkerThreadTest* outer)
+ : outer_(outer) {}
+
+ // SchedulerWorkerThread::Delegate:
+ void OnMainEntry() override {
+ // Without synchronization, OnMainEntry() could be called twice without
+ // generating an error.
+ AutoSchedulerLock auto_lock(outer_->lock_);
+ EXPECT_FALSE(outer_->main_entry_called_.IsSignaled());
+ outer_->main_entry_called_.Signal();
}
- // Create a Sequence with TasksPerSequence() Tasks.
- scoped_refptr<Sequence> sequence(new Sequence);
- for (size_t i = 0; i < TasksPerSequence(); ++i) {
- std::unique_ptr<Task> task(new Task(
- FROM_HERE, Bind(&TaskSchedulerWorkerThreadTest::RunTaskCallback,
- Unretained(this)),
- TaskTraits(), TimeTicks()));
- EXPECT_TRUE(task_tracker_.WillPostTask(task.get()));
- sequence->PushTask(std::move(task));
+ scoped_refptr<Sequence> GetWork(
+ SchedulerWorkerThread* worker_thread) override {
+ EXPECT_EQ(outer_->worker_thread_.get(), worker_thread);
+
+ {
+ AutoSchedulerLock auto_lock(outer_->lock_);
+
+ // Increment the number of times that this method has been called.
+ ++outer_->num_get_work_;
+ outer_->num_get_work_cv_->Signal();
+
+ // Verify that this method isn't called more times than expected.
+ EXPECT_LE(outer_->num_get_work_, outer_->max_get_work_);
+
+ // Check if a Sequence should be returned.
+ if (outer_->num_sequences_to_create_ == 0)
+ return nullptr;
+ --outer_->num_sequences_to_create_;
+ }
+
+ // Create a Sequence with TasksPerSequence() Tasks.
+ scoped_refptr<Sequence> sequence(new Sequence);
+ for (size_t i = 0; i < outer_->TasksPerSequence(); ++i) {
+ std::unique_ptr<Task> task(new Task(
+ FROM_HERE, Bind(&TaskSchedulerWorkerThreadTest::RunTaskCallback,
+ Unretained(outer_)),
+ TaskTraits(), TimeTicks()));
+ EXPECT_TRUE(outer_->task_tracker_.WillPostTask(task.get()));
+ sequence->PushTask(std::move(task));
+ }
+
+ {
+ // Add the Sequence to the vector of created Sequences.
+ AutoSchedulerLock auto_lock(outer_->lock_);
+ outer_->created_sequences_.push_back(sequence);
+ }
+
+ return sequence;
}
- {
- // Add the Sequence to the vector of created Sequences.
- AutoSchedulerLock auto_lock(lock_);
- created_sequences_.push_back(sequence);
+ // This override verifies that |sequence| contains the expected number of
+ // Tasks and adds it to |enqueued_sequences_|. Unlike a normal
+ // EnqueueSequence implementation, it doesn't reinsert |sequence| into a
+ // queue for further execution.
+ void ReEnqueueSequence(scoped_refptr<Sequence> sequence) override {
+ EXPECT_GT(outer_->TasksPerSequence(), 1U);
+
+ // Verify that |sequence| contains TasksPerSequence() - 1 Tasks.
+ for (size_t i = 0; i < outer_->TasksPerSequence() - 1; ++i) {
+ EXPECT_TRUE(sequence->PeekTask());
+ sequence->PopTask();
+ }
+ EXPECT_FALSE(sequence->PeekTask());
+
+ // Add |sequence| to |re_enqueued_sequences_|.
+ AutoSchedulerLock auto_lock(outer_->lock_);
+ outer_->re_enqueued_sequences_.push_back(std::move(sequence));
+ EXPECT_LE(outer_->re_enqueued_sequences_.size(),
+ outer_->created_sequences_.size());
}
- return sequence;
- }
-
- // This override verifies that |sequence| contains the expected number of
- // Tasks and adds it to |re_enqueued_sequences_|. Unlike a normal
- // ReEnqueueSequence implementation, it doesn't reinsert |sequence| into a
- // queue for further execution.
- void ReEnqueueSequence(scoped_refptr<Sequence> sequence) override {
- EXPECT_GT(TasksPerSequence(), 1U);
-
- // Verify that |sequence| contains TasksPerSequence() - 1 Tasks.
- for (size_t i = 0; i < TasksPerSequence() - 1; ++i) {
- EXPECT_TRUE(sequence->PeekTask());
- sequence->PopTask();
- }
- EXPECT_FALSE(sequence->PeekTask());
-
- // Add |sequence| to |re_enqueued_sequences_|.
- AutoSchedulerLock auto_lock(lock_);
- re_enqueued_sequences_.push_back(std::move(sequence));
- EXPECT_LE(re_enqueued_sequences_.size(), created_sequences_.size());
- }
+ private:
+ TaskSchedulerWorkerThreadTest* outer_;
+ };
void RunTaskCallback() {
AutoSchedulerLock auto_lock(lock_);
« no previous file with comments | « base/task_scheduler/scheduler_worker_thread_stack_unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698