blob: 3d124facecfcd6cc7176ea06bcfd3e5b8e10eba1 [file] [log] [blame]
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "base/test/sequenced_worker_pool_owner.h"
#include "base/location.h"
#include "base/message_loop.h"
namespace base {
SequencedWorkerPoolOwner::SequencedWorkerPoolOwner(
size_t max_threads,
const std::string& thread_name_prefix)
: constructor_message_loop_(MessageLoop::current()),
pool_(new SequencedWorkerPool(
max_threads, thread_name_prefix,
ALLOW_THIS_IN_INITIALIZER_LIST(this))),
has_work_call_count_(0) {}
SequencedWorkerPoolOwner::~SequencedWorkerPoolOwner() {
pool_ = NULL;
MessageLoop::current()->Run();
}
const scoped_refptr<SequencedWorkerPool>& SequencedWorkerPoolOwner::pool() {
return pool_;
}
void SequencedWorkerPoolOwner::SetWillWaitForShutdownCallback(
const Closure& callback) {
will_wait_for_shutdown_callback_ = callback;
}
int SequencedWorkerPoolOwner::has_work_call_count() const {
AutoLock lock(has_work_lock_);
return has_work_call_count_;
}
void SequencedWorkerPoolOwner::OnHasWork() {
AutoLock lock(has_work_lock_);
++has_work_call_count_;
}
void SequencedWorkerPoolOwner::WillWaitForShutdown() {
if (!will_wait_for_shutdown_callback_.is_null()) {
will_wait_for_shutdown_callback_.Run();
}
}
void SequencedWorkerPoolOwner::OnDestruct() {
constructor_message_loop_->PostTask(
FROM_HERE,
constructor_message_loop_->QuitClosure());
}
} // namespace base