/* * 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 #include #include "SkTypes.h" class SK_API SkExecutor { public: virtual ~SkExecutor(); // Create a thread pool SkExecutor with a fixed thread count, by default the number of cores. static std::unique_ptr MakeFIFOThreadPool(int threads = 0); static std::unique_ptr 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) = 0; // If it makes sense for this executor, use this thread to execute work for a little while. virtual void borrow() {} }; #endif//SkExecutor_DEFINED