ittapi-sys 0.5.0

Rust bindings for ittapi
Documentation
#define PY_SSIZE_T_CLEAN
#include <Python.h>

#include "collection_control.hpp"
#include "domain.hpp"
#include "event.hpp"
#include "id.hpp"
#include "string_handle.hpp"
#include "task.hpp"
#include "thread_naming.hpp"
#include "pt_region.hpp"


namespace ittapi
{

/**
 Initialize ittapi.
 May be called multiple times, so avoid using static state.
 */
static int exec_ittapi_module(PyObject* module)
{
    static PyMethodDef ittapi_functions[] =
    {
        /* Collection Control API */
        {"pause",                 pause,                 METH_NOARGS,  "Pause data collection."},
        {"resume",                resume,                METH_NOARGS,  "Resume data collection."},
        {"detach",                detach,                METH_NOARGS,  "Detach data collection."},
        /* Thread Naming API */
        {"thread_set_name",       thread_set_name,       METH_O,       "Sets a name for current thread."},
        /* Task API */
        {"task_begin",            task_begin,            METH_VARARGS, "Marks the beginning of a task."},
        {"task_end",              task_end,              METH_VARARGS, "Marks the end of a task."},
        {"task_begin_overlapped", task_begin_overlapped, METH_VARARGS, "Marks the beginning of an overlapped task."},
        {"task_end_overlapped",   task_end_overlapped,   METH_VARARGS, "Marks the end of an overlapped task."},
        {"pt_region_begin",       pt_region_begin,       METH_VARARGS, "Marks the begining of a processor trace control region"},
        {"pt_region_end",         pt_region_end,         METH_VARARGS, "Marks the end of a processor trace control region"},
        /* marks end of array */
        { nullptr },
    };

    PyModule_AddFunctions(module, ittapi_functions);

    PyModule_AddStringConstant(module, "__author__", "Egor Suldin");
    PyModule_AddStringConstant(module, "__version__", "1.2.0");
    PyModule_AddIntConstant(module, "year", 2024);

    return 0;
}

static void destroy_ittapi_module(void*)
{
    __itt_release_resources();
}

PyMODINIT_FUNC PyInit_native()
{
    PyDoc_STRVAR(ittapi_doc, "The ittapi module.");

    static PyModuleDef_Slot ittapi_slots[] =
    {
        { Py_mod_exec, reinterpret_cast<void*>(exec_ittapi_module) },
        { Py_mod_exec, reinterpret_cast<void*>(exec_domain) },
        { Py_mod_exec, reinterpret_cast<void*>(exec_event) },
        { Py_mod_exec, reinterpret_cast<void*>(exec_id) },
        { Py_mod_exec, reinterpret_cast<void*>(exec_string_handle) },
        { Py_mod_exec, reinterpret_cast<void*>(exec_pt_region) },
        { 0, nullptr }
    };

    static PyModuleDef ittapi_def = {
        PyModuleDef_HEAD_INIT,
        "ittapi",
        ittapi_doc,
        0,                    /* m_size */
        nullptr,              /* m_methods */
        ittapi_slots,
        nullptr,              /* m_traverse */
        nullptr,              /* m_clear */
        destroy_ittapi_module, /* m_free */
    };

    return PyModuleDef_Init(&ittapi_def);
}

} // namespace ittapi