| Index: tools/threadpool/ThreadPool.h
|
| diff --git a/include/utils/SkThreadPool.h b/tools/threadpool/ThreadPool.h
|
| similarity index 75%
|
| rename from include/utils/SkThreadPool.h
|
| rename to tools/threadpool/ThreadPool.h
|
| index c99c5c4188a5b636f8213ce655f5138fb28f79a0..a71e36f0a7e3213a257effaafbad8c6939e6aac1 100644
|
| --- a/include/utils/SkThreadPool.h
|
| +++ b/tools/threadpool/ThreadPool.h
|
| @@ -5,11 +5,11 @@
|
| * found in the LICENSE file.
|
| */
|
|
|
| -#ifndef SkThreadPool_DEFINED
|
| -#define SkThreadPool_DEFINED
|
| +#ifndef ThreadPool_DEFINED
|
| +#define ThreadPool_DEFINED
|
|
|
| -#include "SkCondVar.h"
|
| -#include "SkRunnable.h"
|
| +#include "CondVar.h"
|
| +#include "Runnable.h"
|
| #include "SkTDArray.h"
|
| #include "SkTInternalLList.h"
|
| #include "SkThreadUtils.h"
|
| @@ -33,35 +33,35 @@ static inline int num_cores() {
|
| }
|
|
|
| template <typename T>
|
| -class SkTThreadPool {
|
| +class TThreadPool {
|
| public:
|
| /**
|
| * Create a threadpool with count threads, or one thread per core if kThreadPerCore.
|
| */
|
| static const int kThreadPerCore = -1;
|
| - explicit SkTThreadPool(int count);
|
| - ~SkTThreadPool();
|
| + explicit TThreadPool(int count);
|
| + ~TThreadPool();
|
|
|
| /**
|
| - * Queues up an SkRunnable to run when a thread is available, or synchronously if count is 0.
|
| + * Queues up an Runnable to run when a thread is available, or synchronously if count is 0.
|
| * Does not take ownership. NULL is a safe no-op. If T is not void, the runnable will be passed
|
| * a reference to a T on the thread's local stack.
|
| */
|
| - void add(SkTRunnable<T>*);
|
| + void add(TRunnable<T>*);
|
|
|
| /**
|
| * Same as add, but adds the runnable as the very next to run rather than enqueueing it.
|
| */
|
| - void addNext(SkTRunnable<T>*);
|
| + void addNext(TRunnable<T>*);
|
|
|
| /**
|
| - * Block until all added SkRunnables have completed. Once called, calling add() is undefined.
|
| + * Block until all added Runnables have completed. Once called, calling add() is undefined.
|
| */
|
| void wait();
|
|
|
| private:
|
| struct LinkedRunnable {
|
| - SkTRunnable<T>* fRunnable; // Unowned.
|
| + TRunnable<T>* fRunnable; // Unowned.
|
| SK_DECLARE_INTERNAL_LLIST_INTERFACE(LinkedRunnable);
|
| };
|
|
|
| @@ -71,11 +71,11 @@ public:
|
| kHalting_State, // There's no work to do and no thread is busy. All threads can shut down.
|
| };
|
|
|
| - void addSomewhere(SkTRunnable<T>* r,
|
| + void addSomewhere(TRunnable<T>* r,
|
| void (SkTInternalLList<LinkedRunnable>::*)(LinkedRunnable*));
|
|
|
| SkTInternalLList<LinkedRunnable> fQueue;
|
| - SkCondVar fReady;
|
| + CondVar fReady;
|
| SkTDArray<SkThread*> fThreads;
|
| State fState;
|
| int fBusyThreads;
|
| @@ -84,49 +84,49 @@ public:
|
| };
|
|
|
| template <typename T>
|
| -SkTThreadPool<T>::SkTThreadPool(int count) : fState(kRunning_State), fBusyThreads(0) {
|
| +TThreadPool<T>::TThreadPool(int count) : fState(kRunning_State), fBusyThreads(0) {
|
| if (count < 0) {
|
| count = num_cores();
|
| }
|
| - // Create count threads, all running SkTThreadPool::Loop.
|
| + // Create count threads, all running TThreadPool::Loop.
|
| for (int i = 0; i < count; i++) {
|
| - SkThread* thread = SkNEW_ARGS(SkThread, (&SkTThreadPool::Loop, this));
|
| + SkThread* thread = SkNEW_ARGS(SkThread, (&TThreadPool::Loop, this));
|
| *fThreads.append() = thread;
|
| thread->start();
|
| }
|
| }
|
|
|
| template <typename T>
|
| -SkTThreadPool<T>::~SkTThreadPool() {
|
| +TThreadPool<T>::~TThreadPool() {
|
| if (kRunning_State == fState) {
|
| this->wait();
|
| }
|
| }
|
|
|
| -namespace SkThreadPoolPrivate {
|
| +namespace ThreadPoolPrivate {
|
|
|
| template <typename T>
|
| struct ThreadLocal {
|
| - void run(SkTRunnable<T>* r) { r->run(data); }
|
| + void run(TRunnable<T>* r) { r->run(data); }
|
| T data;
|
| };
|
|
|
| template <>
|
| struct ThreadLocal<void> {
|
| - void run(SkTRunnable<void>* r) { r->run(); }
|
| + void run(TRunnable<void>* r) { r->run(); }
|
| };
|
|
|
| -} // namespace SkThreadPoolPrivate
|
| +} // namespace ThreadPoolPrivate
|
|
|
| template <typename T>
|
| -void SkTThreadPool<T>::addSomewhere(SkTRunnable<T>* r,
|
| +void TThreadPool<T>::addSomewhere(TRunnable<T>* r,
|
| void (SkTInternalLList<LinkedRunnable>::* f)(LinkedRunnable*)) {
|
| if (r == NULL) {
|
| return;
|
| }
|
|
|
| if (fThreads.isEmpty()) {
|
| - SkThreadPoolPrivate::ThreadLocal<T> threadLocal;
|
| + ThreadPoolPrivate::ThreadLocal<T> threadLocal;
|
| threadLocal.run(r);
|
| return;
|
| }
|
| @@ -141,18 +141,18 @@ void SkTThreadPool<T>::addSomewhere(SkTRunnable<T>* r,
|
| }
|
|
|
| template <typename T>
|
| -void SkTThreadPool<T>::add(SkTRunnable<T>* r) {
|
| +void TThreadPool<T>::add(TRunnable<T>* r) {
|
| this->addSomewhere(r, &SkTInternalLList<LinkedRunnable>::addToTail);
|
| }
|
|
|
| template <typename T>
|
| -void SkTThreadPool<T>::addNext(SkTRunnable<T>* r) {
|
| +void TThreadPool<T>::addNext(TRunnable<T>* r) {
|
| this->addSomewhere(r, &SkTInternalLList<LinkedRunnable>::addToHead);
|
| }
|
|
|
|
|
| template <typename T>
|
| -void SkTThreadPool<T>::wait() {
|
| +void TThreadPool<T>::wait() {
|
| fReady.lock();
|
| fState = kWaiting_State;
|
| fReady.broadcast();
|
| @@ -167,10 +167,10 @@ void SkTThreadPool<T>::wait() {
|
| }
|
|
|
| template <typename T>
|
| -/*static*/ void SkTThreadPool<T>::Loop(void* arg) {
|
| - // The SkTThreadPool passes itself as arg to each thread as they're created.
|
| - SkTThreadPool<T>* pool = static_cast<SkTThreadPool<T>*>(arg);
|
| - SkThreadPoolPrivate::ThreadLocal<T> threadLocal;
|
| +/*static*/ void TThreadPool<T>::Loop(void* arg) {
|
| + // The TThreadPool passes itself as arg to each thread as they're created.
|
| + TThreadPool<T>* pool = static_cast<TThreadPool<T>*>(arg);
|
| + ThreadPoolPrivate::ThreadLocal<T> threadLocal;
|
|
|
| while (true) {
|
| // We have to be holding the lock to read the queue and to call wait.
|
| @@ -197,7 +197,7 @@ template <typename T>
|
|
|
| pool->fQueue.remove(r);
|
|
|
| - // Having claimed our SkRunnable, we now give up the lock while we run it.
|
| + // Having claimed our Runnable, we now give up the lock while we run it.
|
| // Otherwise, we'd only ever do work on one thread at a time, which rather
|
| // defeats the point of this code.
|
| pool->fBusyThreads++;
|
| @@ -216,6 +216,6 @@ template <typename T>
|
| SkASSERT(false); // Unreachable. The only exit happens when pool->fState is kHalting_State.
|
| }
|
|
|
| -typedef SkTThreadPool<void> SkThreadPool;
|
| +typedef TThreadPool<void> ThreadPool;
|
|
|
| #endif
|
|
|