dolphin/Source/Core/Common/JitRegister.cpp
Martino Fontana a14c88ba67 Remove unused imports
Yellow squiggly lines begone!
Done automatically on .cpp files through `run-clang-tidy`, with manual corrections to the mistakes.
If an import is directly used, but is technically unnecessary since it's recursively imported by something else, it is *not* removed.
The tool doesn't touch .h files, so I did some of them by hand while fixing errors due to old recursive imports.
Not everything is removed, but the cleanup should be substantial enough.
Because this done on Linux, code that isn't used on it is mostly untouched.
(Hopefully no open PR is depending on these imports...)
2026-01-25 16:12:15 +01:00

88 lines
2.0 KiB
C++

// Copyright 2014 Dolphin Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#include "Common/JitRegister.h"
#include <cstdio>
#include <cstdlib>
#include <string>
#include <fmt/format.h>
#include "Common/CommonTypes.h"
#include "Common/IOFile.h"
#ifdef _WIN32
#include <process.h>
#else
#include <unistd.h>
#endif
#if defined USE_VTUNE
#include <jitprofiling.h>
#pragma comment(lib, "jitprofiling.lib")
#endif
static File::IOFile s_perf_map_file;
namespace Common::JitRegister
{
static bool s_is_enabled = false;
void Init(const std::string& perf_dir)
{
#ifdef USE_VTUNE
s_is_enabled = true;
#endif
if (!perf_dir.empty() || getenv("PERF_BUILDID_DIR"))
{
const std::string dir = perf_dir.empty() ? "/tmp" : perf_dir;
const std::string filename = fmt::format("{}/perf-{}.map", dir, getpid());
if (s_perf_map_file.Open(filename, "w"))
{
// Disable buffering in order to avoid missing some mappings
// in the event of a crash:
std::setvbuf(s_perf_map_file.GetHandle(), nullptr, _IONBF, 0);
s_is_enabled = true;
}
}
}
void Shutdown()
{
#ifdef USE_VTUNE
iJIT_NotifyEvent(iJVM_EVENT_TYPE_SHUTDOWN, nullptr);
#endif
if (s_perf_map_file.IsOpen())
s_perf_map_file.Close();
s_is_enabled = false;
}
bool IsEnabled()
{
return s_is_enabled;
}
void Register(const void* base_address, u32 code_size, const std::string& symbol_name)
{
#ifdef USE_VTUNE
iJIT_Method_Load jmethod = {0};
jmethod.method_id = iJIT_GetNewMethodID();
jmethod.method_load_address = const_cast<void*>(base_address);
jmethod.method_size = code_size;
jmethod.method_name = const_cast<char*>(symbol_name.c_str());
iJIT_NotifyEvent(iJVM_EVENT_TYPE_METHOD_LOAD_FINISHED, (void*)&jmethod);
#endif
// Linux perf /tmp/perf-$pid.map:
if (!s_perf_map_file)
return;
const auto entry = fmt::format("{} {:x} {}\n", fmt::ptr(base_address), code_size, symbol_name);
s_perf_map_file.WriteBytes(entry.data(), entry.size());
}
} // namespace Common::JitRegister