merged AI doc, some new pages

This commit is contained in:
2026-03-12 14:46:57 +03:00
parent 07ae277f9e
commit ed13838237
206 changed files with 14088 additions and 5152 deletions

View File

@@ -1,3 +1,9 @@
/*! \file piintrospection_base.h
* \ingroup Introspection
* \~\brief
* \~english Base declarations for the introspection subsystem
* \~russian Базовые объявления подсистемы интроспекции
*/
/*
PIP - Platform Independent Primitives
Introspection module - base macros and types
@@ -60,6 +66,22 @@ class PIPeer;
class PIIntrospection;
class PIIntrospectionServer;
#ifdef DOXYGEN
//! \~\ingroup Introspection
//! \~\brief
//! \~english Declares singleton accessor `instance()` for an introspection interface class.
//! \~russian Объявляет метод-синглтон `instance()` для класса интерфейса интроспекции.
# define __PIINTROSPECTION_SINGLETON_H__(T)
//! \~\ingroup Introspection
//! \~\brief
//! \~english Defines singleton accessor `instance()` for an introspection interface class.
//! \~russian Определяет метод-синглтон `instance()` для класса интерфейса интроспекции.
# define __PIINTROSPECTION_SINGLETON_CPP__(T)
#else
#if defined(PIP_INTROSPECTION) && !defined(PIP_FORCE_NO_PIINTROSPECTION)
# define __PIINTROSPECTION_SINGLETON_H__(T) static PIIntrospection##T##Interface * instance();
@@ -69,4 +91,6 @@ class PIIntrospectionServer;
return &ret; \
}
#endif // PIP_INTROSPECTION
#endif // DOXYGEN
#endif // PIINTROSPECTION_BASE_H

View File

@@ -1,3 +1,8 @@
//! \~\file piintrospection_containers.h
//! \~\ingroup Introspection
//! \~\brief
//! \~english Container introspection helpers
//! \~russian Вспомогательные средства интроспекции контейнеров
/*
PIP - Platform Independent Primitives
Introspection module - interface for containers
@@ -22,13 +27,37 @@
#include "pibase.h"
//! \~\ingroup Introspection
//! \~\brief
//! \~english Metadata describing one tracked container element type.
//! \~russian Метаданные, описывающие один отслеживаемый тип элементов контейнера.
struct PIP_EXPORT PIIntrospectionContainersType {
//! \~english Destroys the type descriptor.
//! \~russian Уничтожает дескриптор типа.
~PIIntrospectionContainersType();
//! \~english Finalizes type information, including generated identifiers and names.
//! \~russian Завершает подготовку информации о типе, включая сгенерированные идентификаторы и имена.
void finish();
//! \~english Stable identifier of the tracked type.
//! \~russian Стабильный идентификатор отслеживаемого типа.
uint id = 0;
//! \~english Compiler-provided type name.
//! \~russian Имя типа, предоставленное компилятором.
const char * name = nullptr;
//! \~english Demangled type name when available.
//! \~russian Деманглированное имя типа, если доступно.
const char * demangled = "?";
//! \~english True after \a finish() prepares the descriptor.
//! \~russian Истина после того, как \a finish() подготовит дескриптор.
bool inited = false;
//! \~english True when demangled name was resolved successfully.
//! \~russian Истина, если деманглированное имя успешно получено.
bool has_demangled = false;
};
@@ -38,9 +67,15 @@ struct PIP_EXPORT PIIntrospectionContainersType {
class PIIntrospectionContainers;
//! \~\ingroup Introspection
//! \~\brief
//! \~english Lazily builds and caches type metadata for container introspection macros.
//! \~russian Лениво создает и кеширует метаданные типа для макросов интроспекции контейнеров.
template<typename T>
class PIIntrospectionContainersTypeInfo {
public:
//! \~english Returns cached metadata for type `T`.
//! \~russian Возвращает кешированные метаданные для типа `T`.
static const PIIntrospectionContainersType & get() {
static PIIntrospectionContainersType ret = create();
return ret;
@@ -57,16 +92,68 @@ private:
# define PIINTROSPECTION_CONTAINERS (PIIntrospectionContainersInterface::instance())
# ifdef DOXYGEN
//! \~\ingroup Introspection
//! \relatesalso PIIntrospectionContainersInterface
//! \~\brief
//! \~english Registers construction of a container storing elements of type `t`.
//! \~russian Регистрирует создание контейнера, хранящего элементы типа `t`.
# define PIINTROSPECTION_CONTAINER_NEW(t, isz)
//! \~\ingroup Introspection
//! \relatesalso PIIntrospectionContainersInterface
//! \~\brief
//! \~english Registers destruction of a container storing elements of type `t`.
//! \~russian Регистрирует уничтожение контейнера, хранящего элементы типа `t`.
# define PIINTROSPECTION_CONTAINER_DELETE(t)
//! \~\ingroup Introspection
//! \relatesalso PIIntrospectionContainersInterface
//! \~\brief
//! \~english Adds `cnt` allocated element slots for containers of type `t`.
//! \~russian Добавляет `cnt` выделенных слотов элементов для контейнеров типа `t`.
# define PIINTROSPECTION_CONTAINER_ALLOC(t, cnt)
//! \~\ingroup Introspection
//! \relatesalso PIIntrospectionContainersInterface
//! \~\brief
//! \~english Removes `cnt` allocated element slots for containers of type `t`.
//! \~russian Убирает `cnt` выделенных слотов элементов для контейнеров типа `t`.
# define PIINTROSPECTION_CONTAINER_FREE(t, cnt)
//! \~\ingroup Introspection
//! \relatesalso PIIntrospectionContainersInterface
//! \~\brief
//! \~english Adds `cnt` used element slots for containers of type `t`.
//! \~russian Добавляет `cnt` занятых слотов элементов для контейнеров типа `t`.
# define PIINTROSPECTION_CONTAINER_USED(t, cnt)
//! \~\ingroup Introspection
//! \relatesalso PIIntrospectionContainersInterface
//! \~\brief
//! \~english Removes `cnt` used element slots for containers of type `t`.
//! \~russian Убирает `cnt` занятых слотов элементов для контейнеров типа `t`.
# define PIINTROSPECTION_CONTAINER_UNUSED(t, cnt)
# else
// clang-format off
# define PIINTROSPECTION_CONTAINER_NEW(t, isz) PIINTROSPECTION_CONTAINERS->containerNew (PIIntrospectionContainersTypeInfo<t>::get(), isz);
# define PIINTROSPECTION_CONTAINER_DELETE(t) PIINTROSPECTION_CONTAINERS->containerDelete(PIIntrospectionContainersTypeInfo<t>::get() );
# define PIINTROSPECTION_CONTAINER_ALLOC(t, cnt) PIINTROSPECTION_CONTAINERS->containerAlloc (PIIntrospectionContainersTypeInfo<t>::get(), cnt);
# define PIINTROSPECTION_CONTAINER_FREE(t, cnt) PIINTROSPECTION_CONTAINERS->containerFree (PIIntrospectionContainersTypeInfo<t>::get(), cnt);
# define PIINTROSPECTION_CONTAINER_USED(t, cnt) PIINTROSPECTION_CONTAINERS->containerUsed (PIIntrospectionContainersTypeInfo<t>::get(), cnt);
# define PIINTROSPECTION_CONTAINER_UNUSED(t, cnt) PIINTROSPECTION_CONTAINERS->containerUnused(PIIntrospectionContainersTypeInfo<t>::get(), cnt);
# define PIINTROSPECTION_CONTAINER_NEW(t, isz) PIINTROSPECTION_CONTAINERS->containerNew (PIIntrospectionContainersTypeInfo<t>::get(), isz);
# define PIINTROSPECTION_CONTAINER_DELETE(t) PIINTROSPECTION_CONTAINERS->containerDelete(PIIntrospectionContainersTypeInfo<t>::get() );
# define PIINTROSPECTION_CONTAINER_ALLOC(t, cnt) PIINTROSPECTION_CONTAINERS->containerAlloc (PIIntrospectionContainersTypeInfo<t>::get(), cnt);
# define PIINTROSPECTION_CONTAINER_FREE(t, cnt) PIINTROSPECTION_CONTAINERS->containerFree (PIIntrospectionContainersTypeInfo<t>::get(), cnt);
# define PIINTROSPECTION_CONTAINER_USED(t, cnt) PIINTROSPECTION_CONTAINERS->containerUsed (PIIntrospectionContainersTypeInfo<t>::get(), cnt);
# define PIINTROSPECTION_CONTAINER_UNUSED(t, cnt) PIINTROSPECTION_CONTAINERS->containerUnused(PIIntrospectionContainersTypeInfo<t>::get(), cnt);
// clang-format on
# endif
//! \~\ingroup Introspection
//! \~\brief
//! \~english Entry point for collecting container allocation and usage statistics.
//! \~russian Точка входа для сбора статистики выделения и использования контейнеров.
class PIP_EXPORT PIIntrospectionContainersInterface {
friend class PIIntrospection;
friend class PIIntrospectionServer;
@@ -74,15 +161,32 @@ class PIP_EXPORT PIIntrospectionContainersInterface {
public:
__PIINTROSPECTION_SINGLETON_H__(Containers)
// clang-format off
void containerNew (const PIIntrospectionContainersType & ti, uint isz);
void containerDelete(const PIIntrospectionContainersType & ti);
void containerAlloc (const PIIntrospectionContainersType & ti, ullong cnt);
void containerFree (const PIIntrospectionContainersType & ti, ullong cnt);
void containerUsed (const PIIntrospectionContainersType & ti, ullong cnt);
void containerUnused(const PIIntrospectionContainersType & ti, ullong cnt);
// clang-format on
//! \~english Registers construction of a container instance with element size `isz`.
//! \~russian Регистрирует создание экземпляра контейнера с размером элемента `isz`.
void containerNew(const PIIntrospectionContainersType & ti, uint isz);
//! \~english Registers destruction of a container instance.
//! \~russian Регистрирует уничтожение экземпляра контейнера.
void containerDelete(const PIIntrospectionContainersType & ti);
//! \~english Adds `cnt` allocated element slots for tracked type `ti`.
//! \~russian Добавляет `cnt` выделенных слотов элементов для отслеживаемого типа `ti`.
void containerAlloc(const PIIntrospectionContainersType & ti, ullong cnt);
//! \~english Removes `cnt` allocated element slots for tracked type `ti`.
//! \~russian Убирает `cnt` выделенных слотов элементов для отслеживаемого типа `ti`.
void containerFree(const PIIntrospectionContainersType & ti, ullong cnt);
//! \~english Adds `cnt` used element slots for tracked type `ti`.
//! \~russian Добавляет `cnt` занятых слотов элементов для отслеживаемого типа `ti`.
void containerUsed(const PIIntrospectionContainersType & ti, ullong cnt);
//! \~english Removes `cnt` used element slots for tracked type `ti`.
//! \~russian Убирает `cnt` занятых слотов элементов для отслеживаемого типа `ti`.
void containerUnused(const PIIntrospectionContainersType & ti, ullong cnt);
//! \~english Private implementation pointer with collected statistics.
//! \~russian Указатель на приватную реализацию с накопленной статистикой.
PIIntrospectionContainers * p;
private:

View File

@@ -1,9 +1,8 @@
/*! \file piintrospection_server.h
* \ingroup Introspection
* \~\brief
* \~english Introspection server
* \~russian Сервер интроспекции
*/
//! \~\file piintrospection_server.h
//! \~\ingroup Introspection
//! \~\brief
//! \~english Introspection server
//! \~russian Сервер интроспекции
/*
PIP - Platform Independent Primitives
Introspection module
@@ -28,12 +27,16 @@
#ifdef DOXYGEN
//! \ingroup Introspection
//! \~\ingroup Introspection
//! \relatesalso PIIntrospectionServer
//! \~\brief
//! \~english Start introspection server with name "name"
//! \~russian Запускает сервер интроспекции с именем "name"
# define PIINTROSPECTION_START(name)
//! \ingroup Introspection
//! \~\ingroup Introspection
//! \relatesalso PIIntrospectionServer
//! \~\brief
//! \~english Stop introspection server
//! \~russian Останавливает сервер интроспекции
# define PIINTROSPECTION_STOP
@@ -51,13 +54,24 @@ class PISystemMonitor;
# define PIINTROSPECTION_START(name) PIINTROSPECTION_SERVER->start(#name);
# define PIINTROSPECTION_STOP PIINTROSPECTION_SERVER->stop();
//! \~\ingroup Introspection
//! \~\brief
//! \~english Peer-based server that replies to introspection requests for the current process.
//! \~russian Сервер на основе peer, отвечающий на запросы интроспекции для текущего процесса.
class PIP_EXPORT PIIntrospectionServer: public PIPeer {
PIOBJECT_SUBCLASS(PIIntrospectionServer, PIPeer);
public:
//! \~english Returns singleton server instance.
//! \~russian Возвращает экземпляр сервера-синглтона.
static PIIntrospectionServer * instance();
//! \~english Starts the server and publishes it under name derived from `server_name`.
//! \~russian Запускает сервер и публикует его под именем, построенным от `server_name`.
void start(const PIString & server_name);
//! \~english Stops the server and releases its system monitor when needed.
//! \~russian Останавливает сервер и при необходимости освобождает его системный монитор.
void stop();
private:

View File

@@ -1,3 +1,8 @@
//! \~\file piintrospection_threads.h
//! \~\ingroup Introspection
//! \~\brief
//! \~english Thread introspection helpers
//! \~russian Вспомогательные средства интроспекции потоков
/*
PIP - Platform Independent Primitives
Introspection module - interface for threads
@@ -26,31 +31,108 @@
class PIIntrospectionThreads;
# define PIINTROSPECTION_THREADS (PIIntrospectionThreadsInterface::instance())
# define PIINTROSPECTION_THREADS (PIIntrospectionThreadsInterface::instance())
# define PIINTROSPECTION_THREAD_NEW(t) PIINTROSPECTION_THREADS->threadNew(t);
# define PIINTROSPECTION_THREAD_DELETE(t) PIINTROSPECTION_THREADS->threadDelete(t);
# define PIINTROSPECTION_THREAD_START(t) PIINTROSPECTION_THREADS->threadStart(t);
# define PIINTROSPECTION_THREAD_RUN(t) PIINTROSPECTION_THREADS->threadRun(t);
# define PIINTROSPECTION_THREAD_WAIT(t) PIINTROSPECTION_THREADS->threadWait(t);
# define PIINTROSPECTION_THREAD_STOP(t) PIINTROSPECTION_THREADS->threadStop(t);
# define PIINTROSPECTION_THREAD_RUN_DONE(t, us) PIINTROSPECTION_THREADS->threadRunDone(t, us);
# ifdef DOXYGEN
//! \~\ingroup Introspection
//! \relatesalso PIIntrospectionThreadsInterface
//! \~\brief
//! \~english Registers creation of thread object `t`.
//! \~russian Регистрирует создание объекта потока `t`.
# define PIINTROSPECTION_THREAD_NEW(t)
//! \~\ingroup Introspection
//! \relatesalso PIIntrospectionThreadsInterface
//! \~\brief
//! \~english Registers destruction of thread object `t`.
//! \~russian Регистрирует уничтожение объекта потока `t`.
# define PIINTROSPECTION_THREAD_DELETE(t)
//! \~\ingroup Introspection
//! \relatesalso PIIntrospectionThreadsInterface
//! \~\brief
//! \~english Marks thread `t` as starting.
//! \~russian Помечает поток `t` как запускающийся.
# define PIINTROSPECTION_THREAD_START(t)
//! \~\ingroup Introspection
//! \relatesalso PIIntrospectionThreadsInterface
//! \~\brief
//! \~english Marks thread `t` as running.
//! \~russian Помечает поток `t` как выполняющийся.
# define PIINTROSPECTION_THREAD_RUN(t)
//! \~\ingroup Introspection
//! \relatesalso PIIntrospectionThreadsInterface
//! \~\brief
//! \~english Marks thread `t` as waiting.
//! \~russian Помечает поток `t` как ожидающий.
# define PIINTROSPECTION_THREAD_WAIT(t)
//! \~\ingroup Introspection
//! \relatesalso PIIntrospectionThreadsInterface
//! \~\brief
//! \~english Marks thread `t` as stopped.
//! \~russian Помечает поток `t` как остановленный.
# define PIINTROSPECTION_THREAD_STOP(t)
//! \~\ingroup Introspection
//! \relatesalso PIIntrospectionThreadsInterface
//! \~\brief
//! \~english Reports completed run of thread `t` that took `us` microseconds.
//! \~russian Сообщает о завершенном проходе потока `t`, занявшем `us` микросекунд.
# define PIINTROSPECTION_THREAD_RUN_DONE(t, us)
# else
# define PIINTROSPECTION_THREAD_NEW(t) PIINTROSPECTION_THREADS->threadNew(t);
# define PIINTROSPECTION_THREAD_DELETE(t) PIINTROSPECTION_THREADS->threadDelete(t);
# define PIINTROSPECTION_THREAD_START(t) PIINTROSPECTION_THREADS->threadStart(t);
# define PIINTROSPECTION_THREAD_RUN(t) PIINTROSPECTION_THREADS->threadRun(t);
# define PIINTROSPECTION_THREAD_WAIT(t) PIINTROSPECTION_THREADS->threadWait(t);
# define PIINTROSPECTION_THREAD_STOP(t) PIINTROSPECTION_THREADS->threadStop(t);
# define PIINTROSPECTION_THREAD_RUN_DONE(t, us) PIINTROSPECTION_THREADS->threadRunDone(t, us);
# endif
//! \~\ingroup Introspection
//! \~\brief
//! \~english Entry point for collecting state and timing statistics of \a PIThread objects.
//! \~russian Точка входа для сбора статистики состояний и времени выполнения объектов \a PIThread.
class PIP_EXPORT PIIntrospectionThreadsInterface {
friend class PIIntrospection;
public:
__PIINTROSPECTION_SINGLETON_H__(Threads)
// clang-format off
void threadNew (PIThread * t);
void threadDelete (PIThread * t);
void threadStart (PIThread * t);
void threadRun (PIThread * t);
void threadWait (PIThread * t);
void threadStop (PIThread * t);
//! \~english Registers creation of thread object `t`.
//! \~russian Регистрирует создание объекта потока `t`.
void threadNew(PIThread * t);
//! \~english Registers destruction of thread object `t`.
//! \~russian Регистрирует уничтожение объекта потока `t`.
void threadDelete(PIThread * t);
//! \~english Updates statistics for thread `t` when it starts.
//! \~russian Обновляет статистику потока `t` при его запуске.
void threadStart(PIThread * t);
//! \~english Updates statistics for thread `t` when its run handler begins.
//! \~russian Обновляет статистику потока `t`, когда начинается его рабочий проход.
void threadRun(PIThread * t);
//! \~english Marks thread `t` as waiting for the next run.
//! \~russian Помечает поток `t` как ожидающий следующего прохода.
void threadWait(PIThread * t);
//! \~english Marks thread `t` as stopped.
//! \~russian Помечает поток `t` как остановленный.
void threadStop(PIThread * t);
//! \~english Updates averaged run time of thread `t` in microseconds.
//! \~russian Обновляет усредненное время выполнения потока `t` в микросекундах.
void threadRunDone(PIThread * t, ullong us);
// clang-format on
private:
PIIntrospectionThreadsInterface();