X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=include%2Fust-context-provider.h;h=670c38633b18120d746382610053c9c26af90462;hb=5198080d2234eb06e95d245d0a9747810f496475;hp=332f9144a531735038e73135397fc84d39da1874;hpb=ae4b659d95f8dab9f2aa4b890d6937d7d5375f07;p=lttng-ust.git diff --git a/include/ust-context-provider.h b/include/ust-context-provider.h index 332f9144..670c3863 100644 --- a/include/ust-context-provider.h +++ b/include/ust-context-provider.h @@ -2,6 +2,10 @@ * SPDX-License-Identifier: MIT * * Copyright (C) 2016 Mathieu Desnoyers + * + * The context provider feature is part of the ABI and used by the Java jni + * interface. This header should be moved to the public header directory once + * some test code and documentation is written. */ #ifndef _LTTNG_UST_CONTEXT_PROVIDER_H @@ -11,6 +15,46 @@ #include #include +#include "ust-dynamic-type.h" + +struct lttng_ctx_value { + enum lttng_ust_dynamic_type sel; + union { + int64_t s64; + uint64_t u64; + const char *str; + double d; + } u; +}; + +struct lttng_perf_counter_field; + +#define LTTNG_UST_CTX_FIELD_PADDING 40 +struct lttng_ctx_field { + struct lttng_ust_event_field event_field; + size_t (*get_size)(struct lttng_ctx_field *field, size_t offset); + void (*record)(struct lttng_ctx_field *field, + struct lttng_ust_lib_ring_buffer_ctx *ctx, + struct lttng_channel *chan); + void (*get_value)(struct lttng_ctx_field *field, + struct lttng_ctx_value *value); + union { + struct lttng_perf_counter_field *perf_counter; + char padding[LTTNG_UST_CTX_FIELD_PADDING]; + } u; + void (*destroy)(struct lttng_ctx_field *field); + char *field_name; /* Has ownership, dynamically allocated. */ +}; + +#define LTTNG_UST_CTX_PADDING 20 +struct lttng_ctx { + struct lttng_ctx_field *fields; + unsigned int nr_fields; + unsigned int allocated_fields; + unsigned int largest_align; + char padding[LTTNG_UST_CTX_PADDING]; +}; + struct lttng_ust_context_provider { char *name; size_t (*get_size)(struct lttng_ctx_field *field, size_t offset); @@ -25,8 +69,6 @@ struct lttng_ust_context_provider { int lttng_ust_context_provider_register(struct lttng_ust_context_provider *provider); void lttng_ust_context_provider_unregister(struct lttng_ust_context_provider *provider); -int lttng_context_is_app(const char *name); - void lttng_ust_context_set_session_provider(const char *name, size_t (*get_size)(struct lttng_ctx_field *field, size_t offset), void (*record)(struct lttng_ctx_field *field, @@ -44,7 +86,5 @@ int lttng_ust_context_set_provider_rcu(struct lttng_ctx **_ctx, struct lttng_channel *chan), void (*get_value)(struct lttng_ctx_field *field, struct lttng_ctx_value *value)); -int lttng_context_add_rcu(struct lttng_ctx **ctx_p, - const struct lttng_ctx_field *f); #endif /* _LTTNG_UST_CONTEXT_PROVIDER_H */