#ifndef FIO_DEBUG_H
#define FIO_DEBUG_H

#include "lib/types.h"

enum {
	FD_PROCESS	= 0,
	FD_FILE,
	FD_IO,
	FD_MEM,
	FD_BLKTRACE,
	FD_VERIFY,
	FD_RANDOM,
	FD_PARSE,
	FD_DISKUTIL,
	FD_JOB,
	FD_MUTEX,
	FD_PROFILE,
	FD_TIME,
	FD_NET,
	FD_RATE,
	FD_COMPRESS,
	FD_STEADYSTATE,
	FD_HELPERTHREAD,
	FD_ZBD,
	FD_DEBUG_MAX,
};

extern unsigned int fio_debug_jobno, *fio_debug_jobp, *fio_warned;

static inline bool fio_did_warn(unsigned int mask)
{
	if (*fio_warned & mask)
		return true;

	*fio_warned |= mask;
	return false;
}

enum {
	FIO_WARN_ROOT_FLUSH	= 1,
	FIO_WARN_VERIFY_BUF	= 2,
	FIO_WARN_ZONED_BUG	= 4,
	FIO_WARN_IOLOG_DROP	= 8,
	FIO_WARN_FADVISE	= 16,
	FIO_WARN_BTRACE_ZERO	= 32,
};

#ifdef FIO_INC_DEBUG
struct debug_level {
	const char *name;
	const char *help;
	unsigned long shift;
	unsigned int jobno;
};
extern const struct debug_level debug_levels[];

extern unsigned long fio_debug;

void __dprint(int type, const char *str, ...) __attribute__((format (printf, 2, 3)));

#define dprint(type, str, args...)			\
	do {						\
		if (((1 << type) & fio_debug) == 0)	\
			break;				\
		__dprint((type), (str), ##args);	\
	} while (0)					\

#else

static inline void dprint(int type, const char *str, ...)
{
}
#endif

#endif
