From 0ec48e0ec92644d5b456d092e7634495b39d61bf Mon Sep 17 00:00:00 2001 From: Tillmann Karras Date: Thu, 12 Feb 2015 01:36:29 +0100 Subject: [PATCH] JitRegister: fix VTune integration --- CMakeLists.txt | 19 ++++++++++++++++++- Source/Core/Common/JitRegister.cpp | 8 ++------ Source/Core/Common/Thread.cpp | 9 +++++++++ Source/Core/Core/PowerPC/JitCommon/JitCache.h | 4 ---- Source/VSProps/Base.props | 19 +++++++++++++++++++ 5 files changed, 48 insertions(+), 11 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 75656a7a386b..78011f3db31e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,6 +2,7 @@ # General setup # cmake_minimum_required(VERSION 2.8.8) +project(dolphin-emu) option(USE_EGL "Enables EGL OpenGL Interface" OFF) option(TRY_X11 "Enables X11 Support" ON) @@ -20,6 +21,9 @@ option(ENCODE_FRAMEDUMPS "Encode framedumps in AVI format" ON) option(FASTLOG "Enable all logs" OFF) option(OPROFILING "Enable profiling" OFF) option(GDBSTUB "Enable gdb stub for remote debugging." OFF) +if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux") + option(VTUNE "Enable Intel VTune integration for JIT symbols." OFF) +endif() if(APPLE) option(SKIP_POSTPROCESS_BUNDLE "Skip postprocessing bundle for redistributability" OFF) @@ -45,7 +49,6 @@ if (APPLE) endif() endif() endif() -project(dolphin-emu) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/CMakeTests) set(DOLPHIN_IS_STABLE FALSE) # Libraries to link @@ -335,6 +338,20 @@ if(GDBSTUB) add_definitions(-DUSE_GDBSTUB) endif(GDBSTUB) +if(VTUNE) + if(EXISTS "$ENV{VTUNE_AMPLIFIER_XE_2015_DIR}") + set(VTUNE_DIR "$ENV{VTUNE_AMPLIFIER_XE_2015_DIR}") + elseif(EXISTS "$ENV{VTUNE_AMPLIFIER_XE_2013_DIR}") + set(VTUNE_DIR "$ENV{VTUNE_AMPLIFIER_XE_2013_DIR}") + else() + message(ERROR "Could find neither VTUNE_AMPLIFIER_XE_2015_DIR nor VTUNE_AMPLIFIER_XE_2013_DIR.") + endif() + add_definitions(-DUSE_VTUNE) + include_directories("${VTUNE_DIR}/include") + list(APPEND LIBS "${VTUNE_DIR}/lib64/libjitprofiling.a") + list(APPEND LIBS "${VTUNE_DIR}/lib64/libittnotify.a") +endif(VTUNE) + if(ANDROID) message("Building for Android") add_definitions(-DANDROID) diff --git a/Source/Core/Common/JitRegister.cpp b/Source/Core/Common/JitRegister.cpp index 964a88b2140c..c99b27e73bfd 100644 --- a/Source/Core/Common/JitRegister.cpp +++ b/Source/Core/Common/JitRegister.cpp @@ -26,7 +26,6 @@ #if defined USE_VTUNE #include -#pragma comment(lib, "libittnotify.lib") #pragma comment(lib, "jitprofiling.lib") #endif @@ -89,12 +88,9 @@ void RegisterV(const void* base_address, u32 code_size, #ifdef USE_VTUNE iJIT_Method_Load jmethod = {0}; jmethod.method_id = iJIT_GetNewMethodID(); - jmethod.class_file_name = ""; - jmethod.source_file_name = __FILE__; - jmethod.method_load_address = base_address; + jmethod.method_load_address = const_cast(base_address); jmethod.method_size = code_size; - jmethod.line_number_size = 0; - jmethod.method_name = symbol_name.data(); + jmethod.method_name = const_cast(symbol_name.data()); iJIT_NotifyEvent(iJVM_EVENT_TYPE_METHOD_LOAD_FINISHED, (void*)&jmethod); #endif diff --git a/Source/Core/Common/Thread.cpp b/Source/Core/Common/Thread.cpp index 286ed088bc16..c57760039f69 100644 --- a/Source/Core/Common/Thread.cpp +++ b/Source/Core/Common/Thread.cpp @@ -12,6 +12,11 @@ #include #endif +#ifdef USE_VTUNE +#include +#pragma comment(lib, "libittnotify.lib") +#endif + namespace Common { @@ -123,6 +128,10 @@ void SetCurrentThreadName(const char* szThreadName) #else pthread_setname_np(pthread_self(), szThreadName); #endif +#ifdef USE_VTUNE + // VTune uses OS thread names by default but probably supports longer names when set via its own API. + __itt_thread_set_name(szThreadName); +#endif } #endif diff --git a/Source/Core/Core/PowerPC/JitCommon/JitCache.h b/Source/Core/Core/PowerPC/JitCommon/JitCache.h index 5b38cb6a826c..046569aa4163 100644 --- a/Source/Core/Core/PowerPC/JitCommon/JitCache.h +++ b/Source/Core/Core/PowerPC/JitCommon/JitCache.h @@ -13,10 +13,6 @@ #include "Core/PowerPC/Gekko.h" #include "Core/PowerPC/PPCAnalyst.h" -// Define this in order to get VTune profile support for the Jit generated code. -// Add the VTune include/lib directories to the project directories to get this to build. -// #define USE_VTUNE - // emulate CPU with unlimited instruction cache // the only way to invalidate a region is the "icbi" instruction #define JIT_UNLIMITED_ICACHE diff --git a/Source/VSProps/Base.props b/Source/VSProps/Base.props index a1abd19963c2..59dc42eda599 100644 --- a/Source/VSProps/Base.props +++ b/Source/VSProps/Base.props @@ -129,6 +129,25 @@ true true + + + + %(AdditionalIncludeDirectories);"$(VTUNE_AMPLIFIER_XE_2015_DIR)\include" + + + %(AdditionalLibraryDirectories);"$(VTUNE_AMPLIFIER_XE_2015_DIR)\lib64" + + + + + %(AdditionalIncludeDirectories);"$(VTUNE_AMPLIFIER_XE_2013_DIR)\include" + + + %(AdditionalLibraryDirectories);"$(VTUNE_AMPLIFIER_XE_2013_DIR)\lib64" + +