[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
+2 -2
View File
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project
@@ -100,7 +100,7 @@ Result IReceiver::ReceiveWithTick(Out<OverlayNotification> out_notification,
}
}
if (!has_messages) {
receive_event->Clear();
receive_event->Clear(system.Kernel());
}
R_SUCCEED();
+23 -18
View File
@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
@@ -7,8 +10,10 @@
namespace Service::PSC::Time {
Alarm::Alarm(Core::System& system, KernelHelpers::ServiceContext& ctx, AlarmType type)
: m_ctx{ctx}, m_event{ctx.CreateEvent("Psc:Alarm:Event")} {
m_event->Clear();
: m_ctx{ctx}
, m_event{ctx.CreateEvent("Psc:Alarm:Event")}
{
m_event->Clear(system.Kernel());
switch (type) {
case WakeupAlarm:
@@ -37,7 +42,7 @@ Alarms::~Alarms() {
m_ctx.CloseEvent(m_event);
}
Result Alarms::Enable(Alarm& alarm, s64 time) {
Result Alarms::Enable(Kernel::KernelCore& kernel, Alarm& alarm, s64 time) {
R_UNLESS(m_steady_clock.IsInitialized(), ResultClockUninitialized);
std::scoped_lock l{m_mutex};
@@ -49,21 +54,21 @@ Result Alarms::Enable(Alarm& alarm, s64 time) {
time_ns = Common::AlignUp(time_ns, one_second_ns);
alarm.SetAlertTime(time_ns);
Insert(alarm);
R_RETURN(UpdateClosestAndSignal());
Insert(kernel, alarm);
R_RETURN(UpdateClosestAndSignal(kernel));
}
void Alarms::Disable(Alarm& alarm) {
void Alarms::Disable(Kernel::KernelCore& kernel, Alarm& alarm) {
std::scoped_lock l{m_mutex};
if (!alarm.IsLinked()) {
return;
}
Erase(alarm);
UpdateClosestAndSignal();
Erase(kernel, alarm);
UpdateClosestAndSignal(kernel);
}
void Alarms::CheckAndSignal() {
void Alarms::CheckAndSignal(Kernel::KernelCore& kernel) {
std::scoped_lock l{m_mutex};
if (m_alarms.empty()) {
return;
@@ -72,9 +77,9 @@ void Alarms::CheckAndSignal() {
bool alarm_signalled{false};
for (auto& alarm : m_alarms) {
if (m_steady_clock.GetRawTime() >= alarm.GetAlertTime()) {
alarm.Signal();
alarm.Signal(kernel);
alarm.Lock();
Erase(alarm);
Erase(kernel, alarm);
m_power_state_request_manager.UpdatePendingPowerStateRequestPriority(
alarm.GetPriority());
@@ -87,7 +92,7 @@ void Alarms::CheckAndSignal() {
}
m_power_state_request_manager.SignalPowerStateRequestAvailability();
UpdateClosestAndSignal();
UpdateClosestAndSignal(kernel);
}
bool Alarms::GetClosestAlarm(Alarm** out_alarm) {
@@ -97,7 +102,7 @@ bool Alarms::GetClosestAlarm(Alarm** out_alarm) {
return alarm != nullptr;
}
void Alarms::Insert(Alarm& alarm) {
void Alarms::Insert(Kernel::KernelCore& kernel, Alarm& alarm) {
// Alarms are sorted by alert time, then priority
auto it{m_alarms.begin()};
while (it != m_alarms.end()) {
@@ -113,15 +118,15 @@ void Alarms::Insert(Alarm& alarm) {
m_alarms.push_back(alarm);
}
void Alarms::Erase(Alarm& alarm) {
void Alarms::Erase(Kernel::KernelCore& kernel, Alarm& alarm) {
m_alarms.erase(m_alarms.iterator_to(alarm));
}
Result Alarms::UpdateClosestAndSignal() {
Result Alarms::UpdateClosestAndSignal(Kernel::KernelCore& kernel) {
m_closest_alarm = m_alarms.empty() ? nullptr : std::addressof(m_alarms.front());
R_SUCCEED_IF(m_closest_alarm == nullptr);
m_event->Signal();
m_event->Signal(kernel);
R_SUCCEED();
}
@@ -183,7 +188,7 @@ void ISteadyClockAlarm::Enable(HLERequestContext& ctx) {
IPC::RequestParser rp{ctx};
auto time{rp.Pop<s64>()};
auto res = m_alarms.Enable(m_alarm, time);
auto res = m_alarms.Enable(system.Kernel(), m_alarm, time);
IPC::ResponseBuilder rb{ctx, 2};
rb.Push(res);
@@ -192,7 +197,7 @@ void ISteadyClockAlarm::Enable(HLERequestContext& ctx) {
void ISteadyClockAlarm::Disable(HLERequestContext& ctx) {
LOG_DEBUG(Service_Time, "called.");
m_alarms.Disable(m_alarm);
m_alarms.Disable(system.Kernel(), m_alarm);
IPC::ResponseBuilder rb{ctx, 2};
rb.Push(ResultSuccess);
+11 -8
View File
@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
@@ -48,8 +51,8 @@ struct Alarm : public Common::IntrusiveListBaseNode<Alarm> {
return m_priority;
}
void Signal() {
m_event->Signal();
void Signal(Kernel::KernelCore& kernel) {
m_event->Signal(kernel);
}
Result Lock() {
@@ -83,15 +86,15 @@ public:
return m_steady_clock.GetRawTime();
}
Result Enable(Alarm& alarm, s64 time);
void Disable(Alarm& alarm);
void CheckAndSignal();
Result Enable(Kernel::KernelCore& kernel, Alarm& alarm, s64 time);
void Disable(Kernel::KernelCore& kernel, Alarm& alarm);
void CheckAndSignal(Kernel::KernelCore& kernel);
bool GetClosestAlarm(Alarm** out_alarm);
private:
void Insert(Alarm& alarm);
void Erase(Alarm& alarm);
Result UpdateClosestAndSignal();
void Insert(Kernel::KernelCore& kernel, Alarm& alarm);
void Erase(Kernel::KernelCore& kernel, Alarm& alarm);
Result UpdateClosestAndSignal(Kernel::KernelCore& kernel);
Core::System& m_system;
KernelHelpers::ServiceContext m_ctx;
@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
@@ -6,10 +9,10 @@
namespace Service::PSC::Time {
void ContextWriter::SignalAllNodes() {
void ContextWriter::SignalAllNodes(Kernel::KernelCore& kernel) {
std::scoped_lock l{m_mutex};
for (auto& operation : m_operation_events) {
operation.m_event->Signal();
operation.m_event->Signal(kernel);
}
}
@@ -33,7 +36,7 @@ Result LocalSystemClockContextWriter::Write(const SystemClockContext& context) {
m_shared_memory.SetLocalSystemContext(context);
SignalAllNodes();
SignalAllNodes(m_system.Kernel());
R_SUCCEED();
}
@@ -57,7 +60,7 @@ Result NetworkSystemClockContextWriter::Write(const SystemClockContext& context)
m_shared_memory.SetNetworkSystemContext(context);
SignalAllNodes();
SignalAllNodes(m_system.Kernel());
R_SUCCEED();
}
@@ -75,7 +78,7 @@ Result EphemeralNetworkSystemClockContextWriter::Write(const SystemClockContext&
m_in_use = true;
}
SignalAllNodes();
SignalAllNodes(m_system.Kernel());
R_SUCCEED();
}
@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
@@ -11,6 +14,9 @@
#include "core/hle/service/psc/time/common.h"
#include "core/hle/service/psc/time/shared_memory.h"
namespace Kernel {
class KernelCore;
}
namespace Core {
class System;
}
@@ -25,7 +31,7 @@ public:
virtual ~ContextWriter() = default;
virtual Result Write(const SystemClockContext& context) = 0;
void SignalAllNodes();
void SignalAllNodes(Kernel::KernelCore& kernel);
void Link(OperationEvent& operation_event);
private:
@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
@@ -57,7 +60,7 @@ Result StandardUserSystemClockCore::GetTimePoint(SteadyClockTimePoint& out_time_
void StandardUserSystemClockCore::SetTimePointAndSignal(SteadyClockTimePoint& time_point) {
m_time_point = time_point;
m_event->Signal();
m_event->Signal(m_system.Kernel());
}
} // namespace Service::PSC::Time
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
@@ -35,7 +35,7 @@ void PowerStateRequestManager::SignalPowerStateRequestAvailability() {
}
m_has_pending_request = false;
m_available_request_priority = m_pending_request_priority;
m_event->Signal();
m_event->Signal(m_system.Kernel());
}
}
@@ -45,7 +45,7 @@ bool PowerStateRequestManager::GetAndClearPowerStateRequest(u32& out_priority) {
if (m_has_available_request) {
out_priority = m_available_request_priority;
m_has_available_request = false;
m_event->Clear();
m_event->Clear(m_system.Kernel());
}
return had_request;
}
@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
@@ -238,7 +241,7 @@ Result ServiceManager::GetClosestAlarmUpdatedEvent(
Result ServiceManager::CheckAndSignalAlarms() {
LOG_DEBUG(Service_Time, "called.");
m_alarms.CheckAndSignal();
m_alarms.CheckAndSignal(m_system.Kernel());
R_SUCCEED();
}
+4 -1
View File
@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
@@ -171,7 +174,7 @@ Result StaticService::SetStandardUserSystemClockAutomaticCorrectionEnabled(
R_TRY(m_time->m_standard_steady_clock.GetCurrentTimePoint(time_point));
m_user_system_clock.SetTimePointAndSignal(time_point);
m_user_system_clock.GetEvent().Signal();
m_user_system_clock.GetEvent().Signal(system.Kernel());
R_SUCCEED();
}