mirror of
https://gitlab.freedesktop.org/libinput/libei.git
synced 2026-05-05 19:28:02 +02: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);
|
DEFINE_TRISTATE(yes, no, unset);
|
||||||
|
|
||||||
|
struct peck_log_capture {
|
||||||
|
bool enabled;
|
||||||
|
char **debug;
|
||||||
|
char **info;
|
||||||
|
char **warning;
|
||||||
|
char **error;
|
||||||
|
};
|
||||||
|
|
||||||
struct peck {
|
struct peck {
|
||||||
struct object object;
|
struct object object;
|
||||||
struct ei *ei;
|
struct ei *ei;
|
||||||
|
|
@ -88,6 +96,9 @@ struct peck {
|
||||||
|
|
||||||
uint64_t ei_time_offset;
|
uint64_t ei_time_offset;
|
||||||
uint64_t eis_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;
|
static const uint32_t INDENTATION = 4;
|
||||||
|
|
@ -181,6 +192,16 @@ peck_destroy(struct peck *peck)
|
||||||
setitimer(ITIMER_REAL, &timer, 0);
|
setitimer(ITIMER_REAL, &timer, 0);
|
||||||
sigaction(SIGALRM, &peck->sigact, NULL);
|
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
|
void
|
||||||
|
|
@ -214,6 +235,64 @@ peck_drop_ei(struct peck *peck)
|
||||||
peck->ei = NULL;
|
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 *
|
struct eis_client *
|
||||||
peck_eis_get_default_client(struct peck *peck)
|
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;
|
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
|
static void
|
||||||
peck_ei_log_handler(struct ei *ei,
|
peck_ei_log_handler(struct ei *ei,
|
||||||
enum ei_log_priority priority,
|
enum ei_log_priority priority,
|
||||||
|
|
@ -390,6 +495,8 @@ peck_ei_log_handler(struct ei *ei,
|
||||||
assert(!strstr(message, "🪳"));
|
assert(!strstr(message, "🪳"));
|
||||||
assert(!strstr(message, "🪲"));
|
assert(!strstr(message, "🪲"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
peck_capture_log(&peck->ei_log_capture, priority, message);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
@ -422,6 +529,8 @@ peck_eis_log_handler(struct eis *eis,
|
||||||
assert(!strstr(message, "🪳"));
|
assert(!strstr(message, "🪳"));
|
||||||
assert(!strstr(message, "🪲"));
|
assert(!strstr(message, "🪲"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
peck_capture_log(&peck->eis_log_capture, (enum ei_log_priority)priority, message);
|
||||||
}
|
}
|
||||||
|
|
||||||
_printf_(7, 0)
|
_printf_(7, 0)
|
||||||
|
|
|
||||||
|
|
@ -184,6 +184,26 @@ peck_enable_eis_behavior(struct peck *peck, enum peck_eis_behavior behavior);
|
||||||
void
|
void
|
||||||
peck_enable_ei_behavior(struct peck *peck, enum peck_ei_behavior behavior);
|
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 *
|
struct ei *
|
||||||
peck_get_ei(struct peck *peck);
|
peck_get_ei(struct peck *peck);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue