1 /* 2 * Copyright 2012 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #ifndef SkThreadPool_DEFINED 9 #define SkThreadPool_DEFINED 10 11 #include "SkCondVar.h" 12 #include "SkTDArray.h" 13 #include "SkTInternalLList.h" 14 15 class SkRunnable; 16 class SkThread; 17 18 class SkThreadPool { 19 20 public: 21 /** 22 * Create a threadpool with exactly count (>=0) threads. 23 */ 24 explicit SkThreadPool(int count); 25 ~SkThreadPool(); 26 27 /** 28 * Queues up an SkRunnable to run when a thread is available, or immediately if 29 * count is 0. NULL is a safe no-op. Does not take ownership. 30 */ 31 void add(SkRunnable*); 32 33 private: 34 struct LinkedRunnable { 35 // Unowned pointer. 36 SkRunnable* fRunnable; 37 38 private: 39 SK_DECLARE_INTERNAL_LLIST_INTERFACE(LinkedRunnable); 40 }; 41 42 SkTInternalLList<LinkedRunnable> fQueue; 43 SkCondVar fReady; 44 SkTDArray<SkThread*> fThreads; 45 bool fDone; 46 47 static void Loop(void*); // Static because we pass in this. 48 }; 49 50 #endif 51