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.h52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/core/cpu_manager.h b/src/core/cpu_manager.h
new file mode 100644
index 000000000..5371d448e
--- /dev/null
+++ b/src/core/cpu_manager.h
@@ -0,0 +1,52 @@
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 <map>
9#include <memory>
10#include <thread>
11
12namespace Core {
13
14class CoreManager;
15class System;
16
17class CpuManager {
18public:
19 explicit CpuManager(System& system);
20 CpuManager(const CpuManager&) = delete;
21 CpuManager(CpuManager&&) = delete;
22
23 ~CpuManager();
24
25 CpuManager& operator=(const CpuManager&) = delete;
26 CpuManager& operator=(CpuManager&&) = delete;
27
28 void Initialize();
29 void Shutdown();
30
31 CoreManager& GetCoreManager(std::size_t index);
32 const CoreManager& GetCoreManager(std::size_t index) const;
33
34 CoreManager& GetCurrentCoreManager();
35 const CoreManager& GetCurrentCoreManager() const;
36
37 std::size_t GetActiveCoreIndex() const {
38 return active_core;
39 }
40
41 void RunLoop(bool tight_loop);
42
43private:
44 static constexpr std::size_t NUM_CPU_CORES = 4;
45
46 std::array<std::unique_ptr<CoreManager>, NUM_CPU_CORES> core_managers;
47 std::size_t active_core{}; ///< Active core, only used in single thread mode
48
49 System& system;
50};
51
52} // namespace Core