blob: f1bfa6a552e9794e2c8ad76593c488b025c98c52 [file] [log] [blame]
Marius Vlade0a858a2019-06-25 12:48:56 +03001/*
2 * Copyright © 2019 Collabora Ltd
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining
5 * a copy of this software and associated documentation files (the
6 * "Software"), to deal in the Software without restriction, including
7 * without limitation the rights to use, copy, modify, merge, publish,
8 * distribute, sublicense, and/or sell copies of the Software, and to
9 * permit persons to whom the Software is furnished to do so, subject to
10 * the following conditions:
11 *
12 * The above copyright notice and this permission notice (including the
13 * next paragraph) shall be included in all copies or substantial
14 * portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
20 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
21 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
22 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23 * SOFTWARE.
24 */
25#ifndef WESTON_LOG_INTERNAL_H
26#define WESTON_LOG_INTERNAL_H
27
28#include "wayland-util.h"
29
Marius Vlad5ae0e622019-07-11 17:44:50 +030030struct weston_log_subscription;
31
Marius Vlade0a858a2019-06-25 12:48:56 +030032/** Subscriber allows each type of stream to customize or to provide its own
33 * methods to manipulate the underlying storage. It follows also an
34 * object-oriented approach, contains the ops callbacks and a list of
35 * subcriptions of type weston_log_subscription. Each subscription created will
36 * be both added to this subscription list and that of the weston_log_scope.
37 *
38 * A kind of stream can inherit the subscriber class and provide its own callbacks:
39 * @code
40 * struct weston_log_data_stream {
41 * struct weston_log_subscriber base;
42 * struct weston_data_stream opaque;
43 * };
44 * @endcode
45 *
46 * Passing the base class will require container retrieval type of methods
47 * to be allowed to reach the opaque type (i.e., container_of()).
48 *
Marius Vlad8b8b8032019-06-27 18:34:03 +030049 * @ingroup internal-log
Marius Vlade0a858a2019-06-25 12:48:56 +030050 *
51 */
52struct weston_log_subscriber {
53 /** write the data pointed by @param data */
54 void (*write)(struct weston_log_subscriber *sub, const char *data, size_t len);
Leandro Ribeiro1ded6612020-02-06 16:43:51 -030055 /** For destroying the subscriber */
56 void (*destroy)(struct weston_log_subscriber *sub);
Marius Vlade0a858a2019-06-25 12:48:56 +030057 /** For the type of streams that required additional destroy operation
58 * for destroying the stream */
Leandro Ribeiro8c02ea12020-02-06 15:41:32 -030059 void (*destroy_subscription)(struct weston_log_subscriber *sub);
Marius Vlade0a858a2019-06-25 12:48:56 +030060 /** For the type of streams that can inform the 'consumer' part that
61 * write operation has been terminated/finished and should close the
62 * stream.
63 */
64 void (*complete)(struct weston_log_subscriber *sub);
65 struct wl_list subscription_list; /**< weston_log_subscription::owner_link */
66};
67
Marius Vlad5ae0e622019-07-11 17:44:50 +030068void
Marius Vlade0a858a2019-06-25 12:48:56 +030069weston_log_subscription_create(struct weston_log_subscriber *owner,
Marius Vlad5ae0e622019-07-11 17:44:50 +030070 struct weston_log_scope *scope);
Marius Vlade0a858a2019-06-25 12:48:56 +030071
72void
73weston_log_subscription_destroy(struct weston_log_subscription *sub);
74
Marius Vlade0a858a2019-06-25 12:48:56 +030075void
76weston_log_subscription_add(struct weston_log_scope *scope,
77 struct weston_log_subscription *sub);
78void
79weston_log_subscription_remove(struct weston_log_subscription *sub);
80
Marius Vlad69e75712019-06-25 13:29:57 +030081void
Leandro Ribeiro23491cd2020-02-03 22:59:16 -030082weston_log_subscriber_release(struct weston_log_subscriber *subscriber);
83
84void
Marius Vlad69e75712019-06-25 13:29:57 +030085weston_log_bind_weston_debug(struct wl_client *client,
86 void *data, uint32_t version, uint32_t id);
87
Marius Vlad8f329e22019-06-21 14:57:02 +030088struct weston_log_scope *
89weston_log_get_scope(struct weston_log_context *log_ctx, const char *name);
90
91void
Marius Vlad0c7beb02019-07-25 11:46:44 +030092weston_log_run_cb_new_subscription(struct weston_log_subscription *sub);
Marius Vlad8f329e22019-06-21 14:57:02 +030093
94void
95weston_debug_protocol_advertise_scopes(struct weston_log_context *log_ctx,
96 struct wl_resource *res);
Marius Vlad4e036292019-07-09 00:36:20 +030097
98int
99weston_vlog(const char *fmt, va_list ap);
100int
101weston_vlog_continue(const char *fmt, va_list ap);
Marius Vlad8f329e22019-06-21 14:57:02 +0300102
Marius Vlad410d0bc2019-07-29 12:05:29 +0300103void *
104weston_log_subscription_get_data(struct weston_log_subscription *sub);
105
106void
107weston_log_subscription_set_data(struct weston_log_subscription *sub, void *data);
108
Marius Vladda104eb2019-09-05 14:31:01 +0300109void
110weston_timeline_create_subscription(struct weston_log_subscription *sub,
111 void *user_data);
112
113void
114weston_timeline_destroy_subscription(struct weston_log_subscription *sub,
115 void *user_data);
116
Marius Vlade0a858a2019-06-25 12:48:56 +0300117#endif /* WESTON_LOG_INTERNAL_H */