From 846c994cc9ff3b53d0d3fa3cb3b8fe0418c462c6 Mon Sep 17 00:00:00 2001 From: Fernando Sahmkow Date: Sat, 27 Nov 2021 16:26:48 +0100 Subject: Core: Reimplement Core Timing. --- src/core/core_timing.h | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) (limited to 'src/core/core_timing.h') diff --git a/src/core/core_timing.h b/src/core/core_timing.h index d27773009..5c9ee2902 100644 --- a/src/core/core_timing.h +++ b/src/core/core_timing.h @@ -14,7 +14,6 @@ #include #include "common/common_types.h" -#include "common/thread.h" #include "common/wall_clock.h" namespace Core::Timing { @@ -146,19 +145,21 @@ private: u64 event_fifo_id = 0; std::shared_ptr ev_lost; - Common::Event event{}; - Common::Event pause_event{}; - std::mutex basic_lock; - std::mutex advance_lock; - std::unique_ptr timer_thread; - std::atomic paused{}; - std::atomic paused_set{}; - std::atomic wait_set{}; - std::atomic shutting_down{}; std::atomic has_started{}; std::function on_thread_init{}; + std::vector worker_threads; + + std::condition_variable event_cv; + std::condition_variable wait_pause_cv; + std::condition_variable wait_signal_cv; + mutable std::mutex event_mutex; + + std::atomic paused_state{}; + bool is_paused{}; + bool shutting_down{}; bool is_multicore{}; + size_t pause_count{}; /// Cycle timing u64 ticks{}; -- cgit v1.2.3 From 00b09de3d9578b29271b33df1b98a37449e7373f Mon Sep 17 00:00:00 2001 From: Fernando Sahmkow Date: Sun, 28 Nov 2021 11:28:29 +0100 Subject: Core: add missing include. --- src/core/core_timing.h | 1 + 1 file changed, 1 insertion(+) (limited to 'src/core/core_timing.h') diff --git a/src/core/core_timing.h b/src/core/core_timing.h index 5c9ee2902..901bf532e 100644 --- a/src/core/core_timing.h +++ b/src/core/core_timing.h @@ -5,6 +5,7 @@ #include #include +#include #include #include #include -- cgit v1.2.3 From 38e4a144a1e6f399482eb586c1e0d5646fae9679 Mon Sep 17 00:00:00 2001 From: Fernando Sahmkow Date: Sun, 28 Nov 2021 13:47:40 +0100 Subject: Core: Protect each event from race conditions within it. --- src/core/core_timing.h | 1 + 1 file changed, 1 insertion(+) (limited to 'src/core/core_timing.h') diff --git a/src/core/core_timing.h b/src/core/core_timing.h index 901bf532e..4fef6fcce 100644 --- a/src/core/core_timing.h +++ b/src/core/core_timing.h @@ -32,6 +32,7 @@ struct EventType { TimedCallback callback; /// A pointer to the name of the event. const std::string name; + mutable std::mutex guard; }; /** -- cgit v1.2.3 From 3196d957b02266293b68a60c75c3db9a00faf1f6 Mon Sep 17 00:00:00 2001 From: Fernando Sahmkow Date: Wed, 29 Jun 2022 01:29:24 +0200 Subject: Adress Feedback. --- src/core/core_timing.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src/core/core_timing.h') diff --git a/src/core/core_timing.h b/src/core/core_timing.h index 4fef6fcce..a86553e08 100644 --- a/src/core/core_timing.h +++ b/src/core/core_timing.h @@ -132,7 +132,7 @@ private: /// Clear all pending events. This should ONLY be done on exit. void ClearPendingEvents(); - static void ThreadEntry(CoreTiming& instance); + static void ThreadEntry(CoreTiming& instance, size_t id); void ThreadLoop(); std::unique_ptr clock; @@ -145,6 +145,7 @@ private: // accomodated by the standard adaptor class. std::vector event_queue; u64 event_fifo_id = 0; + std::atomic pending_events{}; std::shared_ptr ev_lost; std::atomic has_started{}; @@ -156,6 +157,7 @@ private: std::condition_variable wait_pause_cv; std::condition_variable wait_signal_cv; mutable std::mutex event_mutex; + mutable std::mutex sequence_mutex; std::atomic paused_state{}; bool is_paused{}; -- cgit v1.2.3