From 8cd8e9d905694eb4b892cecee7fcb2f6e0f46103 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20Lam?= Date: Fri, 25 Aug 2017 20:59:31 +0200 Subject: [PATCH] JIT: Don't always look up symbols for blocks With tons of symbols, this results in noticeable stuttering, so skip lookups if the perf dir option isn't set anyway. --- Source/Core/Common/JitRegister.cpp | 11 +++++++++++ Source/Core/Common/JitRegister.h | 1 + Source/Core/Core/PowerPC/JitCommon/JitCache.cpp | 8 +++++++- 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/Source/Core/Common/JitRegister.cpp b/Source/Core/Common/JitRegister.cpp index 61d7e05685..08b93e39da 100644 --- a/Source/Core/Common/JitRegister.cpp +++ b/Source/Core/Common/JitRegister.cpp @@ -37,10 +37,13 @@ static File::IOFile s_perf_map_file; namespace JitRegister { +static bool s_is_enabled = false; + void Init(const std::string& perf_dir) { #if defined USE_OPROFILE && USE_OPROFILE s_agent = op_open_agent(); + s_is_enabled = true; #endif if (!perf_dir.empty() || getenv("PERF_BUILDID_DIR")) @@ -51,6 +54,7 @@ void Init(const std::string& perf_dir) // Disable buffering in order to avoid missing some mappings // if the event of a crash: std::setvbuf(s_perf_map_file.GetHandle(), nullptr, _IONBF, 0); + s_is_enabled = true; } } @@ -67,6 +71,13 @@ void Shutdown() if (s_perf_map_file.IsOpen()) s_perf_map_file.Close(); + + s_is_enabled = false; +} + +bool IsEnabled() +{ + return s_is_enabled; } void RegisterV(const void* base_address, u32 code_size, const char* format, va_list args) diff --git a/Source/Core/Common/JitRegister.h b/Source/Core/Common/JitRegister.h index f4068bc282..3d142ec530 100644 --- a/Source/Core/Common/JitRegister.h +++ b/Source/Core/Common/JitRegister.h @@ -12,6 +12,7 @@ namespace JitRegister void Init(const std::string& perf_dir); void Shutdown(); void RegisterV(const void* base_address, u32 code_size, const char* format, va_list args); +bool IsEnabled(); inline void Register(const void* base_address, u32 code_size, const char* format, ...) { diff --git a/Source/Core/Core/PowerPC/JitCommon/JitCache.cpp b/Source/Core/Core/PowerPC/JitCommon/JitCache.cpp index b70e7a103b..8026e5c78f 100644 --- a/Source/Core/Core/PowerPC/JitCommon/JitCache.cpp +++ b/Source/Core/Core/PowerPC/JitCommon/JitCache.cpp @@ -132,12 +132,18 @@ void JitBaseBlockCache::FinalizeBlock(JitBlock& block, bool block_link, LinkBlock(block); } - if (Symbol* symbol = g_symbolDB.GetSymbolFromAddr(block.effectiveAddress)) + Symbol* symbol = nullptr; + if (JitRegister::IsEnabled() && + (symbol = g_symbolDB.GetSymbolFromAddr(block.effectiveAddress)) != nullptr) + { JitRegister::Register(block.checkedEntry, block.codeSize, "JIT_PPC_%s_%08x", symbol->function_name.c_str(), block.physicalAddress); + } else + { JitRegister::Register(block.checkedEntry, block.codeSize, "JIT_PPC_%08x", block.physicalAddress); + } } JitBlock* JitBaseBlockCache::GetBlockFromStartAddress(u32 addr, u32 msr)