summaryrefslogtreecommitdiff
path: root/src/core/cpu_manager.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/cpu_manager.h')
-rw-r--r--src/core/cpu_manager.h50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/core/cpu_manager.h b/src/core/cpu_manager.h
new file mode 100644
index 000000000..feb619e1b
--- /dev/null
+++ b/src/core/cpu_manager.h
@@ -0,0 +1,50 @@
1// Copyright 2018 yuzu emulator team
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#pragma once
6
7#include <array>
8#include <memory>
9
10namespace Core {
11
12class CoreManager;
13class System;
14
15class CpuManager {
16public:
17 explicit CpuManager(System& system);
18 CpuManager(const CpuManager&) = delete;
19 CpuManager(CpuManager&&) = delete;
20
21 ~CpuManager();
22
23 CpuManager& operator=(const CpuManager&) = delete;
24 CpuManager& operator=(CpuManager&&) = delete;
25
26 void Initialize();
27 void Shutdown();
28
29 CoreManager& GetCoreManager(std::size_t index);
30 const CoreManager& GetCoreManager(std::size_t index) const;
31
32 CoreManager& GetCurrentCoreManager();
33 const CoreManager& GetCurrentCoreManager() const;
34
35 std::size_t GetActiveCoreIndex() const {
36 return active_core;
37 }
38
39 void RunLoop(bool tight_loop);
40
41private:
42 static constexpr std::size_t NUM_CPU_CORES = 4;
43
44 std::array<std::unique_ptr<CoreManager>, NUM_CPU_CORES> core_managers;
45 std::size_t active_core{}; ///< Active core, only used in single thread mode
46
47 System& system;
48};
49
50} // namespace Core