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:
parent
02beb12520
commit
398dc3a8ba
71
TracyPython.hpp
Normal file
71
TracyPython.hpp
Normal 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
|
||||
Loading…
x
Reference in New Issue
Block a user