diff options
author | Abdiel Janulgue <abdiel.janulgue@linux.intel.com> | 2017-04-13 16:18:37 +0300 |
---|---|---|
committer | Abdiel Janulgue <abdiel.janulgue@linux.intel.com> | 2017-06-14 11:07:00 +0300 |
commit | ef48fc8233872545243e9a41df498fceedece978 (patch) | |
tree | e423429f21dd3122f36ffb3a744a4e54f3c3c928 /lib | |
parent | 51f4f9f9ab320e681057bdd203445e725ad04768 (diff) |
igt/igt_core: Provide an option to check for the log buffer contents
Signed-off-by: Abdiel Janulgue <abdiel.janulgue@linux.intel.com>
Reviewed-by: Arkadiusz Hiler <arkadiusz.hiler@intel.com>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/igt_core.c | 24 | ||||
-rw-r--r-- | lib/igt_core.h | 3 |
2 files changed, 27 insertions, 0 deletions
diff --git a/lib/igt_core.c b/lib/igt_core.c index 26f7fc59..9a5ed40e 100644 --- a/lib/igt_core.c +++ b/lib/igt_core.c @@ -329,6 +329,30 @@ static void _igt_log_buffer_dump(void) pthread_mutex_unlock(&log_buffer_mutex); } +/** + * igt_log_buffer_inspect: + * + * Provides a way to replay the internal igt log buffer for inspection. + * @check: A user-specified handler that gets invoked for each line of + * the log buffer. The handler should return true to stop + * inspecting the rest of the buffer. + * @data: passed as a user argument to the inspection function. + */ +void igt_log_buffer_inspect(igt_buffer_log_handler_t check, void *data) +{ + uint8_t i; + pthread_mutex_lock(&log_buffer_mutex); + + i = log_buffer.start; + do { + if (check(log_buffer.entries[i], data)) + break; + i++; + } while (i != log_buffer.start && i != log_buffer.end); + + pthread_mutex_unlock(&log_buffer_mutex); +} + __attribute__((format(printf, 1, 2))) static void kmsg(const char *format, ...) #define KERN_EMER "<0>" diff --git a/lib/igt_core.h b/lib/igt_core.h index 1855c5e3..a2ed9720 100644 --- a/lib/igt_core.h +++ b/lib/igt_core.h @@ -818,6 +818,9 @@ void igt_vlog(const char *domain, enum igt_log_level level, const char *format, */ #define igt_critical(f...) igt_log(IGT_LOG_DOMAIN, IGT_LOG_CRITICAL, f) +typedef bool (*igt_buffer_log_handler_t)(const char *line, void *data); +void igt_log_buffer_inspect(igt_buffer_log_handler_t check, void *data); + extern enum igt_log_level igt_log_level; /** |