core_cpu.h 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  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 <condition_variable>
  7. #include <cstddef>
  8. #include <memory>
  9. #include <mutex>
  10. #include "common/common_types.h"
  11. namespace Kernel {
  12. class GlobalScheduler;
  13. class PhysicalCore;
  14. } // namespace Kernel
  15. namespace Core {
  16. class System;
  17. }
  18. namespace Core::Timing {
  19. class CoreTiming;
  20. }
  21. namespace Memory {
  22. class Memory;
  23. }
  24. namespace Core {
  25. constexpr unsigned NUM_CPU_CORES{4};
  26. class Cpu {
  27. public:
  28. Cpu(System& system, std::size_t core_index);
  29. ~Cpu();
  30. void RunLoop(bool tight_loop = true);
  31. void SingleStep();
  32. void PrepareReschedule();
  33. bool IsMainCore() const {
  34. return core_index == 0;
  35. }
  36. std::size_t CoreIndex() const {
  37. return core_index;
  38. }
  39. private:
  40. void Reschedule();
  41. Kernel::GlobalScheduler& global_scheduler;
  42. Kernel::PhysicalCore& physical_core;
  43. Timing::CoreTiming& core_timing;
  44. std::atomic<bool> reschedule_pending = false;
  45. std::size_t core_index;
  46. };
  47. } // namespace Core