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