merged AI doc, some new pages
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user