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

Unified Diff: base/task_scheduler/scheduler_worker_unittest.cc

Issue 2427963002: Support FileDescriptorWatcher in TaskScheduler. (Closed)
Patch Set: nacl Created 4 years, 2 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
Index: base/task_scheduler/scheduler_worker_unittest.cc
diff --git a/base/task_scheduler/scheduler_worker_unittest.cc b/base/task_scheduler/scheduler_worker_unittest.cc
index 0d29bcd16c5bd46215e41eb2e9004fbe6db0267c..2838999ce768e0af19f4f82b46582a7f59f09d41 100644
--- a/base/task_scheduler/scheduler_worker_unittest.cc
+++ b/base/task_scheduler/scheduler_worker_unittest.cc
@@ -13,6 +13,7 @@
#include "base/bind_helpers.h"
#include "base/macros.h"
#include "base/memory/ptr_util.h"
+#include "base/message_loop/message_loop.h"
#include "base/synchronization/condition_variable.h"
#include "base/synchronization/waitable_event.h"
#include "base/task_scheduler/scheduler_lock.h"
@@ -61,14 +62,19 @@ class SchedulerWorkerDefaultDelegate : public SchedulerWorker::Delegate {
};
// The test parameter is the number of Tasks per Sequence returned by GetWork().
-class TaskSchedulerWorkerTest : public testing::TestWithParam<size_t> {
+class TaskSchedulerWorkerDoWorkTest : public testing::TestWithParam<size_t> {
protected:
- TaskSchedulerWorkerTest()
- : main_entry_called_(WaitableEvent::ResetPolicy::MANUAL,
+ TaskSchedulerWorkerDoWorkTest()
+ :
+#if defined(OS_POSIX) && !defined(OS_NACL_SFI)
+ task_tracker_(&watch_file_descriptor_message_loop_),
+#endif
+ main_entry_called_(WaitableEvent::ResetPolicy::MANUAL,
WaitableEvent::InitialState::NOT_SIGNALED),
num_get_work_cv_(lock_.CreateConditionVariable()),
worker_set_(WaitableEvent::ResetPolicy::MANUAL,
- WaitableEvent::InitialState::NOT_SIGNALED) {}
+ WaitableEvent::InitialState::NOT_SIGNALED) {
+ }
void SetUp() override {
worker_ = SchedulerWorker::Create(
@@ -123,7 +129,7 @@ class TaskSchedulerWorkerTest : public testing::TestWithParam<size_t> {
private:
class TestSchedulerWorkerDelegate : public SchedulerWorkerDefaultDelegate {
public:
- TestSchedulerWorkerDelegate(TaskSchedulerWorkerTest* outer)
+ TestSchedulerWorkerDelegate(TaskSchedulerWorkerDoWorkTest* outer)
: outer_(outer) {}
~TestSchedulerWorkerDelegate() override {
@@ -168,7 +174,7 @@ class TaskSchedulerWorkerTest : public testing::TestWithParam<size_t> {
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(&TaskSchedulerWorkerTest::RunTaskCallback,
+ FROM_HERE, Bind(&TaskSchedulerWorkerDoWorkTest::RunTaskCallback,
Unretained(outer_)),
TaskTraits(), TimeDelta()));
EXPECT_TRUE(outer_->task_tracker_.WillPostTask(task.get()));
@@ -230,7 +236,7 @@ class TaskSchedulerWorkerTest : public testing::TestWithParam<size_t> {
return expect_did_run_task_with_priority_;
}
- TaskSchedulerWorkerTest* outer_;
+ TaskSchedulerWorkerDoWorkTest* const outer_;
// Synchronizes access to |expect_did_run_task_with_priority_| and
// |expected_task_priority_|.
@@ -250,6 +256,12 @@ class TaskSchedulerWorkerTest : public testing::TestWithParam<size_t> {
EXPECT_LE(num_run_tasks_, created_sequences_.size());
}
+ private:
+#if defined(OS_POSIX) && !defined(OS_NACL_SFI)
+ MessageLoopForIO watch_file_descriptor_message_loop_;
+#endif
+
+ protected:
TaskTracker task_tracker_;
// Synchronizes access to all members below.
@@ -283,12 +295,12 @@ class TaskSchedulerWorkerTest : public testing::TestWithParam<size_t> {
// Signaled after |worker_| is set.
WaitableEvent worker_set_;
- DISALLOW_COPY_AND_ASSIGN(TaskSchedulerWorkerTest);
+ DISALLOW_COPY_AND_ASSIGN(TaskSchedulerWorkerDoWorkTest);
};
// Verify that when GetWork() continuously returns Sequences, all Tasks in these
// Sequences run successfully. The test wakes up the SchedulerWorker once.
-TEST_P(TaskSchedulerWorkerTest, ContinuousWork) {
+TEST_P(TaskSchedulerWorkerDoWorkTest, ContinuousWork) {
// Set GetWork() to return |kNumSequencesPerTest| Sequences before starting to
// return nullptr.
SetNumSequencesToCreate(kNumSequencesPerTest);
@@ -318,7 +330,7 @@ TEST_P(TaskSchedulerWorkerTest, ContinuousWork) {
// Verify that when GetWork() alternates between returning a Sequence and
// returning nullptr, all Tasks in the returned Sequences run successfully. The
// test wakes up the SchedulerWorker once for each Sequence.
-TEST_P(TaskSchedulerWorkerTest, IntermittentWork) {
+TEST_P(TaskSchedulerWorkerDoWorkTest, IntermittentWork) {
for (size_t i = 0; i < kNumSequencesPerTest; ++i) {
// Set GetWork() to return 1 Sequence before starting to return
// nullptr.
@@ -348,10 +360,10 @@ TEST_P(TaskSchedulerWorkerTest, IntermittentWork) {
}
INSTANTIATE_TEST_CASE_P(OneTaskPerSequence,
- TaskSchedulerWorkerTest,
+ TaskSchedulerWorkerDoWorkTest,
::testing::Values(1));
INSTANTIATE_TEST_CASE_P(TwoTasksPerSequence,
- TaskSchedulerWorkerTest,
+ TaskSchedulerWorkerDoWorkTest,
::testing::Values(2));
namespace {
@@ -424,19 +436,38 @@ class ControllableDetachDelegate : public SchedulerWorkerDefaultDelegate {
DISALLOW_COPY_AND_ASSIGN(ControllableDetachDelegate);
};
+class TaskSchedulerWorkerTest : public testing::Test {
+ public:
+ TaskSchedulerWorkerTest()
+#if defined(OS_POSIX) && !defined(OS_NACL_SFI)
+ : task_tracker_(&service_message_loop_)
+#endif
+ {
+ }
+
+#if defined(OS_POSIX) && !defined(OS_NACL_SFI)
+ private:
+ MessageLoopForIO service_message_loop_;
+#endif
+
+ protected:
+ TaskTracker task_tracker_;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(TaskSchedulerWorkerTest);
+};
+
} // namespace
-TEST(TaskSchedulerWorkerTest, WorkerDetaches) {
- TaskTracker task_tracker;
+TEST_F(TaskSchedulerWorkerTest, WorkerDetaches) {
// Will be owned by SchedulerWorker.
ControllableDetachDelegate* delegate =
- new StrictMock<ControllableDetachDelegate>(&task_tracker);
+ new StrictMock<ControllableDetachDelegate>(&task_tracker_);
delegate->set_can_detach(true);
EXPECT_CALL(*delegate, OnMainEntry(_, TimeDelta::Max()));
- std::unique_ptr<SchedulerWorker> worker =
- SchedulerWorker::Create(
- ThreadPriority::NORMAL, WrapUnique(delegate), &task_tracker,
- SchedulerWorker::InitialState::ALIVE);
+ std::unique_ptr<SchedulerWorker> worker = SchedulerWorker::Create(
+ ThreadPriority::NORMAL, WrapUnique(delegate), &task_tracker_,
+ SchedulerWorker::InitialState::ALIVE);
worker->WakeUp();
delegate->WaitForWorkToRun();
Mock::VerifyAndClear(delegate);
@@ -446,17 +477,15 @@ TEST(TaskSchedulerWorkerTest, WorkerDetaches) {
ASSERT_FALSE(worker->ThreadAliveForTesting());
}
-TEST(TaskSchedulerWorkerTest, WorkerDetachesAndWakes) {
- TaskTracker task_tracker;
+TEST_F(TaskSchedulerWorkerTest, WorkerDetachesAndWakes) {
// Will be owned by SchedulerWorker.
ControllableDetachDelegate* delegate =
- new StrictMock<ControllableDetachDelegate>(&task_tracker);
+ new StrictMock<ControllableDetachDelegate>(&task_tracker_);
delegate->set_can_detach(true);
EXPECT_CALL(*delegate, OnMainEntry(_, TimeDelta::Max()));
- std::unique_ptr<SchedulerWorker> worker =
- SchedulerWorker::Create(
- ThreadPriority::NORMAL, WrapUnique(delegate), &task_tracker,
- SchedulerWorker::InitialState::ALIVE);
+ std::unique_ptr<SchedulerWorker> worker = SchedulerWorker::Create(
+ ThreadPriority::NORMAL, WrapUnique(delegate), &task_tracker_,
+ SchedulerWorker::InitialState::ALIVE);
worker->WakeUp();
delegate->WaitForWorkToRun();
Mock::VerifyAndClear(delegate);
@@ -479,15 +508,13 @@ TEST(TaskSchedulerWorkerTest, WorkerDetachesAndWakes) {
worker->JoinForTesting();
}
-TEST(TaskSchedulerWorkerTest, CreateDetached) {
- TaskTracker task_tracker;
+TEST_F(TaskSchedulerWorkerTest, CreateDetached) {
// Will be owned by SchedulerWorker.
ControllableDetachDelegate* delegate =
- new StrictMock<ControllableDetachDelegate>(&task_tracker);
- std::unique_ptr<SchedulerWorker> worker =
- SchedulerWorker::Create(
- ThreadPriority::NORMAL, WrapUnique(delegate), &task_tracker,
- SchedulerWorker::InitialState::DETACHED);
+ new StrictMock<ControllableDetachDelegate>(&task_tracker_);
+ std::unique_ptr<SchedulerWorker> worker = SchedulerWorker::Create(
+ ThreadPriority::NORMAL, WrapUnique(delegate), &task_tracker_,
+ SchedulerWorker::InitialState::DETACHED);
ASSERT_FALSE(worker->ThreadAliveForTesting());
EXPECT_CALL(*delegate, OnMainEntry(worker.get(), TimeDelta::Max()));
worker->WakeUp();
@@ -548,9 +575,7 @@ class ExpectThreadPriorityDelegate : public SchedulerWorkerDefaultDelegate {
} // namespace
-TEST(TaskSchedulerWorkerTest, BumpPriorityOfAliveThreadDuringShutdown) {
- TaskTracker task_tracker;
-
+TEST_F(TaskSchedulerWorkerTest, BumpPriorityOfAliveThreadDuringShutdown) {
std::unique_ptr<ExpectThreadPriorityDelegate> delegate(
new ExpectThreadPriorityDelegate);
ExpectThreadPriorityDelegate* delegate_raw = delegate.get();
@@ -560,7 +585,7 @@ TEST(TaskSchedulerWorkerTest, BumpPriorityOfAliveThreadDuringShutdown) {
: ThreadPriority::NORMAL);
std::unique_ptr<SchedulerWorker> worker = SchedulerWorker::Create(
- ThreadPriority::BACKGROUND, std::move(delegate), &task_tracker,
+ ThreadPriority::BACKGROUND, std::move(delegate), &task_tracker_,
SchedulerWorker::InitialState::ALIVE);
// Verify that the initial thread priority is BACKGROUND (or NORMAL if thread
@@ -570,16 +595,14 @@ TEST(TaskSchedulerWorkerTest, BumpPriorityOfAliveThreadDuringShutdown) {
// Verify that the thread priority is bumped to NORMAL during shutdown.
delegate_raw->SetExpectedThreadPriority(ThreadPriority::NORMAL);
- task_tracker.SetHasShutdownStartedForTesting();
+ task_tracker_.SetHasShutdownStartedForTesting();
worker->WakeUp();
delegate_raw->WaitForPriorityVerifiedInGetWork();
worker->JoinForTesting();
}
-TEST(TaskSchedulerWorkerTest, BumpPriorityOfDetachedThreadDuringShutdown) {
- TaskTracker task_tracker;
-
+TEST_F(TaskSchedulerWorkerTest, BumpPriorityOfDetachedThreadDuringShutdown) {
std::unique_ptr<ExpectThreadPriorityDelegate> delegate(
new ExpectThreadPriorityDelegate);
ExpectThreadPriorityDelegate* delegate_raw = delegate.get();
@@ -587,11 +610,11 @@ TEST(TaskSchedulerWorkerTest, BumpPriorityOfDetachedThreadDuringShutdown) {
// Create a DETACHED thread.
std::unique_ptr<SchedulerWorker> worker = SchedulerWorker::Create(
- ThreadPriority::BACKGROUND, std::move(delegate), &task_tracker,
+ ThreadPriority::BACKGROUND, std::move(delegate), &task_tracker_,
SchedulerWorker::InitialState::DETACHED);
// Pretend that shutdown has started.
- task_tracker.SetHasShutdownStartedForTesting();
+ task_tracker_.SetHasShutdownStartedForTesting();
// Wake up the thread and verify that its priority is NORMAL when
// OnMainEntry() and GetWork() are called.

Powered by Google App Engine
This is Rietveld 408576698