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/kernel/kernel.cpp | |
| 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/kernel/kernel.cpp')
| -rw-r--r-- | src/core/hle/kernel/kernel.cpp | 13 |
1 files changed, 7 insertions, 6 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 | ||