mirror of
https://gitlab.freedesktop.org/libinput/libei.git
synced 2025-12-30 06:00:08 +01:00
test: add ability to capture logs
Part-of: <https://gitlab.freedesktop.org/libinput/libei/-/merge_requests/337>
This commit is contained in:
parent
dbeff9a90d
commit
98e445ebdb
2 changed files with 129 additions and 0 deletions
|
|
@ -50,6 +50,14 @@ static bool enable_sigalarm;
|
|||
|
||||
DEFINE_TRISTATE(yes, no, unset);
|
||||
|
||||
struct peck_log_capture {
|
||||
bool enabled;
|
||||
char **debug;
|
||||
char **info;
|
||||
char **warning;
|
||||
char **error;
|
||||
};
|
||||
|
||||
struct peck {
|
||||
struct object object;
|
||||
struct ei *ei;
|
||||
|
|
@ -88,6 +96,9 @@ struct peck {
|
|||
|
||||
uint64_t ei_time_offset;
|
||||
uint64_t eis_time_offset;
|
||||
|
||||
struct peck_log_capture ei_log_capture;
|
||||
struct peck_log_capture eis_log_capture;
|
||||
};
|
||||
|
||||
static const uint32_t INDENTATION = 4;
|
||||
|
|
@ -181,6 +192,16 @@ peck_destroy(struct peck *peck)
|
|||
setitimer(ITIMER_REAL, &timer, 0);
|
||||
sigaction(SIGALRM, &peck->sigact, NULL);
|
||||
}
|
||||
|
||||
strv_free(peck->ei_log_capture.debug);
|
||||
strv_free(peck->ei_log_capture.info);
|
||||
strv_free(peck->ei_log_capture.warning);
|
||||
strv_free(peck->ei_log_capture.error);
|
||||
|
||||
strv_free(peck->eis_log_capture.debug);
|
||||
strv_free(peck->eis_log_capture.info);
|
||||
strv_free(peck->eis_log_capture.warning);
|
||||
strv_free(peck->eis_log_capture.error);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -214,6 +235,64 @@ peck_drop_ei(struct peck *peck)
|
|||
peck->ei = NULL;
|
||||
}
|
||||
|
||||
char **
|
||||
peck_ei_get_log_capture(struct peck *peck, enum ei_log_priority priority)
|
||||
{
|
||||
switch (priority) {
|
||||
case EI_LOG_PRIORITY_ERROR:
|
||||
return peck->ei_log_capture.error;
|
||||
case EI_LOG_PRIORITY_WARNING:
|
||||
return peck->ei_log_capture.warning;
|
||||
case EI_LOG_PRIORITY_INFO:
|
||||
return peck->ei_log_capture.info;
|
||||
case EI_LOG_PRIORITY_DEBUG:
|
||||
return peck->ei_log_capture.debug;
|
||||
default:
|
||||
abort();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
peck_ei_enable_log_capture(struct peck *peck)
|
||||
{
|
||||
peck->ei_log_capture.enabled = true;
|
||||
}
|
||||
|
||||
void
|
||||
peck_ei_disable_log_capture(struct peck *peck)
|
||||
{
|
||||
peck->ei_log_capture.enabled = true;
|
||||
}
|
||||
|
||||
char **
|
||||
peck_eis_get_log_capture(struct peck *peck, enum eis_log_priority priority)
|
||||
{
|
||||
switch (priority) {
|
||||
case EIS_LOG_PRIORITY_ERROR:
|
||||
return peck->eis_log_capture.error;
|
||||
case EIS_LOG_PRIORITY_WARNING:
|
||||
return peck->eis_log_capture.warning;
|
||||
case EIS_LOG_PRIORITY_INFO:
|
||||
return peck->eis_log_capture.info;
|
||||
case EIS_LOG_PRIORITY_DEBUG:
|
||||
return peck->eis_log_capture.debug;
|
||||
default:
|
||||
abort();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
peck_eis_enable_log_capture(struct peck *peck)
|
||||
{
|
||||
peck->eis_log_capture.enabled = true;
|
||||
}
|
||||
|
||||
void
|
||||
peck_eis_disable_log_capture(struct peck *peck)
|
||||
{
|
||||
peck->eis_log_capture.enabled = true;
|
||||
}
|
||||
|
||||
struct eis_client *
|
||||
peck_eis_get_default_client(struct peck *peck)
|
||||
{
|
||||
|
|
@ -360,6 +439,32 @@ peck_eis_enable_fatal_bug(struct peck *peck)
|
|||
peck->eis_fatal_bugs = true;
|
||||
}
|
||||
|
||||
static void
|
||||
peck_capture_log(struct peck_log_capture *capture,
|
||||
enum ei_log_priority priority,
|
||||
const char *message)
|
||||
{
|
||||
if (!capture->enabled)
|
||||
return;
|
||||
|
||||
switch (priority) {
|
||||
case EI_LOG_PRIORITY_ERROR:
|
||||
capture->error = strv_append_strdup(capture->error, message);
|
||||
break;
|
||||
case EI_LOG_PRIORITY_WARNING:
|
||||
capture->info = strv_append_strdup(capture->info, message);
|
||||
break;
|
||||
case EI_LOG_PRIORITY_INFO:
|
||||
capture->info = strv_append_strdup(capture->info, message);
|
||||
break;
|
||||
case EI_LOG_PRIORITY_DEBUG:
|
||||
capture->debug = strv_append_strdup(capture->debug, message);
|
||||
break;
|
||||
default:
|
||||
abort();
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
peck_ei_log_handler(struct ei *ei,
|
||||
enum ei_log_priority priority,
|
||||
|
|
@ -390,6 +495,8 @@ peck_ei_log_handler(struct ei *ei,
|
|||
assert(!strstr(message, "🪳"));
|
||||
assert(!strstr(message, "🪲"));
|
||||
}
|
||||
|
||||
peck_capture_log(&peck->ei_log_capture, priority, message);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
@ -422,6 +529,8 @@ peck_eis_log_handler(struct eis *eis,
|
|||
assert(!strstr(message, "🪳"));
|
||||
assert(!strstr(message, "🪲"));
|
||||
}
|
||||
|
||||
peck_capture_log(&peck->eis_log_capture, (enum ei_log_priority)priority, message);
|
||||
}
|
||||
|
||||
_printf_(7, 0)
|
||||
|
|
|
|||
|
|
@ -184,6 +184,26 @@ peck_enable_eis_behavior(struct peck *peck, enum peck_eis_behavior behavior);
|
|||
void
|
||||
peck_enable_ei_behavior(struct peck *peck, enum peck_ei_behavior behavior);
|
||||
|
||||
void
|
||||
peck_ei_enable_log_capture(struct peck *peck);
|
||||
|
||||
void
|
||||
peck_ei_disable_log_capture(struct peck *peck);
|
||||
|
||||
char **
|
||||
peck_ei_get_log_capture(struct peck *peck,
|
||||
enum ei_log_priority priority);
|
||||
|
||||
void
|
||||
peck_eis_enable_log_capture(struct peck *peck);
|
||||
|
||||
void
|
||||
peck_eis_disable_log_capture(struct peck *peck);
|
||||
|
||||
char **
|
||||
peck_eis_get_log_capture(struct peck *peck,
|
||||
enum eis_log_priority priority);
|
||||
|
||||
struct ei *
|
||||
peck_get_ei(struct peck *peck);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue