forked from eden-emu/eden
		
	Core timing: use only one thread.
This commit is contained in:
		
							parent
							
								
									3f3c2dc20f
								
							
						
					
					
						commit
						d3cb9201f1
					
				
					 2 changed files with 2 additions and 12 deletions
				
			
		|  | @ -61,12 +61,7 @@ void CoreTiming::Initialize(std::function<void()>&& on_thread_init_) { | ||||||
|     const auto empty_timed_callback = [](std::uintptr_t, std::chrono::nanoseconds) {}; |     const auto empty_timed_callback = [](std::uintptr_t, std::chrono::nanoseconds) {}; | ||||||
|     ev_lost = CreateEvent("_lost_event", empty_timed_callback); |     ev_lost = CreateEvent("_lost_event", empty_timed_callback); | ||||||
|     if (is_multicore) { |     if (is_multicore) { | ||||||
|         const auto hardware_concurrency = std::thread::hardware_concurrency(); |         worker_threads.emplace_back(ThreadEntry, std::ref(*this), 0); | ||||||
|         size_t id = 0; |  | ||||||
|         worker_threads.emplace_back(ThreadEntry, std::ref(*this), id++); |  | ||||||
|         if (hardware_concurrency > 8) { |  | ||||||
|             worker_threads.emplace_back(ThreadEntry, std::ref(*this), id++); |  | ||||||
|         } |  | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -228,14 +223,11 @@ std::optional<s64> CoreTiming::Advance() { | ||||||
|         event_queue.pop_back(); |         event_queue.pop_back(); | ||||||
| 
 | 
 | ||||||
|         if (const auto event_type{evt.type.lock()}) { |         if (const auto event_type{evt.type.lock()}) { | ||||||
|             sequence_mutex.lock(); | 
 | ||||||
|             event_mutex.unlock(); |             event_mutex.unlock(); | ||||||
| 
 | 
 | ||||||
|             event_type->guard.lock(); |  | ||||||
|             sequence_mutex.unlock(); |  | ||||||
|             const s64 delay = static_cast<s64>(GetGlobalTimeNs().count() - evt.time); |             const s64 delay = static_cast<s64>(GetGlobalTimeNs().count() - evt.time); | ||||||
|             event_type->callback(evt.user_data, std::chrono::nanoseconds{delay}); |             event_type->callback(evt.user_data, std::chrono::nanoseconds{delay}); | ||||||
|             event_type->guard.unlock(); |  | ||||||
| 
 | 
 | ||||||
|             event_mutex.lock(); |             event_mutex.lock(); | ||||||
|             pending_events.fetch_sub(1, std::memory_order_relaxed); |             pending_events.fetch_sub(1, std::memory_order_relaxed); | ||||||
|  |  | ||||||
|  | @ -32,7 +32,6 @@ struct EventType { | ||||||
|     TimedCallback callback; |     TimedCallback callback; | ||||||
|     /// A pointer to the name of the event.
 |     /// A pointer to the name of the event.
 | ||||||
|     const std::string name; |     const std::string name; | ||||||
|     mutable std::mutex guard; |  | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  | @ -157,7 +156,6 @@ private: | ||||||
|     std::condition_variable wait_pause_cv; |     std::condition_variable wait_pause_cv; | ||||||
|     std::condition_variable wait_signal_cv; |     std::condition_variable wait_signal_cv; | ||||||
|     mutable std::mutex event_mutex; |     mutable std::mutex event_mutex; | ||||||
|     mutable std::mutex sequence_mutex; |  | ||||||
| 
 | 
 | ||||||
|     std::atomic<bool> paused_state{}; |     std::atomic<bool> paused_state{}; | ||||||
|     bool is_paused{}; |     bool is_paused{}; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Fernando Sahmkow
						Fernando Sahmkow