From b8459d27789fbaeeccac54ed1a61da8f064cd9e0 Mon Sep 17 00:00:00 2001 From: MerryMage Date: Tue, 24 Jul 2018 11:02:53 +0100 Subject: [PATCH 1/2] CMakeLists: Sort filenames --- src/core/CMakeLists.txt | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index 6b6efbc00f..44b13f4e6e 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -114,26 +114,26 @@ add_library(core STATIC hle/service/apm/apm.h hle/service/apm/interface.cpp hle/service/apm/interface.h - hle/service/audio/audio.cpp - hle/service/audio/audio.h hle/service/audio/audin_u.cpp hle/service/audio/audin_u.h + hle/service/audio/audio.cpp + hle/service/audio/audio.h hle/service/audio/audout_u.cpp hle/service/audio/audout_u.h hle/service/audio/audrec_u.cpp hle/service/audio/audrec_u.h hle/service/audio/audren_u.cpp - hle/service/audio/audren_u.h hle/service/audio/audren_u.cpp hle/service/audio/audren_u.h + hle/service/audio/audren_u.h hle/service/audio/codecctl.cpp hle/service/audio/codecctl.h hle/service/audio/hwopus.cpp hle/service/audio/hwopus.h - hle/service/bcat/module.cpp - hle/service/bcat/module.h hle/service/bcat/bcat.cpp hle/service/bcat/bcat.h + hle/service/bcat/module.cpp + hle/service/bcat/module.h hle/service/fatal/fatal.cpp hle/service/fatal/fatal.h hle/service/fatal/fatal_p.cpp @@ -156,6 +156,10 @@ add_library(core STATIC hle/service/lm/lm.h hle/service/mm/mm_u.cpp hle/service/mm/mm_u.h + hle/service/nfp/nfp.cpp + hle/service/nfp/nfp.h + hle/service/nfp/nfp_user.cpp + hle/service/nfp/nfp_user.h hle/service/nifm/nifm.cpp hle/service/nifm/nifm.h hle/service/nifm/nifm_a.cpp @@ -164,10 +168,6 @@ add_library(core STATIC hle/service/nifm/nifm_s.h hle/service/nifm/nifm_u.cpp hle/service/nifm/nifm_u.h - hle/service/nfp/nfp.cpp - hle/service/nfp/nfp.h - hle/service/nfp/nfp_user.cpp - hle/service/nfp/nfp_user.h hle/service/ns/ns.cpp hle/service/ns/ns.h hle/service/ns/pl_u.cpp From 44646e2ea0b87dffd9a1d175c53e3cea67bce344 Mon Sep 17 00:00:00 2001 From: MerryMage Date: Tue, 24 Jul 2018 11:03:24 +0100 Subject: [PATCH 2/2] core_timing: Split off utility functions into core_timing_util --- src/core/CMakeLists.txt | 2 + src/core/core_timing.cpp | 53 +--------------- src/core/core_timing.h | 53 ---------------- src/core/core_timing_util.cpp | 63 +++++++++++++++++++ src/core/core_timing_util.h | 64 ++++++++++++++++++++ src/core/hle/kernel/thread.cpp | 1 + src/core/hle/kernel/timer.cpp | 1 + src/core/hle/service/audio/audout_u.cpp | 1 + src/core/hle/service/audio/audren_u.cpp | 1 + src/core/hle/service/hid/hid.cpp | 1 + src/core/hle/service/nvflinger/nvflinger.cpp | 1 + src/core/hle/service/time/time.cpp | 1 + 12 files changed, 137 insertions(+), 105 deletions(-) create mode 100644 src/core/core_timing_util.cpp create mode 100644 src/core/core_timing_util.h diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index 44b13f4e6e..c5031544d0 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -10,6 +10,8 @@ add_library(core STATIC core_cpu.h core_timing.cpp core_timing.h + core_timing_util.cpp + core_timing_util.h file_sys/content_archive.cpp file_sys/content_archive.h file_sys/control_metadata.cpp diff --git a/src/core/core_timing.cpp b/src/core/core_timing.cpp index 50d1e3fc96..a1b6f96f10 100644 --- a/src/core/core_timing.cpp +++ b/src/core/core_timing.cpp @@ -5,17 +5,15 @@ #include "core/core_timing.h" #include -#include -#include #include #include #include #include #include #include "common/assert.h" -#include "common/logging/log.h" #include "common/thread.h" #include "common/threadsafe_queue.h" +#include "core/core_timing_util.h" namespace CoreTiming { @@ -59,7 +57,6 @@ static u64 event_fifo_id; static Common::MPSCQueue ts_queue; constexpr int MAX_SLICE_LENGTH = 20000; -constexpr u64 MAX_VALUE_TO_MULTIPLY = std::numeric_limits::max() / BASE_CLOCK_RATE; static s64 idled_cycles; @@ -72,54 +69,6 @@ static EventType* ev_lost = nullptr; static void EmptyTimedCallback(u64 userdata, s64 cyclesLate) {} -s64 usToCycles(s64 us) { - if (us / 1000000 > MAX_VALUE_TO_MULTIPLY) { - LOG_ERROR(Core_Timing, "Integer overflow, use max value"); - return std::numeric_limits::max(); - } - if (us > MAX_VALUE_TO_MULTIPLY) { - LOG_DEBUG(Core_Timing, "Time very big, do rounding"); - return BASE_CLOCK_RATE * (us / 1000000); - } - return (BASE_CLOCK_RATE * us) / 1000000; -} - -s64 usToCycles(u64 us) { - if (us / 1000000 > MAX_VALUE_TO_MULTIPLY) { - LOG_ERROR(Core_Timing, "Integer overflow, use max value"); - return std::numeric_limits::max(); - } - if (us > MAX_VALUE_TO_MULTIPLY) { - LOG_DEBUG(Core_Timing, "Time very big, do rounding"); - return BASE_CLOCK_RATE * static_cast(us / 1000000); - } - return (BASE_CLOCK_RATE * static_cast(us)) / 1000000; -} - -s64 nsToCycles(s64 ns) { - if (ns / 1000000000 > MAX_VALUE_TO_MULTIPLY) { - LOG_ERROR(Core_Timing, "Integer overflow, use max value"); - return std::numeric_limits::max(); - } - if (ns > MAX_VALUE_TO_MULTIPLY) { - LOG_DEBUG(Core_Timing, "Time very big, do rounding"); - return BASE_CLOCK_RATE * (ns / 1000000000); - } - return (BASE_CLOCK_RATE * ns) / 1000000000; -} - -s64 nsToCycles(u64 ns) { - if (ns / 1000000000 > MAX_VALUE_TO_MULTIPLY) { - LOG_ERROR(Core_Timing, "Integer overflow, use max value"); - return std::numeric_limits::max(); - } - if (ns > MAX_VALUE_TO_MULTIPLY) { - LOG_DEBUG(Core_Timing, "Time very big, do rounding"); - return BASE_CLOCK_RATE * (static_cast(ns) / 1000000000); - } - return (BASE_CLOCK_RATE * static_cast(ns)) / 1000000000; -} - EventType* RegisterEvent(const std::string& name, TimedCallback callback) { // check for existing type with same name. // we want event type names to remain unique so that we can use them for serialization. diff --git a/src/core/core_timing.h b/src/core/core_timing.h index dc31124a83..7fe6380ad5 100644 --- a/src/core/core_timing.h +++ b/src/core/core_timing.h @@ -23,59 +23,6 @@ namespace CoreTiming { -// The below clock rate is based on Switch's clockspeed being widely known as 1.020GHz -// The exact value used is of course unverified. -constexpr u64 BASE_CLOCK_RATE = 1019215872; // Switch clock speed is 1020MHz un/docked - -inline s64 msToCycles(int ms) { - // since ms is int there is no way to overflow - return BASE_CLOCK_RATE * static_cast(ms) / 1000; -} - -inline s64 msToCycles(float ms) { - return static_cast(BASE_CLOCK_RATE * (0.001f) * ms); -} - -inline s64 msToCycles(double ms) { - return static_cast(BASE_CLOCK_RATE * (0.001) * ms); -} - -inline s64 usToCycles(float us) { - return static_cast(BASE_CLOCK_RATE * (0.000001f) * us); -} - -inline s64 usToCycles(int us) { - return (BASE_CLOCK_RATE * static_cast(us) / 1000000); -} - -s64 usToCycles(s64 us); - -s64 usToCycles(u64 us); - -inline s64 nsToCycles(float ns) { - return static_cast(BASE_CLOCK_RATE * (0.000000001f) * ns); -} - -inline s64 nsToCycles(int ns) { - return BASE_CLOCK_RATE * static_cast(ns) / 1000000000; -} - -s64 nsToCycles(s64 ns); - -s64 nsToCycles(u64 ns); - -inline u64 cyclesToNs(s64 cycles) { - return cycles * 1000000000 / BASE_CLOCK_RATE; -} - -inline s64 cyclesToUs(s64 cycles) { - return cycles * 1000000 / BASE_CLOCK_RATE; -} - -inline u64 cyclesToMs(s64 cycles) { - return cycles * 1000 / BASE_CLOCK_RATE; -} - /** * CoreTiming begins at the boundary of timing slice -1. An initial call to Advance() is * required to end slice -1 and start slice 0 before the first cycle of code is executed. diff --git a/src/core/core_timing_util.cpp b/src/core/core_timing_util.cpp new file mode 100644 index 0000000000..73dea4edb3 --- /dev/null +++ b/src/core/core_timing_util.cpp @@ -0,0 +1,63 @@ +// Copyright 2008 Dolphin Emulator Project / 2017 Citra Emulator Project +// Licensed under GPLv2+ +// Refer to the license.txt file included. + +#include "core/core_timing_util.h" + +#include +#include +#include "common/logging/log.h" + +namespace CoreTiming { + +constexpr u64 MAX_VALUE_TO_MULTIPLY = std::numeric_limits::max() / BASE_CLOCK_RATE; + +s64 usToCycles(s64 us) { + if (us / 1000000 > MAX_VALUE_TO_MULTIPLY) { + LOG_ERROR(Core_Timing, "Integer overflow, use max value"); + return std::numeric_limits::max(); + } + if (us > MAX_VALUE_TO_MULTIPLY) { + LOG_DEBUG(Core_Timing, "Time very big, do rounding"); + return BASE_CLOCK_RATE * (us / 1000000); + } + return (BASE_CLOCK_RATE * us) / 1000000; +} + +s64 usToCycles(u64 us) { + if (us / 1000000 > MAX_VALUE_TO_MULTIPLY) { + LOG_ERROR(Core_Timing, "Integer overflow, use max value"); + return std::numeric_limits::max(); + } + if (us > MAX_VALUE_TO_MULTIPLY) { + LOG_DEBUG(Core_Timing, "Time very big, do rounding"); + return BASE_CLOCK_RATE * static_cast(us / 1000000); + } + return (BASE_CLOCK_RATE * static_cast(us)) / 1000000; +} + +s64 nsToCycles(s64 ns) { + if (ns / 1000000000 > MAX_VALUE_TO_MULTIPLY) { + LOG_ERROR(Core_Timing, "Integer overflow, use max value"); + return std::numeric_limits::max(); + } + if (ns > MAX_VALUE_TO_MULTIPLY) { + LOG_DEBUG(Core_Timing, "Time very big, do rounding"); + return BASE_CLOCK_RATE * (ns / 1000000000); + } + return (BASE_CLOCK_RATE * ns) / 1000000000; +} + +s64 nsToCycles(u64 ns) { + if (ns / 1000000000 > MAX_VALUE_TO_MULTIPLY) { + LOG_ERROR(Core_Timing, "Integer overflow, use max value"); + return std::numeric_limits::max(); + } + if (ns > MAX_VALUE_TO_MULTIPLY) { + LOG_DEBUG(Core_Timing, "Time very big, do rounding"); + return BASE_CLOCK_RATE * (static_cast(ns) / 1000000000); + } + return (BASE_CLOCK_RATE * static_cast(ns)) / 1000000000; +} + +} // namespace CoreTiming diff --git a/src/core/core_timing_util.h b/src/core/core_timing_util.h new file mode 100644 index 0000000000..5c37187826 --- /dev/null +++ b/src/core/core_timing_util.h @@ -0,0 +1,64 @@ +// Copyright 2008 Dolphin Emulator Project / 2017 Citra Emulator Project +// Licensed under GPLv2+ +// Refer to the license.txt file included. + +#pragma once + +#include "common/common_types.h" + +namespace CoreTiming { + +// The below clock rate is based on Switch's clockspeed being widely known as 1.020GHz +// The exact value used is of course unverified. +constexpr u64 BASE_CLOCK_RATE = 1019215872; // Switch clock speed is 1020MHz un/docked + +inline s64 msToCycles(int ms) { + // since ms is int there is no way to overflow + return BASE_CLOCK_RATE * static_cast(ms) / 1000; +} + +inline s64 msToCycles(float ms) { + return static_cast(BASE_CLOCK_RATE * (0.001f) * ms); +} + +inline s64 msToCycles(double ms) { + return static_cast(BASE_CLOCK_RATE * (0.001) * ms); +} + +inline s64 usToCycles(float us) { + return static_cast(BASE_CLOCK_RATE * (0.000001f) * us); +} + +inline s64 usToCycles(int us) { + return (BASE_CLOCK_RATE * static_cast(us) / 1000000); +} + +s64 usToCycles(s64 us); + +s64 usToCycles(u64 us); + +inline s64 nsToCycles(float ns) { + return static_cast(BASE_CLOCK_RATE * (0.000000001f) * ns); +} + +inline s64 nsToCycles(int ns) { + return BASE_CLOCK_RATE * static_cast(ns) / 1000000000; +} + +s64 nsToCycles(s64 ns); + +s64 nsToCycles(u64 ns); + +inline u64 cyclesToNs(s64 cycles) { + return cycles * 1000000000 / BASE_CLOCK_RATE; +} + +inline s64 cyclesToUs(s64 cycles) { + return cycles * 1000000 / BASE_CLOCK_RATE; +} + +inline u64 cyclesToMs(s64 cycles) { + return cycles * 1000 / BASE_CLOCK_RATE; +} + +} // namespace CoreTiming diff --git a/src/core/hle/kernel/thread.cpp b/src/core/hle/kernel/thread.cpp index cd85c4b7c2..94735c86eb 100644 --- a/src/core/hle/kernel/thread.cpp +++ b/src/core/hle/kernel/thread.cpp @@ -14,6 +14,7 @@ #include "core/arm/arm_interface.h" #include "core/core.h" #include "core/core_timing.h" +#include "core/core_timing_util.h" #include "core/hle/kernel/errors.h" #include "core/hle/kernel/handle_table.h" #include "core/hle/kernel/kernel.h" diff --git a/src/core/hle/kernel/timer.cpp b/src/core/hle/kernel/timer.cpp index 0141125e4f..904a3d0a51 100644 --- a/src/core/hle/kernel/timer.cpp +++ b/src/core/hle/kernel/timer.cpp @@ -6,6 +6,7 @@ #include "common/assert.h" #include "common/logging/log.h" #include "core/core_timing.h" +#include "core/core_timing_util.h" #include "core/hle/kernel/handle_table.h" #include "core/hle/kernel/kernel.h" #include "core/hle/kernel/thread.h" diff --git a/src/core/hle/service/audio/audout_u.cpp b/src/core/hle/service/audio/audout_u.cpp index 154bc12daf..1dcd84d98e 100644 --- a/src/core/hle/service/audio/audout_u.cpp +++ b/src/core/hle/service/audio/audout_u.cpp @@ -6,6 +6,7 @@ #include #include "common/logging/log.h" #include "core/core_timing.h" +#include "core/core_timing_util.h" #include "core/hle/ipc_helpers.h" #include "core/hle/kernel/event.h" #include "core/hle/kernel/hle_ipc.h" diff --git a/src/core/hle/service/audio/audren_u.cpp b/src/core/hle/service/audio/audren_u.cpp index e623f4f8ef..6aed9e2fa0 100644 --- a/src/core/hle/service/audio/audren_u.cpp +++ b/src/core/hle/service/audio/audren_u.cpp @@ -7,6 +7,7 @@ #include "common/alignment.h" #include "common/logging/log.h" #include "core/core_timing.h" +#include "core/core_timing_util.h" #include "core/hle/ipc_helpers.h" #include "core/hle/kernel/event.h" #include "core/hle/kernel/hle_ipc.h" diff --git a/src/core/hle/service/hid/hid.cpp b/src/core/hle/service/hid/hid.cpp index 475a0a5cf3..9a02ba6863 100644 --- a/src/core/hle/service/hid/hid.cpp +++ b/src/core/hle/service/hid/hid.cpp @@ -5,6 +5,7 @@ #include #include "common/logging/log.h" #include "core/core_timing.h" +#include "core/core_timing_util.h" #include "core/frontend/emu_window.h" #include "core/frontend/input.h" #include "core/hle/ipc_helpers.h" diff --git a/src/core/hle/service/nvflinger/nvflinger.cpp b/src/core/hle/service/nvflinger/nvflinger.cpp index 1fca1743da..5344441e1d 100644 --- a/src/core/hle/service/nvflinger/nvflinger.cpp +++ b/src/core/hle/service/nvflinger/nvflinger.cpp @@ -9,6 +9,7 @@ #include "common/scope_exit.h" #include "core/core.h" #include "core/core_timing.h" +#include "core/core_timing_util.h" #include "core/hle/service/nvdrv/devices/nvdisp_disp0.h" #include "core/hle/service/nvdrv/nvdrv.h" #include "core/hle/service/nvflinger/buffer_queue.h" diff --git a/src/core/hle/service/time/time.cpp b/src/core/hle/service/time/time.cpp index 507ae95f4e..f60bf7b910 100644 --- a/src/core/hle/service/time/time.cpp +++ b/src/core/hle/service/time/time.cpp @@ -6,6 +6,7 @@ #include #include "common/logging/log.h" #include "core/core_timing.h" +#include "core/core_timing_util.h" #include "core/hle/ipc_helpers.h" #include "core/hle/kernel/client_port.h" #include "core/hle/kernel/client_session.h"