summaryrefslogtreecommitdiff
path: root/src/core/hle
diff options
context:
space:
mode:
authorGravatar bunnei2019-11-26 21:48:56 -0500
committerGravatar GitHub2019-11-26 21:48:56 -0500
commitec0ce96c568b2b610c5218efd7faa5d9a19350f8 (patch)
tree61b5133e3cc6a9edf3b45c5fe6604493689f6769 /src/core/hle
parentMerge pull request #3164 from ReinUsesLisp/half-cast-float (diff)
downloadyuzu-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.cpp13
-rw-r--r--src/core/hle/kernel/kernel.h2
-rw-r--r--src/core/hle/service/hid/hid.cpp5
-rw-r--r--src/core/hle/service/hid/hid.h2
-rw-r--r--src/core/hle/service/nvflinger/nvflinger.cpp4
-rw-r--r--src/core/hle/service/nvflinger/nvflinger.h2
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
272Core::Timing::EventType* KernelCore::ThreadWakeupCallbackEventType() const { 273const 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};