diff options
Diffstat (limited to 'src/common')
| -rw-r--r-- | src/common/logging/backend.cpp | 1 | ||||
| -rw-r--r-- | src/common/logging/log.h | 1 | ||||
| -rw-r--r-- | src/common/ring_buffer.h | 14 | ||||
| -rw-r--r-- | src/common/thread.h | 8 |
4 files changed, 13 insertions, 11 deletions
diff --git a/src/common/logging/backend.cpp b/src/common/logging/backend.cpp index efd776db6..9f5918851 100644 --- a/src/common/logging/backend.cpp +++ b/src/common/logging/backend.cpp | |||
| @@ -183,6 +183,7 @@ void FileBackend::Write(const Entry& entry) { | |||
| 183 | SUB(Service, FS) \ | 183 | SUB(Service, FS) \ |
| 184 | SUB(Service, GRC) \ | 184 | SUB(Service, GRC) \ |
| 185 | SUB(Service, HID) \ | 185 | SUB(Service, HID) \ |
| 186 | SUB(Service, IRS) \ | ||
| 186 | SUB(Service, LBL) \ | 187 | SUB(Service, LBL) \ |
| 187 | SUB(Service, LDN) \ | 188 | SUB(Service, LDN) \ |
| 188 | SUB(Service, LDR) \ | 189 | SUB(Service, LDR) \ |
diff --git a/src/common/logging/log.h b/src/common/logging/log.h index 4d577524f..abbd056ee 100644 --- a/src/common/logging/log.h +++ b/src/common/logging/log.h | |||
| @@ -70,6 +70,7 @@ enum class Class : ClassType { | |||
| 70 | Service_FS, ///< The FS (Filesystem) service | 70 | Service_FS, ///< The FS (Filesystem) service |
| 71 | Service_GRC, ///< The game recording service | 71 | Service_GRC, ///< The game recording service |
| 72 | Service_HID, ///< The HID (Human interface device) service | 72 | Service_HID, ///< The HID (Human interface device) service |
| 73 | Service_IRS, ///< The IRS service | ||
| 73 | Service_LBL, ///< The LBL (LCD backlight) service | 74 | Service_LBL, ///< The LBL (LCD backlight) service |
| 74 | Service_LDN, ///< The LDN (Local domain network) service | 75 | Service_LDN, ///< The LDN (Local domain network) service |
| 75 | Service_LDR, ///< The loader service | 76 | Service_LDR, ///< The loader service |
diff --git a/src/common/ring_buffer.h b/src/common/ring_buffer.h index 45926c9ec..abe3b4dc2 100644 --- a/src/common/ring_buffer.h +++ b/src/common/ring_buffer.h | |||
| @@ -9,6 +9,7 @@ | |||
| 9 | #include <atomic> | 9 | #include <atomic> |
| 10 | #include <cstddef> | 10 | #include <cstddef> |
| 11 | #include <cstring> | 11 | #include <cstring> |
| 12 | #include <new> | ||
| 12 | #include <type_traits> | 13 | #include <type_traits> |
| 13 | #include <vector> | 14 | #include <vector> |
| 14 | #include "common/common_types.h" | 15 | #include "common/common_types.h" |
| @@ -29,7 +30,7 @@ class RingBuffer { | |||
| 29 | static_assert(capacity < std::numeric_limits<std::size_t>::max() / 2 / granularity); | 30 | static_assert(capacity < std::numeric_limits<std::size_t>::max() / 2 / granularity); |
| 30 | static_assert((capacity & (capacity - 1)) == 0, "capacity must be a power of two"); | 31 | static_assert((capacity & (capacity - 1)) == 0, "capacity must be a power of two"); |
| 31 | // Ensure lock-free. | 32 | // Ensure lock-free. |
| 32 | static_assert(std::atomic<std::size_t>::is_always_lock_free); | 33 | static_assert(std::atomic_size_t::is_always_lock_free); |
| 33 | 34 | ||
| 34 | public: | 35 | public: |
| 35 | /// Pushes slots into the ring buffer | 36 | /// Pushes slots into the ring buffer |
| @@ -102,8 +103,15 @@ public: | |||
| 102 | private: | 103 | private: |
| 103 | // It is important to align the below variables for performance reasons: | 104 | // It is important to align the below variables for performance reasons: |
| 104 | // Having them on the same cache-line would result in false-sharing between them. | 105 | // Having them on the same cache-line would result in false-sharing between them. |
| 105 | alignas(128) std::atomic<std::size_t> m_read_index{0}; | 106 | // TODO: Remove this ifdef whenever clang and GCC support |
| 106 | alignas(128) std::atomic<std::size_t> m_write_index{0}; | 107 | // std::hardware_destructive_interference_size. |
| 108 | #if defined(_MSC_VER) && _MSC_VER >= 1911 | ||
| 109 | alignas(std::hardware_destructive_interference_size) std::atomic_size_t m_read_index{0}; | ||
| 110 | alignas(std::hardware_destructive_interference_size) std::atomic_size_t m_write_index{0}; | ||
| 111 | #else | ||
| 112 | alignas(128) std::atomic_size_t m_read_index{0}; | ||
| 113 | alignas(128) std::atomic_size_t m_write_index{0}; | ||
| 114 | #endif | ||
| 107 | 115 | ||
| 108 | std::array<T, granularity * capacity> m_data; | 116 | std::array<T, granularity * capacity> m_data; |
| 109 | }; | 117 | }; |
diff --git a/src/common/thread.h b/src/common/thread.h index 12a1c095c..6cbdb96a3 100644 --- a/src/common/thread.h +++ b/src/common/thread.h | |||
| @@ -87,14 +87,6 @@ private: | |||
| 87 | 87 | ||
| 88 | void SleepCurrentThread(int ms); | 88 | void SleepCurrentThread(int ms); |
| 89 | void SwitchCurrentThread(); // On Linux, this is equal to sleep 1ms | 89 | void SwitchCurrentThread(); // On Linux, this is equal to sleep 1ms |
| 90 | |||
| 91 | // Use this function during a spin-wait to make the current thread | ||
| 92 | // relax while another thread is working. This may be more efficient | ||
| 93 | // than using events because event functions use kernel calls. | ||
| 94 | inline void YieldCPU() { | ||
| 95 | std::this_thread::yield(); | ||
| 96 | } | ||
| 97 | |||
| 98 | void SetCurrentThreadName(const char* name); | 90 | void SetCurrentThreadName(const char* name); |
| 99 | 91 | ||
| 100 | } // namespace Common | 92 | } // namespace Common |