core_manager.h 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. // Copyright 2018 yuzu emulator team
  2. // Licensed under GPLv2 or any later version
  3. // Refer to the license.txt file included.
  4. #pragma once
  5. #include <atomic>
  6. #include <cstddef>
  7. #include <memory>
  8. #include "common/common_types.h"
  9. namespace Kernel {
  10. class GlobalScheduler;
  11. class PhysicalCore;
  12. } // namespace Kernel
  13. namespace Core {
  14. class System;
  15. }
  16. namespace Core::Timing {
  17. class CoreTiming;
  18. }
  19. namespace Core::Memory {
  20. class Memory;
  21. }
  22. namespace Core {
  23. constexpr unsigned NUM_CPU_CORES{4};
  24. class CoreManager {
  25. public:
  26. CoreManager(System& system, std::size_t core_index);
  27. ~CoreManager();
  28. void RunLoop(bool tight_loop = true);
  29. void SingleStep();
  30. void PrepareReschedule();
  31. bool IsMainCore() const {
  32. return core_index == 0;
  33. }
  34. std::size_t CoreIndex() const {
  35. return core_index;
  36. }
  37. private:
  38. void Reschedule();
  39. Kernel::GlobalScheduler& global_scheduler;
  40. Kernel::PhysicalCore& physical_core;
  41. Timing::CoreTiming& core_timing;
  42. std::atomic<bool> reschedule_pending = false;
  43. std::size_t core_index;
  44. };
  45. } // namespace Core