diff options
Diffstat (limited to 'src/core/SkTaskGroup.h')
-rw-r--r-- | src/core/SkTaskGroup.h | 46 |
1 files changed, 1 insertions, 45 deletions
diff --git a/src/core/SkTaskGroup.h b/src/core/SkTaskGroup.h index d1daa44494..e6c36651fd 100644 --- a/src/core/SkTaskGroup.h +++ b/src/core/SkTaskGroup.h @@ -34,7 +34,7 @@ public: void add(std::function<void(void)> fn); // Add a batch of N tasks, all calling fn with different arguments. - void batch(std::function<void(int)> fn, int N); + void batch(int N, std::function<void(int)> fn); // Block until all Tasks previously add()ed to this SkTaskGroup have run. // You may safely reuse this SkTaskGroup after wait() returns. @@ -47,48 +47,4 @@ private: // Returns best estimate of number of CPU cores available to use. int sk_num_cores(); -int sk_parallel_for_thread_count(); - -// Call f(i) for i in [0, end). -template <typename Func> -void sk_parallel_for(int end, const Func& f) { - if (end <= 0) { return; } - - struct Chunk { - const Func* f; - int start, end; - }; - - // TODO(mtklein): this chunking strategy could probably use some tuning. - int max_chunks = sk_num_cores() * 2, - stride = (end + max_chunks - 1 ) / max_chunks, - nchunks = (end + stride - 1 ) / stride; - SkASSERT(nchunks <= max_chunks); - -#if defined(GOOGLE3) - // Stack frame size is limited in GOOGLE3. - SkAutoSTMalloc<512, Chunk> chunks(nchunks); -#else - // With the chunking strategy above this won't malloc until we have a machine with >512 cores. - SkAutoSTMalloc<1024, Chunk> chunks(nchunks); -#endif - - for (int i = 0; i < nchunks; i++) { - Chunk& c = chunks[i]; - c.f = &f; - c.start = i * stride; - c.end = SkTMin(c.start + stride, end); - SkASSERT(c.start < c.end); // Nothing will break if start >= end, but it's a wasted chunk. - } - - Chunk* chunkBase = chunks.get(); - auto run_chunk = [chunkBase](int i) { - Chunk& c = chunkBase[i]; - for (int i = c.start; i < c.end; i++) { - (*c.f)(i); - } - }; - SkTaskGroup().batch(run_chunk, nchunks); -} - #endif//SkTaskGroup_DEFINED |