mirror of
https://github.com/wolfpld/tracy.git
synced 2024-11-10 10:41:50 +00:00
Merge pull request #324 from shapr3d/uwp_fix
Make Tracy usable in UWP applications
This commit is contained in:
commit
a2d017c456
@ -6,7 +6,10 @@
|
||||
#endif
|
||||
|
||||
#if defined _WIN32
|
||||
# define TRACY_HAS_CALLSTACK 1
|
||||
# include "../common/TracyUwp.hpp"
|
||||
# ifndef TRACY_UWP
|
||||
# define TRACY_HAS_CALLSTACK 1
|
||||
# endif
|
||||
#elif defined __ANDROID__
|
||||
# if !defined __arm__ || __ANDROID_API__ >= 21
|
||||
# define TRACY_HAS_CALLSTACK 2
|
||||
|
@ -9,6 +9,7 @@
|
||||
# include <tlhelp32.h>
|
||||
# include <inttypes.h>
|
||||
# include <intrin.h>
|
||||
# include "../common/TracyUwp.hpp"
|
||||
#else
|
||||
# include <sys/time.h>
|
||||
# include <sys/param.h>
|
||||
@ -314,7 +315,9 @@ static void InitFailure( const char* msg )
|
||||
}
|
||||
else
|
||||
{
|
||||
# ifndef TRACY_UWP
|
||||
MessageBoxA( nullptr, msg, "Tracy Profiler initialization failure", MB_ICONSTOP );
|
||||
# endif
|
||||
}
|
||||
#else
|
||||
fprintf( stderr, "Tracy Profiler initialization failure: %s\n", msg );
|
||||
@ -440,8 +443,12 @@ static const char* GetHostInfo()
|
||||
static char buf[1024];
|
||||
auto ptr = buf;
|
||||
#if defined _WIN32
|
||||
t_RtlGetVersion RtlGetVersion = (t_RtlGetVersion)GetProcAddress( GetModuleHandleA( "ntdll.dll" ), "RtlGetVersion" );
|
||||
if( !RtlGetVersion )
|
||||
# ifdef TRACY_UWP
|
||||
auto GetVersion = &::GetVersionEx;
|
||||
# else
|
||||
auto GetVersion = (t_RtlGetVersion)GetProcAddress( GetModuleHandleA( "ntdll.dll" ), "RtlGetVersion" );
|
||||
# endif
|
||||
if( !GetVersion )
|
||||
{
|
||||
# ifdef __MINGW32__
|
||||
ptr += sprintf( ptr, "OS: Windows (MingW)\n" );
|
||||
@ -452,7 +459,7 @@ static const char* GetHostInfo()
|
||||
else
|
||||
{
|
||||
RTL_OSVERSIONINFOW ver = { sizeof( RTL_OSVERSIONINFOW ) };
|
||||
RtlGetVersion( &ver );
|
||||
GetVersion( &ver );
|
||||
|
||||
# ifdef __MINGW32__
|
||||
ptr += sprintf( ptr, "OS: Windows %i.%i.%i (MingW)\n", (int)ver.dwMajorVersion, (int)ver.dwMinorVersion, (int)ver.dwBuildNumber );
|
||||
@ -508,9 +515,13 @@ static const char* GetHostInfo()
|
||||
char hostname[512];
|
||||
gethostname( hostname, 512 );
|
||||
|
||||
# ifdef TRACY_UWP
|
||||
const char* user = "";
|
||||
# else
|
||||
DWORD userSz = UNLEN+1;
|
||||
char user[UNLEN+1];
|
||||
GetUserNameA( user, &userSz );
|
||||
# endif
|
||||
|
||||
ptr += sprintf( ptr, "User: %s@%s\n", user, hostname );
|
||||
#else
|
||||
@ -707,7 +718,7 @@ static BroadcastMessage& GetBroadcastMessage( const char* procname, size_t pnsz,
|
||||
return msg;
|
||||
}
|
||||
|
||||
#if defined _WIN32
|
||||
#if defined _WIN32 && !defined TRACY_UWP
|
||||
static DWORD s_profilerThreadId = 0;
|
||||
static char s_crashText[1024];
|
||||
|
||||
@ -1382,7 +1393,7 @@ void Profiler::SpawnWorkerThreads()
|
||||
new(s_symbolThread) Thread( LaunchSymbolWorker, this );
|
||||
#endif
|
||||
|
||||
#if defined _WIN32
|
||||
#if defined _WIN32 && !defined TRACY_UWP
|
||||
s_profilerThreadId = GetThreadId( s_thread->Handle() );
|
||||
m_exceptionHandler = AddVectoredExceptionHandler( 1, CrashFilter );
|
||||
#endif
|
||||
@ -1416,7 +1427,7 @@ Profiler::~Profiler()
|
||||
{
|
||||
m_shutdown.store( true, std::memory_order_relaxed );
|
||||
|
||||
#if defined _WIN32
|
||||
#if defined _WIN32 && !defined TRACY_UWP
|
||||
if( m_crashHandlerInstalled ) RemoveVectoredExceptionHandler( m_exceptionHandler );
|
||||
#endif
|
||||
|
||||
@ -3534,7 +3545,11 @@ void Profiler::ReportTopology()
|
||||
};
|
||||
|
||||
#if defined _WIN32
|
||||
# ifdef TRACY_UWP
|
||||
t_GetLogicalProcessorInformationEx _GetLogicalProcessorInformationEx = &::GetLogicalProcessorInformationEx;
|
||||
# else
|
||||
t_GetLogicalProcessorInformationEx _GetLogicalProcessorInformationEx = (t_GetLogicalProcessorInformationEx)GetProcAddress( GetModuleHandleA( "kernel32.dll" ), "GetLogicalProcessorInformationEx" );
|
||||
# endif
|
||||
if( !_GetLogicalProcessorInformationEx ) return;
|
||||
|
||||
DWORD psz = 0;
|
||||
|
@ -2,7 +2,10 @@
|
||||
#define __TRACYSYSTRACE_HPP__
|
||||
|
||||
#if !defined TRACY_NO_SYSTEM_TRACING && ( defined _WIN32 || defined __linux__ )
|
||||
# define TRACY_HAS_SYSTEM_TRACING
|
||||
# include "../common/TracyUwp.hpp"
|
||||
# ifndef TRACY_UWP
|
||||
# define TRACY_HAS_SYSTEM_TRACING
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifdef TRACY_HAS_SYSTEM_TRACING
|
||||
|
@ -10,6 +10,7 @@
|
||||
# endif
|
||||
# include <windows.h>
|
||||
# include <malloc.h>
|
||||
# include "TracyUwp.hpp"
|
||||
#else
|
||||
# include <pthread.h>
|
||||
# include <string.h>
|
||||
@ -127,7 +128,11 @@ void ThreadNameMsvcMagic( const THREADNAME_INFO& info )
|
||||
TRACY_API void SetThreadName( const char* name )
|
||||
{
|
||||
#if defined _WIN32
|
||||
# ifdef TRACY_UWP
|
||||
static auto _SetThreadDescription = &::SetThreadDescription;
|
||||
# else
|
||||
static auto _SetThreadDescription = (t_SetThreadDescription)GetProcAddress( GetModuleHandleA( "kernel32.dll" ), "SetThreadDescription" );
|
||||
# endif
|
||||
if( _SetThreadDescription )
|
||||
{
|
||||
wchar_t buf[256];
|
||||
@ -191,7 +196,11 @@ TRACY_API const char* GetThreadName( uint32_t id )
|
||||
}
|
||||
#else
|
||||
# if defined _WIN32
|
||||
# ifdef TRACY_UWP
|
||||
static auto _GetThreadDescription = &::GetThreadDescription;
|
||||
# else
|
||||
static auto _GetThreadDescription = (t_GetThreadDescription)GetProcAddress( GetModuleHandleA( "kernel32.dll" ), "GetThreadDescription" );
|
||||
# endif
|
||||
if( _GetThreadDescription )
|
||||
{
|
||||
auto hnd = OpenThread( THREAD_QUERY_LIMITED_INFORMATION, FALSE, (DWORD)id );
|
||||
|
11
common/TracyUwp.hpp
Normal file
11
common/TracyUwp.hpp
Normal file
@ -0,0 +1,11 @@
|
||||
#ifndef __TRACYUWP_HPP__
|
||||
#define __TRACYUWP_HPP__
|
||||
|
||||
#ifdef _WIN32
|
||||
# include <winapifamily.h>
|
||||
# if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) && !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
|
||||
# define TRACY_UWP
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#endif
|
@ -522,6 +522,16 @@ In the case of some programming environments, you may need to take extra steps t
|
||||
|
||||
If you are using MSVC, you will need to disable the \emph{Edit And Continue} feature, as it makes the compiler non-conformant to some aspects of the C++ standard. In order to do so, open the project properties and go to \menu[,]{C/C++,General,Debug Information Format} and make sure \emph{Program Database for Edit And Continue (/ZI)} is \emph{not} selected.
|
||||
|
||||
\paragraph{Universal Windows Platform}
|
||||
|
||||
Due to a restricted access to Win32 APIs and other sandboxing issues (like network isolation), several limitations apply to using Tracy in a UWP application compared to Windows Desktop:
|
||||
|
||||
\begin{itemize}
|
||||
\item Call stack sampling is not available.
|
||||
\item System profiling is not available.
|
||||
\item To be able to connect from another machine on the local network, the app needs the \emph{privateNetworkClientServer} capability. To connect from localhost, an active inbound loopback exemption is also necessary \footnote{\url{https://docs.microsoft.com/en-us/windows/uwp/communication/interprocess-communication\#loopback}}.
|
||||
\end{itemize}
|
||||
|
||||
\paragraph{Apple woes}
|
||||
|
||||
Because Apple \emph{has} to be \emph{think different}, there are some problems with using Tracy on OSX and iOS. First, the performance hit due to profiling is higher than on other platforms. Second, some critical features are missing and won't be possible to achieve:
|
||||
|
Loading…
Reference in New Issue
Block a user