blob: d9e6f597d05b173071acc1254d7045e553431fba [file] [log] [blame]
mtklein406654b2014-09-03 15:34:37 -07001/*
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
14class SkTaskGroup : SkNoncopyable {
15public:
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
32private:
33 /*atomic*/ int32_t fPending;
34};
35
36#endif//SkTaskGroup_DEFINED