mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-10-31 22:25:38 -04:00
log: make PW_LOG_TOPIC / PW_LOG_TOPIC_STATIC magical
Have PW_LOG_TOPIC / PW_LOG_TOPIC_STATIC emit GCC constructor/destructor functions that register/unregister the log topic as needed.
This commit is contained in:
parent
d2acad8f0e
commit
dd8d5e1bed
2 changed files with 25 additions and 35 deletions
|
|
@ -26,7 +26,7 @@ enum spa_log_level pw_log_level = DEFAULT_LOG_LEVEL;
|
||||||
static struct spa_log *global_log = &default_log.log;
|
static struct spa_log *global_log = &default_log.log;
|
||||||
|
|
||||||
SPA_EXPORT
|
SPA_EXPORT
|
||||||
struct spa_log_topic *PW_LOG_TOPIC_DEFAULT;
|
struct spa_log_topic * const PW_LOG_TOPIC_DEFAULT;
|
||||||
|
|
||||||
struct topic {
|
struct topic {
|
||||||
struct spa_list link;
|
struct spa_list link;
|
||||||
|
|
@ -43,7 +43,6 @@ struct pattern {
|
||||||
static struct spa_list topics = SPA_LIST_INIT(&topics);
|
static struct spa_list topics = SPA_LIST_INIT(&topics);
|
||||||
static struct spa_list patterns = SPA_LIST_INIT(&patterns);
|
static struct spa_list patterns = SPA_LIST_INIT(&patterns);
|
||||||
|
|
||||||
PW_LOG_TOPIC_STATIC(log_topic, "pw.log"); /* log topic for this file here */
|
|
||||||
PW_LOG_TOPIC(log_buffers, "pw.buffers");
|
PW_LOG_TOPIC(log_buffers, "pw.buffers");
|
||||||
PW_LOG_TOPIC(log_client, "pw.client");
|
PW_LOG_TOPIC(log_client, "pw.client");
|
||||||
PW_LOG_TOPIC(log_conf, "pw.conf");
|
PW_LOG_TOPIC(log_conf, "pw.conf");
|
||||||
|
|
@ -469,33 +468,6 @@ void pw_log_log_object(enum spa_log_level level,
|
||||||
void
|
void
|
||||||
pw_log_init(void)
|
pw_log_init(void)
|
||||||
{
|
{
|
||||||
pw_log_topic_register(PW_LOG_TOPIC_DEFAULT);
|
|
||||||
pw_log_topic_register(log_buffers);
|
|
||||||
pw_log_topic_register(log_client);
|
|
||||||
pw_log_topic_register(log_conf);
|
|
||||||
pw_log_topic_register(log_context);
|
|
||||||
pw_log_topic_register(log_core);
|
|
||||||
pw_log_topic_register(log_data_loop);
|
|
||||||
pw_log_topic_register(log_device);
|
|
||||||
pw_log_topic_register(log_factory);
|
|
||||||
pw_log_topic_register(log_filter);
|
|
||||||
pw_log_topic_register(log_global);
|
|
||||||
pw_log_topic_register(log_link);
|
|
||||||
pw_log_topic_register(log_loop);
|
|
||||||
pw_log_topic_register(log_main_loop);
|
|
||||||
pw_log_topic_register(log_mem);
|
|
||||||
pw_log_topic_register(log_metadata);
|
|
||||||
pw_log_topic_register(log_module);
|
|
||||||
pw_log_topic_register(log_node);
|
|
||||||
pw_log_topic_register(log_port);
|
|
||||||
pw_log_topic_register(log_properties);
|
|
||||||
pw_log_topic_register(log_protocol);
|
|
||||||
pw_log_topic_register(log_proxy);
|
|
||||||
pw_log_topic_register(log_resource);
|
|
||||||
pw_log_topic_register(log_stream);
|
|
||||||
pw_log_topic_register(log_thread_loop);
|
|
||||||
pw_log_topic_register(log_topic);
|
|
||||||
pw_log_topic_register(log_work_queue);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@ extern "C" {
|
||||||
/** The global log level */
|
/** The global log level */
|
||||||
extern enum spa_log_level pw_log_level;
|
extern enum spa_log_level pw_log_level;
|
||||||
|
|
||||||
extern struct spa_log_topic *PW_LOG_TOPIC_DEFAULT;
|
extern struct spa_log_topic * const PW_LOG_TOPIC_DEFAULT;
|
||||||
|
|
||||||
/** Configure a logging module. This is usually done automatically
|
/** Configure a logging module. This is usually done automatically
|
||||||
* in pw_init() but you can install a custom logger before calling
|
* in pw_init() but you can install a custom logger before calling
|
||||||
|
|
@ -73,6 +73,16 @@ pw_log_logv(enum spa_log_level level,
|
||||||
int line, const char *func,
|
int line, const char *func,
|
||||||
const char *fmt, va_list args) SPA_PRINTF_FUNC(5, 0);
|
const char *fmt, va_list args) SPA_PRINTF_FUNC(5, 0);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Define a static \ref spa_log_topic and its constructor/destructor functions.
|
||||||
|
*
|
||||||
|
* \since 1.1.0
|
||||||
|
*/
|
||||||
|
#define PW_LOG_TOPIC_DEFINE_STATIC(var, topic) \
|
||||||
|
static struct spa_log_topic var = SPA_LOG_TOPIC(SPA_VERSION_LOG_TOPIC, topic); \
|
||||||
|
static void __attribute__((constructor)) var ## _register_construct(void) { pw_log_topic_register(&var); } \
|
||||||
|
static void __attribute__((destructor)) var ## _register_destroy(void) { pw_log_topic_unregister(&var); }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Declare a static log topic named \a var. The usual usage is:
|
* Declare a static log topic named \a var. The usual usage is:
|
||||||
* \code
|
* \code
|
||||||
|
|
@ -83,26 +93,34 @@ pw_log_logv(enum spa_log_level level,
|
||||||
* pw_log_debug("bar");
|
* pw_log_debug("bar");
|
||||||
* }
|
* }
|
||||||
* \endcode
|
* \endcode
|
||||||
|
*
|
||||||
|
* This macro also emits GCC attribute constructor/destructor
|
||||||
|
* functions that automatically call pw_log_topic_register/unregister.
|
||||||
*/
|
*/
|
||||||
#define PW_LOG_TOPIC_STATIC(var, topic) \
|
#define PW_LOG_TOPIC_STATIC(var, topic) \
|
||||||
static struct spa_log_topic SPA_CONCAT(var, __LINE__) = SPA_LOG_TOPIC(0, topic); \
|
PW_LOG_TOPIC_DEFINE_STATIC(var ## _value, topic) \
|
||||||
static struct spa_log_topic *var = &SPA_CONCAT(var, __LINE__)
|
static struct spa_log_topic * const var = &(var ## _value)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Declare a static log topic named \a var.
|
* Declare a static log topic named \a var.
|
||||||
* See \ref PW_LOG_TOPIC_STATIC for an example usage.
|
* See \ref PW_LOG_TOPIC_STATIC for an example usage.
|
||||||
*/
|
*/
|
||||||
#define PW_LOG_TOPIC_EXTERN(var) \
|
#define PW_LOG_TOPIC_EXTERN(var) \
|
||||||
extern struct spa_log_topic *var
|
extern struct spa_log_topic * const var
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Declare a static log topic named \a var.
|
* Declare a static log topic named \a var.
|
||||||
* See \ref PW_LOG_TOPIC_STATIC for an example usage.
|
* See \ref PW_LOG_TOPIC_STATIC for an example usage.
|
||||||
*/
|
*/
|
||||||
#define PW_LOG_TOPIC(var, topic) \
|
#define PW_LOG_TOPIC(var, topic) \
|
||||||
struct spa_log_topic SPA_CONCAT(var, __LINE__) = SPA_LOG_TOPIC(0, topic); \
|
PW_LOG_TOPIC_DEFINE_STATIC(var ## _value, topic) \
|
||||||
struct spa_log_topic *var = &SPA_CONCAT(var, __LINE__)
|
struct spa_log_topic * const var = &(var ## _value)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \deprecated Use \ref pw_log_topic_register and \ref pw_log_topic_unregister
|
||||||
|
* instead, or rely on the auto-registration by \ref PW_LOG_TOPIC and
|
||||||
|
* \ref PW_LOG_TOPIC_STATIC.
|
||||||
|
*/
|
||||||
#define PW_LOG_TOPIC_INIT(var) \
|
#define PW_LOG_TOPIC_INIT(var) \
|
||||||
spa_log_topic_init(pw_log_get(), var);
|
spa_log_topic_init(pw_log_get(), var);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue