aboutsummaryrefslogtreecommitdiffhomepage
path: root/include/core/SkExecutor.h
diff options
context:
space:
mode:
authorGravatar Mike Klein <mtklein@chromium.org>2017-02-21 22:53:16 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-02-22 16:17:39 +0000
commit384b90af5ccdbb071f32e20b382f41351b2a0b69 (patch)
tree572dfe34b3cc547b8f12a379f0a5aa134095d7d3 /include/core/SkExecutor.h
parentd44dd4c35660863db8baeedd90fd401ed921db8a (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.h32
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