mirror of
				https://git.suyu.dev/suyu/suyu
				synced 2025-10-30 23:49:01 -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(); | ||||
|   | ||||
| @@ -77,15 +77,14 @@ IAppletResource::IAppletResource(Core::System& system) | ||||
|     GetController<Controller_Stubbed>(HidController::Unknown3).SetCommonHeaderOffset(0x5000); | ||||
|  | ||||
|     // Register update callbacks | ||||
|     auto& core_timing = system.CoreTiming(); | ||||
|     pad_update_event = | ||||
|         core_timing.RegisterEvent("HID::UpdatePadCallback", [this](u64 userdata, s64 cycles_late) { | ||||
|         Core::Timing::CreateEvent("HID::UpdatePadCallback", [this](u64 userdata, s64 cycles_late) { | ||||
|             UpdateControllers(userdata, cycles_late); | ||||
|         }); | ||||
|  | ||||
|     // TODO(shinyquagsire23): Other update callbacks? (accel, gyro?) | ||||
|  | ||||
|     core_timing.ScheduleEvent(pad_update_ticks, pad_update_event); | ||||
|     system.CoreTiming().ScheduleEvent(pad_update_ticks, pad_update_event); | ||||
|  | ||||
|     ReloadInputDevices(); | ||||
| } | ||||
|   | ||||
| @@ -69,7 +69,7 @@ private: | ||||
|  | ||||
|     std::shared_ptr<Kernel::SharedMemory> shared_mem; | ||||
|  | ||||
|     Core::Timing::EventType* pad_update_event; | ||||
|     std::shared_ptr<Core::Timing::EventType> pad_update_event; | ||||
|     Core::System& system; | ||||
|  | ||||
|     std::array<std::unique_ptr<ControllerBase>, static_cast<size_t>(HidController::MaxControllers)> | ||||
|   | ||||
| @@ -37,8 +37,8 @@ NVFlinger::NVFlinger(Core::System& system) : system(system) { | ||||
|     displays.emplace_back(4, "Null", system); | ||||
|  | ||||
|     // Schedule the screen composition events | ||||
|     composition_event = system.CoreTiming().RegisterEvent( | ||||
|         "ScreenComposition", [this](u64 userdata, s64 cycles_late) { | ||||
|     composition_event = | ||||
|         Core::Timing::CreateEvent("ScreenComposition", [this](u64 userdata, s64 cycles_late) { | ||||
|             Compose(); | ||||
|             const auto ticks = | ||||
|                 Settings::values.force_30fps_mode ? frame_ticks_30fps : GetNextTicks(); | ||||
|   | ||||
| @@ -103,7 +103,7 @@ private: | ||||
|     u32 swap_interval = 1; | ||||
|  | ||||
|     /// Event that handles screen composition. | ||||
|     Core::Timing::EventType* composition_event; | ||||
|     std::shared_ptr<Core::Timing::EventType> composition_event; | ||||
|  | ||||
|     Core::System& system; | ||||
| }; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 bunnei
					bunnei