Home | History | Annotate | Download | only in utils
      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