This patch changes the bt_graph_add_*_component*() functions so that
they accept a log level parameter. This is now considered the
component's initial log level, so that we can achieve per-component log
levels.
The component initialization method types are not changed: because the
log level is part of a component's state, a component initialization
method can retrieve its own, current log level with the new
bt_component_get_logging_level() function. When you call
bt_graph_add_*_component*(), the function creates an initial component
object, sets its initial log level, and then calls its initialization
method.
Eventually, we can add a new, optional "logging level changed" component
method to notify it that its log level changed (caused by a call to
bt_component_set_logging_level(), for example).
The project's components do not honor their initial log level within the
scope of this patch: this is postponed to another patch. In other words,
they still use shared object constructors and environment variables to
set their log level at the component class level.
The CLI passes the configured log level (`--log-level`, `-v`, or `-d`
options) when it calls the bt_graph_add_*_component() functions. As of
this patch, it also still sets the known log level environment
variables.
Python bindings are adjusted accordingly. Their tests are not changed
because the log level parameter is optional (defaults to
`bt2.LoggingLevel.NONE`) and it's the last one of
bt2.Graph.add_component(). The constructor of `bt2.ComponentSpec` also
accepts a new, optional log level parameter to configure the component
specifier as such. You can access the log level of a component with the
new `logging_level` property.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: If258335f46ffabb587dd777b5109fc66d8a59f54
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1454
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
17 files changed:
*/
#include <babeltrace2/types.h>
*/
#include <babeltrace2/types.h>
+/* For bt_logging_level */
+#include <babeltrace2/logging.h>
+
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __cplusplus
extern "C" {
#endif
*/
extern const char *bt_component_get_name(const bt_component *component);
*/
extern const char *bt_component_get_name(const bt_component *component);
+extern bt_logging_level bt_component_get_logging_level(
+ const bt_component *component);
+
/**
* Get component's class.
*
/**
* Get component's class.
*
/* For bt_graph_status */
#include <babeltrace2/graph/graph-const.h>
/* For bt_graph_status */
#include <babeltrace2/graph/graph-const.h>
+/* For bt_logging_level */
+#include <babeltrace2/logging.h>
+
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __cplusplus
extern "C" {
#endif
extern bt_graph_status bt_graph_add_source_component(bt_graph *graph,
const bt_component_class_source *component_class,
const char *name, const bt_value *params,
extern bt_graph_status bt_graph_add_source_component(bt_graph *graph,
const bt_component_class_source *component_class,
const char *name, const bt_value *params,
- const bt_component_source **component);
+ bt_logging_level log_level, const bt_component_source **component);
extern bt_graph_status bt_graph_add_source_component_with_init_method_data(
bt_graph *graph,
const bt_component_class_source *component_class,
const char *name, const bt_value *params,
extern bt_graph_status bt_graph_add_source_component_with_init_method_data(
bt_graph *graph,
const bt_component_class_source *component_class,
const char *name, const bt_value *params,
- void *init_method_data,
+ void *init_method_data, bt_logging_level log_level,
const bt_component_source **component);
extern bt_graph_status bt_graph_add_filter_component(bt_graph *graph,
const bt_component_class_filter *component_class,
const char *name, const bt_value *params,
const bt_component_source **component);
extern bt_graph_status bt_graph_add_filter_component(bt_graph *graph,
const bt_component_class_filter *component_class,
const char *name, const bt_value *params,
+ bt_logging_level log_level,
const bt_component_filter **component);
extern bt_graph_status bt_graph_add_filter_component_with_init_method_data(
bt_graph *graph,
const bt_component_class_filter *component_class,
const char *name, const bt_value *params,
const bt_component_filter **component);
extern bt_graph_status bt_graph_add_filter_component_with_init_method_data(
bt_graph *graph,
const bt_component_class_filter *component_class,
const char *name, const bt_value *params,
- void *init_method_data,
+ void *init_method_data, bt_logging_level log_level,
const bt_component_filter **component);
extern bt_graph_status bt_graph_add_sink_component(
bt_graph *graph, const bt_component_class_sink *component_class,
const char *name, const bt_value *params,
const bt_component_filter **component);
extern bt_graph_status bt_graph_add_sink_component(
bt_graph *graph, const bt_component_class_sink *component_class,
const char *name, const bt_value *params,
+ bt_logging_level log_level,
const bt_component_sink **component);
extern bt_graph_status bt_graph_add_sink_component_with_init_method_data(
bt_graph *graph, const bt_component_class_sink *component_class,
const char *name, const bt_value *params,
const bt_component_sink **component);
extern bt_graph_status bt_graph_add_sink_component_with_init_method_data(
bt_graph *graph, const bt_component_class_sink *component_class,
const char *name, const bt_value *params,
- void *init_method_data,
+ void *init_method_data, bt_logging_level log_level,
const bt_component_sink **component);
extern bt_graph_status bt_graph_connect_ports(bt_graph *graph,
const bt_component_sink **component);
extern bt_graph_status bt_graph_connect_ports(bt_graph *graph,
assert name is not None
return name
assert name is not None
return name
+ @property
+ def logging_level(self):
+ ptr = self._as_component_ptr(self._ptr)
+ return native_bt.component_get_logging_level(ptr)
+
@property
def cls(self):
cc_ptr = self._borrow_component_class_ptr(self._ptr)
@property
def cls(self):
cc_ptr = self._borrow_component_class_ptr(self._ptr)
assert name is not None
return name
assert name is not None
return name
+ @property
+ def logging_level(self):
+ ptr = self._as_not_self_specific_component_ptr(self._ptr)
+ ptr = self._as_component_ptr(ptr)
+ return native_bt.component_get_logging_level(ptr)
+
@property
def cls(self):
comp_ptr = self._as_not_self_specific_component_ptr(self._ptr)
@property
def cls(self):
comp_ptr = self._as_not_self_specific_component_ptr(self._ptr)
import bt2.component
import functools
import bt2.port
import bt2.component
import functools
import bt2.port
elif status < 0:
raise bt2.Error(gen_error_msg)
elif status < 0:
raise bt2.Error(gen_error_msg)
- def add_component(self, component_class, name, params=None):
+ def add_component(self, component_class, name, params=None,
+ logging_level=bt2.logging.LoggingLevel.NONE):
if isinstance(component_class, bt2.component._GenericSourceComponentClass):
cc_ptr = component_class._ptr
add_fn = native_bt.graph_add_source_component
if isinstance(component_class, bt2.component._GenericSourceComponentClass):
cc_ptr = component_class._ptr
add_fn = native_bt.graph_add_source_component
component_class.__class__.__name__))
utils._check_str(name)
component_class.__class__.__name__))
utils._check_str(name)
+ utils._check_log_level(logging_level)
params = bt2.create_value(params)
params_ptr = params._ptr if params is not None else None
params = bt2.create_value(params)
params_ptr = params._ptr if params is not None else None
- status, comp_ptr = add_fn(self._ptr, cc_ptr, name, params_ptr)
+ status, comp_ptr = add_fn(self._ptr, cc_ptr, name,
+ params_ptr, logging_level)
self._handle_status(status, 'cannot add component to graph')
assert comp_ptr
return bt2.component._create_component_from_ptr(comp_ptr, cc_type)
self._handle_status(status, 'cannot add component to graph')
assert comp_ptr
return bt2.component._create_component_from_ptr(comp_ptr, cc_type)
extern const char *bt_component_get_name(const bt_component *component);
extern const char *bt_component_get_name(const bt_component *component);
+extern bt_logging_level bt_component_get_logging_level(
+ const bt_component *component);
+
extern const bt_component_class *bt_component_borrow_class_const(
const bt_component *component);
extern const bt_component_class *bt_component_borrow_class_const(
const bt_component *component);
extern bt_graph_status bt_graph_add_source_component(bt_graph *graph,
const bt_component_class_source *component_class,
const char *name, const bt_value *params,
extern bt_graph_status bt_graph_add_source_component(bt_graph *graph,
const bt_component_class_source *component_class,
const char *name, const bt_value *params,
- const bt_component_source **OUT);
+ bt_logging_level log_level, const bt_component_source **OUT);
extern bt_graph_status bt_graph_add_source_component_with_init_method_data(
bt_graph *graph,
const bt_component_class_source *component_class,
const char *name, const bt_value *params,
extern bt_graph_status bt_graph_add_source_component_with_init_method_data(
bt_graph *graph,
const bt_component_class_source *component_class,
const char *name, const bt_value *params,
- void *init_method_data,
+ void *init_method_data, bt_logging_level log_level,
const bt_component_source **OUT);
extern bt_graph_status bt_graph_add_filter_component(bt_graph *graph,
const bt_component_class_filter *component_class,
const char *name, const bt_value *params,
const bt_component_source **OUT);
extern bt_graph_status bt_graph_add_filter_component(bt_graph *graph,
const bt_component_class_filter *component_class,
const char *name, const bt_value *params,
+ bt_logging_level log_level,
const bt_component_filter **OUT);
extern bt_graph_status bt_graph_add_filter_component_with_init_method_data(
bt_graph *graph,
const bt_component_class_filter *component_class,
const char *name, const bt_value *params,
const bt_component_filter **OUT);
extern bt_graph_status bt_graph_add_filter_component_with_init_method_data(
bt_graph *graph,
const bt_component_class_filter *component_class,
const char *name, const bt_value *params,
- void *init_method_data,
+ void *init_method_data, bt_logging_level log_level,
const bt_component_filter **OUT);
extern bt_graph_status bt_graph_add_sink_component(
bt_graph *graph, const bt_component_class_sink *component_class,
const char *name, const bt_value *params,
const bt_component_filter **OUT);
extern bt_graph_status bt_graph_add_sink_component(
bt_graph *graph, const bt_component_class_sink *component_class,
const char *name, const bt_value *params,
+ bt_logging_level log_level,
const bt_component_sink **OUT);
extern bt_graph_status bt_graph_add_sink_component_with_init_method_data(
bt_graph *graph, const bt_component_class_sink *component_class,
const char *name, const bt_value *params,
const bt_component_sink **OUT);
extern bt_graph_status bt_graph_add_sink_component_with_init_method_data(
bt_graph *graph, const bt_component_class_sink *component_class,
const char *name, const bt_value *params,
- void *init_method_data,
+ void *init_method_data, bt_logging_level log_level,
const bt_component_sink **OUT);
extern bt_graph_status bt_graph_connect_ports(bt_graph *graph,
const bt_component_sink **OUT);
extern bt_graph_status bt_graph_connect_ports(bt_graph *graph,
status = BT_GRAPH_LISTENER_STATUS_ERROR;
goto end;
}
status = BT_GRAPH_LISTENER_STATUS_ERROR;
goto end;
}
BT_ASSERT(py_res == Py_None);
status = BT_GRAPH_LISTENER_STATUS_OK;
BT_ASSERT(py_res == Py_None);
status = BT_GRAPH_LISTENER_STATUS_OK;
status = BT_GRAPH_LISTENER_STATUS_NOMEM;
goto end;
}
status = BT_GRAPH_LISTENER_STATUS_NOMEM;
goto end;
}
py_downstream_component_ptr = SWIG_NewPointerObj(SWIG_as_voidptr(downstream_component),
downstream_component_swig_type, 0);
if (!py_downstream_component_ptr) {
py_downstream_component_ptr = SWIG_NewPointerObj(SWIG_as_voidptr(downstream_component),
downstream_component_swig_type, 0);
if (!py_downstream_component_ptr) {
status = BT_GRAPH_LISTENER_STATUS_ERROR;
goto end;
}
status = BT_GRAPH_LISTENER_STATUS_ERROR;
goto end;
}
BT_ASSERT(py_res == Py_None);
status = BT_GRAPH_LISTENER_STATUS_OK;
BT_ASSERT(py_res == Py_None);
status = BT_GRAPH_LISTENER_STATUS_OK;
- def __init__(self, plugin_name, class_name, params=None):
+ def __init__(self, plugin_name, class_name, params=None,
+ logging_level=bt2.logging.LoggingLevel.NONE):
utils._check_str(plugin_name)
utils._check_str(class_name)
utils._check_str(plugin_name)
utils._check_str(class_name)
+ utils._check_log_level(logging_level)
self._plugin_name = plugin_name
self._class_name = class_name
self._plugin_name = plugin_name
self._class_name = class_name
+ self._logging_level = logging_level
if type(params) is str:
self._params = bt2.create_value({'paths': [params]})
if type(params) is str:
self._params = bt2.create_value({'paths': [params]})
def class_name(self):
return self._class_name
def class_name(self):
return self._class_name
+ @property
+ def logging_level(self):
+ return self._logging_level
+
@property
def params(self):
return self._params
@property
def params(self):
return self._params
comp_cls = comp_classes[comp_spec.class_name]
name = self._get_unique_comp_name(comp_spec)
comp_cls = comp_classes[comp_spec.class_name]
name = self._get_unique_comp_name(comp_spec)
- comp = self._graph.add_component(comp_cls, name, comp_spec.params)
+ comp = self._graph.add_component(comp_cls, name, comp_spec.params,
+ comp_spec.logging_level)
return comp
def _get_free_muxer_input_port(self):
return comp
def _get_free_muxer_input_port(self):
# THE SOFTWARE.
import bt2
# THE SOFTWARE.
import bt2
def _handle_ptr(ptr, msg=None):
if ptr is None:
_raise_bt2_error(msg)
def _handle_ptr(ptr, msg=None):
if ptr is None:
_raise_bt2_error(msg)
+
+
+def _check_log_level(log_level):
+ _check_int(log_level)
+
+ log_levels = (
+ bt2.logging.LoggingLevel.VERBOSE,
+ bt2.logging.LoggingLevel.DEBUG,
+ bt2.logging.LoggingLevel.INFO,
+ bt2.logging.LoggingLevel.WARN,
+ bt2.logging.LoggingLevel.ERROR,
+ bt2.logging.LoggingLevel.FATAL,
+ bt2.logging.LoggingLevel.NONE,
+ )
+
+ if log_level not in log_levels:
+ raise ValueError("'{}' is not a valid logging level".format(log_level))
ctx->connect_ports = false;
graph_status = bt_graph_add_filter_component(
ctx->graph, trimmer_class, trimmer_name,
ctx->connect_ports = false;
graph_status = bt_graph_add_filter_component(
ctx->graph, trimmer_class, trimmer_name,
- trimmer_params, &trimmer);
+ trimmer_params, ctx->cfg->log_level,
+ &trimmer);
free(trimmer_name);
if (graph_status != BT_GRAPH_STATUS_OK) {
goto error;
free(trimmer_name);
if (graph_status != BT_GRAPH_STATUS_OK) {
goto error;
case BT_COMPONENT_CLASS_TYPE_SOURCE:
ret = bt_graph_add_source_component(ctx->graph,
comp_cls, cfg_comp->instance_name->str,
case BT_COMPONENT_CLASS_TYPE_SOURCE:
ret = bt_graph_add_source_component(ctx->graph,
comp_cls, cfg_comp->instance_name->str,
+ cfg_comp->params, ctx->cfg->log_level,
(void *) &comp);
break;
case BT_COMPONENT_CLASS_TYPE_FILTER:
ret = bt_graph_add_filter_component(ctx->graph,
comp_cls, cfg_comp->instance_name->str,
(void *) &comp);
break;
case BT_COMPONENT_CLASS_TYPE_FILTER:
ret = bt_graph_add_filter_component(ctx->graph,
comp_cls, cfg_comp->instance_name->str,
+ cfg_comp->params, ctx->cfg->log_level,
(void *) &comp);
break;
case BT_COMPONENT_CLASS_TYPE_SINK:
ret = bt_graph_add_sink_component(ctx->graph,
comp_cls, cfg_comp->instance_name->str,
(void *) &comp);
break;
case BT_COMPONENT_CLASS_TYPE_SINK:
ret = bt_graph_add_sink_component(ctx->graph,
comp_cls, cfg_comp->instance_name->str,
+ cfg_comp->params, ctx->cfg->log_level,
(void *) &comp);
break;
default:
(void *) &comp);
break;
default:
#define BT_LOG_TAG "LIB/COMPONENT"
#include "lib/lib-logging.h"
#define BT_LOG_TAG "LIB/COMPONENT"
#include "lib/lib-logging.h"
+#include "common/common.h"
#include "common/assert.h"
#include "lib/assert-pre.h"
#include <babeltrace2/graph/self-component.h>
#include "common/assert.h"
#include "lib/assert-pre.h"
#include <babeltrace2/graph/self-component.h>
BT_HIDDEN
int bt_component_create(struct bt_component_class *component_class,
BT_HIDDEN
int bt_component_create(struct bt_component_class *component_class,
- const char *name, struct bt_component **user_component)
+ const char *name, bt_logging_level log_level,
+ struct bt_component **user_component)
{
int ret = 0;
struct bt_component *component = NULL;
{
int ret = 0;
struct bt_component *component = NULL;
BT_ASSERT(name);
type = bt_component_class_get_type(component_class);
BT_LIB_LOGI("Creating empty component from component class: %![cc-]+C, "
BT_ASSERT(name);
type = bt_component_class_get_type(component_class);
BT_LIB_LOGI("Creating empty component from component class: %![cc-]+C, "
- "comp-name=\"%s\"", component_class, name);
+ "comp-name=\"%s\", log-level=%s", component_class, name,
+ bt_common_logging_level_string(log_level));
component = component_create_funcs[type](component_class);
if (!component) {
BT_LOGE_STR("Cannot create specific component object.");
component = component_create_funcs[type](component_class);
if (!component) {
BT_LOGE_STR("Cannot create specific component object.");
+ component->log_level = log_level;
component->input_ports = g_ptr_array_new_with_free_func(
(GDestroyNotify) bt_object_try_spec_release);
if (!component->input_ports) {
component->input_ports = g_ptr_array_new_with_free_func(
(GDestroyNotify) bt_object_try_spec_release);
if (!component->input_ports) {
+bt_logging_level bt_component_get_logging_level(
+ const struct bt_component *component)
+{
+ BT_ASSERT_PRE_NON_NULL(component, "Component");
+ return component->log_level;
+}
+
void bt_component_get_ref(const struct bt_component *component)
{
bt_object_get_ref(component);
void bt_component_get_ref(const struct bt_component *component)
{
bt_object_get_ref(component);
#include <babeltrace2/graph/component-const.h>
#include "lib/object.h"
#include <babeltrace2/types.h>
#include <babeltrace2/graph/component-const.h>
#include "lib/object.h"
#include <babeltrace2/types.h>
+#include <babeltrace2/logging.h>
#include "common/assert.h"
#include <glib.h>
#include <stdio.h>
#include "common/assert.h"
#include <glib.h>
#include <stdio.h>
struct bt_object base;
struct bt_component_class *class;
GString *name;
struct bt_object base;
struct bt_component_class *class;
GString *name;
+ bt_logging_level log_level;
/*
* Internal destroy function specific to a source, filter, or
/*
* Internal destroy function specific to a source, filter, or
BT_HIDDEN
int bt_component_create(struct bt_component_class *component_class,
BT_HIDDEN
int bt_component_create(struct bt_component_class *component_class,
- const char *name, struct bt_component **component);
+ const char *name, bt_logging_level log_level,
+ struct bt_component **component);
BT_HIDDEN
enum bt_self_component_status bt_component_accept_port_connection(
BT_HIDDEN
enum bt_self_component_status bt_component_accept_port_connection(
struct bt_component_class *comp_cls,
comp_init_method_t init_method,
const char *name, const struct bt_value *params,
struct bt_component_class *comp_cls,
comp_init_method_t init_method,
const char *name, const struct bt_value *params,
- void *init_method_data, struct bt_component **user_component)
+ void *init_method_data, bt_logging_level log_level,
+ struct bt_component **user_component)
{
enum bt_graph_status graph_status = BT_GRAPH_STATUS_OK;
enum bt_self_component_status comp_status;
{
enum bt_graph_status graph_status = BT_GRAPH_STATUS_OK;
enum bt_self_component_status comp_status;
init_can_consume = graph->can_consume;
bt_graph_set_can_consume(graph, false);
BT_LIB_LOGI("Adding component to graph: "
init_can_consume = graph->can_consume;
bt_graph_set_can_consume(graph, false);
BT_LIB_LOGI("Adding component to graph: "
- "%![graph-]+g, %![cc-]+C, name=\"%s\", %![params-]+v, "
- "init-method-data-addr=%p",
- graph, comp_cls, name, params, init_method_data);
+ "%![graph-]+g, %![cc-]+C, name=\"%s\", log-level=%s, "
+ "%![params-]+v, init-method-data-addr=%p",
+ graph, comp_cls, name,
+ bt_common_logging_level_string(log_level), params,
+ init_method_data);
if (!params) {
new_params = bt_value_map_create();
if (!params) {
new_params = bt_value_map_create();
- ret = bt_component_create(comp_cls, name, &component);
+ ret = bt_component_create(comp_cls, name, log_level, &component);
if (ret) {
BT_LOGE("Cannot create empty component object: ret=%d",
ret);
if (ret) {
BT_LOGE("Cannot create empty component object: ret=%d",
ret);
BT_LOGD_STR("Freezing component class.");
bt_component_class_freeze(comp_cls);
BT_LIB_LOGI("Added component to graph: "
BT_LOGD_STR("Freezing component class.");
bt_component_class_freeze(comp_cls);
BT_LIB_LOGI("Added component to graph: "
- "%![graph-]+g, %![cc-]+C, name=\"%s\", %![params-]+v, "
- "init-method-data-addr=%p, %![comp-]+c",
- graph, comp_cls, name, params, init_method_data, component);
+ "%![graph-]+g, %![cc-]+C, name=\"%s\", log-level=%s, "
+ "%![params-]+v, init-method-data-addr=%p, %![comp-]+c",
+ graph, comp_cls, name,
+ bt_common_logging_level_string(log_level), params,
+ init_method_data, component);
if (user_component) {
/* Move reference to user */
if (user_component) {
/* Move reference to user */
struct bt_graph *graph,
const struct bt_component_class_source *comp_cls,
const char *name, const struct bt_value *params,
struct bt_graph *graph,
const struct bt_component_class_source *comp_cls,
const char *name, const struct bt_value *params,
- void *init_method_data,
+ void *init_method_data, bt_logging_level log_level,
const struct bt_component_source **component)
{
BT_ASSERT_PRE_NON_NULL(comp_cls, "Component class");
return add_component_with_init_method_data(graph,
(void *) comp_cls, (comp_init_method_t) comp_cls->methods.init,
const struct bt_component_source **component)
{
BT_ASSERT_PRE_NON_NULL(comp_cls, "Component class");
return add_component_with_init_method_data(graph,
(void *) comp_cls, (comp_init_method_t) comp_cls->methods.init,
- name, params, init_method_data, (void *) component);
+ name, params, init_method_data, log_level, (void *) component);
}
enum bt_graph_status bt_graph_add_source_component(
struct bt_graph *graph,
const struct bt_component_class_source *comp_cls,
const char *name, const struct bt_value *params,
}
enum bt_graph_status bt_graph_add_source_component(
struct bt_graph *graph,
const struct bt_component_class_source *comp_cls,
const char *name, const struct bt_value *params,
+ bt_logging_level log_level,
const struct bt_component_source **component)
{
return bt_graph_add_source_component_with_init_method_data(
const struct bt_component_source **component)
{
return bt_graph_add_source_component_with_init_method_data(
- graph, comp_cls, name, params, NULL, component);
+ graph, comp_cls, name, params, NULL, log_level, component);
struct bt_graph *graph,
const struct bt_component_class_filter *comp_cls,
const char *name, const struct bt_value *params,
struct bt_graph *graph,
const struct bt_component_class_filter *comp_cls,
const char *name, const struct bt_value *params,
- void *init_method_data,
+ void *init_method_data, bt_logging_level log_level,
const struct bt_component_filter **component)
{
BT_ASSERT_PRE_NON_NULL(comp_cls, "Component class");
return add_component_with_init_method_data(graph,
(void *) comp_cls, (comp_init_method_t) comp_cls->methods.init,
const struct bt_component_filter **component)
{
BT_ASSERT_PRE_NON_NULL(comp_cls, "Component class");
return add_component_with_init_method_data(graph,
(void *) comp_cls, (comp_init_method_t) comp_cls->methods.init,
- name, params, init_method_data, (void *) component);
+ name, params, init_method_data, log_level, (void *) component);
}
enum bt_graph_status bt_graph_add_filter_component(
struct bt_graph *graph,
const struct bt_component_class_filter *comp_cls,
const char *name, const struct bt_value *params,
}
enum bt_graph_status bt_graph_add_filter_component(
struct bt_graph *graph,
const struct bt_component_class_filter *comp_cls,
const char *name, const struct bt_value *params,
+ bt_logging_level log_level,
const struct bt_component_filter **component)
{
return bt_graph_add_filter_component_with_init_method_data(
const struct bt_component_filter **component)
{
return bt_graph_add_filter_component_with_init_method_data(
- graph, comp_cls, name, params, NULL, component);
+ graph, comp_cls, name, params, NULL, log_level, component);
struct bt_graph *graph,
const struct bt_component_class_sink *comp_cls,
const char *name, const struct bt_value *params,
struct bt_graph *graph,
const struct bt_component_class_sink *comp_cls,
const char *name, const struct bt_value *params,
- void *init_method_data,
+ void *init_method_data, bt_logging_level log_level,
const struct bt_component_sink **component)
{
BT_ASSERT_PRE_NON_NULL(comp_cls, "Component class");
return add_component_with_init_method_data(graph,
(void *) comp_cls, (comp_init_method_t) comp_cls->methods.init,
const struct bt_component_sink **component)
{
BT_ASSERT_PRE_NON_NULL(comp_cls, "Component class");
return add_component_with_init_method_data(graph,
(void *) comp_cls, (comp_init_method_t) comp_cls->methods.init,
- name, params, init_method_data, (void *) component);
+ name, params, init_method_data, log_level, (void *) component);
}
enum bt_graph_status bt_graph_add_sink_component(
struct bt_graph *graph,
const struct bt_component_class_sink *comp_cls,
const char *name, const struct bt_value *params,
}
enum bt_graph_status bt_graph_add_sink_component(
struct bt_graph *graph,
const struct bt_component_class_sink *comp_cls,
const char *name, const struct bt_value *params,
+ bt_logging_level log_level,
const struct bt_component_sink **component)
{
return bt_graph_add_sink_component_with_init_method_data(
const struct bt_component_sink **component)
{
return bt_graph_add_sink_component_with_init_method_data(
- graph, comp_cls, name, params, NULL, component);
+ graph, comp_cls, name, params, NULL, log_level, component);
colander_data.msgs = (void *) iterator->base.msgs->pdata;
colander_data.count_addr = &iterator->count;
colander_data.msgs = (void *) iterator->base.msgs->pdata;
colander_data.count_addr = &iterator->count;
- /* Hope that nobody uses this very unique name */
+ /*
+ * Hope that nobody uses this very unique name.
+ *
+ * We pass `BT_LOGGING_LEVEL_NONE` but the colander component
+ * class module does not use this level anyway since it belongs
+ * to the library.
+ */
graph_status =
bt_graph_add_sink_component_with_init_method_data(
(void *) graph, colander_comp_cls,
"colander-36ac3409-b1a8-4d60-ab1f-4fdf341a8fb1",
graph_status =
bt_graph_add_sink_component_with_init_method_data(
(void *) graph, colander_comp_cls,
"colander-36ac3409-b1a8-4d60-ab1f-4fdf341a8fb1",
- NULL, &colander_data, (void *) &iterator->colander);
+ NULL, &colander_data, BT_LOGGING_LEVEL_NONE,
+ (void *) &iterator->colander);
if (graph_status != BT_GRAPH_STATUS_OK) {
BT_LIB_LOGW("Cannot add colander sink component to graph: "
"%1[graph-]+g, status=%s", graph,
if (graph_status != BT_GRAPH_STATUS_OK) {
BT_LIB_LOGW("Cannot add colander sink component to graph: "
"%1[graph-]+g, status=%s", graph,
{
char tmp_prefix[TMP_PREFIX_LEN];
{
char tmp_prefix[TMP_PREFIX_LEN];
- BUF_APPEND(", %sname=\"%s\"",
- PRFIELD_GSTRING(component->name));
+ BUF_APPEND(", %sname=\"%s\", %slog-level=%s",
+ PRFIELD_GSTRING(component->name),
+ PRFIELD(bt_common_logging_level_string(component->log_level)));
if (component->class) {
SET_TMP_PREFIX("class-");
if (component->class) {
SET_TMP_PREFIX("class-");
int ret;
ret = bt_graph_add_source_component(graph, src_comp_class,
int ret;
ret = bt_graph_add_source_component(graph, src_comp_class,
- "src-comp", NULL, &comp);
+ "src-comp", NULL, BT_LOGGING_LEVEL_NONE, &comp);
BT_ASSERT(ret == 0);
return comp;
}
BT_ASSERT(ret == 0);
return comp;
}
int ret;
ret = bt_graph_add_sink_component(graph, sink_comp_class,
int ret;
ret = bt_graph_add_sink_component(graph, sink_comp_class,
- "sink-comp", NULL, &comp);
+ "sink-comp", NULL, BT_LOGGING_LEVEL_NONE, &comp);
BT_ASSERT(ret == 0);
return comp;
}
BT_ASSERT(ret == 0);
return comp;
}
graph = bt_graph_create();
BT_ASSERT(graph);
graph_ret = bt_graph_add_sink_component(graph, sink_comp_class,
graph = bt_graph_create();
BT_ASSERT(graph);
graph_ret = bt_graph_add_sink_component(graph, sink_comp_class,
- "the-sink", NULL, &sink_component);
+ "the-sink", NULL, BT_LOGGING_LEVEL_NONE, &sink_component);
ok(graph_ret == BT_GRAPH_STATUS_OK && sink_component,
"bt_graph_add_sink_component() still works after the plugin object is destroyed");
BT_COMPONENT_SINK_PUT_REF_AND_RESET(sink_component);
ok(graph_ret == BT_GRAPH_STATUS_OK && sink_component,
"bt_graph_add_sink_component() still works after the plugin object is destroyed");
BT_COMPONENT_SINK_PUT_REF_AND_RESET(sink_component);
BT_ASSERT(ret == 0);
graph = bt_graph_create();
ret = bt_graph_add_source_component(graph, comp_cls, "src-comp",
BT_ASSERT(ret == 0);
graph = bt_graph_create();
ret = bt_graph_add_source_component(graph, comp_cls, "src-comp",
+ NULL, BT_LOGGING_LEVEL_NONE, NULL);
BT_ASSERT(ret == 0);
bt_graph_put_ref(graph);
bt_component_class_source_put_ref(comp_cls);
BT_ASSERT(ret == 0);
bt_graph_put_ref(graph);
bt_component_class_source_put_ref(comp_cls);