diff options
| author | 2019-11-26 21:48:56 -0500 | |
|---|---|---|
| committer | 2019-11-26 21:48:56 -0500 | |
| commit | ec0ce96c568b2b610c5218efd7faa5d9a19350f8 (patch) | |
| tree | 61b5133e3cc6a9edf3b45c5fe6604493689f6769 /src/core/hle | |
| parent | Merge pull request #3164 from ReinUsesLisp/half-cast-float (diff) | |
| download | yuzu-ec0ce96c568b2b610c5218efd7faa5d9a19350f8.tar.gz yuzu-ec0ce96c568b2b610c5218efd7faa5d9a19350f8.tar.xz yuzu-ec0ce96c568b2b610c5218efd7faa5d9a19350f8.zip | |
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.
Diffstat (limited to 'src/core/hle')
| -rw-r--r-- | src/core/hle/kernel/kernel.cpp | 13 | ||||
| -rw-r--r-- | src/core/hle/kernel/kernel.h | 2 | ||||
| -rw-r--r-- | src/core/hle/service/hid/hid.cpp | 5 | ||||
| -rw-r--r-- | src/core/hle/service/hid/hid.h | 2 | ||||
| -rw-r--r-- | src/core/hle/service/nvflinger/nvflinger.cpp | 4 | ||||
| -rw-r--r-- | src/core/hle/service/nvflinger/nvflinger.h | 2 |
6 files changed, 14 insertions, 14 deletions
diff --git a/src/core/hle/kernel/kernel.cpp b/src/core/hle/kernel/kernel.cpp index 63ad07950..a9851113a 100644 --- a/src/core/hle/kernel/kernel.cpp +++ b/src/core/hle/kernel/kernel.cpp | |||
| @@ -139,12 +139,12 @@ struct KernelCore::Impl { | |||
| 139 | 139 | ||
| 140 | void InitializeThreads() { | 140 | void InitializeThreads() { |
| 141 | thread_wakeup_event_type = | 141 | thread_wakeup_event_type = |
| 142 | system.CoreTiming().RegisterEvent("ThreadWakeupCallback", ThreadWakeupCallback); | 142 | Core::Timing::CreateEvent("ThreadWakeupCallback", ThreadWakeupCallback); |
| 143 | } | 143 | } |
| 144 | 144 | ||
| 145 | void InitializePreemption() { | 145 | void InitializePreemption() { |
| 146 | preemption_event = system.CoreTiming().RegisterEvent( | 146 | preemption_event = |
| 147 | "PreemptionCallback", [this](u64 userdata, s64 cycles_late) { | 147 | Core::Timing::CreateEvent("PreemptionCallback", [this](u64 userdata, s64 cycles_late) { |
| 148 | global_scheduler.PreemptThreads(); | 148 | global_scheduler.PreemptThreads(); |
| 149 | s64 time_interval = Core::Timing::msToCycles(std::chrono::milliseconds(10)); | 149 | s64 time_interval = Core::Timing::msToCycles(std::chrono::milliseconds(10)); |
| 150 | system.CoreTiming().ScheduleEvent(time_interval, preemption_event); | 150 | system.CoreTiming().ScheduleEvent(time_interval, preemption_event); |
| @@ -166,8 +166,9 @@ struct KernelCore::Impl { | |||
| 166 | 166 | ||
| 167 | std::shared_ptr<ResourceLimit> system_resource_limit; | 167 | std::shared_ptr<ResourceLimit> system_resource_limit; |
| 168 | 168 | ||
| 169 | Core::Timing::EventType* thread_wakeup_event_type = nullptr; | 169 | std::shared_ptr<Core::Timing::EventType> thread_wakeup_event_type; |
| 170 | Core::Timing::EventType* preemption_event = nullptr; | 170 | std::shared_ptr<Core::Timing::EventType> preemption_event; |
| 171 | |||
| 171 | // TODO(yuriks): This can be removed if Thread objects are explicitly pooled in the future, | 172 | // TODO(yuriks): This can be removed if Thread objects are explicitly pooled in the future, |
| 172 | // allowing us to simply use a pool index or similar. | 173 | // allowing us to simply use a pool index or similar. |
| 173 | Kernel::HandleTable thread_wakeup_callback_handle_table; | 174 | Kernel::HandleTable thread_wakeup_callback_handle_table; |
| @@ -269,7 +270,7 @@ u64 KernelCore::CreateNewUserProcessID() { | |||
| 269 | return impl->next_user_process_id++; | 270 | return impl->next_user_process_id++; |
| 270 | } | 271 | } |
| 271 | 272 | ||
| 272 | Core::Timing::EventType* KernelCore::ThreadWakeupCallbackEventType() const { | 273 | const std::shared_ptr<Core::Timing::EventType>& KernelCore::ThreadWakeupCallbackEventType() const { |
| 273 | return impl->thread_wakeup_event_type; | 274 | return impl->thread_wakeup_event_type; |
| 274 | } | 275 | } |
| 275 | 276 | ||
diff --git a/src/core/hle/kernel/kernel.h b/src/core/hle/kernel/kernel.h index c74b9078f..babb531c6 100644 --- a/src/core/hle/kernel/kernel.h +++ b/src/core/hle/kernel/kernel.h | |||
| @@ -113,7 +113,7 @@ private: | |||
| 113 | u64 CreateNewThreadID(); | 113 | u64 CreateNewThreadID(); |
| 114 | 114 | ||
| 115 | /// Retrieves the event type used for thread wakeup callbacks. | 115 | /// Retrieves the event type used for thread wakeup callbacks. |
| 116 | Core::Timing::EventType* ThreadWakeupCallbackEventType() const; | 116 | const std::shared_ptr<Core::Timing::EventType>& ThreadWakeupCallbackEventType() const; |
| 117 | 117 | ||
| 118 | /// Provides a reference to the thread wakeup callback handle table. | 118 | /// Provides a reference to the thread wakeup callback handle table. |
| 119 | Kernel::HandleTable& ThreadWakeupCallbackHandleTable(); | 119 | Kernel::HandleTable& ThreadWakeupCallbackHandleTable(); |
diff --git a/src/core/hle/service/hid/hid.cpp b/src/core/hle/service/hid/hid.cpp index 8ef029e0f..89bf8b815 100644 --- a/src/core/hle/service/hid/hid.cpp +++ b/src/core/hle/service/hid/hid.cpp | |||
| @@ -77,15 +77,14 @@ IAppletResource::IAppletResource(Core::System& system) | |||
| 77 | GetController<Controller_Stubbed>(HidController::Unknown3).SetCommonHeaderOffset(0x5000); | 77 | GetController<Controller_Stubbed>(HidController::Unknown3).SetCommonHeaderOffset(0x5000); |
| 78 | 78 | ||
| 79 | // Register update callbacks | 79 | // Register update callbacks |
| 80 | auto& core_timing = system.CoreTiming(); | ||
| 81 | pad_update_event = | 80 | pad_update_event = |
| 82 | core_timing.RegisterEvent("HID::UpdatePadCallback", [this](u64 userdata, s64 cycles_late) { | 81 | Core::Timing::CreateEvent("HID::UpdatePadCallback", [this](u64 userdata, s64 cycles_late) { |
| 83 | UpdateControllers(userdata, cycles_late); | 82 | UpdateControllers(userdata, cycles_late); |
| 84 | }); | 83 | }); |
| 85 | 84 | ||
| 86 | // TODO(shinyquagsire23): Other update callbacks? (accel, gyro?) | 85 | // TODO(shinyquagsire23): Other update callbacks? (accel, gyro?) |
| 87 | 86 | ||
| 88 | core_timing.ScheduleEvent(pad_update_ticks, pad_update_event); | 87 | system.CoreTiming().ScheduleEvent(pad_update_ticks, pad_update_event); |
| 89 | 88 | ||
| 90 | ReloadInputDevices(); | 89 | ReloadInputDevices(); |
| 91 | } | 90 | } |
diff --git a/src/core/hle/service/hid/hid.h b/src/core/hle/service/hid/hid.h index 923762fff..ad20f147c 100644 --- a/src/core/hle/service/hid/hid.h +++ b/src/core/hle/service/hid/hid.h | |||
| @@ -69,7 +69,7 @@ private: | |||
| 69 | 69 | ||
| 70 | std::shared_ptr<Kernel::SharedMemory> shared_mem; | 70 | std::shared_ptr<Kernel::SharedMemory> shared_mem; |
| 71 | 71 | ||
| 72 | Core::Timing::EventType* pad_update_event; | 72 | std::shared_ptr<Core::Timing::EventType> pad_update_event; |
| 73 | Core::System& system; | 73 | Core::System& system; |
| 74 | 74 | ||
| 75 | std::array<std::unique_ptr<ControllerBase>, static_cast<size_t>(HidController::MaxControllers)> | 75 | std::array<std::unique_ptr<ControllerBase>, static_cast<size_t>(HidController::MaxControllers)> |
diff --git a/src/core/hle/service/nvflinger/nvflinger.cpp b/src/core/hle/service/nvflinger/nvflinger.cpp index cd07ab362..52623cf89 100644 --- a/src/core/hle/service/nvflinger/nvflinger.cpp +++ b/src/core/hle/service/nvflinger/nvflinger.cpp | |||
| @@ -37,8 +37,8 @@ NVFlinger::NVFlinger(Core::System& system) : system(system) { | |||
| 37 | displays.emplace_back(4, "Null", system); | 37 | displays.emplace_back(4, "Null", system); |
| 38 | 38 | ||
| 39 | // Schedule the screen composition events | 39 | // Schedule the screen composition events |
| 40 | composition_event = system.CoreTiming().RegisterEvent( | 40 | composition_event = |
| 41 | "ScreenComposition", [this](u64 userdata, s64 cycles_late) { | 41 | Core::Timing::CreateEvent("ScreenComposition", [this](u64 userdata, s64 cycles_late) { |
| 42 | Compose(); | 42 | Compose(); |
| 43 | const auto ticks = | 43 | const auto ticks = |
| 44 | Settings::values.force_30fps_mode ? frame_ticks_30fps : GetNextTicks(); | 44 | Settings::values.force_30fps_mode ? frame_ticks_30fps : GetNextTicks(); |
diff --git a/src/core/hle/service/nvflinger/nvflinger.h b/src/core/hle/service/nvflinger/nvflinger.h index 9cc41f2e6..e3cc14bdc 100644 --- a/src/core/hle/service/nvflinger/nvflinger.h +++ b/src/core/hle/service/nvflinger/nvflinger.h | |||
| @@ -103,7 +103,7 @@ private: | |||
| 103 | u32 swap_interval = 1; | 103 | u32 swap_interval = 1; |
| 104 | 104 | ||
| 105 | /// Event that handles screen composition. | 105 | /// Event that handles screen composition. |
| 106 | Core::Timing::EventType* composition_event; | 106 | std::shared_ptr<Core::Timing::EventType> composition_event; |
| 107 | 107 | ||
| 108 | Core::System& system; | 108 | Core::System& system; |
| 109 | }; | 109 | }; |