Home | History | Annotate | Download | only in utils
      1 /*
      2  * Copyright 2014 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 SkTaskGroup_DEFINED
      9 #define SkTaskGroup_DEFINED
     10 
     11 #include "SkTypes.h"
     12 #include "SkRunnable.h"
     13 
     14 class SkTaskGroup : SkNoncopyable {
     15 public:
     16     // Create one of these in main() to enable SkTaskGroups globally.
     17     struct Enabler : SkNoncopyable {
     18         explicit Enabler(int threads = 0);  // Default is system-reported core count.
     19         ~Enabler();
     20     };
     21 
     22     SkTaskGroup();
     23     ~SkTaskGroup() { this->wait(); }
     24 
     25     // Add a task to this SkTaskGroup.  It will likely run() on another thread.
     26     void add(SkRunnable*);
     27 
     28     // Block until all Tasks previously add()ed to this SkTaskGroup have run().
     29     // You may safely reuse this SkTaskGroup after wait() returns.
     30     void wait();
     31 
     32 private:
     33     /*atomic*/ int32_t fPending;
     34 };
     35 
     36 #endif//SkTaskGroup_DEFINED
     37