summaryrefslogtreecommitdiffstats
path: root/base/threading/sequenced_worker_pool_unittest.cc
diff options
context:
space:
mode:
authormattm@chromium.org <mattm@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-04-11 22:42:29 +0000
committermattm@chromium.org <mattm@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-04-11 22:42:29 +0000
commit497ec467bf9e18cd98675db8a74a170b82f0e755 (patch)
tree9a75392c704e55dc6c2426e247afe3c5e5cff7ef /base/threading/sequenced_worker_pool_unittest.cc
parentfaf06b03994d6a07f9799224d0732daed6919641 (diff)
downloadchromium_src-497ec467bf9e18cd98675db8a74a170b82f0e755.zip
chromium_src-497ec467bf9e18cd98675db8a74a170b82f0e755.tar.gz
chromium_src-497ec467bf9e18cd98675db8a74a170b82f0e755.tar.bz2
Add SequencedWorkerPoolTaskRunner which lets you specify the shutdown behavior.
Update SequencedWorkerPoolSequencedTaskRunner to allow specifying the shutdown behavior too. BUG=122458 TEST=trybots Review URL: http://codereview.chromium.org/10021002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@131860 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/threading/sequenced_worker_pool_unittest.cc')
-rw-r--r--base/threading/sequenced_worker_pool_unittest.cc70
1 files changed, 65 insertions, 5 deletions
diff --git a/base/threading/sequenced_worker_pool_unittest.cc b/base/threading/sequenced_worker_pool_unittest.cc
index dcb9bff..42cf859 100644
--- a/base/threading/sequenced_worker_pool_unittest.cc
+++ b/base/threading/sequenced_worker_pool_unittest.cc
@@ -409,6 +409,12 @@ TEST_F(SequencedWorkerPoolTest, DiscardOnShutdown) {
// Tests that CONTINUE_ON_SHUTDOWN tasks don't block shutdown.
TEST_F(SequencedWorkerPoolTest, ContinueOnShutdown) {
+ scoped_refptr<TaskRunner> runner(pool()->GetTaskRunnerWithShutdownBehavior(
+ SequencedWorkerPool::CONTINUE_ON_SHUTDOWN));
+ scoped_refptr<SequencedTaskRunner> sequenced_runner(
+ pool()->GetSequencedTaskRunnerWithShutdownBehavior(
+ pool()->GetSequenceToken(),
+ SequencedWorkerPool::CONTINUE_ON_SHUTDOWN));
EnsureAllWorkersCreated();
ThreadBlocker blocker;
pool()->PostWorkerTaskWithShutdownBehavior(
@@ -416,7 +422,16 @@ TEST_F(SequencedWorkerPoolTest, ContinueOnShutdown) {
base::Bind(&TestTracker::BlockTask,
tracker(), 0, &blocker),
SequencedWorkerPool::CONTINUE_ON_SHUTDOWN);
- tracker()->WaitUntilTasksBlocked(1);
+ runner->PostTask(
+ FROM_HERE,
+ base::Bind(&TestTracker::BlockTask,
+ tracker(), 1, &blocker));
+ sequenced_runner->PostTask(
+ FROM_HERE,
+ base::Bind(&TestTracker::BlockTask,
+ tracker(), 2, &blocker));
+
+ tracker()->WaitUntilTasksBlocked(3);
// This should not block. If this test hangs, it means it failed.
pool()->Shutdown();
@@ -428,11 +443,15 @@ TEST_F(SequencedWorkerPoolTest, ContinueOnShutdown) {
EXPECT_FALSE(pool()->PostWorkerTaskWithShutdownBehavior(
FROM_HERE, base::Bind(&TestTracker::FastTask, tracker(), 0),
SequencedWorkerPool::CONTINUE_ON_SHUTDOWN));
+ EXPECT_FALSE(runner->PostTask(
+ FROM_HERE, base::Bind(&TestTracker::FastTask, tracker(), 0)));
+ EXPECT_FALSE(sequenced_runner->PostTask(
+ FROM_HERE, base::Bind(&TestTracker::FastTask, tracker(), 0)));
- // Continue the background thread and make sure the task can complete.
- blocker.Unblock(1);
- std::vector<int> result = tracker()->WaitUntilTasksComplete(1);
- EXPECT_EQ(1u, result.size());
+ // Continue the background thread and make sure the tasks can complete.
+ blocker.Unblock(3);
+ std::vector<int> result = tracker()->WaitUntilTasksComplete(3);
+ EXPECT_EQ(3u, result.size());
}
// Ensure all worker threads are created, and then trigger a spurious
@@ -535,6 +554,47 @@ INSTANTIATE_TYPED_TEST_CASE_P(
SequencedWorkerPool, TaskRunnerTest,
SequencedWorkerPoolTaskRunnerTestDelegate);
+class SequencedWorkerPoolTaskRunnerWithShutdownBehaviorTestDelegate {
+ public:
+ SequencedWorkerPoolTaskRunnerWithShutdownBehaviorTestDelegate() {}
+
+ ~SequencedWorkerPoolTaskRunnerWithShutdownBehaviorTestDelegate() {
+ }
+
+ void StartTaskRunner() {
+ pool_owner_.reset(
+ new SequencedWorkerPoolOwner(10, "SequencedWorkerPoolTaskRunnerTest"));
+ task_runner_ = pool_owner_->pool()->GetTaskRunnerWithShutdownBehavior(
+ SequencedWorkerPool::BLOCK_SHUTDOWN);
+ }
+
+ scoped_refptr<TaskRunner> GetTaskRunner() {
+ return task_runner_;
+ }
+
+ void StopTaskRunner() {
+ pool_owner_->pool()->FlushForTesting();
+ pool_owner_->pool()->Shutdown();
+ // Don't reset |pool_owner_| here, as the test may still hold a
+ // reference to the pool.
+ }
+
+ bool TaskRunnerHandlesNonZeroDelays() const {
+ // TODO(akalin): Set this to true once SequencedWorkerPool handles
+ // non-zero delays.
+ return false;
+ }
+
+ private:
+ MessageLoop message_loop_;
+ scoped_ptr<SequencedWorkerPoolOwner> pool_owner_;
+ scoped_refptr<TaskRunner> task_runner_;
+};
+
+INSTANTIATE_TYPED_TEST_CASE_P(
+ SequencedWorkerPoolTaskRunner, TaskRunnerTest,
+ SequencedWorkerPoolTaskRunnerWithShutdownBehaviorTestDelegate);
+
class SequencedWorkerPoolSequencedTaskRunnerTestDelegate {
public:
SequencedWorkerPoolSequencedTaskRunnerTestDelegate() {}