Home | History | Annotate | Download | only in test
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef BASE_THREADING_SEQUENCED_WORKER_POOL_UNITTEST_H_
      6 #define BASE_THREADING_SEQUENCED_WORKER_POOL_UNITTEST_H_
      7 
      8 #include <cstddef>
      9 #include <string>
     10 
     11 #include "base/basictypes.h"
     12 #include "base/callback.h"
     13 #include "base/compiler_specific.h"
     14 #include "base/memory/ref_counted.h"
     15 #include "base/synchronization/lock.h"
     16 #include "base/threading/sequenced_worker_pool.h"
     17 
     18 namespace base {
     19 
     20 class MessageLoop;
     21 
     22 // Wrapper around SequencedWorkerPool for testing that blocks destruction
     23 // until the pool is actually destroyed.  This is so that a
     24 // SequencedWorkerPool from one test doesn't outlive its test and cause
     25 // strange races with other tests that touch global stuff (like histograms and
     26 // logging).  However, this requires that nothing else on this thread holds a
     27 // ref to the pool when the SequencedWorkerPoolOwner is destroyed.
     28 class SequencedWorkerPoolOwner : public SequencedWorkerPool::TestingObserver {
     29  public:
     30   SequencedWorkerPoolOwner(size_t max_threads,
     31                            const std::string& thread_name_prefix);
     32 
     33   virtual ~SequencedWorkerPoolOwner();
     34 
     35   // Don't change the returned pool's testing observer.
     36   const scoped_refptr<SequencedWorkerPool>& pool();
     37 
     38   // The given callback will be called on WillWaitForShutdown().
     39   void SetWillWaitForShutdownCallback(const Closure& callback);
     40 
     41   int has_work_call_count() const;
     42 
     43  private:
     44   // SequencedWorkerPool::TestingObserver implementation.
     45   virtual void OnHasWork() OVERRIDE;
     46   virtual void WillWaitForShutdown() OVERRIDE;
     47   virtual void OnDestruct() OVERRIDE;
     48 
     49   MessageLoop* const constructor_message_loop_;
     50   scoped_refptr<SequencedWorkerPool> pool_;
     51   Closure will_wait_for_shutdown_callback_;
     52 
     53   mutable Lock has_work_lock_;
     54   int has_work_call_count_;
     55 
     56   DISALLOW_COPY_AND_ASSIGN(SequencedWorkerPoolOwner);
     57 };
     58 
     59 }  // namespace base
     60 
     61 #endif  // BASE_THREADING_SEQUENCED_WORKER_POOL_UNITTEST_H_
     62