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

Unified Diff: base/threading/sequenced_worker_pool_unittest.cc

Issue 9347056: Fix up SequencedWorkerPool in preparation for making it a TaskRunner (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Sync to head Created 8 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « base/threading/sequenced_worker_pool.cc ('k') | content/browser/browser_thread_impl.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/threading/sequenced_worker_pool_unittest.cc
diff --git a/base/threading/sequenced_worker_pool_unittest.cc b/base/threading/sequenced_worker_pool_unittest.cc
index 25736d068f00a6719736f98604eeff9e23c1f142..a7e9e93f86a0b6553b501cabcc80520f3411e332 100644
--- a/base/threading/sequenced_worker_pool_unittest.cc
+++ b/base/threading/sequenced_worker_pool_unittest.cc
@@ -10,6 +10,7 @@
#include "base/synchronization/lock.h"
#include "base/threading/platform_thread.h"
#include "base/threading/sequenced_worker_pool.h"
+#include "base/tracked_objects.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace base {
@@ -143,9 +144,9 @@ class SequencedWorkerPoolTest : public testing::Test,
public SequencedWorkerPool::TestingObserver {
public:
SequencedWorkerPoolTest()
- : pool_(kNumWorkerThreads, "test"),
+ : pool_(new SequencedWorkerPool(kNumWorkerThreads, "test")),
tracker_(new TestTracker) {
- pool_.SetTestingObserver(this);
+ pool_->SetTestingObserver(this);
}
~SequencedWorkerPoolTest() {
}
@@ -153,10 +154,10 @@ class SequencedWorkerPoolTest : public testing::Test,
virtual void SetUp() {
}
virtual void TearDown() {
- pool_.Shutdown();
+ pool_->Shutdown();
}
- SequencedWorkerPool& pool() { return pool_; }
+ const scoped_refptr<SequencedWorkerPool>& pool() { return pool_; }
TestTracker* tracker() { return tracker_.get(); }
// Ensures that the given number of worker threads is created by adding
@@ -178,9 +179,9 @@ class SequencedWorkerPoolTest : public testing::Test,
// workers to be created.
ThreadBlocker blocker;
for (size_t i = 0; i < kNumWorkerThreads; i++) {
- pool().PostWorkerTask(FROM_HERE,
- base::Bind(&TestTracker::BlockTask,
- tracker(), -1, &blocker));
+ pool()->PostWorkerTask(FROM_HERE,
+ base::Bind(&TestTracker::BlockTask,
+ tracker(), -1, &blocker));
}
tracker()->WaitUntilTasksBlocked(kNumWorkerThreads);
@@ -203,8 +204,8 @@ class SequencedWorkerPoolTest : public testing::Test,
before_wait_for_shutdown_.Run();
}
- SequencedWorkerPool pool_;
- scoped_refptr<TestTracker> tracker_;
+ const scoped_refptr<SequencedWorkerPool> pool_;
+ const scoped_refptr<TestTracker> tracker_;
};
// Checks that the given number of entries are in the tasks to complete of
@@ -228,13 +229,13 @@ void EnsureTasksToCompleteCountAndUnblock(scoped_refptr<TestTracker> tracker,
TEST_F(SequencedWorkerPoolTest, NamedTokens) {
const std::string name1("hello");
SequencedWorkerPool::SequenceToken token1 =
- pool().GetNamedSequenceToken(name1);
+ pool()->GetNamedSequenceToken(name1);
- SequencedWorkerPool::SequenceToken token2 = pool().GetSequenceToken();
+ SequencedWorkerPool::SequenceToken token2 = pool()->GetSequenceToken();
const std::string name3("goodbye");
SequencedWorkerPool::SequenceToken token3 =
- pool().GetNamedSequenceToken(name3);
+ pool()->GetNamedSequenceToken(name3);
// All 3 tokens should be different.
EXPECT_FALSE(token1.Equals(token2));
@@ -243,24 +244,24 @@ TEST_F(SequencedWorkerPoolTest, NamedTokens) {
// Requesting the same name again should give the same value.
SequencedWorkerPool::SequenceToken token1again =
- pool().GetNamedSequenceToken(name1);
+ pool()->GetNamedSequenceToken(name1);
EXPECT_TRUE(token1.Equals(token1again));
SequencedWorkerPool::SequenceToken token3again =
- pool().GetNamedSequenceToken(name3);
+ pool()->GetNamedSequenceToken(name3);
EXPECT_TRUE(token3.Equals(token3again));
}
// Tests that posting a bunch of tasks (many more than the number of worker
// threads) runs them all.
TEST_F(SequencedWorkerPoolTest, LotsOfTasks) {
- pool().PostWorkerTask(FROM_HERE,
- base::Bind(&TestTracker::SlowTask, tracker(), 0));
+ pool()->PostWorkerTask(FROM_HERE,
+ base::Bind(&TestTracker::SlowTask, tracker(), 0));
const size_t kNumTasks = 20;
for (size_t i = 1; i < kNumTasks; i++) {
- pool().PostWorkerTask(FROM_HERE,
- base::Bind(&TestTracker::FastTask, tracker(), i));
+ pool()->PostWorkerTask(FROM_HERE,
+ base::Bind(&TestTracker::FastTask, tracker(), i));
}
std::vector<int> result = tracker()->WaitUntilTasksComplete(kNumTasks);
@@ -274,9 +275,9 @@ TEST_F(SequencedWorkerPoolTest, Sequence) {
const size_t kNumBackgroundTasks = kNumWorkerThreads - 1;
ThreadBlocker background_blocker;
for (size_t i = 0; i < kNumBackgroundTasks; i++) {
- pool().PostWorkerTask(FROM_HERE,
- base::Bind(&TestTracker::BlockTask,
- tracker(), i, &background_blocker));
+ pool()->PostWorkerTask(FROM_HERE,
+ base::Bind(&TestTracker::BlockTask,
+ tracker(), i, &background_blocker));
}
tracker()->WaitUntilTasksBlocked(kNumBackgroundTasks);
@@ -285,22 +286,22 @@ TEST_F(SequencedWorkerPoolTest, Sequence) {
// is one worker thread free, the first task will start and then block, and
// the second task should be waiting.
ThreadBlocker blocker;
- SequencedWorkerPool::SequenceToken token1 = pool().GetSequenceToken();
- pool().PostSequencedWorkerTask(
+ SequencedWorkerPool::SequenceToken token1 = pool()->GetSequenceToken();
+ pool()->PostSequencedWorkerTask(
token1, FROM_HERE,
base::Bind(&TestTracker::BlockTask, tracker(), 100, &blocker));
- pool().PostSequencedWorkerTask(
+ pool()->PostSequencedWorkerTask(
token1, FROM_HERE,
base::Bind(&TestTracker::FastTask, tracker(), 101));
EXPECT_EQ(0u, tracker()->WaitUntilTasksComplete(0).size());
// Create another two tasks as above with a different token. These will be
// blocked since there are no slots to run.
- SequencedWorkerPool::SequenceToken token2 = pool().GetSequenceToken();
- pool().PostSequencedWorkerTask(
+ SequencedWorkerPool::SequenceToken token2 = pool()->GetSequenceToken();
+ pool()->PostSequencedWorkerTask(
token2, FROM_HERE,
base::Bind(&TestTracker::FastTask, tracker(), 200));
- pool().PostSequencedWorkerTask(
+ pool()->PostSequencedWorkerTask(
token2, FROM_HERE,
base::Bind(&TestTracker::FastTask, tracker(), 201));
EXPECT_EQ(0u, tracker()->WaitUntilTasksComplete(0).size());
@@ -335,22 +336,22 @@ TEST_F(SequencedWorkerPoolTest, DiscardOnShutdown) {
EnsureAllWorkersCreated();
ThreadBlocker blocker;
for (size_t i = 0; i < kNumWorkerThreads; i++) {
- pool().PostWorkerTask(FROM_HERE,
- base::Bind(&TestTracker::BlockTask,
- tracker(), i, &blocker));
+ pool()->PostWorkerTask(FROM_HERE,
+ base::Bind(&TestTracker::BlockTask,
+ tracker(), i, &blocker));
}
tracker()->WaitUntilTasksBlocked(kNumWorkerThreads);
// Create some tasks with different shutdown modes.
- pool().PostWorkerTaskWithShutdownBehavior(
+ pool()->PostWorkerTaskWithShutdownBehavior(
FROM_HERE,
base::Bind(&TestTracker::FastTask, tracker(), 100),
SequencedWorkerPool::CONTINUE_ON_SHUTDOWN);
- pool().PostWorkerTaskWithShutdownBehavior(
+ pool()->PostWorkerTaskWithShutdownBehavior(
FROM_HERE,
base::Bind(&TestTracker::FastTask, tracker(), 101),
SequencedWorkerPool::SKIP_ON_SHUTDOWN);
- pool().PostWorkerTaskWithShutdownBehavior(
+ pool()->PostWorkerTaskWithShutdownBehavior(
FROM_HERE,
base::Bind(&TestTracker::FastTask, tracker(), 102),
SequencedWorkerPool::BLOCK_SHUTDOWN);
@@ -360,7 +361,7 @@ TEST_F(SequencedWorkerPoolTest, DiscardOnShutdown) {
base::Bind(&EnsureTasksToCompleteCountAndUnblock,
scoped_refptr<TestTracker>(tracker()), 0,
&blocker, kNumWorkerThreads);
- pool().Shutdown();
+ pool()->Shutdown();
std::vector<int> result = tracker()->WaitUntilTasksComplete(4);
@@ -378,7 +379,7 @@ TEST_F(SequencedWorkerPoolTest, DiscardOnShutdown) {
TEST_F(SequencedWorkerPoolTest, ContinueOnShutdown) {
EnsureAllWorkersCreated();
ThreadBlocker blocker;
- pool().PostWorkerTaskWithShutdownBehavior(
+ pool()->PostWorkerTaskWithShutdownBehavior(
FROM_HERE,
base::Bind(&TestTracker::BlockTask,
tracker(), 0, &blocker),
@@ -386,13 +387,13 @@ TEST_F(SequencedWorkerPoolTest, ContinueOnShutdown) {
tracker()->WaitUntilTasksBlocked(1);
// This should not block. If this test hangs, it means it failed.
- pool().Shutdown();
+ pool()->Shutdown();
// The task should not have completed yet.
EXPECT_EQ(0u, tracker()->WaitUntilTasksComplete(0).size());
// Posting more tasks should fail.
- EXPECT_FALSE(pool().PostWorkerTaskWithShutdownBehavior(
+ EXPECT_FALSE(pool()->PostWorkerTaskWithShutdownBehavior(
FROM_HERE, base::Bind(&TestTracker::FastTask, tracker(), 0),
SequencedWorkerPool::CONTINUE_ON_SHUTDOWN));
« no previous file with comments | « base/threading/sequenced_worker_pool.cc ('k') | content/browser/browser_thread_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698