diff options
author | Mike Klein <mtklein@chromium.org> | 2017-02-21 22:53:16 -0500 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-02-22 16:17:39 +0000 |
commit | 384b90af5ccdbb071f32e20b382f41351b2a0b69 (patch) | |
tree | 572dfe34b3cc547b8f12a379f0a5aa134095d7d3 /include/core/SkExecutor.h | |
parent | d44dd4c35660863db8baeedd90fd401ed921db8a (diff) |
SkExecutor
Refactoring to refamiliarize myself with SkTaskGroup and SkThreadPool.
This adds an SkExecutor interface to describe how we use SkThreadPool,
with a global setter and getter for a default instance. Then I rewrote
SkTaskGroup to work with any executor, the global default by default.
I also think I've made the SkTaskGroup::wait() borrow logic clearer
with the addition of SkSemaphore::try_wait(). This lets me keep the
semaphore count and actual count of work in perfect sync.
Change-Id: I6bbdfaeb0e2c3a43daff6192d34bc4a3f7210178
Reviewed-on: https://skia-review.googlesource.com/8836
Reviewed-by: Mike Reed <reed@google.com>
Reviewed-by: Herb Derby <herb@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
Diffstat (limited to 'include/core/SkExecutor.h')
-rw-r--r-- | include/core/SkExecutor.h | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/include/core/SkExecutor.h b/include/core/SkExecutor.h new file mode 100644 index 0000000000..303f9e3f54 --- /dev/null +++ b/include/core/SkExecutor.h @@ -0,0 +1,32 @@ +/* + * 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> MakeThreadPool(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 |