[video_core, hle] remove redundant parent references in system structs (#3908)

reworked a bit to remove references of parent objects and instead pass as arguments to methods to prevent useless reloads

Signed-off-by: lizzie <lizzie@eden-emu.dev>
Co-authored-by: maufeat <sahyno1996@gmail.com>
Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3908
Reviewed-by: Maufeat <sahyno1996@gmail.com>
Reviewed-by: crueter <crueter@eden-emu.dev>
This commit is contained in:
lizzie
2026-06-23 06:31:25 +02:00
committed by crueter
parent f8facda35f
commit 3aa0d46259
307 changed files with 4419 additions and 4477 deletions
+20 -19
View File
@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2020 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
@@ -41,15 +44,15 @@ public:
explicit KScheduler(KernelCore& kernel);
~KScheduler();
void Initialize(KThread* main_thread, KThread* idle_thread, s32 core_id);
void Activate();
void OnThreadStart();
void Unload(KThread* thread);
void Reload(KThread* thread);
void Initialize(KernelCore& kernel, KThread* main_thread, KThread* idle_thread, s32 core_id);
void Activate(KernelCore& kernel);
void OnThreadStart(KernelCore& kernel);
void Unload(KernelCore& kernel, KThread* thread);
void Reload(KernelCore& kernel, KThread* thread);
void SetInterruptTaskRunnable();
void RequestScheduleOnInterrupt();
void PreemptSingleCore();
void SetInterruptTaskRunnable(KernelCore& kernel);
void RequestScheduleOnInterrupt(KernelCore& kernel);
void PreemptSingleCore(KernelCore& kernel);
u64 GetIdleCount() {
return m_state.idle_count;
@@ -122,18 +125,18 @@ private:
static void RescheduleCurrentHLEThread(KernelCore& kernel);
// Instanced private API.
void ScheduleImpl();
void ScheduleImplFiber();
void SwitchThread(KThread* next_thread);
void ScheduleImpl(KernelCore& kernel);
void ScheduleImplFiber(KernelCore& kernel);
void SwitchThread(KernelCore& kernel, KThread* next_thread);
void Schedule();
void ScheduleOnInterrupt();
void Schedule(KernelCore& kernel);
void ScheduleOnInterrupt(KernelCore& kernel);
void RescheduleOtherCores(u64 cores_needing_scheduling);
void RescheduleCurrentCore();
void RescheduleCurrentCoreImpl();
void RescheduleOtherCores(KernelCore& kernel, u64 cores_needing_scheduling);
void RescheduleCurrentCore(KernelCore& kernel);
void RescheduleCurrentCoreImpl(KernelCore& kernel);
u64 UpdateHighestPriorityThread(KThread* thread);
u64 UpdateHighestPriorityThread(KernelCore& kernel, KThread* thread);
private:
friend class KScopedDisableDispatch;
@@ -149,14 +152,12 @@ private:
KInterruptTaskManager* interrupt_task_manager{nullptr};
};
KernelCore& m_kernel;
SchedulingState m_state;
bool m_is_active{false};
s32 m_core_id{0};
s64 m_last_context_switch_time{0};
KThread* m_idle_thread{nullptr};
std::atomic<KThread*> m_current_thread{nullptr};
std::shared_ptr<Common::Fiber> m_switch_fiber{};
KThread* m_switch_cur_thread{};
KThread* m_switch_highest_priority_thread{};