Support external (i.e. user-defined) trace annotations (#195)

* Support external (i.e. user-defined) trace annotations

- tweaked the python examples to be more balanced
- updated the user-api example to conform to user API changes
- moved the get/set for State and ThreadState to state.{hpp,cpp}
- introduced user-provided trace annotations
- added perfetto python category
- moved coverage impl files around
- created enumerations for mapping category enums to category types
- created enumerations for mapping annotation type enums to annotation values
- moved tracing::add_perfetto_annotations to tracing/annotation.hpp
- utility make_index_sequence_range
- libomnitrace-dl: omnitrace_push_category_region
- libomnitrace-dl: omnitrace_pop_category_region
- libomnitrace-user: omnitrace_user_push_annotated_region
- libomnitrace-user: omnitrace_user_pop_annotated_region
- libpyomnitrace: support extra annotations via annotate_trace config value
  - filename
  - line
  - last attempted instr in bytecode (lasti)
  - argcount
  - num local variables
  - stacksize
- omnitrace-python: -a / --annotate-traces option

* tweak ubuntu-focal workflow

* Fix installation of omnitrace-user headers

* ubuntu-focal-codecov workflow update

- Install texinfo

* Update timemory submodule
This commit is contained in:
Jonathan R. Madsen
2022-11-11 07:31:14 -06:00
zatwierdzone przez GitHub
rodzic 1b8f09aa2d
commit 642b6b95ca
40 zmienionych plików z 1280 dodań i 430 usunięć
+100 -32
Wyświetl plik
@@ -39,6 +39,8 @@
#include "common/join.hpp"
#include "common/setup.hpp"
#include "dl.hpp"
#include "omnitrace/categories.h"
#include "omnitrace/types.h"
#include <cassert>
#include <gnu/libc-version.h>
@@ -256,6 +258,10 @@ struct OMNITRACE_HIDDEN_API indirect
OMNITRACE_DLSYM(omnitrace_pop_trace_f, m_omnihandle, "omnitrace_pop_trace");
OMNITRACE_DLSYM(omnitrace_push_region_f, m_omnihandle, "omnitrace_push_region");
OMNITRACE_DLSYM(omnitrace_pop_region_f, m_omnihandle, "omnitrace_pop_region");
OMNITRACE_DLSYM(omnitrace_push_category_region_f, m_omnihandle,
"omnitrace_push_category_region");
OMNITRACE_DLSYM(omnitrace_pop_category_region_f, m_omnihandle,
"omnitrace_pop_category_region");
OMNITRACE_DLSYM(omnitrace_register_source_f, m_omnihandle,
"omnitrace_register_source");
OMNITRACE_DLSYM(omnitrace_register_coverage_f, m_omnihandle,
@@ -330,37 +336,43 @@ struct OMNITRACE_HIDDEN_API indirect
if(omnitrace_user_configure_f)
{
(*omnitrace_user_configure_f)(
OMNITRACE_USER_START_STOP,
reinterpret_cast<void*>(&omnitrace_user_start_trace_dl),
reinterpret_cast<void*>(&omnitrace_user_stop_trace_dl));
(*omnitrace_user_configure_f)(
OMNITRACE_USER_START_STOP_THREAD,
reinterpret_cast<void*>(&omnitrace_user_start_thread_trace_dl),
reinterpret_cast<void*>(&omnitrace_user_stop_thread_trace_dl));
(*omnitrace_user_configure_f)(
OMNITRACE_USER_REGION,
reinterpret_cast<void*>(&omnitrace_user_push_region_dl),
reinterpret_cast<void*>(&omnitrace_user_pop_region_dl));
omnitrace_user_callbacks_t _cb = {};
_cb.start_trace = &omnitrace_user_start_trace_dl;
_cb.stop_trace = &omnitrace_user_stop_trace_dl;
_cb.start_thread_trace = &omnitrace_user_start_thread_trace_dl;
_cb.stop_thread_trace = &omnitrace_user_stop_thread_trace_dl;
_cb.push_region = &omnitrace_user_push_region_dl;
_cb.pop_region = &omnitrace_user_pop_region_dl;
_cb.push_annotated_region = &omnitrace_user_push_annotated_region_dl;
_cb.pop_annotated_region = &omnitrace_user_pop_annotated_region_dl;
(*omnitrace_user_configure_f)(OMNITRACE_USER_REPLACE_CONFIG, _cb, nullptr);
}
}
public:
// omnitrace functions
void (*omnitrace_init_library_f)(void) = nullptr;
void (*omnitrace_init_tooling_f)(void) = nullptr;
void (*omnitrace_init_f)(const char*, bool, const char*) = nullptr;
void (*omnitrace_finalize_f)(void) = nullptr;
void (*omnitrace_set_env_f)(const char*, const char*) = nullptr;
void (*omnitrace_set_mpi_f)(bool, bool) = nullptr;
using user_cb_t = omnitrace_user_callbacks_t;
// libomnitrace functions
void (*omnitrace_init_library_f)(void) = nullptr;
void (*omnitrace_init_tooling_f)(void) = nullptr;
void (*omnitrace_init_f)(const char*, bool, const char*) = nullptr;
void (*omnitrace_finalize_f)(void) = nullptr;
void (*omnitrace_set_env_f)(const char*, const char*) = nullptr;
void (*omnitrace_set_mpi_f)(bool, bool) = nullptr;
void (*omnitrace_register_source_f)(const char*, const char*, size_t, size_t,
const char*) = nullptr;
void (*omnitrace_register_coverage_f)(const char*, const char*, size_t) = nullptr;
void (*omnitrace_push_trace_f)(const char*) = nullptr;
void (*omnitrace_pop_trace_f)(const char*) = nullptr;
int (*omnitrace_push_region_f)(const char*) = nullptr;
int (*omnitrace_pop_region_f)(const char*) = nullptr;
int (*omnitrace_user_configure_f)(int, void*, void*) = nullptr;
const char*) = nullptr;
void (*omnitrace_register_coverage_f)(const char*, const char*, size_t) = nullptr;
void (*omnitrace_push_trace_f)(const char*) = nullptr;
void (*omnitrace_pop_trace_f)(const char*) = nullptr;
int (*omnitrace_push_region_f)(const char*) = nullptr;
int (*omnitrace_pop_region_f)(const char*) = nullptr;
int (*omnitrace_push_category_region_f)(omnitrace_category_t, const char*,
omnitrace_annotation_t*, size_t) = nullptr;
int (*omnitrace_pop_category_region_f)(omnitrace_category_t, const char*,
omnitrace_annotation_t*, size_t) = nullptr;
// libomnitrace-user functions
int (*omnitrace_user_configure_f)(int, user_cb_t, user_cb_t*) = nullptr;
// KokkosP functions
void (*kokkosp_print_help_f)(char*) = nullptr;
@@ -626,30 +638,66 @@ extern "C"
}
}
void omnitrace_push_region(const char* name)
int omnitrace_push_region(const char* name)
{
if(!dl::get_active()) return;
if(!dl::get_active()) return 0;
if(dl::get_thread_enabled())
{
OMNITRACE_DL_INVOKE(get_indirect().omnitrace_push_region_f, name);
return OMNITRACE_DL_INVOKE(get_indirect().omnitrace_push_region_f, name);
}
else
{
++dl::get_thread_count();
}
return 0;
}
void omnitrace_pop_region(const char* name)
int omnitrace_pop_region(const char* name)
{
if(!dl::get_active()) return;
if(!dl::get_active()) return 0;
if(dl::get_thread_enabled())
{
OMNITRACE_DL_INVOKE(get_indirect().omnitrace_pop_region_f, name);
return OMNITRACE_DL_INVOKE(get_indirect().omnitrace_pop_region_f, name);
}
else
{
if(dl::get_thread_count()-- == 0) omnitrace_user_start_thread_trace_dl();
}
return 0;
}
int omnitrace_push_category_region(omnitrace_category_t _category, const char* name,
omnitrace_annotation_t* _annotations,
size_t _annotation_count)
{
if(!dl::get_active()) return 0;
if(dl::get_thread_enabled())
{
return OMNITRACE_DL_INVOKE(get_indirect().omnitrace_push_category_region_f,
_category, name, _annotations, _annotation_count);
}
else
{
++dl::get_thread_count();
}
return 0;
}
int omnitrace_pop_category_region(omnitrace_category_t _category, const char* name,
omnitrace_annotation_t* _annotations,
size_t _annotation_count)
{
if(!dl::get_active()) return 0;
if(dl::get_thread_enabled())
{
return OMNITRACE_DL_INVOKE(get_indirect().omnitrace_pop_category_region_f,
_category, name, _annotations, _annotation_count);
}
else
{
++dl::get_thread_count();
}
return 0;
}
void omnitrace_set_env(const char* a, const char* b)
@@ -724,6 +772,26 @@ extern "C"
return OMNITRACE_DL_INVOKE(get_indirect().omnitrace_pop_region_f, name);
}
int omnitrace_user_push_annotated_region_dl(const char* name,
omnitrace_annotation_t* _annotations,
size_t _annotation_count)
{
if(!dl::get_active()) return 0;
return OMNITRACE_DL_INVOKE(get_indirect().omnitrace_push_category_region_f,
OMNITRACE_CATEGORY_USER, name, _annotations,
_annotation_count);
}
int omnitrace_user_pop_annotated_region_dl(const char* name,
omnitrace_annotation_t* _annotations,
size_t _annotation_count)
{
if(!dl::get_active()) return 0;
return OMNITRACE_DL_INVOKE(get_indirect().omnitrace_pop_category_region_f,
OMNITRACE_CATEGORY_USER, name, _annotations,
_annotation_count);
}
//----------------------------------------------------------------------------------//
//
// KokkosP
+15 -3
Wyświetl plik
@@ -21,7 +21,7 @@
// SOFTWARE.
#ifndef OMNITRACE_DL_HPP_
#define OMNITRACE_DL_HPP_ 1
#define OMNITRACE_DL_HPP_
#if defined(OMNITRACE_DL_SOURCE) && (OMNITRACE_DL_SOURCE > 0)
# include "common/defines.h"
@@ -78,8 +78,15 @@ extern "C"
void omnitrace_set_mpi(bool use, bool attached) OMNITRACE_PUBLIC_API;
void omnitrace_push_trace(const char* name) OMNITRACE_PUBLIC_API;
void omnitrace_pop_trace(const char* name) OMNITRACE_PUBLIC_API;
void omnitrace_push_region(const char*) OMNITRACE_PUBLIC_API;
void omnitrace_pop_region(const char*) OMNITRACE_PUBLIC_API;
int omnitrace_push_region(const char*) OMNITRACE_PUBLIC_API;
int omnitrace_pop_region(const char*) OMNITRACE_PUBLIC_API;
int omnitrace_push_category_region(omnitrace_category_t, const char*,
omnitrace_annotation_t*,
size_t) OMNITRACE_PUBLIC_API;
int omnitrace_pop_category_region(omnitrace_category_t, const char*,
omnitrace_annotation_t*,
size_t) OMNITRACE_PUBLIC_API;
void omnitrace_register_source(const char* file, const char* func, size_t line,
size_t address,
const char* source) OMNITRACE_PUBLIC_API;
@@ -99,6 +106,11 @@ extern "C"
int omnitrace_user_push_region_dl(const char*) OMNITRACE_HIDDEN_API;
int omnitrace_user_pop_region_dl(const char*) OMNITRACE_HIDDEN_API;
int omnitrace_user_push_annotated_region_dl(const char*, omnitrace_annotation_t*,
size_t) OMNITRACE_HIDDEN_API;
int omnitrace_user_pop_annotated_region_dl(const char*, omnitrace_annotation_t*,
size_t) OMNITRACE_HIDDEN_API;
// KokkosP
struct OMNITRACE_HIDDEN_API SpaceHandle
{