uv_task_runner.h 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. // Copyright (c) 2015 GitHub, Inc.
  2. // Use of this source code is governed by the MIT license that can be
  3. // found in the LICENSE file.
  4. #ifndef ELECTRON_SHELL_APP_UV_TASK_RUNNER_H_
  5. #define ELECTRON_SHELL_APP_UV_TASK_RUNNER_H_
  6. #include <map>
  7. #include "base/functional/callback.h"
  8. #include "base/memory/raw_ptr.h"
  9. #include "base/task/single_thread_task_runner.h"
  10. #include "shell/common/node_bindings.h"
  11. namespace base {
  12. class Location;
  13. class TimeDelta;
  14. } // namespace base
  15. namespace electron {
  16. // TaskRunner implementation that posts tasks into libuv's default loop.
  17. class UvTaskRunner : public base::SingleThreadTaskRunner {
  18. public:
  19. explicit UvTaskRunner(uv_loop_t* loop);
  20. // disable copy
  21. UvTaskRunner(const UvTaskRunner&) = delete;
  22. UvTaskRunner& operator=(const UvTaskRunner&) = delete;
  23. // base::SingleThreadTaskRunner:
  24. bool PostDelayedTask(const base::Location& from_here,
  25. base::OnceClosure task,
  26. base::TimeDelta delay) override;
  27. bool RunsTasksInCurrentSequence() const override;
  28. bool PostNonNestableDelayedTask(const base::Location& from_here,
  29. base::OnceClosure task,
  30. base::TimeDelta delay) override;
  31. private:
  32. ~UvTaskRunner() override;
  33. raw_ptr<uv_loop_t> loop_;
  34. std::map<UvHandle<uv_timer_t>, base::OnceClosure, UvHandleCompare> tasks_;
  35. };
  36. } // namespace electron
  37. #endif // ELECTRON_SHELL_APP_UV_TASK_RUNNER_H_