summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Lioncash2018-08-31 12:21:34 -0400
committerGravatar Lioncash2018-08-31 16:30:14 -0400
commit4a587b81b285bcd41246329e89591be7cfe37c8a (patch)
tree8eda46d4aac083d23a52223e1a3fc46bc6690a6c /src
parentMerge pull request #1205 from bunnei/improve-rasterizer-cache-2 (diff)
downloadyuzu-4a587b81b285bcd41246329e89591be7cfe37c8a.tar.gz
yuzu-4a587b81b285bcd41246329e89591be7cfe37c8a.tar.xz
yuzu-4a587b81b285bcd41246329e89591be7cfe37c8a.zip
core/core: Replace includes with forward declarations where applicable
The follow-up to e2457418dae19b889b2ad85255bb95d4cd0e4bff, which replaces most of the includes in the core header with forward declarations. This makes it so that if any of the headers the core header was previously including change, then no one will need to rebuild the bulk of the core, due to core.h being quite a prevalent inclusion. This should make turnaround for changes much faster for developers.
Diffstat (limited to 'src')
-rw-r--r--src/core/arm/dynarmic/arm_dynarmic.cpp1
-rw-r--r--src/core/core.cpp19
-rw-r--r--src/core/core.h56
-rw-r--r--src/core/file_sys/savedata_factory.cpp1
-rw-r--r--src/core/file_sys/savedata_factory.h1
-rw-r--r--src/core/hle/kernel/address_arbiter.cpp2
-rw-r--r--src/core/hle/kernel/hle_ipc.cpp1
-rw-r--r--src/core/hle/kernel/server_session.cpp6
-rw-r--r--src/core/hle/kernel/svc.cpp4
-rw-r--r--src/core/hle/kernel/thread.cpp3
-rw-r--r--src/core/hle/service/filesystem/filesystem.h1
-rw-r--r--src/core/loader/deconstructed_rom_directory.cpp1
-rw-r--r--src/core/loader/elf.cpp1
-rw-r--r--src/core/loader/nro.cpp1
-rw-r--r--src/core/loader/nso.cpp1
-rw-r--r--src/core/perf_stats.cpp4
-rw-r--r--src/core/perf_stats.h24
-rw-r--r--src/core/telemetry_session.cpp1
-rw-r--r--src/video_core/engines/maxwell_3d.cpp3
-rw-r--r--src/video_core/rasterizer_cache.h3
-rw-r--r--src/video_core/renderer_opengl/renderer_opengl.cpp2
-rw-r--r--src/yuzu/debugger/wait_tree.cpp20
-rw-r--r--src/yuzu/debugger/wait_tree.h30
-rw-r--r--src/yuzu/game_list.cpp16
-rw-r--r--src/yuzu/game_list.h12
-rw-r--r--src/yuzu/game_list_p.h18
-rw-r--r--src/yuzu/main.cpp9
-rw-r--r--src/yuzu/main.h7
-rw-r--r--src/yuzu_cmd/yuzu.cpp3
29 files changed, 185 insertions, 66 deletions
diff --git a/src/core/arm/dynarmic/arm_dynarmic.cpp b/src/core/arm/dynarmic/arm_dynarmic.cpp
index f96e08212..de44ccebd 100644
--- a/src/core/arm/dynarmic/arm_dynarmic.cpp
+++ b/src/core/arm/dynarmic/arm_dynarmic.cpp
@@ -9,6 +9,7 @@
9#include "common/logging/log.h" 9#include "common/logging/log.h"
10#include "core/arm/dynarmic/arm_dynarmic.h" 10#include "core/arm/dynarmic/arm_dynarmic.h"
11#include "core/core.h" 11#include "core/core.h"
12#include "core/core_cpu.h"
12#include "core/core_timing.h" 13#include "core/core_timing.h"
13#include "core/hle/kernel/process.h" 14#include "core/hle/kernel/process.h"
14#include "core/hle/kernel/svc.h" 15#include "core/hle/kernel/svc.h"
diff --git a/src/core/core.cpp b/src/core/core.cpp
index 75c259068..2cfae18df 100644
--- a/src/core/core.cpp
+++ b/src/core/core.cpp
@@ -2,24 +2,35 @@
2// Licensed under GPLv2 or any later version 2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included. 3// Refer to the license.txt file included.
4 4
5#include <array>
6#include <map>
5#include <memory> 7#include <memory>
8#include <thread>
6#include <utility> 9#include <utility>
10
7#include "common/logging/log.h" 11#include "common/logging/log.h"
8#include "common/string_util.h" 12#include "common/string_util.h"
13#include "core/arm/exclusive_monitor.h"
9#include "core/core.h" 14#include "core/core.h"
15#include "core/core_cpu.h"
10#include "core/core_timing.h" 16#include "core/core_timing.h"
11#include "core/gdbstub/gdbstub.h" 17#include "core/gdbstub/gdbstub.h"
12#include "core/hle/kernel/client_port.h" 18#include "core/hle/kernel/client_port.h"
13#include "core/hle/kernel/kernel.h" 19#include "core/hle/kernel/kernel.h"
14#include "core/hle/kernel/process.h" 20#include "core/hle/kernel/process.h"
21#include "core/hle/kernel/scheduler.h"
15#include "core/hle/kernel/thread.h" 22#include "core/hle/kernel/thread.h"
16#include "core/hle/service/service.h" 23#include "core/hle/service/service.h"
17#include "core/hle/service/sm/controller.h" 24#include "core/hle/service/sm/controller.h"
18#include "core/hle/service/sm/sm.h" 25#include "core/hle/service/sm/sm.h"
19#include "core/loader/loader.h" 26#include "core/loader/loader.h"
27#include "core/perf_stats.h"
20#include "core/settings.h" 28#include "core/settings.h"
29#include "core/telemetry_session.h"
21#include "file_sys/vfs_concat.h" 30#include "file_sys/vfs_concat.h"
22#include "file_sys/vfs_real.h" 31#include "file_sys/vfs_real.h"
32#include "video_core/debug_utils/debug_utils.h"
33#include "video_core/gpu.h"
23#include "video_core/renderer_base.h" 34#include "video_core/renderer_base.h"
24#include "video_core/video_core.h" 35#include "video_core/video_core.h"
25 36
@@ -258,7 +269,7 @@ struct System::Impl {
258 } 269 }
259 } 270 }
260 271
261 PerfStats::Results GetAndResetPerfStats() { 272 PerfStatsResults GetAndResetPerfStats() {
262 return perf_stats.GetAndResetStats(CoreTiming::GetGlobalTimeUs()); 273 return perf_stats.GetAndResetStats(CoreTiming::GetGlobalTimeUs());
263 } 274 }
264 275
@@ -326,7 +337,7 @@ void System::PrepareReschedule() {
326 CurrentCpuCore().PrepareReschedule(); 337 CurrentCpuCore().PrepareReschedule();
327} 338}
328 339
329PerfStats::Results System::GetAndResetPerfStats() { 340PerfStatsResults System::GetAndResetPerfStats() {
330 return impl->GetAndResetPerfStats(); 341 return impl->GetAndResetPerfStats();
331} 342}
332 343
@@ -433,11 +444,11 @@ std::shared_ptr<Tegra::DebugContext> System::GetGPUDebugContext() const {
433 return impl->debug_context; 444 return impl->debug_context;
434} 445}
435 446
436void System::SetFilesystem(FileSys::VirtualFilesystem vfs) { 447void System::SetFilesystem(std::shared_ptr<FileSys::VfsFilesystem> vfs) {
437 impl->virtual_filesystem = std::move(vfs); 448 impl->virtual_filesystem = std::move(vfs);
438} 449}
439 450
440FileSys::VirtualFilesystem System::GetFilesystem() const { 451std::shared_ptr<FileSys::VfsFilesystem> System::GetFilesystem() const {
441 return impl->virtual_filesystem; 452 return impl->virtual_filesystem;
442} 453}
443 454
diff --git a/src/core/core.h b/src/core/core.h
index 984e8f94c..eee1fecc1 100644
--- a/src/core/core.h
+++ b/src/core/core.h
@@ -4,41 +4,55 @@
4 4
5#pragma once 5#pragma once
6 6
7#include <array> 7#include <cstddef>
8#include <map>
9#include <memory> 8#include <memory>
10#include <string> 9#include <string>
11#include <thread> 10
12#include "common/common_types.h" 11#include "common/common_types.h"
13#include "core/arm/exclusive_monitor.h"
14#include "core/core_cpu.h"
15#include "core/hle/kernel/kernel.h"
16#include "core/hle/kernel/object.h" 12#include "core/hle/kernel/object.h"
17#include "core/hle/kernel/scheduler.h"
18#include "core/loader/loader.h"
19#include "core/memory.h"
20#include "core/perf_stats.h"
21#include "core/telemetry_session.h"
22#include "file_sys/vfs_real.h"
23#include "hle/service/filesystem/filesystem.h"
24#include "video_core/debug_utils/debug_utils.h"
25#include "video_core/gpu.h"
26 13
27namespace Core::Frontend { 14namespace Core::Frontend {
28class EmuWindow; 15class EmuWindow;
29} 16} // namespace Core::Frontend
17
18namespace FileSys {
19class VfsFilesystem;
20} // namespace FileSys
21
22namespace Kernel {
23class KernelCore;
24class Process;
25class Scheduler;
26} // namespace Kernel
27
28namespace Loader {
29class AppLoader;
30enum class ResultStatus : u16;
31} // namespace Loader
30 32
31namespace Service::SM { 33namespace Service::SM {
32class ServiceManager; 34class ServiceManager;
33} 35} // namespace Service::SM
36
37namespace Tegra {
38class DebugContext;
39class GPU;
40} // namespace Tegra
34 41
35namespace VideoCore { 42namespace VideoCore {
36class RendererBase; 43class RendererBase;
37} 44} // namespace VideoCore
38 45
39namespace Core { 46namespace Core {
40 47
41class ARM_Interface; 48class ARM_Interface;
49class Cpu;
50class ExclusiveMonitor;
51class FrameLimiter;
52class PerfStats;
53class TelemetrySession;
54
55struct PerfStatsResults;
42 56
43class System { 57class System {
44public: 58public:
@@ -125,7 +139,7 @@ public:
125 void PrepareReschedule(); 139 void PrepareReschedule();
126 140
127 /// Gets and resets core performance statistics 141 /// Gets and resets core performance statistics
128 PerfStats::Results GetAndResetPerfStats(); 142 PerfStatsResults GetAndResetPerfStats();
129 143
130 /// Gets an ARM interface to the CPU core that is currently running 144 /// Gets an ARM interface to the CPU core that is currently running
131 ARM_Interface& CurrentArmInterface(); 145 ARM_Interface& CurrentArmInterface();
@@ -197,9 +211,9 @@ public:
197 211
198 std::shared_ptr<Tegra::DebugContext> GetGPUDebugContext() const; 212 std::shared_ptr<Tegra::DebugContext> GetGPUDebugContext() const;
199 213
200 void SetFilesystem(FileSys::VirtualFilesystem vfs); 214 void SetFilesystem(std::shared_ptr<FileSys::VfsFilesystem> vfs);
201 215
202 FileSys::VirtualFilesystem GetFilesystem() const; 216 std::shared_ptr<FileSys::VfsFilesystem> GetFilesystem() const;
203 217
204private: 218private:
205 System(); 219 System();
diff --git a/src/core/file_sys/savedata_factory.cpp b/src/core/file_sys/savedata_factory.cpp
index 034d3a78f..952bd74b3 100644
--- a/src/core/file_sys/savedata_factory.cpp
+++ b/src/core/file_sys/savedata_factory.cpp
@@ -7,6 +7,7 @@
7#include "common/logging/log.h" 7#include "common/logging/log.h"
8#include "core/core.h" 8#include "core/core.h"
9#include "core/file_sys/savedata_factory.h" 9#include "core/file_sys/savedata_factory.h"
10#include "core/file_sys/vfs.h"
10#include "core/hle/kernel/process.h" 11#include "core/hle/kernel/process.h"
11 12
12namespace FileSys { 13namespace FileSys {
diff --git a/src/core/file_sys/savedata_factory.h b/src/core/file_sys/savedata_factory.h
index 368b36017..c6f9549f0 100644
--- a/src/core/file_sys/savedata_factory.h
+++ b/src/core/file_sys/savedata_factory.h
@@ -8,6 +8,7 @@
8#include <string> 8#include <string>
9#include "common/common_types.h" 9#include "common/common_types.h"
10#include "common/swap.h" 10#include "common/swap.h"
11#include "core/file_sys/vfs.h"
11#include "core/hle/result.h" 12#include "core/hle/result.h"
12 13
13namespace FileSys { 14namespace FileSys {
diff --git a/src/core/hle/kernel/address_arbiter.cpp b/src/core/hle/kernel/address_arbiter.cpp
index 03a954a9f..6657accd5 100644
--- a/src/core/hle/kernel/address_arbiter.cpp
+++ b/src/core/hle/kernel/address_arbiter.cpp
@@ -8,9 +8,11 @@
8#include "common/assert.h" 8#include "common/assert.h"
9#include "common/common_types.h" 9#include "common/common_types.h"
10#include "core/core.h" 10#include "core/core.h"
11#include "core/core_cpu.h"
11#include "core/hle/kernel/errors.h" 12#include "core/hle/kernel/errors.h"
12#include "core/hle/kernel/object.h" 13#include "core/hle/kernel/object.h"
13#include "core/hle/kernel/process.h" 14#include "core/hle/kernel/process.h"
15#include "core/hle/kernel/scheduler.h"
14#include "core/hle/kernel/thread.h" 16#include "core/hle/kernel/thread.h"
15#include "core/hle/result.h" 17#include "core/hle/result.h"
16#include "core/memory.h" 18#include "core/memory.h"
diff --git a/src/core/hle/kernel/hle_ipc.cpp b/src/core/hle/kernel/hle_ipc.cpp
index db7aef766..7264be906 100644
--- a/src/core/hle/kernel/hle_ipc.cpp
+++ b/src/core/hle/kernel/hle_ipc.cpp
@@ -18,6 +18,7 @@
18#include "core/hle/kernel/event.h" 18#include "core/hle/kernel/event.h"
19#include "core/hle/kernel/handle_table.h" 19#include "core/hle/kernel/handle_table.h"
20#include "core/hle/kernel/hle_ipc.h" 20#include "core/hle/kernel/hle_ipc.h"
21#include "core/hle/kernel/kernel.h"
21#include "core/hle/kernel/object.h" 22#include "core/hle/kernel/object.h"
22#include "core/hle/kernel/process.h" 23#include "core/hle/kernel/process.h"
23#include "core/hle/kernel/server_session.h" 24#include "core/hle/kernel/server_session.h"
diff --git a/src/core/hle/kernel/server_session.cpp b/src/core/hle/kernel/server_session.cpp
index 90c9a5aff..aba0cab96 100644
--- a/src/core/hle/kernel/server_session.cpp
+++ b/src/core/hle/kernel/server_session.cpp
@@ -13,6 +13,7 @@
13#include "core/hle/kernel/client_session.h" 13#include "core/hle/kernel/client_session.h"
14#include "core/hle/kernel/handle_table.h" 14#include "core/hle/kernel/handle_table.h"
15#include "core/hle/kernel/hle_ipc.h" 15#include "core/hle/kernel/hle_ipc.h"
16#include "core/hle/kernel/kernel.h"
16#include "core/hle/kernel/process.h" 17#include "core/hle/kernel/process.h"
17#include "core/hle/kernel/server_session.h" 18#include "core/hle/kernel/server_session.h"
18#include "core/hle/kernel/session.h" 19#include "core/hle/kernel/session.h"
@@ -104,11 +105,10 @@ ResultCode ServerSession::HandleSyncRequest(SharedPtr<Thread> thread) {
104 // The ServerSession received a sync request, this means that there's new data available 105 // The ServerSession received a sync request, this means that there's new data available
105 // from its ClientSession, so wake up any threads that may be waiting on a svcReplyAndReceive or 106 // from its ClientSession, so wake up any threads that may be waiting on a svcReplyAndReceive or
106 // similar. 107 // similar.
107
108 auto& handle_table = Core::System::GetInstance().Kernel().HandleTable();
109 Kernel::HLERequestContext context(this); 108 Kernel::HLERequestContext context(this);
110 u32* cmd_buf = (u32*)Memory::GetPointer(thread->GetTLSAddress()); 109 u32* cmd_buf = (u32*)Memory::GetPointer(thread->GetTLSAddress());
111 context.PopulateFromIncomingCommandBuffer(cmd_buf, *Core::CurrentProcess(), handle_table); 110 context.PopulateFromIncomingCommandBuffer(cmd_buf, *Core::CurrentProcess(),
111 kernel.HandleTable());
112 112
113 ResultCode result = RESULT_SUCCESS; 113 ResultCode result = RESULT_SUCCESS;
114 // If the session has been converted to a domain, handle the domain request 114 // If the session has been converted to a domain, handle the domain request
diff --git a/src/core/hle/kernel/svc.cpp b/src/core/hle/kernel/svc.cpp
index 099d1053f..5da71cff0 100644
--- a/src/core/hle/kernel/svc.cpp
+++ b/src/core/hle/kernel/svc.cpp
@@ -12,16 +12,20 @@
12#include "common/logging/log.h" 12#include "common/logging/log.h"
13#include "common/microprofile.h" 13#include "common/microprofile.h"
14#include "common/string_util.h" 14#include "common/string_util.h"
15#include "core/arm/exclusive_monitor.h"
15#include "core/core.h" 16#include "core/core.h"
17#include "core/core_cpu.h"
16#include "core/core_timing.h" 18#include "core/core_timing.h"
17#include "core/hle/kernel/address_arbiter.h" 19#include "core/hle/kernel/address_arbiter.h"
18#include "core/hle/kernel/client_port.h" 20#include "core/hle/kernel/client_port.h"
19#include "core/hle/kernel/client_session.h" 21#include "core/hle/kernel/client_session.h"
20#include "core/hle/kernel/event.h" 22#include "core/hle/kernel/event.h"
21#include "core/hle/kernel/handle_table.h" 23#include "core/hle/kernel/handle_table.h"
24#include "core/hle/kernel/kernel.h"
22#include "core/hle/kernel/mutex.h" 25#include "core/hle/kernel/mutex.h"
23#include "core/hle/kernel/process.h" 26#include "core/hle/kernel/process.h"
24#include "core/hle/kernel/resource_limit.h" 27#include "core/hle/kernel/resource_limit.h"
28#include "core/hle/kernel/scheduler.h"
25#include "core/hle/kernel/shared_memory.h" 29#include "core/hle/kernel/shared_memory.h"
26#include "core/hle/kernel/svc.h" 30#include "core/hle/kernel/svc.h"
27#include "core/hle/kernel/svc_wrap.h" 31#include "core/hle/kernel/svc_wrap.h"
diff --git a/src/core/hle/kernel/thread.cpp b/src/core/hle/kernel/thread.cpp
index 520ea0853..3d10d9af2 100644
--- a/src/core/hle/kernel/thread.cpp
+++ b/src/core/hle/kernel/thread.cpp
@@ -16,6 +16,7 @@
16#include "common/thread_queue_list.h" 16#include "common/thread_queue_list.h"
17#include "core/arm/arm_interface.h" 17#include "core/arm/arm_interface.h"
18#include "core/core.h" 18#include "core/core.h"
19#include "core/core_cpu.h"
19#include "core/core_timing.h" 20#include "core/core_timing.h"
20#include "core/core_timing_util.h" 21#include "core/core_timing_util.h"
21#include "core/hle/kernel/errors.h" 22#include "core/hle/kernel/errors.h"
@@ -23,8 +24,8 @@
23#include "core/hle/kernel/kernel.h" 24#include "core/hle/kernel/kernel.h"
24#include "core/hle/kernel/object.h" 25#include "core/hle/kernel/object.h"
25#include "core/hle/kernel/process.h" 26#include "core/hle/kernel/process.h"
27#include "core/hle/kernel/scheduler.h"
26#include "core/hle/kernel/thread.h" 28#include "core/hle/kernel/thread.h"
27#include "core/hle/lock.h"
28#include "core/hle/result.h" 29#include "core/hle/result.h"
29#include "core/memory.h" 30#include "core/memory.h"
30 31
diff --git a/src/core/hle/service/filesystem/filesystem.h b/src/core/hle/service/filesystem/filesystem.h
index d88a66825..9ba0e2eab 100644
--- a/src/core/hle/service/filesystem/filesystem.h
+++ b/src/core/hle/service/filesystem/filesystem.h
@@ -7,6 +7,7 @@
7#include <memory> 7#include <memory>
8#include "common/common_types.h" 8#include "common/common_types.h"
9#include "core/file_sys/directory.h" 9#include "core/file_sys/directory.h"
10#include "core/file_sys/vfs.h"
10#include "core/hle/result.h" 11#include "core/hle/result.h"
11 12
12namespace FileSys { 13namespace FileSys {
diff --git a/src/core/loader/deconstructed_rom_directory.cpp b/src/core/loader/deconstructed_rom_directory.cpp
index a53fa6e00..921b899e2 100644
--- a/src/core/loader/deconstructed_rom_directory.cpp
+++ b/src/core/loader/deconstructed_rom_directory.cpp
@@ -11,6 +11,7 @@
11#include "core/file_sys/control_metadata.h" 11#include "core/file_sys/control_metadata.h"
12#include "core/file_sys/romfs_factory.h" 12#include "core/file_sys/romfs_factory.h"
13#include "core/gdbstub/gdbstub.h" 13#include "core/gdbstub/gdbstub.h"
14#include "core/hle/kernel/kernel.h"
14#include "core/hle/kernel/process.h" 15#include "core/hle/kernel/process.h"
15#include "core/hle/kernel/resource_limit.h" 16#include "core/hle/kernel/resource_limit.h"
16#include "core/hle/service/filesystem/filesystem.h" 17#include "core/hle/service/filesystem/filesystem.h"
diff --git a/src/core/loader/elf.cpp b/src/core/loader/elf.cpp
index 3702a8478..120e1e133 100644
--- a/src/core/loader/elf.cpp
+++ b/src/core/loader/elf.cpp
@@ -10,6 +10,7 @@
10#include "common/file_util.h" 10#include "common/file_util.h"
11#include "common/logging/log.h" 11#include "common/logging/log.h"
12#include "core/core.h" 12#include "core/core.h"
13#include "core/hle/kernel/kernel.h"
13#include "core/hle/kernel/process.h" 14#include "core/hle/kernel/process.h"
14#include "core/hle/kernel/resource_limit.h" 15#include "core/hle/kernel/resource_limit.h"
15#include "core/loader/elf.h" 16#include "core/loader/elf.h"
diff --git a/src/core/loader/nro.cpp b/src/core/loader/nro.cpp
index 00205d1d2..77026b850 100644
--- a/src/core/loader/nro.cpp
+++ b/src/core/loader/nro.cpp
@@ -14,6 +14,7 @@
14#include "core/file_sys/control_metadata.h" 14#include "core/file_sys/control_metadata.h"
15#include "core/file_sys/vfs_offset.h" 15#include "core/file_sys/vfs_offset.h"
16#include "core/gdbstub/gdbstub.h" 16#include "core/gdbstub/gdbstub.h"
17#include "core/hle/kernel/kernel.h"
17#include "core/hle/kernel/process.h" 18#include "core/hle/kernel/process.h"
18#include "core/hle/kernel/resource_limit.h" 19#include "core/hle/kernel/resource_limit.h"
19#include "core/loader/nro.h" 20#include "core/loader/nro.h"
diff --git a/src/core/loader/nso.cpp b/src/core/loader/nso.cpp
index 0c992d662..082a95d40 100644
--- a/src/core/loader/nso.cpp
+++ b/src/core/loader/nso.cpp
@@ -11,6 +11,7 @@
11#include "common/swap.h" 11#include "common/swap.h"
12#include "core/core.h" 12#include "core/core.h"
13#include "core/gdbstub/gdbstub.h" 13#include "core/gdbstub/gdbstub.h"
14#include "core/hle/kernel/kernel.h"
14#include "core/hle/kernel/process.h" 15#include "core/hle/kernel/process.h"
15#include "core/hle/kernel/resource_limit.h" 16#include "core/hle/kernel/resource_limit.h"
16#include "core/loader/nso.h" 17#include "core/loader/nso.h"
diff --git a/src/core/perf_stats.cpp b/src/core/perf_stats.cpp
index 93d23de21..7d95816fe 100644
--- a/src/core/perf_stats.cpp
+++ b/src/core/perf_stats.cpp
@@ -40,7 +40,7 @@ void PerfStats::EndGameFrame() {
40 game_frames += 1; 40 game_frames += 1;
41} 41}
42 42
43PerfStats::Results PerfStats::GetAndResetStats(microseconds current_system_time_us) { 43PerfStatsResults PerfStats::GetAndResetStats(microseconds current_system_time_us) {
44 std::lock_guard<std::mutex> lock(object_mutex); 44 std::lock_guard<std::mutex> lock(object_mutex);
45 45
46 const auto now = Clock::now(); 46 const auto now = Clock::now();
@@ -49,7 +49,7 @@ PerfStats::Results PerfStats::GetAndResetStats(microseconds current_system_time_
49 49
50 const auto system_us_per_second = (current_system_time_us - reset_point_system_us) / interval; 50 const auto system_us_per_second = (current_system_time_us - reset_point_system_us) / interval;
51 51
52 Results results{}; 52 PerfStatsResults results{};
53 results.system_fps = static_cast<double>(system_frames) / interval; 53 results.system_fps = static_cast<double>(system_frames) / interval;
54 results.game_fps = static_cast<double>(game_frames) / interval; 54 results.game_fps = static_cast<double>(game_frames) / interval;
55 results.frametime = duration_cast<DoubleSecs>(accumulated_frametime).count() / 55 results.frametime = duration_cast<DoubleSecs>(accumulated_frametime).count() /
diff --git a/src/core/perf_stats.h b/src/core/perf_stats.h
index 6e4619701..222ac1a63 100644
--- a/src/core/perf_stats.h
+++ b/src/core/perf_stats.h
@@ -10,6 +10,17 @@
10 10
11namespace Core { 11namespace Core {
12 12
13struct PerfStatsResults {
14 /// System FPS (LCD VBlanks) in Hz
15 double system_fps;
16 /// Game FPS (GSP frame submissions) in Hz
17 double game_fps;
18 /// Walltime per system frame, in seconds, excluding any waits
19 double frametime;
20 /// Ratio of walltime / emulated time elapsed
21 double emulation_speed;
22};
23
13/** 24/**
14 * Class to manage and query performance/timing statistics. All public functions of this class are 25 * Class to manage and query performance/timing statistics. All public functions of this class are
15 * thread-safe unless stated otherwise. 26 * thread-safe unless stated otherwise.
@@ -18,22 +29,11 @@ class PerfStats {
18public: 29public:
19 using Clock = std::chrono::high_resolution_clock; 30 using Clock = std::chrono::high_resolution_clock;
20 31
21 struct Results {
22 /// System FPS (LCD VBlanks) in Hz
23 double system_fps;
24 /// Game FPS (GSP frame submissions) in Hz
25 double game_fps;
26 /// Walltime per system frame, in seconds, excluding any waits
27 double frametime;
28 /// Ratio of walltime / emulated time elapsed
29 double emulation_speed;
30 };
31
32 void BeginSystemFrame(); 32 void BeginSystemFrame();
33 void EndSystemFrame(); 33 void EndSystemFrame();
34 void EndGameFrame(); 34 void EndGameFrame();
35 35
36 Results GetAndResetStats(std::chrono::microseconds current_system_time_us); 36 PerfStatsResults GetAndResetStats(std::chrono::microseconds current_system_time_us);
37 37
38 /** 38 /**
39 * Gets the ratio between walltime and the emulated time of the previous system frame. This is 39 * Gets the ratio between walltime and the emulated time of the previous system frame. This is
diff --git a/src/core/telemetry_session.cpp b/src/core/telemetry_session.cpp
index 827a1bbd0..65571b948 100644
--- a/src/core/telemetry_session.cpp
+++ b/src/core/telemetry_session.cpp
@@ -7,6 +7,7 @@
7#include "common/file_util.h" 7#include "common/file_util.h"
8 8
9#include "core/core.h" 9#include "core/core.h"
10#include "core/loader/loader.h"
10#include "core/settings.h" 11#include "core/settings.h"
11#include "core/telemetry_session.h" 12#include "core/telemetry_session.h"
12 13
diff --git a/src/video_core/engines/maxwell_3d.cpp b/src/video_core/engines/maxwell_3d.cpp
index f32a79d7b..68ff1e86b 100644
--- a/src/video_core/engines/maxwell_3d.cpp
+++ b/src/video_core/engines/maxwell_3d.cpp
@@ -5,13 +5,12 @@
5#include <cinttypes> 5#include <cinttypes>
6#include "common/assert.h" 6#include "common/assert.h"
7#include "core/core.h" 7#include "core/core.h"
8#include "core/memory.h"
8#include "video_core/debug_utils/debug_utils.h" 9#include "video_core/debug_utils/debug_utils.h"
9#include "video_core/engines/maxwell_3d.h" 10#include "video_core/engines/maxwell_3d.h"
10#include "video_core/rasterizer_interface.h" 11#include "video_core/rasterizer_interface.h"
11#include "video_core/renderer_base.h" 12#include "video_core/renderer_base.h"
12#include "video_core/textures/decoders.h"
13#include "video_core/textures/texture.h" 13#include "video_core/textures/texture.h"
14#include "video_core/video_core.h"
15 14
16namespace Tegra { 15namespace Tegra {
17namespace Engines { 16namespace Engines {
diff --git a/src/video_core/rasterizer_cache.h b/src/video_core/rasterizer_cache.h
index de1eab86b..083b283b0 100644
--- a/src/video_core/rasterizer_cache.h
+++ b/src/video_core/rasterizer_cache.h
@@ -7,11 +7,10 @@
7#include <set> 7#include <set>
8 8
9#include <boost/icl/interval_map.hpp> 9#include <boost/icl/interval_map.hpp>
10#include <boost/range/iterator_range_core.hpp>
10 11
11#include "common/common_types.h" 12#include "common/common_types.h"
12#include "core/core.h" 13#include "core/core.h"
13#include "core/memory.h"
14#include "video_core/memory_manager.h"
15#include "video_core/rasterizer_interface.h" 14#include "video_core/rasterizer_interface.h"
16#include "video_core/renderer_base.h" 15#include "video_core/renderer_base.h"
17 16
diff --git a/src/video_core/renderer_opengl/renderer_opengl.cpp b/src/video_core/renderer_opengl/renderer_opengl.cpp
index 3c4a9f17c..411a73d50 100644
--- a/src/video_core/renderer_opengl/renderer_opengl.cpp
+++ b/src/video_core/renderer_opengl/renderer_opengl.cpp
@@ -10,12 +10,14 @@
10#include <glad/glad.h> 10#include <glad/glad.h>
11#include "common/assert.h" 11#include "common/assert.h"
12#include "common/logging/log.h" 12#include "common/logging/log.h"
13#include "common/telemetry.h"
13#include "core/core.h" 14#include "core/core.h"
14#include "core/core_timing.h" 15#include "core/core_timing.h"
15#include "core/frontend/emu_window.h" 16#include "core/frontend/emu_window.h"
16#include "core/memory.h" 17#include "core/memory.h"
17#include "core/perf_stats.h" 18#include "core/perf_stats.h"
18#include "core/settings.h" 19#include "core/settings.h"
20#include "core/telemetry_session.h"
19#include "core/tracer/recorder.h" 21#include "core/tracer/recorder.h"
20#include "video_core/renderer_opengl/gl_rasterizer.h" 22#include "video_core/renderer_opengl/gl_rasterizer.h"
21#include "video_core/renderer_opengl/renderer_opengl.h" 23#include "video_core/renderer_opengl/renderer_opengl.h"
diff --git a/src/yuzu/debugger/wait_tree.cpp b/src/yuzu/debugger/wait_tree.cpp
index eac0c05f2..6c2cd967e 100644
--- a/src/yuzu/debugger/wait_tree.cpp
+++ b/src/yuzu/debugger/wait_tree.cpp
@@ -9,11 +9,14 @@
9#include "core/core.h" 9#include "core/core.h"
10#include "core/hle/kernel/event.h" 10#include "core/hle/kernel/event.h"
11#include "core/hle/kernel/handle_table.h" 11#include "core/hle/kernel/handle_table.h"
12#include "core/hle/kernel/kernel.h"
12#include "core/hle/kernel/mutex.h" 13#include "core/hle/kernel/mutex.h"
14#include "core/hle/kernel/scheduler.h"
13#include "core/hle/kernel/thread.h" 15#include "core/hle/kernel/thread.h"
14#include "core/hle/kernel/timer.h" 16#include "core/hle/kernel/timer.h"
15#include "core/hle/kernel/wait_object.h" 17#include "core/hle/kernel/wait_object.h"
16 18
19WaitTreeItem::WaitTreeItem() = default;
17WaitTreeItem::~WaitTreeItem() = default; 20WaitTreeItem::~WaitTreeItem() = default;
18 21
19QColor WaitTreeItem::GetColor() const { 22QColor WaitTreeItem::GetColor() const {
@@ -71,6 +74,7 @@ std::vector<std::unique_ptr<WaitTreeThread>> WaitTreeItem::MakeThreadItemList()
71} 74}
72 75
73WaitTreeText::WaitTreeText(const QString& t) : text(t) {} 76WaitTreeText::WaitTreeText(const QString& t) : text(t) {}
77WaitTreeText::~WaitTreeText() = default;
74 78
75QString WaitTreeText::GetText() const { 79QString WaitTreeText::GetText() const {
76 return text; 80 return text;
@@ -84,6 +88,8 @@ WaitTreeMutexInfo::WaitTreeMutexInfo(VAddr mutex_address) : mutex_address(mutex_
84 owner = handle_table.Get<Kernel::Thread>(owner_handle); 88 owner = handle_table.Get<Kernel::Thread>(owner_handle);
85} 89}
86 90
91WaitTreeMutexInfo::~WaitTreeMutexInfo() = default;
92
87QString WaitTreeMutexInfo::GetText() const { 93QString WaitTreeMutexInfo::GetText() const {
88 return tr("waiting for mutex 0x%1").arg(mutex_address, 16, 16, QLatin1Char('0')); 94 return tr("waiting for mutex 0x%1").arg(mutex_address, 16, 16, QLatin1Char('0'));
89} 95}
@@ -102,6 +108,7 @@ std::vector<std::unique_ptr<WaitTreeItem>> WaitTreeMutexInfo::GetChildren() cons
102} 108}
103 109
104WaitTreeCallstack::WaitTreeCallstack(const Kernel::Thread& thread) : thread(thread) {} 110WaitTreeCallstack::WaitTreeCallstack(const Kernel::Thread& thread) : thread(thread) {}
111WaitTreeCallstack::~WaitTreeCallstack() = default;
105 112
106QString WaitTreeCallstack::GetText() const { 113QString WaitTreeCallstack::GetText() const {
107 return tr("Call stack"); 114 return tr("Call stack");
@@ -126,6 +133,10 @@ std::vector<std::unique_ptr<WaitTreeItem>> WaitTreeCallstack::GetChildren() cons
126} 133}
127 134
128WaitTreeWaitObject::WaitTreeWaitObject(const Kernel::WaitObject& o) : object(o) {} 135WaitTreeWaitObject::WaitTreeWaitObject(const Kernel::WaitObject& o) : object(o) {}
136WaitTreeWaitObject::~WaitTreeWaitObject() = default;
137
138WaitTreeExpandableItem::WaitTreeExpandableItem() = default;
139WaitTreeExpandableItem::~WaitTreeExpandableItem() = default;
129 140
130bool WaitTreeExpandableItem::IsExpandable() const { 141bool WaitTreeExpandableItem::IsExpandable() const {
131 return true; 142 return true;
@@ -180,6 +191,8 @@ WaitTreeObjectList::WaitTreeObjectList(
180 const std::vector<Kernel::SharedPtr<Kernel::WaitObject>>& list, bool w_all) 191 const std::vector<Kernel::SharedPtr<Kernel::WaitObject>>& list, bool w_all)
181 : object_list(list), wait_all(w_all) {} 192 : object_list(list), wait_all(w_all) {}
182 193
194WaitTreeObjectList::~WaitTreeObjectList() = default;
195
183QString WaitTreeObjectList::GetText() const { 196QString WaitTreeObjectList::GetText() const {
184 if (wait_all) 197 if (wait_all)
185 return tr("waiting for all objects"); 198 return tr("waiting for all objects");
@@ -194,6 +207,7 @@ std::vector<std::unique_ptr<WaitTreeItem>> WaitTreeObjectList::GetChildren() con
194} 207}
195 208
196WaitTreeThread::WaitTreeThread(const Kernel::Thread& thread) : WaitTreeWaitObject(thread) {} 209WaitTreeThread::WaitTreeThread(const Kernel::Thread& thread) : WaitTreeWaitObject(thread) {}
210WaitTreeThread::~WaitTreeThread() = default;
197 211
198QString WaitTreeThread::GetText() const { 212QString WaitTreeThread::GetText() const {
199 const auto& thread = static_cast<const Kernel::Thread&>(object); 213 const auto& thread = static_cast<const Kernel::Thread&>(object);
@@ -312,6 +326,7 @@ std::vector<std::unique_ptr<WaitTreeItem>> WaitTreeThread::GetChildren() const {
312} 326}
313 327
314WaitTreeEvent::WaitTreeEvent(const Kernel::Event& object) : WaitTreeWaitObject(object) {} 328WaitTreeEvent::WaitTreeEvent(const Kernel::Event& object) : WaitTreeWaitObject(object) {}
329WaitTreeEvent::~WaitTreeEvent() = default;
315 330
316std::vector<std::unique_ptr<WaitTreeItem>> WaitTreeEvent::GetChildren() const { 331std::vector<std::unique_ptr<WaitTreeItem>> WaitTreeEvent::GetChildren() const {
317 std::vector<std::unique_ptr<WaitTreeItem>> list(WaitTreeWaitObject::GetChildren()); 332 std::vector<std::unique_ptr<WaitTreeItem>> list(WaitTreeWaitObject::GetChildren());
@@ -323,6 +338,7 @@ std::vector<std::unique_ptr<WaitTreeItem>> WaitTreeEvent::GetChildren() const {
323} 338}
324 339
325WaitTreeTimer::WaitTreeTimer(const Kernel::Timer& object) : WaitTreeWaitObject(object) {} 340WaitTreeTimer::WaitTreeTimer(const Kernel::Timer& object) : WaitTreeWaitObject(object) {}
341WaitTreeTimer::~WaitTreeTimer() = default;
326 342
327std::vector<std::unique_ptr<WaitTreeItem>> WaitTreeTimer::GetChildren() const { 343std::vector<std::unique_ptr<WaitTreeItem>> WaitTreeTimer::GetChildren() const {
328 std::vector<std::unique_ptr<WaitTreeItem>> list(WaitTreeWaitObject::GetChildren()); 344 std::vector<std::unique_ptr<WaitTreeItem>> list(WaitTreeWaitObject::GetChildren());
@@ -340,6 +356,7 @@ std::vector<std::unique_ptr<WaitTreeItem>> WaitTreeTimer::GetChildren() const {
340 356
341WaitTreeThreadList::WaitTreeThreadList(const std::vector<Kernel::SharedPtr<Kernel::Thread>>& list) 357WaitTreeThreadList::WaitTreeThreadList(const std::vector<Kernel::SharedPtr<Kernel::Thread>>& list)
342 : thread_list(list) {} 358 : thread_list(list) {}
359WaitTreeThreadList::~WaitTreeThreadList() = default;
343 360
344QString WaitTreeThreadList::GetText() const { 361QString WaitTreeThreadList::GetText() const {
345 return tr("waited by thread"); 362 return tr("waited by thread");
@@ -353,6 +370,7 @@ std::vector<std::unique_ptr<WaitTreeItem>> WaitTreeThreadList::GetChildren() con
353} 370}
354 371
355WaitTreeModel::WaitTreeModel(QObject* parent) : QAbstractItemModel(parent) {} 372WaitTreeModel::WaitTreeModel(QObject* parent) : QAbstractItemModel(parent) {}
373WaitTreeModel::~WaitTreeModel() = default;
356 374
357QModelIndex WaitTreeModel::index(int row, int column, const QModelIndex& parent) const { 375QModelIndex WaitTreeModel::index(int row, int column, const QModelIndex& parent) const {
358 if (!hasIndex(row, column, parent)) 376 if (!hasIndex(row, column, parent))
@@ -421,6 +439,8 @@ WaitTreeWidget::WaitTreeWidget(QWidget* parent) : QDockWidget(tr("Wait Tree"), p
421 setEnabled(false); 439 setEnabled(false);
422} 440}
423 441
442WaitTreeWidget::~WaitTreeWidget() = default;
443
424void WaitTreeWidget::OnDebugModeEntered() { 444void WaitTreeWidget::OnDebugModeEntered() {
425 if (!Core::System::GetInstance().IsPoweredOn()) 445 if (!Core::System::GetInstance().IsPoweredOn())
426 return; 446 return;
diff --git a/src/yuzu/debugger/wait_tree.h b/src/yuzu/debugger/wait_tree.h
index 513b3c45d..defbf734f 100644
--- a/src/yuzu/debugger/wait_tree.h
+++ b/src/yuzu/debugger/wait_tree.h
@@ -4,11 +4,15 @@
4 4
5#pragma once 5#pragma once
6 6
7#include <cstddef>
8#include <memory>
9#include <vector>
10
7#include <QAbstractItemModel> 11#include <QAbstractItemModel>
8#include <QDockWidget> 12#include <QDockWidget>
9#include <QTreeView> 13#include <QTreeView>
10#include <boost/container/flat_set.hpp> 14#include <boost/container/flat_set.hpp>
11#include "core/core.h" 15#include "common/common_types.h"
12#include "core/hle/kernel/object.h" 16#include "core/hle/kernel/object.h"
13 17
14class EmuThread; 18class EmuThread;
@@ -25,6 +29,7 @@ class WaitTreeThread;
25class WaitTreeItem : public QObject { 29class WaitTreeItem : public QObject {
26 Q_OBJECT 30 Q_OBJECT
27public: 31public:
32 WaitTreeItem();
28 ~WaitTreeItem() override; 33 ~WaitTreeItem() override;
29 34
30 virtual bool IsExpandable() const; 35 virtual bool IsExpandable() const;
@@ -49,6 +54,8 @@ class WaitTreeText : public WaitTreeItem {
49 Q_OBJECT 54 Q_OBJECT
50public: 55public:
51 explicit WaitTreeText(const QString& text); 56 explicit WaitTreeText(const QString& text);
57 ~WaitTreeText() override;
58
52 QString GetText() const override; 59 QString GetText() const override;
53 60
54private: 61private:
@@ -58,6 +65,9 @@ private:
58class WaitTreeExpandableItem : public WaitTreeItem { 65class WaitTreeExpandableItem : public WaitTreeItem {
59 Q_OBJECT 66 Q_OBJECT
60public: 67public:
68 WaitTreeExpandableItem();
69 ~WaitTreeExpandableItem() override;
70
61 bool IsExpandable() const override; 71 bool IsExpandable() const override;
62}; 72};
63 73
@@ -65,6 +75,8 @@ class WaitTreeMutexInfo : public WaitTreeExpandableItem {
65 Q_OBJECT 75 Q_OBJECT
66public: 76public:
67 explicit WaitTreeMutexInfo(VAddr mutex_address); 77 explicit WaitTreeMutexInfo(VAddr mutex_address);
78 ~WaitTreeMutexInfo() override;
79
68 QString GetText() const override; 80 QString GetText() const override;
69 std::vector<std::unique_ptr<WaitTreeItem>> GetChildren() const override; 81 std::vector<std::unique_ptr<WaitTreeItem>> GetChildren() const override;
70 82
@@ -79,6 +91,8 @@ class WaitTreeCallstack : public WaitTreeExpandableItem {
79 Q_OBJECT 91 Q_OBJECT
80public: 92public:
81 explicit WaitTreeCallstack(const Kernel::Thread& thread); 93 explicit WaitTreeCallstack(const Kernel::Thread& thread);
94 ~WaitTreeCallstack() override;
95
82 QString GetText() const override; 96 QString GetText() const override;
83 std::vector<std::unique_ptr<WaitTreeItem>> GetChildren() const override; 97 std::vector<std::unique_ptr<WaitTreeItem>> GetChildren() const override;
84 98
@@ -90,6 +104,8 @@ class WaitTreeWaitObject : public WaitTreeExpandableItem {
90 Q_OBJECT 104 Q_OBJECT
91public: 105public:
92 explicit WaitTreeWaitObject(const Kernel::WaitObject& object); 106 explicit WaitTreeWaitObject(const Kernel::WaitObject& object);
107 ~WaitTreeWaitObject() override;
108
93 static std::unique_ptr<WaitTreeWaitObject> make(const Kernel::WaitObject& object); 109 static std::unique_ptr<WaitTreeWaitObject> make(const Kernel::WaitObject& object);
94 QString GetText() const override; 110 QString GetText() const override;
95 std::vector<std::unique_ptr<WaitTreeItem>> GetChildren() const override; 111 std::vector<std::unique_ptr<WaitTreeItem>> GetChildren() const override;
@@ -105,6 +121,8 @@ class WaitTreeObjectList : public WaitTreeExpandableItem {
105public: 121public:
106 WaitTreeObjectList(const std::vector<Kernel::SharedPtr<Kernel::WaitObject>>& list, 122 WaitTreeObjectList(const std::vector<Kernel::SharedPtr<Kernel::WaitObject>>& list,
107 bool wait_all); 123 bool wait_all);
124 ~WaitTreeObjectList() override;
125
108 QString GetText() const override; 126 QString GetText() const override;
109 std::vector<std::unique_ptr<WaitTreeItem>> GetChildren() const override; 127 std::vector<std::unique_ptr<WaitTreeItem>> GetChildren() const override;
110 128
@@ -117,6 +135,8 @@ class WaitTreeThread : public WaitTreeWaitObject {
117 Q_OBJECT 135 Q_OBJECT
118public: 136public:
119 explicit WaitTreeThread(const Kernel::Thread& thread); 137 explicit WaitTreeThread(const Kernel::Thread& thread);
138 ~WaitTreeThread() override;
139
120 QString GetText() const override; 140 QString GetText() const override;
121 QColor GetColor() const override; 141 QColor GetColor() const override;
122 std::vector<std::unique_ptr<WaitTreeItem>> GetChildren() const override; 142 std::vector<std::unique_ptr<WaitTreeItem>> GetChildren() const override;
@@ -126,6 +146,8 @@ class WaitTreeEvent : public WaitTreeWaitObject {
126 Q_OBJECT 146 Q_OBJECT
127public: 147public:
128 explicit WaitTreeEvent(const Kernel::Event& object); 148 explicit WaitTreeEvent(const Kernel::Event& object);
149 ~WaitTreeEvent() override;
150
129 std::vector<std::unique_ptr<WaitTreeItem>> GetChildren() const override; 151 std::vector<std::unique_ptr<WaitTreeItem>> GetChildren() const override;
130}; 152};
131 153
@@ -133,6 +155,8 @@ class WaitTreeTimer : public WaitTreeWaitObject {
133 Q_OBJECT 155 Q_OBJECT
134public: 156public:
135 explicit WaitTreeTimer(const Kernel::Timer& object); 157 explicit WaitTreeTimer(const Kernel::Timer& object);
158 ~WaitTreeTimer() override;
159
136 std::vector<std::unique_ptr<WaitTreeItem>> GetChildren() const override; 160 std::vector<std::unique_ptr<WaitTreeItem>> GetChildren() const override;
137}; 161};
138 162
@@ -140,6 +164,8 @@ class WaitTreeThreadList : public WaitTreeExpandableItem {
140 Q_OBJECT 164 Q_OBJECT
141public: 165public:
142 explicit WaitTreeThreadList(const std::vector<Kernel::SharedPtr<Kernel::Thread>>& list); 166 explicit WaitTreeThreadList(const std::vector<Kernel::SharedPtr<Kernel::Thread>>& list);
167 ~WaitTreeThreadList() override;
168
143 QString GetText() const override; 169 QString GetText() const override;
144 std::vector<std::unique_ptr<WaitTreeItem>> GetChildren() const override; 170 std::vector<std::unique_ptr<WaitTreeItem>> GetChildren() const override;
145 171
@@ -152,6 +178,7 @@ class WaitTreeModel : public QAbstractItemModel {
152 178
153public: 179public:
154 explicit WaitTreeModel(QObject* parent = nullptr); 180 explicit WaitTreeModel(QObject* parent = nullptr);
181 ~WaitTreeModel() override;
155 182
156 QVariant data(const QModelIndex& index, int role) const override; 183 QVariant data(const QModelIndex& index, int role) const override;
157 QModelIndex index(int row, int column, const QModelIndex& parent) const override; 184 QModelIndex index(int row, int column, const QModelIndex& parent) const override;
@@ -171,6 +198,7 @@ class WaitTreeWidget : public QDockWidget {
171 198
172public: 199public:
173 explicit WaitTreeWidget(QWidget* parent = nullptr); 200 explicit WaitTreeWidget(QWidget* parent = nullptr);
201 ~WaitTreeWidget() override;
174 202
175public slots: 203public slots:
176 void OnDebugModeEntered(); 204 void OnDebugModeEntered();
diff --git a/src/yuzu/game_list.cpp b/src/yuzu/game_list.cpp
index 27525938a..d15242d59 100644
--- a/src/yuzu/game_list.cpp
+++ b/src/yuzu/game_list.cpp
@@ -23,10 +23,12 @@
23#include "core/file_sys/registered_cache.h" 23#include "core/file_sys/registered_cache.h"
24#include "core/file_sys/romfs.h" 24#include "core/file_sys/romfs.h"
25#include "core/file_sys/vfs_real.h" 25#include "core/file_sys/vfs_real.h"
26#include "core/hle/service/filesystem/filesystem.h"
26#include "core/loader/loader.h" 27#include "core/loader/loader.h"
27#include "game_list.h" 28#include "yuzu/game_list.h"
28#include "game_list_p.h" 29#include "yuzu/game_list_p.h"
29#include "ui_settings.h" 30#include "yuzu/main.h"
31#include "yuzu/ui_settings.h"
30 32
31GameList::SearchField::KeyReleaseEater::KeyReleaseEater(GameList* gamelist) : gamelist{gamelist} {} 33GameList::SearchField::KeyReleaseEater::KeyReleaseEater(GameList* gamelist) : gamelist{gamelist} {}
32 34
@@ -481,6 +483,14 @@ static void GetMetadataFromControlNCA(const std::shared_ptr<FileSys::NCA>& nca,
481 } 483 }
482} 484}
483 485
486GameListWorker::GameListWorker(
487 FileSys::VirtualFilesystem vfs, QString dir_path, bool deep_scan,
488 const std::unordered_map<std::string, std::pair<QString, QString>>& compatibility_list)
489 : vfs(std::move(vfs)), dir_path(std::move(dir_path)), deep_scan(deep_scan),
490 compatibility_list(compatibility_list) {}
491
492GameListWorker::~GameListWorker() = default;
493
484void GameListWorker::AddInstalledTitlesToGameList(std::shared_ptr<FileSys::RegisteredCache> cache) { 494void GameListWorker::AddInstalledTitlesToGameList(std::shared_ptr<FileSys::RegisteredCache> cache) {
485 const auto installed_games = cache->ListEntriesFilter(FileSys::TitleType::Application, 495 const auto installed_games = cache->ListEntriesFilter(FileSys::TitleType::Application,
486 FileSys::ContentRecordType::Program); 496 FileSys::ContentRecordType::Program);
diff --git a/src/yuzu/game_list.h b/src/yuzu/game_list.h
index c01351dc9..6a5c2f5f8 100644
--- a/src/yuzu/game_list.h
+++ b/src/yuzu/game_list.h
@@ -4,6 +4,8 @@
4 4
5#pragma once 5#pragma once
6 6
7#include <unordered_map>
8
7#include <QFileSystemWatcher> 9#include <QFileSystemWatcher>
8#include <QHBoxLayout> 10#include <QHBoxLayout>
9#include <QLabel> 11#include <QLabel>
@@ -17,9 +19,13 @@
17#include <QTreeView> 19#include <QTreeView>
18#include <QVBoxLayout> 20#include <QVBoxLayout>
19#include <QWidget> 21#include <QWidget>
20#include "main.h"
21 22
22class GameListWorker; 23class GameListWorker;
24class GMainWindow;
25
26namespace FileSys {
27class VfsFilesystem;
28}
23 29
24enum class GameListOpenTarget { SaveData }; 30enum class GameListOpenTarget { SaveData };
25 31
@@ -62,7 +68,7 @@ public:
62 QToolButton* button_filter_close = nullptr; 68 QToolButton* button_filter_close = nullptr;
63 }; 69 };
64 70
65 explicit GameList(FileSys::VirtualFilesystem vfs, GMainWindow* parent = nullptr); 71 explicit GameList(std::shared_ptr<FileSys::VfsFilesystem> vfs, GMainWindow* parent = nullptr);
66 ~GameList() override; 72 ~GameList() override;
67 73
68 void clearFilter(); 74 void clearFilter();
@@ -97,7 +103,7 @@ private:
97 void PopupContextMenu(const QPoint& menu_location); 103 void PopupContextMenu(const QPoint& menu_location);
98 void RefreshGameDirectory(); 104 void RefreshGameDirectory();
99 105
100 FileSys::VirtualFilesystem vfs; 106 std::shared_ptr<FileSys::VfsFilesystem> vfs;
101 SearchField* search_field; 107 SearchField* search_field;
102 GMainWindow* main_window = nullptr; 108 GMainWindow* main_window = nullptr;
103 QVBoxLayout* layout = nullptr; 109 QVBoxLayout* layout = nullptr;
diff --git a/src/yuzu/game_list_p.h b/src/yuzu/game_list_p.h
index b9676d069..3624cb21a 100644
--- a/src/yuzu/game_list_p.h
+++ b/src/yuzu/game_list_p.h
@@ -18,10 +18,15 @@
18#include <QString> 18#include <QString>
19#include "common/logging/log.h" 19#include "common/logging/log.h"
20#include "common/string_util.h" 20#include "common/string_util.h"
21#include "core/file_sys/content_archive.h" 21#include "yuzu/ui_settings.h"
22#include "ui_settings.h"
23#include "yuzu/util/util.h" 22#include "yuzu/util/util.h"
24 23
24namespace FileSys {
25class NCA;
26class RegisteredCache;
27class VfsFilesystem;
28} // namespace FileSys
29
25/** 30/**
26 * Gets the default icon (for games without valid SMDH) 31 * Gets the default icon (for games without valid SMDH)
27 * @param large If true, returns large icon (48x48), otherwise returns small icon (24x24) 32 * @param large If true, returns large icon (48x48), otherwise returns small icon (24x24)
@@ -196,10 +201,9 @@ class GameListWorker : public QObject, public QRunnable {
196 201
197public: 202public:
198 GameListWorker( 203 GameListWorker(
199 FileSys::VirtualFilesystem vfs, QString dir_path, bool deep_scan, 204 std::shared_ptr<FileSys::VfsFilesystem> vfs, QString dir_path, bool deep_scan,
200 const std::unordered_map<std::string, std::pair<QString, QString>>& compatibility_list) 205 const std::unordered_map<std::string, std::pair<QString, QString>>& compatibility_list);
201 : vfs(std::move(vfs)), dir_path(std::move(dir_path)), deep_scan(deep_scan), 206 ~GameListWorker() override;
202 compatibility_list(compatibility_list) {}
203 207
204public slots: 208public slots:
205 /// Starts the processing of directory tree information. 209 /// Starts the processing of directory tree information.
@@ -222,7 +226,7 @@ signals:
222 void Finished(QStringList watch_list); 226 void Finished(QStringList watch_list);
223 227
224private: 228private:
225 FileSys::VirtualFilesystem vfs; 229 std::shared_ptr<FileSys::VfsFilesystem> vfs;
226 std::map<u64, std::shared_ptr<FileSys::NCA>> nca_control_map; 230 std::map<u64, std::shared_ptr<FileSys::NCA>> nca_control_map;
227 QStringList watch_list; 231 QStringList watch_list;
228 QString dir_path; 232 QString dir_path;
diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp
index 1501aedc4..e11ba7854 100644
--- a/src/yuzu/main.cpp
+++ b/src/yuzu/main.cpp
@@ -21,22 +21,22 @@
21#include "common/logging/backend.h" 21#include "common/logging/backend.h"
22#include "common/logging/filter.h" 22#include "common/logging/filter.h"
23#include "common/logging/log.h" 23#include "common/logging/log.h"
24#include "common/logging/text_formatter.h"
25#include "common/microprofile.h" 24#include "common/microprofile.h"
26#include "common/scm_rev.h" 25#include "common/scm_rev.h"
27#include "common/scope_exit.h" 26#include "common/scope_exit.h"
28#include "common/string_util.h" 27#include "common/string_util.h"
28#include "common/telemetry.h"
29#include "core/core.h" 29#include "core/core.h"
30#include "core/crypto/key_manager.h" 30#include "core/crypto/key_manager.h"
31#include "core/file_sys/bis_factory.h"
32#include "core/file_sys/card_image.h" 31#include "core/file_sys/card_image.h"
33#include "core/file_sys/registered_cache.h" 32#include "core/file_sys/registered_cache.h"
34#include "core/file_sys/savedata_factory.h" 33#include "core/file_sys/savedata_factory.h"
35#include "core/file_sys/vfs_real.h" 34#include "core/file_sys/vfs_real.h"
36#include "core/gdbstub/gdbstub.h" 35#include "core/hle/service/filesystem/filesystem.h"
37#include "core/loader/loader.h" 36#include "core/loader/loader.h"
37#include "core/perf_stats.h"
38#include "core/settings.h" 38#include "core/settings.h"
39#include "game_list_p.h" 39#include "core/telemetry_session.h"
40#include "video_core/debug_utils/debug_utils.h" 40#include "video_core/debug_utils/debug_utils.h"
41#include "yuzu/about_dialog.h" 41#include "yuzu/about_dialog.h"
42#include "yuzu/bootmanager.h" 42#include "yuzu/bootmanager.h"
@@ -48,6 +48,7 @@
48#include "yuzu/debugger/profiler.h" 48#include "yuzu/debugger/profiler.h"
49#include "yuzu/debugger/wait_tree.h" 49#include "yuzu/debugger/wait_tree.h"
50#include "yuzu/game_list.h" 50#include "yuzu/game_list.h"
51#include "yuzu/game_list_p.h"
51#include "yuzu/hotkeys.h" 52#include "yuzu/hotkeys.h"
52#include "yuzu/main.h" 53#include "yuzu/main.h"
53#include "yuzu/ui_settings.h" 54#include "yuzu/ui_settings.h"
diff --git a/src/yuzu/main.h b/src/yuzu/main.h
index fd2436f4d..0b97e8220 100644
--- a/src/yuzu/main.h
+++ b/src/yuzu/main.h
@@ -5,6 +5,7 @@
5#pragma once 5#pragma once
6 6
7#include <memory> 7#include <memory>
8#include <unordered_map>
8#include <QMainWindow> 9#include <QMainWindow>
9#include <QTimer> 10#include <QTimer>
10#include "core/core.h" 11#include "core/core.h"
@@ -23,6 +24,10 @@ class ProfilerWidget;
23class WaitTreeWidget; 24class WaitTreeWidget;
24enum class GameListOpenTarget; 25enum class GameListOpenTarget;
25 26
27namespace FileSys {
28class VfsFilesystem;
29}
30
26namespace Tegra { 31namespace Tegra {
27class DebugContext; 32class DebugContext;
28} 33}
@@ -169,7 +174,7 @@ private:
169 QString game_path; 174 QString game_path;
170 175
171 // FS 176 // FS
172 FileSys::VirtualFilesystem vfs; 177 std::shared_ptr<FileSys::VfsFilesystem> vfs;
173 178
174 // Debugger panes 179 // Debugger panes
175 ProfilerWidget* profilerWidget; 180 ProfilerWidget* profilerWidget;
diff --git a/src/yuzu_cmd/yuzu.cpp b/src/yuzu_cmd/yuzu.cpp
index 9095cf27d..41e7da897 100644
--- a/src/yuzu_cmd/yuzu.cpp
+++ b/src/yuzu_cmd/yuzu.cpp
@@ -17,10 +17,13 @@
17#include "common/scm_rev.h" 17#include "common/scm_rev.h"
18#include "common/scope_exit.h" 18#include "common/scope_exit.h"
19#include "common/string_util.h" 19#include "common/string_util.h"
20#include "common/telemetry.h"
20#include "core/core.h" 21#include "core/core.h"
22#include "core/file_sys/vfs_real.h"
21#include "core/gdbstub/gdbstub.h" 23#include "core/gdbstub/gdbstub.h"
22#include "core/loader/loader.h" 24#include "core/loader/loader.h"
23#include "core/settings.h" 25#include "core/settings.h"
26#include "core/telemetry_session.h"
24#include "yuzu_cmd/config.h" 27#include "yuzu_cmd/config.h"
25#include "yuzu_cmd/emu_window/emu_window_sdl2.h" 28#include "yuzu_cmd/emu_window/emu_window_sdl2.h"
26 29