time_manager.h 933 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. // SPDX-FileCopyrightText: Copyright 2020 yuzu Emulator Project
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #pragma once
  4. #include <memory>
  5. #include <mutex>
  6. namespace Core {
  7. class System;
  8. } // namespace Core
  9. namespace Core::Timing {
  10. struct EventType;
  11. } // namespace Core::Timing
  12. namespace Kernel {
  13. class KThread;
  14. /**
  15. * The `TimeManager` takes care of scheduling time events on threads and executes their TimeUp
  16. * method when the event is triggered.
  17. */
  18. class TimeManager {
  19. public:
  20. explicit TimeManager(Core::System& system);
  21. /// Schedule a time event on `timetask` thread that will expire in 'nanoseconds'
  22. void ScheduleTimeEvent(KThread* time_task, s64 nanoseconds);
  23. /// Unschedule an existing time event
  24. void UnscheduleTimeEvent(KThread* thread);
  25. private:
  26. Core::System& system;
  27. std::shared_ptr<Core::Timing::EventType> time_manager_event_type;
  28. std::mutex mutex;
  29. };
  30. } // namespace Kernel