blob: 222a751bb4df397c48ca66994e2f7e457f44f8d4 [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);
55 /** For the type of streams that required additional destroy operation
56 * for destroying the stream */
57 void (*destroy)(struct weston_log_subscriber *sub);
58 /** For the type of streams that can inform the 'consumer' part that
59 * write operation has been terminated/finished and should close the
60 * stream.
61 */
62 void (*complete)(struct weston_log_subscriber *sub);
63 struct wl_list subscription_list; /**< weston_log_subscription::owner_link */
64};
65
Marius Vlad5ae0e622019-07-11 17:44:50 +030066void
Marius Vlade0a858a2019-06-25 12:48:56 +030067weston_log_subscription_create(struct weston_log_subscriber *owner,
Marius Vlad5ae0e622019-07-11 17:44:50 +030068 struct weston_log_scope *scope);
Marius Vlade0a858a2019-06-25 12:48:56 +030069
70void
71weston_log_subscription_destroy(struct weston_log_subscription *sub);
72
73struct weston_log_subscription *
74weston_log_subscriber_get_only_subscription(struct weston_log_subscriber *subscriber);
75
76void
77weston_log_subscription_add(struct weston_log_scope *scope,
78 struct weston_log_subscription *sub);
79void
80weston_log_subscription_remove(struct weston_log_subscription *sub);
81
Marius Vlad69e75712019-06-25 13:29:57 +030082
83void
84weston_log_bind_weston_debug(struct wl_client *client,
85 void *data, uint32_t version, uint32_t id);
86
Marius Vlad8f329e22019-06-21 14:57:02 +030087struct weston_log_scope *
88weston_log_get_scope(struct weston_log_context *log_ctx, const char *name);
89
90void
Marius Vlad0c7beb02019-07-25 11:46:44 +030091weston_log_run_cb_new_subscription(struct weston_log_subscription *sub);
Marius Vlad8f329e22019-06-21 14:57:02 +030092
93void
94weston_debug_protocol_advertise_scopes(struct weston_log_context *log_ctx,
95 struct wl_resource *res);
Marius Vlad4e036292019-07-09 00:36:20 +030096int
97weston_log_ctx_compositor_setup(struct weston_compositor *compositor,
98 struct weston_log_context *log_ctx);
99
100int
101weston_vlog(const char *fmt, va_list ap);
102int
103weston_vlog_continue(const char *fmt, va_list ap);
Marius Vlad8f329e22019-06-21 14:57:02 +0300104
Marius Vlade0a858a2019-06-25 12:48:56 +0300105#endif /* WESTON_LOG_INTERNAL_H */