diff options
Diffstat (limited to 'src/core')
| -rw-r--r-- | src/core/arm/dynarmic/arm_dynarmic.cpp | 1 | ||||
| -rw-r--r-- | src/core/core.cpp | 19 | ||||
| -rw-r--r-- | src/core/core.h | 56 | ||||
| -rw-r--r-- | src/core/file_sys/savedata_factory.cpp | 1 | ||||
| -rw-r--r-- | src/core/file_sys/savedata_factory.h | 1 | ||||
| -rw-r--r-- | src/core/hle/kernel/address_arbiter.cpp | 2 | ||||
| -rw-r--r-- | src/core/hle/kernel/hle_ipc.cpp | 1 | ||||
| -rw-r--r-- | src/core/hle/kernel/server_session.cpp | 6 | ||||
| -rw-r--r-- | src/core/hle/kernel/svc.cpp | 4 | ||||
| -rw-r--r-- | src/core/hle/kernel/thread.cpp | 3 | ||||
| -rw-r--r-- | src/core/hle/service/filesystem/filesystem.h | 1 | ||||
| -rw-r--r-- | src/core/loader/deconstructed_rom_directory.cpp | 1 | ||||
| -rw-r--r-- | src/core/loader/elf.cpp | 1 | ||||
| -rw-r--r-- | src/core/loader/nro.cpp | 1 | ||||
| -rw-r--r-- | src/core/loader/nso.cpp | 1 | ||||
| -rw-r--r-- | src/core/perf_stats.cpp | 4 | ||||
| -rw-r--r-- | src/core/perf_stats.h | 24 | ||||
| -rw-r--r-- | src/core/telemetry_session.cpp | 1 | 
18 files changed, 85 insertions, 43 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 @@  #include "common/logging/log.h"  #include "core/arm/dynarmic/arm_dynarmic.h"  #include "core/core.h" +#include "core/core_cpu.h"  #include "core/core_timing.h"  #include "core/hle/kernel/process.h"  #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 @@  // Licensed under GPLv2 or any later version  // Refer to the license.txt file included. +#include <array> +#include <map>  #include <memory> +#include <thread>  #include <utility> +  #include "common/logging/log.h"  #include "common/string_util.h" +#include "core/arm/exclusive_monitor.h"  #include "core/core.h" +#include "core/core_cpu.h"  #include "core/core_timing.h"  #include "core/gdbstub/gdbstub.h"  #include "core/hle/kernel/client_port.h"  #include "core/hle/kernel/kernel.h"  #include "core/hle/kernel/process.h" +#include "core/hle/kernel/scheduler.h"  #include "core/hle/kernel/thread.h"  #include "core/hle/service/service.h"  #include "core/hle/service/sm/controller.h"  #include "core/hle/service/sm/sm.h"  #include "core/loader/loader.h" +#include "core/perf_stats.h"  #include "core/settings.h" +#include "core/telemetry_session.h"  #include "file_sys/vfs_concat.h"  #include "file_sys/vfs_real.h" +#include "video_core/debug_utils/debug_utils.h" +#include "video_core/gpu.h"  #include "video_core/renderer_base.h"  #include "video_core/video_core.h" @@ -258,7 +269,7 @@ struct System::Impl {          }      } -    PerfStats::Results GetAndResetPerfStats() { +    PerfStatsResults GetAndResetPerfStats() {          return perf_stats.GetAndResetStats(CoreTiming::GetGlobalTimeUs());      } @@ -326,7 +337,7 @@ void System::PrepareReschedule() {      CurrentCpuCore().PrepareReschedule();  } -PerfStats::Results System::GetAndResetPerfStats() { +PerfStatsResults System::GetAndResetPerfStats() {      return impl->GetAndResetPerfStats();  } @@ -433,11 +444,11 @@ std::shared_ptr<Tegra::DebugContext> System::GetGPUDebugContext() const {      return impl->debug_context;  } -void System::SetFilesystem(FileSys::VirtualFilesystem vfs) { +void System::SetFilesystem(std::shared_ptr<FileSys::VfsFilesystem> vfs) {      impl->virtual_filesystem = std::move(vfs);  } -FileSys::VirtualFilesystem System::GetFilesystem() const { +std::shared_ptr<FileSys::VfsFilesystem> System::GetFilesystem() const {      return impl->virtual_filesystem;  } 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 @@  #pragma once -#include <array> -#include <map> +#include <cstddef>  #include <memory>  #include <string> -#include <thread> +  #include "common/common_types.h" -#include "core/arm/exclusive_monitor.h" -#include "core/core_cpu.h" -#include "core/hle/kernel/kernel.h"  #include "core/hle/kernel/object.h" -#include "core/hle/kernel/scheduler.h" -#include "core/loader/loader.h" -#include "core/memory.h" -#include "core/perf_stats.h" -#include "core/telemetry_session.h" -#include "file_sys/vfs_real.h" -#include "hle/service/filesystem/filesystem.h" -#include "video_core/debug_utils/debug_utils.h" -#include "video_core/gpu.h"  namespace Core::Frontend {  class EmuWindow; -} +} // namespace Core::Frontend + +namespace FileSys { +class VfsFilesystem; +} // namespace FileSys + +namespace Kernel { +class KernelCore; +class Process; +class Scheduler; +} // namespace Kernel + +namespace Loader { +class AppLoader; +enum class ResultStatus : u16; +} // namespace Loader  namespace Service::SM {  class ServiceManager; -} +} // namespace Service::SM + +namespace Tegra { +class DebugContext; +class GPU; +} // namespace Tegra  namespace VideoCore {  class RendererBase; -} +} // namespace VideoCore  namespace Core {  class ARM_Interface; +class Cpu; +class ExclusiveMonitor; +class FrameLimiter; +class PerfStats; +class TelemetrySession; + +struct PerfStatsResults;  class System {  public: @@ -125,7 +139,7 @@ public:      void PrepareReschedule();      /// Gets and resets core performance statistics -    PerfStats::Results GetAndResetPerfStats(); +    PerfStatsResults GetAndResetPerfStats();      /// Gets an ARM interface to the CPU core that is currently running      ARM_Interface& CurrentArmInterface(); @@ -197,9 +211,9 @@ public:      std::shared_ptr<Tegra::DebugContext> GetGPUDebugContext() const; -    void SetFilesystem(FileSys::VirtualFilesystem vfs); +    void SetFilesystem(std::shared_ptr<FileSys::VfsFilesystem> vfs); -    FileSys::VirtualFilesystem GetFilesystem() const; +    std::shared_ptr<FileSys::VfsFilesystem> GetFilesystem() const;  private:      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 @@  #include "common/logging/log.h"  #include "core/core.h"  #include "core/file_sys/savedata_factory.h" +#include "core/file_sys/vfs.h"  #include "core/hle/kernel/process.h"  namespace 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 @@  #include <string>  #include "common/common_types.h"  #include "common/swap.h" +#include "core/file_sys/vfs.h"  #include "core/hle/result.h"  namespace 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 @@  #include "common/assert.h"  #include "common/common_types.h"  #include "core/core.h" +#include "core/core_cpu.h"  #include "core/hle/kernel/errors.h"  #include "core/hle/kernel/object.h"  #include "core/hle/kernel/process.h" +#include "core/hle/kernel/scheduler.h"  #include "core/hle/kernel/thread.h"  #include "core/hle/result.h"  #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 @@  #include "core/hle/kernel/event.h"  #include "core/hle/kernel/handle_table.h"  #include "core/hle/kernel/hle_ipc.h" +#include "core/hle/kernel/kernel.h"  #include "core/hle/kernel/object.h"  #include "core/hle/kernel/process.h"  #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 @@  #include "core/hle/kernel/client_session.h"  #include "core/hle/kernel/handle_table.h"  #include "core/hle/kernel/hle_ipc.h" +#include "core/hle/kernel/kernel.h"  #include "core/hle/kernel/process.h"  #include "core/hle/kernel/server_session.h"  #include "core/hle/kernel/session.h" @@ -104,11 +105,10 @@ ResultCode ServerSession::HandleSyncRequest(SharedPtr<Thread> thread) {      // The ServerSession received a sync request, this means that there's new data available      // from its ClientSession, so wake up any threads that may be waiting on a svcReplyAndReceive or      // similar. - -    auto& handle_table = Core::System::GetInstance().Kernel().HandleTable();      Kernel::HLERequestContext context(this);      u32* cmd_buf = (u32*)Memory::GetPointer(thread->GetTLSAddress()); -    context.PopulateFromIncomingCommandBuffer(cmd_buf, *Core::CurrentProcess(), handle_table); +    context.PopulateFromIncomingCommandBuffer(cmd_buf, *Core::CurrentProcess(), +                                              kernel.HandleTable());      ResultCode result = RESULT_SUCCESS;      // 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 @@  #include "common/logging/log.h"  #include "common/microprofile.h"  #include "common/string_util.h" +#include "core/arm/exclusive_monitor.h"  #include "core/core.h" +#include "core/core_cpu.h"  #include "core/core_timing.h"  #include "core/hle/kernel/address_arbiter.h"  #include "core/hle/kernel/client_port.h"  #include "core/hle/kernel/client_session.h"  #include "core/hle/kernel/event.h"  #include "core/hle/kernel/handle_table.h" +#include "core/hle/kernel/kernel.h"  #include "core/hle/kernel/mutex.h"  #include "core/hle/kernel/process.h"  #include "core/hle/kernel/resource_limit.h" +#include "core/hle/kernel/scheduler.h"  #include "core/hle/kernel/shared_memory.h"  #include "core/hle/kernel/svc.h"  #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 @@  #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" @@ -23,8 +24,8 @@  #include "core/hle/kernel/kernel.h"  #include "core/hle/kernel/object.h"  #include "core/hle/kernel/process.h" +#include "core/hle/kernel/scheduler.h"  #include "core/hle/kernel/thread.h" -#include "core/hle/lock.h"  #include "core/hle/result.h"  #include "core/memory.h" 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 @@  #include <memory>  #include "common/common_types.h"  #include "core/file_sys/directory.h" +#include "core/file_sys/vfs.h"  #include "core/hle/result.h"  namespace 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 @@  #include "core/file_sys/control_metadata.h"  #include "core/file_sys/romfs_factory.h"  #include "core/gdbstub/gdbstub.h" +#include "core/hle/kernel/kernel.h"  #include "core/hle/kernel/process.h"  #include "core/hle/kernel/resource_limit.h"  #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 @@  #include "common/file_util.h"  #include "common/logging/log.h"  #include "core/core.h" +#include "core/hle/kernel/kernel.h"  #include "core/hle/kernel/process.h"  #include "core/hle/kernel/resource_limit.h"  #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 @@  #include "core/file_sys/control_metadata.h"  #include "core/file_sys/vfs_offset.h"  #include "core/gdbstub/gdbstub.h" +#include "core/hle/kernel/kernel.h"  #include "core/hle/kernel/process.h"  #include "core/hle/kernel/resource_limit.h"  #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 @@  #include "common/swap.h"  #include "core/core.h"  #include "core/gdbstub/gdbstub.h" +#include "core/hle/kernel/kernel.h"  #include "core/hle/kernel/process.h"  #include "core/hle/kernel/resource_limit.h"  #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() {      game_frames += 1;  } -PerfStats::Results PerfStats::GetAndResetStats(microseconds current_system_time_us) { +PerfStatsResults PerfStats::GetAndResetStats(microseconds current_system_time_us) {      std::lock_guard<std::mutex> lock(object_mutex);      const auto now = Clock::now(); @@ -49,7 +49,7 @@ PerfStats::Results PerfStats::GetAndResetStats(microseconds current_system_time_      const auto system_us_per_second = (current_system_time_us - reset_point_system_us) / interval; -    Results results{}; +    PerfStatsResults results{};      results.system_fps = static_cast<double>(system_frames) / interval;      results.game_fps = static_cast<double>(game_frames) / interval;      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 @@  namespace Core { +struct PerfStatsResults { +    /// System FPS (LCD VBlanks) in Hz +    double system_fps; +    /// Game FPS (GSP frame submissions) in Hz +    double game_fps; +    /// Walltime per system frame, in seconds, excluding any waits +    double frametime; +    /// Ratio of walltime / emulated time elapsed +    double emulation_speed; +}; +  /**   * Class to manage and query performance/timing statistics. All public functions of this class are   * thread-safe unless stated otherwise. @@ -18,22 +29,11 @@ class PerfStats {  public:      using Clock = std::chrono::high_resolution_clock; -    struct Results { -        /// System FPS (LCD VBlanks) in Hz -        double system_fps; -        /// Game FPS (GSP frame submissions) in Hz -        double game_fps; -        /// Walltime per system frame, in seconds, excluding any waits -        double frametime; -        /// Ratio of walltime / emulated time elapsed -        double emulation_speed; -    }; -      void BeginSystemFrame();      void EndSystemFrame();      void EndGameFrame(); -    Results GetAndResetStats(std::chrono::microseconds current_system_time_us); +    PerfStatsResults GetAndResetStats(std::chrono::microseconds current_system_time_us);      /**       * 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 @@  #include "common/file_util.h"  #include "core/core.h" +#include "core/loader/loader.h"  #include "core/settings.h"  #include "core/telemetry_session.h" | 
