1
0
mirror of https://github.com/wolfpld/tracy.git synced 2025-03-20 07:40:02 +08:00

Add python profile support

This commit is contained in:
zhengyang01 2021-05-14 16:08:37 +08:00
parent 02beb12520
commit 398dc3a8ba

71
TracyPython.hpp Normal file
View File

@ -0,0 +1,71 @@
#ifndef __TRACYLUA_HPP__
#define __TRACYLUA_HPP__
// Include this file after you include python headers.
#ifndef TRACY_ENABLE
#define TRACY_ENABLE_PYTHON_PROFILE
#define TRACY_DISABLE_PYTHON_PROFILE
#else
namespace tracy
{
inline int PythonZoneBeginN(const char* file_name, const char* func_name, int line_no)
{
TracyLfqPrepareC(tracy::QueueType::ZoneBeginAllocSrcLoc);
const auto srcloc = tracy::Profiler::AllocSourceLocation(line_no, file_name, func_name, "", 0);
tracy::MemWrite(&item->zoneBegin.time, tracy::Profiler::GetTime());
tracy::MemWrite(&item->zoneBegin.srcloc, srcloc);
TracyLfqCommitC;
return 0;
}
inline int PythonZoneEnd()
{
TracyLfqPrepareC(tracy::QueueType::ZoneEnd);
tracy::MemWrite(&item->zoneEnd.time, tracy::Profiler::GetTime());
TracyLfqCommitC;
return 0;
}
inline int tracer(PyObject* self, PyFrameObject* f, int what, PyObject* args)
{
static const char* file_name;
static const char* func_name;
static int line_no = -1;
switch (what)
{
case PyTrace_CALL:
{
#if PY_MAJOR_VERSION == 3
file_name = PyUnicode_AsUTF8((f->f_code->co_filename));
func_name = PyUnicode_AsUTF8((f->f_code->co_name));
#else
file_name = PyString_AsString((f->f_code->co_filename));
func_name = PyString_AsString((f->f_code->co_name));
#endif
line_no = f->f_code->co_firstlineno;
PythonZoneBeginN(file_name, func_name, line_no);
}
break;
case PyTrace_RETURN:
{
PythonZoneEnd();
}
break;
/* ignore PyTrace_EXCEPTION */
default: break;
}
return 0;
}
}
#define TRACY_ENABLE_PYTHON_PROFILE PyEval_SetProfile(tracy::tracer, nullptr);
#define TRACY_DISABLE_PYTHON_PROFILE PyEval_SetProfile(nullptr, nullptr);
#endif
#endif