tracy/client/TracyCallstack.hpp

53 lines
1.0 KiB
C++
Raw Normal View History

2018-06-18 23:17:19 +00:00
#ifndef __TRACYCALLSTACK_HPP__
#define __TRACYCALLSTACK_HPP__
#ifdef _WIN32
# define TRACY_HAS_CALLSTACK
# ifndef MAXLONG
extern "C" __declspec(dllimport) unsigned short __stdcall RtlCaptureStackBackTrace( unsigned long, unsigned long, void**, unsigned long* );
# endif
#endif
#ifdef TRACY_HAS_CALLSTACK
#include <stdint.h>
#include <string.h>
#include "../common/TracyAlloc.hpp"
#include "../common/TracyForceInline.hpp"
namespace tracy
{
struct CallstackEntry
{
const char* name;
const char* file;
uint32_t line;
};
#ifdef _WIN32
void InitCallstack();
CallstackEntry DecodeCallstackPtr( uint64_t ptr );
2018-06-19 15:27:03 +00:00
static tracy_force_inline void* Callstack()
2018-06-18 23:17:19 +00:00
{
enum { StackDepth = 24 };
static_assert( StackDepth <= 63, "Stack depth can't be greater than 63." );
2018-06-19 12:34:37 +00:00
auto trace = (uintptr_t*)tracy_malloc( ( 1 + StackDepth ) * sizeof( uintptr_t ) );
2018-06-18 23:17:19 +00:00
const auto num = RtlCaptureStackBackTrace( 0, StackDepth, (void**)( trace+1 ), nullptr );
*trace = num;
2018-06-19 15:27:03 +00:00
return trace;
2018-06-18 23:17:19 +00:00
}
#endif
}
#endif
#endif