// Copyright (c) 2015 GitHub, Inc. // Use of this source code is governed by the MIT license that can be // found in the LICENSE file. #ifndef ATOM_APP_UV_TASK_RUNNER_H_ #define ATOM_APP_UV_TASK_RUNNER_H_ #include #include "base/callback.h" #include "base/location.h" #include "base/single_thread_task_runner.h" #include "vendor/node/deps/uv/include/uv.h" namespace atom { // TaskRunner implementation that posts tasks into libuv's default loop. class UvTaskRunner : public base::SingleThreadTaskRunner { public: explicit UvTaskRunner(uv_loop_t* loop); ~UvTaskRunner() override; // base::SingleThreadTaskRunner: bool PostDelayedTask(const base::Location& from_here, base::OnceClosure task, base::TimeDelta delay) override; bool RunsTasksInCurrentSequence() const override; bool PostNonNestableDelayedTask( const base::Location& from_here, base::OnceClosure task, base::TimeDelta delay) override; private: static void OnTimeout(uv_timer_t* timer); static void OnClose(uv_handle_t* handle); uv_loop_t* loop_; std::map tasks_; DISALLOW_COPY_AND_ASSIGN(UvTaskRunner); }; } // namespace atom #endif // ATOM_APP_UV_TASK_RUNNER_H_