| Index: net/disk_cache/simple/simple_backend_impl.cc
|
| diff --git a/net/disk_cache/simple/simple_backend_impl.cc b/net/disk_cache/simple/simple_backend_impl.cc
|
| index 8cf592aa48dddc0a56d81a011c78966ae674a14a..f11c26666b6d17376aba2d592cec7945d2fde5a5 100644
|
| --- a/net/disk_cache/simple/simple_backend_impl.cc
|
| +++ b/net/disk_cache/simple/simple_backend_impl.cc
|
| @@ -15,6 +15,7 @@
|
| #include "base/bind.h"
|
| #include "base/callback.h"
|
| #include "base/files/file_util.h"
|
| +#include "base/lazy_instance.h"
|
| #include "base/location.h"
|
| #include "base/metrics/field_trial.h"
|
| #include "base/metrics/histogram.h"
|
| @@ -57,11 +58,9 @@ const char kThreadNamePrefix[] = "SimpleCache";
|
| // Maximum fraction of the cache that one entry can consume.
|
| const int kMaxFileRatio = 8;
|
|
|
| -// A global sequenced worker pool to use for launching all tasks.
|
| -SequencedWorkerPool* g_sequenced_worker_pool = NULL;
|
| -
|
| -void MaybeCreateSequencedWorkerPool() {
|
| - if (!g_sequenced_worker_pool) {
|
| +class LeakySequencedWorkerPool {
|
| + public:
|
| + LeakySequencedWorkerPool() {
|
| int max_worker_threads = kDefaultMaxWorkerThreads;
|
|
|
| const std::string thread_count_field_trial =
|
| @@ -71,11 +70,27 @@ void MaybeCreateSequencedWorkerPool() {
|
| std::max(1, std::atoi(thread_count_field_trial.c_str()));
|
| }
|
|
|
| - g_sequenced_worker_pool = new SequencedWorkerPool(max_worker_threads,
|
| - kThreadNamePrefix);
|
| - g_sequenced_worker_pool->AddRef(); // Leak it.
|
| + sequenced_worker_pool_ = new SequencedWorkerPool(max_worker_threads,
|
| + kThreadNamePrefix);
|
| + }
|
| +
|
| + void FlushForTesting() {
|
| + sequenced_worker_pool_->FlushForTesting();
|
| + }
|
| +
|
| + scoped_refptr<base::TaskRunner> GetTaskRunner() {
|
| + return sequenced_worker_pool_->GetTaskRunnerWithShutdownBehavior(
|
| + SequencedWorkerPool::CONTINUE_ON_SHUTDOWN);
|
| }
|
| -}
|
| +
|
| + private:
|
| + scoped_refptr<SequencedWorkerPool> sequenced_worker_pool_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(LeakySequencedWorkerPool);
|
| +};
|
| +
|
| +base::LazyInstance<LeakySequencedWorkerPool>::Leaky g_sequenced_worker_pool =
|
| + LAZY_INSTANCE_INITIALIZER;
|
|
|
| bool g_fd_limit_histogram_has_been_populated = false;
|
|
|
| @@ -245,10 +260,7 @@ SimpleBackendImpl::~SimpleBackendImpl() {
|
| }
|
|
|
| int SimpleBackendImpl::Init(const CompletionCallback& completion_callback) {
|
| - MaybeCreateSequencedWorkerPool();
|
| -
|
| - worker_pool_ = g_sequenced_worker_pool->GetTaskRunnerWithShutdownBehavior(
|
| - SequencedWorkerPool::CONTINUE_ON_SHUTDOWN);
|
| + worker_pool_ = g_sequenced_worker_pool.Get().GetTaskRunner();
|
|
|
| index_.reset(new SimpleIndex(
|
| base::ThreadTaskRunnerHandle::Get(),
|
| @@ -733,9 +745,9 @@ void SimpleBackendImpl::DoomEntriesComplete(
|
| callback.Run(result);
|
| }
|
|
|
| +// static
|
| void SimpleBackendImpl::FlushWorkerPoolForTesting() {
|
| - if (g_sequenced_worker_pool)
|
| - g_sequenced_worker_pool->FlushForTesting();
|
| + g_sequenced_worker_pool.Get().FlushForTesting();
|
| }
|
|
|
| } // namespace disk_cache
|
|
|