42619d8df2
Review URL: https://codereview.appspot.com/6858101 git-svn-id: http://skia.googlecode.com/svn/trunk@6643 2bbb7eff-a529-9590-31e7-b0007b416f81
51 lines
1.1 KiB
C++
51 lines
1.1 KiB
C++
/*
|
|
* Copyright 2012 Google Inc.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license that can be
|
|
* found in the LICENSE file.
|
|
*/
|
|
|
|
#ifndef SkThreadPool_DEFINED
|
|
#define SkThreadPool_DEFINED
|
|
|
|
#include "SkCondVar.h"
|
|
#include "SkTDArray.h"
|
|
#include "SkTInternalLList.h"
|
|
|
|
class SkRunnable;
|
|
class SkThread;
|
|
|
|
class SkThreadPool {
|
|
|
|
public:
|
|
/**
|
|
* Create a threadpool with exactly count (>=0) threads.
|
|
*/
|
|
explicit SkThreadPool(int count);
|
|
~SkThreadPool();
|
|
|
|
/**
|
|
* Queues up an SkRunnable to run when a thread is available, or immediately if
|
|
* count is 0. NULL is a safe no-op. Does not take ownership.
|
|
*/
|
|
void add(SkRunnable*);
|
|
|
|
private:
|
|
struct LinkedRunnable {
|
|
// Unowned pointer.
|
|
SkRunnable* fRunnable;
|
|
|
|
private:
|
|
SK_DECLARE_INTERNAL_LLIST_INTERFACE(LinkedRunnable);
|
|
};
|
|
|
|
SkTInternalLList<LinkedRunnable> fQueue;
|
|
SkCondVar fReady;
|
|
SkTDArray<SkThread*> fThreads;
|
|
bool fDone;
|
|
|
|
static void Loop(void*); // Static because we pass in this.
|
|
};
|
|
|
|
#endif
|