Core: Refactor CpuCoreManager to CpuManager and Cpu to Core Manager.
This commit instends on better naming the new purpose of this classes.
This commit is contained in:
		| @@ -15,14 +15,14 @@ add_library(core STATIC | ||||
|     constants.h | ||||
|     core.cpp | ||||
|     core.h | ||||
|     core_cpu.cpp | ||||
|     core_cpu.h | ||||
|     core_manager.cpp | ||||
|     core_manager.h | ||||
|     core_timing.cpp | ||||
|     core_timing.h | ||||
|     core_timing_util.cpp | ||||
|     core_timing_util.h | ||||
|     cpu_core_manager.cpp | ||||
|     cpu_core_manager.h | ||||
|     cpu_manager.cpp | ||||
|     cpu_manager.h | ||||
|     crypto/aes_util.cpp | ||||
|     crypto/aes_util.h | ||||
|     crypto/encryption_layer.cpp | ||||
|   | ||||
| @@ -10,7 +10,7 @@ | ||||
| #include "common/microprofile.h" | ||||
| #include "core/arm/dynarmic/arm_dynarmic.h" | ||||
| #include "core/core.h" | ||||
| #include "core/core_cpu.h" | ||||
| #include "core/core_manager.h" | ||||
| #include "core/core_timing.h" | ||||
| #include "core/core_timing_util.h" | ||||
| #include "core/gdbstub/gdbstub.h" | ||||
|   | ||||
| @@ -11,9 +11,9 @@ | ||||
| #include "common/string_util.h" | ||||
| #include "core/arm/exclusive_monitor.h" | ||||
| #include "core/core.h" | ||||
| #include "core/core_cpu.h" | ||||
| #include "core/core_manager.h" | ||||
| #include "core/core_timing.h" | ||||
| #include "core/cpu_core_manager.h" | ||||
| #include "core/cpu_manager.h" | ||||
| #include "core/file_sys/bis_factory.h" | ||||
| #include "core/file_sys/card_image.h" | ||||
| #include "core/file_sys/mode.h" | ||||
| @@ -114,14 +114,14 @@ FileSys::VirtualFile GetGameFileFromPath(const FileSys::VirtualFilesystem& vfs, | ||||
| struct System::Impl { | ||||
|     explicit Impl(System& system) | ||||
|         : kernel{system}, fs_controller{system}, memory{system}, | ||||
|           cpu_core_manager{system}, reporter{system}, applet_manager{system} {} | ||||
|           cpu_manager{system}, reporter{system}, applet_manager{system} {} | ||||
|  | ||||
|     Cpu& CurrentCpuCore() { | ||||
|         return cpu_core_manager.GetCurrentCore(); | ||||
|     CoreManager& CurrentCoreManager() { | ||||
|         return cpu_manager.GetCurrentCoreManager(); | ||||
|     } | ||||
|  | ||||
|     Kernel::PhysicalCore& CurrentPhysicalCore() { | ||||
|         const auto i = cpu_core_manager.GetCurrentCoreIndex(); | ||||
|         const auto i = cpu_manager.GetActiveCoreIndex(); | ||||
|         return kernel.PhysicalCore(i); | ||||
|     } | ||||
|  | ||||
| @@ -132,7 +132,7 @@ struct System::Impl { | ||||
|     ResultStatus RunLoop(bool tight_loop) { | ||||
|         status = ResultStatus::Success; | ||||
|  | ||||
|         cpu_core_manager.RunLoop(tight_loop); | ||||
|         cpu_manager.RunLoop(tight_loop); | ||||
|  | ||||
|         return status; | ||||
|     } | ||||
| @@ -142,7 +142,7 @@ struct System::Impl { | ||||
|  | ||||
|         core_timing.Initialize(); | ||||
|         kernel.Initialize(); | ||||
|         cpu_core_manager.Initialize(); | ||||
|         cpu_manager.Initialize(); | ||||
|  | ||||
|         const auto current_time = std::chrono::duration_cast<std::chrono::seconds>( | ||||
|             std::chrono::system_clock::now().time_since_epoch()); | ||||
| @@ -281,7 +281,7 @@ struct System::Impl { | ||||
|         gpu_core.reset(); | ||||
|  | ||||
|         // Close all CPU/threading state | ||||
|         cpu_core_manager.Shutdown(); | ||||
|         cpu_manager.Shutdown(); | ||||
|  | ||||
|         // Shutdown kernel and core timing | ||||
|         kernel.Shutdown(); | ||||
| @@ -351,7 +351,7 @@ struct System::Impl { | ||||
|     std::unique_ptr<Tegra::GPU> gpu_core; | ||||
|     std::unique_ptr<Hardware::InterruptManager> interrupt_manager; | ||||
|     Memory::Memory memory; | ||||
|     CpuCoreManager cpu_core_manager; | ||||
|     CpuManager cpu_manager; | ||||
|     bool is_powered_on = false; | ||||
|     bool exit_lock = false; | ||||
|  | ||||
| @@ -386,12 +386,12 @@ struct System::Impl { | ||||
| System::System() : impl{std::make_unique<Impl>(*this)} {} | ||||
| System::~System() = default; | ||||
|  | ||||
| Cpu& System::CurrentCpuCore() { | ||||
|     return impl->CurrentCpuCore(); | ||||
| CoreManager& System::CurrentCoreManager() { | ||||
|     return impl->CurrentCoreManager(); | ||||
| } | ||||
|  | ||||
| const Cpu& System::CurrentCpuCore() const { | ||||
|     return impl->CurrentCpuCore(); | ||||
| const CoreManager& System::CurrentCoreManager() const { | ||||
|     return impl->CurrentCoreManager(); | ||||
| } | ||||
|  | ||||
| System::ResultStatus System::RunLoop(bool tight_loop) { | ||||
| @@ -415,13 +415,11 @@ bool System::IsPoweredOn() const { | ||||
| } | ||||
|  | ||||
| void System::PrepareReschedule() { | ||||
|     CurrentCpuCore().PrepareReschedule(); | ||||
|     CurrentCoreManager().PrepareReschedule(); | ||||
| } | ||||
|  | ||||
| void System::PrepareReschedule(const u32 core_index) { | ||||
|     if (core_index < GlobalScheduler().CpuCoresCount()) { | ||||
|         CpuCore(core_index).PrepareReschedule(); | ||||
|     } | ||||
|     impl->kernel.PrepareReschedule(core_index); | ||||
| } | ||||
|  | ||||
| PerfStatsResults System::GetAndResetPerfStats() { | ||||
| @@ -445,7 +443,7 @@ const ARM_Interface& System::CurrentArmInterface() const { | ||||
| } | ||||
|  | ||||
| std::size_t System::CurrentCoreIndex() const { | ||||
|     return CurrentCpuCore().CoreIndex(); | ||||
|     return impl->cpu_manager.GetActiveCoreIndex(); | ||||
| } | ||||
|  | ||||
| Kernel::Scheduler& System::CurrentScheduler() { | ||||
| @@ -490,13 +488,13 @@ const ARM_Interface& System::ArmInterface(std::size_t core_index) const { | ||||
|     return impl->GetPhysicalCore(core_index).ArmInterface(); | ||||
| } | ||||
|  | ||||
| Cpu& System::CpuCore(std::size_t core_index) { | ||||
|     return impl->cpu_core_manager.GetCore(core_index); | ||||
| CoreManager& System::GetCoreManager(std::size_t core_index) { | ||||
|     return impl->cpu_manager.GetCoreManager(core_index); | ||||
| } | ||||
|  | ||||
| const Cpu& System::CpuCore(std::size_t core_index) const { | ||||
| const CoreManager& System::GetCoreManager(std::size_t core_index) const { | ||||
|     ASSERT(core_index < NUM_CPU_CORES); | ||||
|     return impl->cpu_core_manager.GetCore(core_index); | ||||
|     return impl->cpu_manager.GetCoreManager(core_index); | ||||
| } | ||||
|  | ||||
| ExclusiveMonitor& System::Monitor() { | ||||
|   | ||||
| @@ -93,7 +93,7 @@ class Memory; | ||||
| namespace Core { | ||||
|  | ||||
| class ARM_Interface; | ||||
| class Cpu; | ||||
| class CoreManager; | ||||
| class ExclusiveMonitor; | ||||
| class FrameLimiter; | ||||
| class PerfStats; | ||||
| @@ -218,10 +218,10 @@ public: | ||||
|     const ARM_Interface& ArmInterface(std::size_t core_index) const; | ||||
|  | ||||
|     /// Gets a CPU interface to the CPU core with the specified index | ||||
|     Cpu& CpuCore(std::size_t core_index); | ||||
|     CoreManager& GetCoreManager(std::size_t core_index); | ||||
|  | ||||
|     /// Gets a CPU interface to the CPU core with the specified index | ||||
|     const Cpu& CpuCore(std::size_t core_index) const; | ||||
|     const CoreManager& GetCoreManager(std::size_t core_index) const; | ||||
|  | ||||
|     /// Gets a reference to the exclusive monitor | ||||
|     ExclusiveMonitor& Monitor(); | ||||
| @@ -364,10 +364,10 @@ private: | ||||
|     System(); | ||||
|  | ||||
|     /// Returns the currently running CPU core | ||||
|     Cpu& CurrentCpuCore(); | ||||
|     CoreManager& CurrentCoreManager(); | ||||
|  | ||||
|     /// Returns the currently running CPU core | ||||
|     const Cpu& CurrentCpuCore() const; | ||||
|     const CoreManager& CurrentCoreManager() const; | ||||
|  | ||||
|     /** | ||||
|      * Initialize the emulated system. | ||||
|   | ||||
| @@ -12,7 +12,7 @@ | ||||
| #include "core/arm/exclusive_monitor.h" | ||||
| #include "core/arm/unicorn/arm_unicorn.h" | ||||
| #include "core/core.h" | ||||
| #include "core/core_cpu.h" | ||||
| #include "core/core_manager.h" | ||||
| #include "core/core_timing.h" | ||||
| #include "core/hle/kernel/kernel.h" | ||||
| #include "core/hle/kernel/physical_core.h" | ||||
| @@ -23,15 +23,15 @@ | ||||
| 
 | ||||
| namespace Core { | ||||
| 
 | ||||
| Cpu::Cpu(System& system, std::size_t core_index) | ||||
| CoreManager::CoreManager(System& system, std::size_t core_index) | ||||
|     : global_scheduler{system.GlobalScheduler()}, | ||||
|       physical_core{system.Kernel().PhysicalCore(core_index)}, core_timing{system.CoreTiming()}, | ||||
|       core_index{core_index} { | ||||
| } | ||||
| 
 | ||||
| Cpu::~Cpu() = default; | ||||
| CoreManager::~CoreManager() = default; | ||||
| 
 | ||||
| void Cpu::RunLoop(bool tight_loop) { | ||||
| void CoreManager::RunLoop(bool tight_loop) { | ||||
|     Reschedule(); | ||||
| 
 | ||||
|     // If we don't have a currently active thread then don't execute instructions,
 | ||||
| @@ -51,15 +51,15 @@ void Cpu::RunLoop(bool tight_loop) { | ||||
|     Reschedule(); | ||||
| } | ||||
| 
 | ||||
| void Cpu::SingleStep() { | ||||
| void CoreManager::SingleStep() { | ||||
|     return RunLoop(false); | ||||
| } | ||||
| 
 | ||||
| void Cpu::PrepareReschedule() { | ||||
| void CoreManager::PrepareReschedule() { | ||||
|     physical_core.Stop(); | ||||
| } | ||||
| 
 | ||||
| void Cpu::Reschedule() { | ||||
| void CoreManager::Reschedule() { | ||||
|     // Lock the global kernel mutex when we manipulate the HLE state
 | ||||
|     std::lock_guard lock(HLE::g_hle_lock); | ||||
| 
 | ||||
| @@ -32,10 +32,10 @@ namespace Core { | ||||
| 
 | ||||
| constexpr unsigned NUM_CPU_CORES{4}; | ||||
| 
 | ||||
| class Cpu { | ||||
| class CoreManager { | ||||
| public: | ||||
|     Cpu(System& system, std::size_t core_index); | ||||
|     ~Cpu(); | ||||
|     CoreManager(System& system, std::size_t core_index); | ||||
|     ~CoreManager(); | ||||
| 
 | ||||
|     void RunLoop(bool tight_loop = true); | ||||
| 
 | ||||
| @@ -1,52 +0,0 @@ | ||||
| // Copyright 2018 yuzu emulator team | ||||
| // Licensed under GPLv2 or any later version | ||||
| // Refer to the license.txt file included. | ||||
|  | ||||
| #pragma once | ||||
|  | ||||
| #include <array> | ||||
| #include <map> | ||||
| #include <memory> | ||||
| #include <thread> | ||||
|  | ||||
| namespace Core { | ||||
|  | ||||
| class Cpu; | ||||
| class System; | ||||
|  | ||||
| class CpuCoreManager { | ||||
| public: | ||||
|     explicit CpuCoreManager(System& system); | ||||
|     CpuCoreManager(const CpuCoreManager&) = delete; | ||||
|     CpuCoreManager(CpuCoreManager&&) = delete; | ||||
|  | ||||
|     ~CpuCoreManager(); | ||||
|  | ||||
|     CpuCoreManager& operator=(const CpuCoreManager&) = delete; | ||||
|     CpuCoreManager& operator=(CpuCoreManager&&) = delete; | ||||
|  | ||||
|     void Initialize(); | ||||
|     void Shutdown(); | ||||
|  | ||||
|     Cpu& GetCore(std::size_t index); | ||||
|     const Cpu& GetCore(std::size_t index) const; | ||||
|  | ||||
|     Cpu& GetCurrentCore(); | ||||
|     const Cpu& GetCurrentCore() const; | ||||
|  | ||||
|     std::size_t GetCurrentCoreIndex() const { | ||||
|         return active_core; | ||||
|     } | ||||
|  | ||||
|     void RunLoop(bool tight_loop); | ||||
|  | ||||
| private: | ||||
|     static constexpr std::size_t NUM_CPU_CORES = 4; | ||||
|  | ||||
|     std::array<std::unique_ptr<Cpu>, NUM_CPU_CORES> cores; | ||||
|     std::size_t active_core{}; ///< Active core, only used in single thread mode | ||||
|  | ||||
|     System& system; | ||||
| }; | ||||
|  | ||||
| } // namespace Core | ||||
| @@ -5,56 +5,49 @@ | ||||
| #include "common/assert.h" | ||||
| #include "core/arm/exclusive_monitor.h" | ||||
| #include "core/core.h" | ||||
| #include "core/core_cpu.h" | ||||
| #include "core/core_manager.h" | ||||
| #include "core/core_timing.h" | ||||
| #include "core/cpu_core_manager.h" | ||||
| #include "core/cpu_manager.h" | ||||
| #include "core/gdbstub/gdbstub.h" | ||||
| #include "core/settings.h" | ||||
| 
 | ||||
| namespace Core { | ||||
| namespace { | ||||
| void RunCpuCore(const System& system, Cpu& cpu_state) { | ||||
|     while (system.IsPoweredOn()) { | ||||
|         cpu_state.RunLoop(true); | ||||
|     } | ||||
| } | ||||
| } // Anonymous namespace
 | ||||
| 
 | ||||
| CpuCoreManager::CpuCoreManager(System& system) : system{system} {} | ||||
| CpuCoreManager::~CpuCoreManager() = default; | ||||
| CpuManager::CpuManager(System& system) : system{system} {} | ||||
| CpuManager::~CpuManager() = default; | ||||
| 
 | ||||
| void CpuCoreManager::Initialize() { | ||||
| void CpuManager::Initialize() { | ||||
| 
 | ||||
|     for (std::size_t index = 0; index < cores.size(); ++index) { | ||||
|         cores[index] = std::make_unique<Cpu>(system, index); | ||||
|     for (std::size_t index = 0; index < core_managers.size(); ++index) { | ||||
|         core_managers[index] = std::make_unique<CoreManager>(system, index); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void CpuCoreManager::Shutdown() { | ||||
|     for (auto& cpu_core : cores) { | ||||
| void CpuManager::Shutdown() { | ||||
|     for (auto& cpu_core : core_managers) { | ||||
|         cpu_core.reset(); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| Cpu& CpuCoreManager::GetCore(std::size_t index) { | ||||
|     return *cores.at(index); | ||||
| CoreManager& CpuManager::GetCoreManager(std::size_t index) { | ||||
|     return *core_managers.at(index); | ||||
| } | ||||
| 
 | ||||
| const Cpu& CpuCoreManager::GetCore(std::size_t index) const { | ||||
|     return *cores.at(index); | ||||
| const CoreManager& CpuManager::GetCoreManager(std::size_t index) const { | ||||
|     return *core_managers.at(index); | ||||
| } | ||||
| 
 | ||||
| Cpu& CpuCoreManager::GetCurrentCore() { | ||||
| CoreManager& CpuManager::GetCurrentCoreManager() { | ||||
|     // Otherwise, use single-threaded mode active_core variable
 | ||||
|     return *cores[active_core]; | ||||
|     return *core_managers[active_core]; | ||||
| } | ||||
| 
 | ||||
| const Cpu& CpuCoreManager::GetCurrentCore() const { | ||||
| const CoreManager& CpuManager::GetCurrentCoreManager() const { | ||||
|     // Otherwise, use single-threaded mode active_core variable
 | ||||
|     return *cores[active_core]; | ||||
|     return *core_managers[active_core]; | ||||
| } | ||||
| 
 | ||||
| void CpuCoreManager::RunLoop(bool tight_loop) { | ||||
| void CpuManager::RunLoop(bool tight_loop) { | ||||
|     if (GDBStub::IsServerEnabled()) { | ||||
|         GDBStub::HandlePacket(); | ||||
| 
 | ||||
| @@ -77,7 +70,7 @@ void CpuCoreManager::RunLoop(bool tight_loop) { | ||||
|         for (active_core = 0; active_core < NUM_CPU_CORES; ++active_core) { | ||||
|             core_timing.SwitchContext(active_core); | ||||
|             if (core_timing.CanCurrentContextRun()) { | ||||
|                 cores[active_core]->RunLoop(tight_loop); | ||||
|                 core_managers[active_core]->RunLoop(tight_loop); | ||||
|             } | ||||
|             keep_running |= core_timing.CanCurrentContextRun(); | ||||
|         } | ||||
							
								
								
									
										52
									
								
								src/core/cpu_manager.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								src/core/cpu_manager.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,52 @@ | ||||
| // Copyright 2018 yuzu emulator team | ||||
| // Licensed under GPLv2 or any later version | ||||
| // Refer to the license.txt file included. | ||||
|  | ||||
| #pragma once | ||||
|  | ||||
| #include <array> | ||||
| #include <map> | ||||
| #include <memory> | ||||
| #include <thread> | ||||
|  | ||||
| namespace Core { | ||||
|  | ||||
| class CoreManager; | ||||
| class System; | ||||
|  | ||||
| class CpuManager { | ||||
| public: | ||||
|     explicit CpuManager(System& system); | ||||
|     CpuManager(const CpuManager&) = delete; | ||||
|     CpuManager(CpuManager&&) = delete; | ||||
|  | ||||
|     ~CpuManager(); | ||||
|  | ||||
|     CpuManager& operator=(const CpuManager&) = delete; | ||||
|     CpuManager& operator=(CpuManager&&) = delete; | ||||
|  | ||||
|     void Initialize(); | ||||
|     void Shutdown(); | ||||
|  | ||||
|     CoreManager& GetCoreManager(std::size_t index); | ||||
|     const CoreManager& GetCoreManager(std::size_t index) const; | ||||
|  | ||||
|     CoreManager& GetCurrentCoreManager(); | ||||
|     const CoreManager& GetCurrentCoreManager() const; | ||||
|  | ||||
|     std::size_t GetActiveCoreIndex() const { | ||||
|         return active_core; | ||||
|     } | ||||
|  | ||||
|     void RunLoop(bool tight_loop); | ||||
|  | ||||
| private: | ||||
|     static constexpr std::size_t NUM_CPU_CORES = 4; | ||||
|  | ||||
|     std::array<std::unique_ptr<CoreManager>, NUM_CPU_CORES> core_managers; | ||||
|     std::size_t active_core{}; ///< Active core, only used in single thread mode | ||||
|  | ||||
|     System& system; | ||||
| }; | ||||
|  | ||||
| } // namespace Core | ||||
| @@ -35,7 +35,7 @@ | ||||
| #include "common/swap.h" | ||||
| #include "core/arm/arm_interface.h" | ||||
| #include "core/core.h" | ||||
| #include "core/core_cpu.h" | ||||
| #include "core/core_manager.h" | ||||
| #include "core/gdbstub/gdbstub.h" | ||||
| #include "core/hle/kernel/process.h" | ||||
| #include "core/hle/kernel/scheduler.h" | ||||
|   | ||||
| @@ -8,7 +8,6 @@ | ||||
| #include "common/assert.h" | ||||
| #include "common/common_types.h" | ||||
| #include "core/core.h" | ||||
| #include "core/core_cpu.h" | ||||
| #include "core/hle/kernel/address_arbiter.h" | ||||
| #include "core/hle/kernel/errors.h" | ||||
| #include "core/hle/kernel/scheduler.h" | ||||
|   | ||||
| @@ -14,7 +14,6 @@ | ||||
| #include "common/logging/log.h" | ||||
| #include "core/arm/arm_interface.h" | ||||
| #include "core/core.h" | ||||
| #include "core/core_cpu.h" | ||||
| #include "core/core_timing.h" | ||||
| #include "core/hle/kernel/kernel.h" | ||||
| #include "core/hle/kernel/process.h" | ||||
|   | ||||
| @@ -15,7 +15,7 @@ | ||||
| #include "common/string_util.h" | ||||
| #include "core/arm/exclusive_monitor.h" | ||||
| #include "core/core.h" | ||||
| #include "core/core_cpu.h" | ||||
| #include "core/core_manager.h" | ||||
| #include "core/core_timing.h" | ||||
| #include "core/core_timing_util.h" | ||||
| #include "core/hle/kernel/address_arbiter.h" | ||||
|   | ||||
| @@ -13,7 +13,6 @@ | ||||
| #include "common/thread_queue_list.h" | ||||
| #include "core/arm/arm_interface.h" | ||||
| #include "core/core.h" | ||||
| #include "core/core_cpu.h" | ||||
| #include "core/core_timing.h" | ||||
| #include "core/core_timing_util.h" | ||||
| #include "core/hle/kernel/errors.h" | ||||
| @@ -356,7 +355,7 @@ void Thread::SetActivity(ThreadActivity value) { | ||||
|         // Set status if not waiting | ||||
|         if (status == ThreadStatus::Ready || status == ThreadStatus::Running) { | ||||
|             SetStatus(ThreadStatus::Paused); | ||||
|             Core::System::GetInstance().CpuCore(processor_id).PrepareReschedule(); | ||||
|             Core::System::GetInstance().PrepareReschedule(processor_id); | ||||
|         } | ||||
|     } else if (status == ThreadStatus::Paused) { | ||||
|         // Ready to reschedule | ||||
|   | ||||
| @@ -7,7 +7,6 @@ | ||||
| #include "common/common_types.h" | ||||
| #include "common/logging/log.h" | ||||
| #include "core/core.h" | ||||
| #include "core/core_cpu.h" | ||||
| #include "core/hle/kernel/kernel.h" | ||||
| #include "core/hle/kernel/object.h" | ||||
| #include "core/hle/kernel/process.h" | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Fernando Sahmkow
					Fernando Sahmkow