From 16f869fe5a1b14640368bedbb30814c1dc56b93f Mon Sep 17 00:00:00 2001 From: Megamouse Date: Mon, 12 Jun 2023 03:47:20 +0200 Subject: [PATCH] logging: minor trace optimizations --- rpcs3/Emu/Cell/PPUModule.cpp | 7 +++++-- rpcs3/Emu/Cell/PPUThread.cpp | 2 +- rpcs3/Emu/Cell/lv2/lv2.cpp | 18 ++++++++++++++++++ rpcs3/Emu/Cell/lv2/sys_lwcond.cpp | 2 +- rpcs3/Emu/Cell/lv2/sys_lwmutex.cpp | 2 +- rpcs3/Emu/Cell/lv2/sys_sync.h | 14 +++++--------- rpcs3/Emu/NP/np_dnshook.cpp | 2 +- rpcs3/Emu/NP/np_handler.cpp | 3 ++- rpcs3/Emu/RSX/rsx_methods.cpp | 3 ++- 9 files changed, 36 insertions(+), 17 deletions(-) diff --git a/rpcs3/Emu/Cell/PPUModule.cpp b/rpcs3/Emu/Cell/PPUModule.cpp index b7267e3f81..f011062d8e 100644 --- a/rpcs3/Emu/Cell/PPUModule.cpp +++ b/rpcs3/Emu/Cell/PPUModule.cpp @@ -335,9 +335,12 @@ static void ppu_initialize_modules(ppu_linkage_info* link, utils::serial* ar = n u32 alloc_addr = 0; // "Use" all the modules for correct linkage - for (auto& _module : registered) + if (ppu_loader.trace) { - ppu_loader.trace("Registered static module: %s", _module->name); + for (auto& _module : registered) + { + ppu_loader.trace("Registered static module: %s", _module->name); + } } struct hle_vars_save diff --git a/rpcs3/Emu/Cell/PPUThread.cpp b/rpcs3/Emu/Cell/PPUThread.cpp index b6073de8ba..ffa70c7f14 100644 --- a/rpcs3/Emu/Cell/PPUThread.cpp +++ b/rpcs3/Emu/Cell/PPUThread.cpp @@ -2267,7 +2267,7 @@ static T ppu_load_acquire_reservation(ppu_thread& ppu, u32 addr) ppu.use_full_rdata = false; } - if ((addr & addr_mask) == (ppu.last_faddr & addr_mask)) + if (ppu_log.trace && (addr & addr_mask) == (ppu.last_faddr & addr_mask)) { ppu_log.trace(u8"LARX after fail: addr=0x%x, faddr=0x%x, time=%u c", addr, ppu.last_faddr, (perf0.get() - ppu.last_ftsc)); } diff --git a/rpcs3/Emu/Cell/lv2/lv2.cpp b/rpcs3/Emu/Cell/lv2/lv2.cpp index cdf8e42429..4b775867d3 100644 --- a/rpcs3/Emu/Cell/lv2/lv2.cpp +++ b/rpcs3/Emu/Cell/lv2/lv2.cpp @@ -84,6 +84,12 @@ void fmt_class_string::format(std::string& out, u64 arg) }); } +template <> +void fmt_class_string::format(std::string& out, u64 arg) +{ + out += lv2_obj::name64(get_object(arg).data); +} + static void null_func_(ppu_thread& ppu, ppu_opcode_t, be_t* this_op, ppu_intrp_func*) { ppu_log.todo("Unimplemented syscall %s -> CELL_OK (r3=0x%llx, r4=0x%llx, r5=0x%llx, r6=0x%llx, r7=0x%llx, r8=0x%llx, r9=0x%llx, r10=0x%llx)", ppu_syscall_code(ppu.gpr[11]), @@ -1231,6 +1237,18 @@ namespace cpu_counter void remove(cpu_thread*) noexcept; } +std::string lv2_obj::name64(u64 name_u64) +{ + const auto ptr = reinterpret_cast(&name_u64); + + // NTS string, ignore invalid/newline characters + // Example: "lv2\n\0tx" will be printed as "lv2" + std::string str{ptr, std::find(ptr, ptr + 7, '\0')}; + str.erase(std::remove_if(str.begin(), str.end(), [](uchar c){ return !std::isprint(c); }), str.end()); + + return str; +} + bool lv2_obj::sleep(cpu_thread& cpu, const u64 timeout) { // Should already be performed when using this flag diff --git a/rpcs3/Emu/Cell/lv2/sys_lwcond.cpp b/rpcs3/Emu/Cell/lv2/sys_lwcond.cpp index cb7f7261b7..a96db29a91 100644 --- a/rpcs3/Emu/Cell/lv2/sys_lwcond.cpp +++ b/rpcs3/Emu/Cell/lv2/sys_lwcond.cpp @@ -29,7 +29,7 @@ error_code _sys_lwcond_create(ppu_thread& ppu, vm::ptr lwcond_id, u32 lwmut { ppu.state += cpu_flag::wait; - sys_lwcond.warning(u8"_sys_lwcond_create(lwcond_id=*0x%x, lwmutex_id=0x%x, control=*0x%x, name=0x%llx (“%s”))", lwcond_id, lwmutex_id, control, name, lv2_obj::name64(std::bit_cast>(name))); + sys_lwcond.warning(u8"_sys_lwcond_create(lwcond_id=*0x%x, lwmutex_id=0x%x, control=*0x%x, name=0x%llx (“%s”))", lwcond_id, lwmutex_id, control, name, lv2_obj::name_64{std::bit_cast>(name)}); u32 protocol; diff --git a/rpcs3/Emu/Cell/lv2/sys_lwmutex.cpp b/rpcs3/Emu/Cell/lv2/sys_lwmutex.cpp index 0f9edf77c3..5be53a2513 100644 --- a/rpcs3/Emu/Cell/lv2/sys_lwmutex.cpp +++ b/rpcs3/Emu/Cell/lv2/sys_lwmutex.cpp @@ -27,7 +27,7 @@ error_code _sys_lwmutex_create(ppu_thread& ppu, vm::ptr lwmutex_id, u32 pro { ppu.state += cpu_flag::wait; - sys_lwmutex.trace(u8"_sys_lwmutex_create(lwmutex_id=*0x%x, protocol=0x%x, control=*0x%x, has_name=0x%x, name=0x%llx (“%s”))", lwmutex_id, protocol, control, has_name, name, lv2_obj::name64(std::bit_cast>(name))); + sys_lwmutex.trace(u8"_sys_lwmutex_create(lwmutex_id=*0x%x, protocol=0x%x, control=*0x%x, has_name=0x%x, name=0x%llx (“%s”))", lwmutex_id, protocol, control, has_name, name, lv2_obj::name_64{std::bit_cast>(name)}); if (protocol != SYS_SYNC_FIFO && protocol != SYS_SYNC_RETRY && protocol != SYS_SYNC_PRIORITY) { diff --git a/rpcs3/Emu/Cell/lv2/sys_sync.h b/rpcs3/Emu/Cell/lv2/sys_sync.h index d8e45ab5d2..0d6162e664 100644 --- a/rpcs3/Emu/Cell/lv2/sys_sync.h +++ b/rpcs3/Emu/Cell/lv2/sys_sync.h @@ -93,17 +93,13 @@ public: return ptr && ptr->exists; } - static std::string name64(u64 name_u64) + // wrapper for name64 string formatting + struct name_64 { - const auto ptr = reinterpret_cast(&name_u64); + u64 data; + }; - // NTS string, ignore invalid/newline characters - // Example: "lv2\n\0tx" will be printed as "lv2" - std::string str{ptr, std::find(ptr, ptr + 7, '\0')}; - str.erase(std::remove_if(str.begin(), str.end(), [](uchar c){ return !std::isprint(c); }), str.end()); - - return str; - } + static std::string name64(u64 name_u64); // Find and remove the object from the linked list template diff --git a/rpcs3/Emu/NP/np_dnshook.cpp b/rpcs3/Emu/NP/np_dnshook.cpp index b1ce2b196d..a035947e1f 100644 --- a/rpcs3/Emu/NP/np_dnshook.cpp +++ b/rpcs3/Emu/NP/np_dnshook.cpp @@ -102,7 +102,7 @@ namespace np s32 dnshook::analyze_dns_packet(s32 s, const u8* buf, u32 len) { std::lock_guard lock(mutex); - + dnshook_log.trace("DNS REQUEST:\n%s", fmt::buf_to_hexstring(buf, len)); struct dns_header diff --git a/rpcs3/Emu/NP/np_handler.cpp b/rpcs3/Emu/NP/np_handler.cpp index 35421bd384..601beba073 100644 --- a/rpcs3/Emu/NP/np_handler.cpp +++ b/rpcs3/Emu/NP/np_handler.cpp @@ -518,7 +518,8 @@ namespace np } local_ip_addr = client_addr.sin_addr.s_addr; - nph_log.trace("discover_ip_address: IP was determined to be %s", ip_to_string(local_ip_addr)); + if (nph_log.trace) + nph_log.trace("discover_ip_address: IP was determined to be %s", ip_to_string(local_ip_addr)); close_socket(); return true; } diff --git a/rpcs3/Emu/RSX/rsx_methods.cpp b/rpcs3/Emu/RSX/rsx_methods.cpp index ce45ce3e31..fb78fd790d 100644 --- a/rpcs3/Emu/RSX/rsx_methods.cpp +++ b/rpcs3/Emu/RSX/rsx_methods.cpp @@ -251,7 +251,8 @@ namespace rsx if ((location & ~7) != (CELL_GCM_CONTEXT_DMA_NOTIFY_MAIN_0 & ~7)) { - rsx_log.trace("NV4097_NOTIFY: invalid context = 0x%x", method_registers.context_dma_notify()); + if (rsx_log.trace) + rsx_log.trace("NV4097_NOTIFY: invalid context = 0x%x", method_registers.context_dma_notify()); return; }