1 /* 2 * Copyright 2017 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 SkExecutor_DEFINED 9 #define SkExecutor_DEFINED 10 11 #include <functional> 12 #include <memory> 13 #include "include/core/SkTypes.h" 14 15 class SK_API SkExecutor { 16 public: 17 virtual ~SkExecutor(); 18 19 // Create a thread pool SkExecutor with a fixed thread count, by default the number of cores. 20 static std::unique_ptr<SkExecutor> MakeFIFOThreadPool(int threads = 0, 21 bool allowBorrowing = true); 22 static std::unique_ptr<SkExecutor> MakeLIFOThreadPool(int threads = 0, 23 bool allowBorrowing = true); 24 25 // There is always a default SkExecutor available by calling SkExecutor::GetDefault(). 26 static SkExecutor& GetDefault(); 27 static void SetDefault(SkExecutor*); // Does not take ownership. Not thread safe. 28 29 // Add work to execute. 30 virtual void add(std::function<void(void)>) = 0; 31 32 // If it makes sense for this executor, use this thread to execute work for a little while. borrow()33 virtual void borrow() {} 34 35 protected: 36 SkExecutor() = default; 37 SkExecutor(const SkExecutor&) = delete; 38 SkExecutor& operator=(const SkExecutor&) = delete; 39 }; 40 41 #endif//SkExecutor_DEFINED 42