Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / third_party / skia / src / utils / SkTaskGroup.h
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