aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlizzie <lizzie@eden-emu.dev>2026-03-31 20:15:14 +0200
committercrueter <crueter@eden-emu.dev>2026-03-31 20:15:14 +0200
commitc3afd2fabd329b9205e6106b7ae5e641e327f15e (patch)
tree1b374eae14e2b3d10051359c910811e3e9c87748
parentee2891c55e0386ae803aa4d09a4e3110db3143ef (diff)
[hle] fetch manager once in cmif wrapper (#3796)
shouldn't need to fetch twice or thrice per response :) Signed-off-by: lizzie <lizzie@eden-emu.dev> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3796 Reviewed-by: Maufeat <sahyno1996@gmail.com> Reviewed-by: MaranBr <maranbr@eden-emu.dev> Co-authored-by: lizzie <lizzie@eden-emu.dev> Co-committed-by: lizzie <lizzie@eden-emu.dev>
-rw-r--r--src/core/hle/service/cmif_serialization.h22
-rw-r--r--src/core/hle/service/ipc_helpers.h22
2 files changed, 22 insertions, 22 deletions
diff --git a/src/core/hle/service/cmif_serialization.h b/src/core/hle/service/cmif_serialization.h
index 4d32c6cd6b..75461cc6be 100644
--- a/src/core/hle/service/cmif_serialization.h
+++ b/src/core/hle/service/cmif_serialization.h
@@ -438,20 +438,20 @@ void WriteOutArgument(bool is_domain, CallArguments& args, u8* raw_data, HLERequ
template <bool Domain, typename T, typename... A>
void CmifReplyWrapImpl(HLERequestContext& ctx, T& t, Result (T::*f)(A...)) {
+ const auto mgr = ctx.GetManager().get();
// Verify domain state.
if constexpr (!Domain) {
- const auto _mgr = ctx.GetManager();
- const bool _is_domain = _mgr ? _mgr->IsDomain() : false;
- ASSERT_MSG(!_is_domain,
- "Non-domain reply used on domain session\n"
- "Service={} (TIPC={} CmdType={} Cmd=0x{:08X}\n"
- "HasDomainHeader={} DomainHandlers={}\nDesc={}",
- t.GetServiceName(), ctx.IsTipc(),
- static_cast<u32>(ctx.GetCommandType()), static_cast<u32>(ctx.GetCommand()),
- ctx.HasDomainMessageHeader(), _mgr ? static_cast<u32>(_mgr->DomainHandlerCount()) : 0u,
- ctx.Description());
+ const bool is_domain = mgr ? mgr->IsDomain() : false;
+ ASSERT_MSG(!is_domain,
+ "Non-domain reply used on domain session\n"
+ "Service={} (TIPC={} CmdType={} Cmd=0x{:08X}\n"
+ "HasDomainHeader={} DomainHandlers={}\nDesc={}",
+ t.GetServiceName(), ctx.IsTipc(),
+ u32(ctx.GetCommandType()), u32(ctx.GetCommand()),
+ ctx.HasDomainMessageHeader(), mgr ? u32(mgr->DomainHandlerCount()) : 0u,
+ ctx.Description());
}
- const bool is_domain = Domain ? ctx.GetManager()->IsDomain() : false;
+ const bool is_domain = Domain ? mgr->IsDomain() : false;
static_assert(ConstIfReference<A...>(), "Arguments taken by reference must be const");
using MethodArguments = std::tuple<std::remove_cvref_t<A>...>;
diff --git a/src/core/hle/service/ipc_helpers.h b/src/core/hle/service/ipc_helpers.h
index 4b02872fba..8aee17db8d 100644
--- a/src/core/hle/service/ipc_helpers.h
+++ b/src/core/hle/service/ipc_helpers.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
+// SPDX-License-Identifier: GPL-3.0-or-later
+
// SPDX-FileCopyrightText: 2016 Citra Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
@@ -78,32 +81,29 @@ public:
memset(cmdbuf, 0, sizeof(u32) * IPC::COMMAND_BUFFER_LENGTH);
IPC::CommandHeader header{};
+ auto const mgr = ctx.GetManager().get();
// The entire size of the raw data section in u32 units, including the 16 bytes of mandatory
// padding.
- u32 raw_data_size = ctx.write_size =
- ctx.IsTipc() ? normal_params_size - 1 : normal_params_size;
+ u32 raw_data_size = ctx.write_size = ctx.IsTipc() ? normal_params_size - 1 : normal_params_size;
u32 num_handles_to_move{};
u32 num_domain_objects{};
- const bool always_move_handles{
- (static_cast<u32>(flags) & static_cast<u32>(Flags::AlwaysMoveHandles)) != 0};
- if (!ctx.GetManager()->IsDomain() || always_move_handles) {
+ const bool always_move_handles = (u32(flags) & u32(Flags::AlwaysMoveHandles)) != 0;
+ if (!mgr->IsDomain() || always_move_handles) {
num_handles_to_move = num_objects_to_move;
} else {
num_domain_objects = num_objects_to_move;
}
- if (ctx.GetManager()->IsDomain()) {
- raw_data_size +=
- static_cast<u32>(sizeof(DomainMessageHeader) / sizeof(u32) + num_domain_objects);
+ if (mgr->IsDomain()) {
+ raw_data_size += u32(sizeof(DomainMessageHeader) / sizeof(u32) + num_domain_objects);
ctx.write_size += num_domain_objects;
}
if (ctx.IsTipc()) {
header.type.Assign(ctx.GetCommandType());
} else {
- raw_data_size += static_cast<u32>(sizeof(IPC::DataPayloadHeader) / sizeof(u32) + 4 +
- normal_params_size);
+ raw_data_size += u32(sizeof(IPC::DataPayloadHeader) / sizeof(u32) + 4 + normal_params_size);
}
header.data_size.Assign(raw_data_size);
@@ -126,7 +126,7 @@ public:
if (!ctx.IsTipc()) {
AlignWithPadding();
- if (ctx.GetManager()->IsDomain() && ctx.HasDomainMessageHeader()) {
+ if (mgr->IsDomain() && ctx.HasDomainMessageHeader()) {
IPC::DomainMessageHeader domain_header{};
domain_header.num_objects = num_domain_objects;
PushRaw(domain_header);