mirror of
				https://git.zaroz.cloud/nintendo-back-up/yuzu/yuzu-mainline.git
				synced 2025-03-21 01:53:15 +00:00 
			
		
		
		
	Core::CoreTiming: add UnscheduleEventThreadsafe
This commit is contained in:
		
							parent
							
								
									e67630b51e
								
							
						
					
					
						commit
						eab35c8235
					
				| @ -56,6 +56,9 @@ static u64 event_fifo_id; | ||||
| // to the event_queue by the emu thread
 | ||||
| static Common::MPSCQueue<Event, false> ts_queue; | ||||
| 
 | ||||
| // the queue for unscheduling the events from other threads threadsafe
 | ||||
| static Common::MPSCQueue<std::pair<const EventType*, u64>, false> unschedule_queue; | ||||
| 
 | ||||
| constexpr int MAX_SLICE_LENGTH = 20000; | ||||
| 
 | ||||
| static s64 idled_cycles; | ||||
| @ -158,6 +161,10 @@ void UnscheduleEvent(const EventType* event_type, u64 userdata) { | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void UnscheduleEventThreadsafe(const EventType* event_type, u64 userdata) { | ||||
|     unschedule_queue.Push(std::make_pair(event_type, userdata)); | ||||
| } | ||||
| 
 | ||||
| void RemoveEvent(const EventType* event_type) { | ||||
|     auto itr = std::remove_if(event_queue.begin(), event_queue.end(), | ||||
|                               [&](const Event& e) { return e.type == event_type; }); | ||||
| @ -194,6 +201,9 @@ void MoveEvents() { | ||||
| 
 | ||||
| void Advance() { | ||||
|     MoveEvents(); | ||||
|     for (std::pair<const EventType*, u64> ev; unschedule_queue.Pop(ev);) { | ||||
|         UnscheduleEvent(ev.first, ev.second); | ||||
|     } | ||||
| 
 | ||||
|     int cycles_executed = slice_length - downcount; | ||||
|     global_timer += cycles_executed; | ||||
|  | ||||
| @ -65,6 +65,7 @@ void ScheduleEvent(s64 cycles_into_future, const EventType* event_type, u64 user | ||||
| void ScheduleEventThreadsafe(s64 cycles_into_future, const EventType* event_type, u64 userdata); | ||||
| 
 | ||||
| void UnscheduleEvent(const EventType* event_type, u64 userdata); | ||||
| void UnscheduleEventThreadsafe(const EventType* event_type, u64 userdata); | ||||
| 
 | ||||
| /// We only permit one event of each type in the queue at a time.
 | ||||
| void RemoveEvent(const EventType* event_type); | ||||
|  | ||||
| @ -167,7 +167,7 @@ void Thread::WakeAfterDelay(s64 nanoseconds) { | ||||
| } | ||||
| 
 | ||||
| void Thread::CancelWakeupTimer() { | ||||
|     CoreTiming::UnscheduleEvent(ThreadWakeupEventType, callback_handle); | ||||
|     CoreTiming::UnscheduleEventThreadsafe(ThreadWakeupEventType, callback_handle); | ||||
| } | ||||
| 
 | ||||
| static boost::optional<s32> GetNextProcessorId(u64 mask) { | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 B3n30
						B3n30