022cfa258d
We like a LIFO default thread pool in tools like DM for better memory/time locality... the bots use less memory this way, and generally run faster. But most use cases want a FIFO queue, so that they can get going on the next parts of early work while later work is still running. This splits the implementation into one using SkTArray and pop_back for LIFO, and a new one using std::deque and pop_front for FIFO. Change-Id: Ief203b6869a00f1f8084019431a781d15fc63750 Reviewed-on: https://skia-review.googlesource.com/41849 Commit-Queue: Mike Klein <mtklein@chromium.org> Commit-Queue: Brian Osman <brianosman@google.com> Reviewed-by: Yuqian Li <liyuqian@google.com> Reviewed-by: Brian Osman <brianosman@google.com>
34 lines
1002 B
C++
34 lines
1002 B
C++
/*
|
|
* Copyright 2017 Google Inc.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license that can be
|
|
* found in the LICENSE file.
|
|
*/
|
|
|
|
#ifndef SkExecutor_DEFINED
|
|
#define SkExecutor_DEFINED
|
|
|
|
#include <functional>
|
|
#include <memory>
|
|
|
|
class SkExecutor {
|
|
public:
|
|
virtual ~SkExecutor();
|
|
|
|
// Create a thread pool SkExecutor with a fixed thread count, by default the number of cores.
|
|
static std::unique_ptr<SkExecutor> MakeFIFOThreadPool(int threads = 0);
|
|
static std::unique_ptr<SkExecutor> MakeLIFOThreadPool(int threads = 0);
|
|
|
|
// There is always a default SkExecutor available by calling SkExecutor::GetDefault().
|
|
static SkExecutor& GetDefault();
|
|
static void SetDefault(SkExecutor*); // Does not take ownership. Not thread safe.
|
|
|
|
// Add work to execute.
|
|
virtual void add(std::function<void(void)>) = 0;
|
|
|
|
// If it makes sense for this executor, use this thread to execute work for a little while.
|
|
virtual void borrow() {}
|
|
};
|
|
|
|
#endif//SkExecutor_DEFINED
|