X-Git-Url: https://git.lttng.org/?p=lttngtop.git;a=blobdiff_plain;f=lib%2Fbabeltrace%2Fctf%2Fcallbacks.h;fp=lib%2Fbabeltrace%2Fctf%2Fcallbacks.h;h=bc75769d5021b6f1bc1fe569b53cef6e0b843fa1;hp=0000000000000000000000000000000000000000;hb=b1acd2b342a35dc6c5a8036fb0280321203e89b7;hpb=a18dc7c24b4ac751c46a96198aebcbb1dcd4cdd6 diff --git a/lib/babeltrace/ctf/callbacks.h b/lib/babeltrace/ctf/callbacks.h new file mode 100644 index 0000000..bc75769 --- /dev/null +++ b/lib/babeltrace/ctf/callbacks.h @@ -0,0 +1,116 @@ +#ifndef _BABELTRACE_CTF_CALLBACKS_H +#define _BABELTRACE_CTF_CALLBACKS_H + +/* + * BabelTrace + * + * CTF events API + * + * Copyright 2011-2012 EfficiOS Inc. and Linux Foundation + * + * Author: Mathieu Desnoyers + * Julien Desfossez + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct bt_ctf_iter; +struct bt_dependencies; + +enum bt_cb_ret { + BT_CB_OK = 0, + BT_CB_OK_STOP = 1, + BT_CB_ERROR_STOP = 2, + BT_CB_ERROR_CONTINUE = 3, +}; + +/* + * Receives a variable number of strings as parameter, ended with NULL. + */ +struct bt_dependencies *bt_dependencies_create(const char *first, ...); + +/* + * struct bt_dependencies must be destroyed explicitly if not passed as + * parameter to a bt_ctf_iter_add_callback(). + */ +void bt_dependencies_destroy(struct bt_dependencies *dep); + +/* + * bt_ctf_iter_add_callback: Add a callback to iterator. + * + * @iter: trace collection iterator (input) + * @event: event to target. 0 for all events. + * @private_data: private data pointer to pass to the callback + * @flags: specific flags controlling the behavior of this callback + * (or'd). + * + * @callback: function pointer to call + * @depends: struct bt_dependency detailing the required computation results. + * Ends with 0. NULL is accepted as empty dependency. + * @weak_depends: struct bt_dependency detailing the optional computation + * results that can be optionally consumed by this + * callback. NULL is accepted as empty dependency. + * @provides: struct bt_dependency detailing the computation results + * provided by this callback. + * Ends with 0. NULL is accepted as empty dependency. + * + * "depends", "weak_depends" and "provides" memory is handled by the + * babeltrace library after this call succeeds or fails. These objects + * can still be used by the caller until the babeltrace iterator is + * destroyed, but they belong to the babeltrace library. + * + * (note to implementor: we need to keep a gptrarray of struct + * bt_dependencies to "garbage collect" in struct bt_ctf_iter, and + * dependencies need to have a refcount to handle the case where they + * would be passed to more than one iterator. Upon iterator detroy, we + * iterate on all the gc ptrarray and decrement the refcounts, freeing + * if we reach 0.) + * (note to implementor: we calculate the dependency graph when + * bt_ctf_iter_read_event() is executed after a + * bt_ctf_iter_add_callback(). Beware that it is valid to create/add + * callbacks/read/add more callbacks/read some more.) + */ +int bt_ctf_iter_add_callback(struct bt_ctf_iter *iter, + bt_intern_str event, void *private_data, int flags, + enum bt_cb_ret (*callback)(struct bt_ctf_event *ctf_data, + void *caller_data), + struct bt_dependencies *depends, + struct bt_dependencies *weak_depends, + struct bt_dependencies *provides); + +/* + * For flags parameter above. + */ +enum { + BT_FLAGS_FREE_PRIVATE_DATA = (1 << 0), +}; + +#ifdef __cplusplus +} +#endif + +#endif /*_BABELTRACE_CTF_CALLBACKS_H */