mirror of
				https://git.suyu.dev/suyu/suyu
				synced 2025-10-30 15:39:02 -05:00 
			
		
		
		
	core_timing: Use better reference tracking for EventType. (#3159)
* core_timing: Use better reference tracking for EventType. - Moves ownership of the event to the caller, ensuring we don't fire events for destroyed objects. - Removes need for unique names - we won't be using this for save states anyways.
This commit is contained in:
		| @@ -139,12 +139,12 @@ struct KernelCore::Impl { | ||||
|  | ||||
|     void InitializeThreads() { | ||||
|         thread_wakeup_event_type = | ||||
|             system.CoreTiming().RegisterEvent("ThreadWakeupCallback", ThreadWakeupCallback); | ||||
|             Core::Timing::CreateEvent("ThreadWakeupCallback", ThreadWakeupCallback); | ||||
|     } | ||||
|  | ||||
|     void InitializePreemption() { | ||||
|         preemption_event = system.CoreTiming().RegisterEvent( | ||||
|             "PreemptionCallback", [this](u64 userdata, s64 cycles_late) { | ||||
|         preemption_event = | ||||
|             Core::Timing::CreateEvent("PreemptionCallback", [this](u64 userdata, s64 cycles_late) { | ||||
|                 global_scheduler.PreemptThreads(); | ||||
|                 s64 time_interval = Core::Timing::msToCycles(std::chrono::milliseconds(10)); | ||||
|                 system.CoreTiming().ScheduleEvent(time_interval, preemption_event); | ||||
| @@ -166,8 +166,9 @@ struct KernelCore::Impl { | ||||
|  | ||||
|     std::shared_ptr<ResourceLimit> system_resource_limit; | ||||
|  | ||||
|     Core::Timing::EventType* thread_wakeup_event_type = nullptr; | ||||
|     Core::Timing::EventType* preemption_event = nullptr; | ||||
|     std::shared_ptr<Core::Timing::EventType> thread_wakeup_event_type; | ||||
|     std::shared_ptr<Core::Timing::EventType> preemption_event; | ||||
|  | ||||
|     // TODO(yuriks): This can be removed if Thread objects are explicitly pooled in the future, | ||||
|     // allowing us to simply use a pool index or similar. | ||||
|     Kernel::HandleTable thread_wakeup_callback_handle_table; | ||||
| @@ -269,7 +270,7 @@ u64 KernelCore::CreateNewUserProcessID() { | ||||
|     return impl->next_user_process_id++; | ||||
| } | ||||
|  | ||||
| Core::Timing::EventType* KernelCore::ThreadWakeupCallbackEventType() const { | ||||
| const std::shared_ptr<Core::Timing::EventType>& KernelCore::ThreadWakeupCallbackEventType() const { | ||||
|     return impl->thread_wakeup_event_type; | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -113,7 +113,7 @@ private: | ||||
|     u64 CreateNewThreadID(); | ||||
|  | ||||
|     /// Retrieves the event type used for thread wakeup callbacks. | ||||
|     Core::Timing::EventType* ThreadWakeupCallbackEventType() const; | ||||
|     const std::shared_ptr<Core::Timing::EventType>& ThreadWakeupCallbackEventType() const; | ||||
|  | ||||
|     /// Provides a reference to the thread wakeup callback handle table. | ||||
|     Kernel::HandleTable& ThreadWakeupCallbackHandleTable(); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 bunnei
					bunnei