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.
This commit is contained in:
parent
432117047b
commit
8cd8e9d905
|
@ -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)
|
||||
|
|
|
@ -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, ...)
|
||||
{
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue