summaryrefslogtreecommitdiff
path: root/src/core/core_manager.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/core_manager.h')
-rw-r--r--src/core/core_manager.h65
1 files changed, 65 insertions, 0 deletions
diff --git a/src/core/core_manager.h b/src/core/core_manager.h
new file mode 100644
index 000000000..7bc9679c1
--- /dev/null
+++ b/src/core/core_manager.h
@@ -0,0 +1,65 @@
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 <atomic>
8#include <condition_variable>
9#include <cstddef>
10#include <memory>
11#include <mutex>
12#include "common/common_types.h"
13
14namespace Kernel {
15class GlobalScheduler;
16class PhysicalCore;
17} // namespace Kernel
18
19namespace Core {
20class System;
21}
22
23namespace Core::Timing {
24class CoreTiming;
25}
26
27namespace Memory {
28class Memory;
29}
30
31namespace Core {
32
33constexpr unsigned NUM_CPU_CORES{4};
34
35class CoreManager {
36public:
37 CoreManager(System& system, std::size_t core_index);
38 ~CoreManager();
39
40 void RunLoop(bool tight_loop = true);
41
42 void SingleStep();
43
44 void PrepareReschedule();
45
46 bool IsMainCore() const {
47 return core_index == 0;
48 }
49
50 std::size_t CoreIndex() const {
51 return core_index;
52 }
53
54private:
55 void Reschedule();
56
57 Kernel::GlobalScheduler& global_scheduler;
58 Kernel::PhysicalCore& physical_core;
59 Timing::CoreTiming& core_timing;
60
61 std::atomic<bool> reschedule_pending = false;
62 std::size_t core_index;
63};
64
65} // namespace Core