[igt-dev] [RFC PATCH i-g-t 1/2] lib/core: Add igt_debug_on* variants
Janusz Krzysztofik
janusz.krzysztofik at linux.intel.com
Tue Aug 10 10:00:47 UTC 2021
On wtorek, 10 sierpnia 2021 10:44:43 CEST Petri Latvala wrote:
> On Mon, Aug 09, 2021 at 09:10:19PM +0200, Janusz Krzysztofik wrote:
> > If a test calls a function which can return a failure, only the fact
> > that the function failed can be reported to the caller, with no details
> > on what actually failed inside. It could be helpful if functions which
> > perform several steps or iterations emitted debug messages with failure
> > details.
> >
> > To simplify coding and avoid code duplication in functions, igt_debug
> > variants similar to igt_warn_on and friends could be useful. Add them.
> >
> > Signed-off-by: Janusz Krzysztofik <janusz.krzysztofik at linux.intel.com>
>
>
> This looks lovely.
>
> Only thing I didn't like was that one double negative if statement
> with if (!igt_debug_on(!cond)) but meh...
>
> Series is
>
> Acked-by: Petri Latvala <petri.latvala at intel.com>
Thanks Petri, pushed.
Janusz
>
>
> > ---
> > lib/igt_core.h | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++
> > 1 file changed, 52 insertions(+)
> >
> > diff --git a/lib/igt_core.h b/lib/igt_core.h
> > index 6075d1539..8d433fc16 100644
> > --- a/lib/igt_core.h
> > +++ b/lib/igt_core.h
> > @@ -1274,6 +1274,58 @@ extern enum igt_log_level igt_log_level;
> > ret__; \
> > })
> >
> > +/**
> > + * igt_debug_on:
> > + * @condition: condition to test
> > + *
> > + * Print a IGT_LOG_DEBUG level message if a condition is met.
> > + *
> > + * Should be used when something fails in a function that doesn't perform
> > + * a long jump in that case, and either performs several operations that
> > + * can fail that way or doesn't return unambiguous error codes on failures.
> > + * This is useful to streamline the test logic since it allows for
> > + * replacing open conding with function calls without loosing ability to
> > + * provide debug output with failure details.
> > + *
> > + * This macro also returns the value of @condition.
> > + */
> > +#define igt_debug_on(condition) ({ \
> > + typeof(condition) ret__ = (condition); \
> > + if (ret__) \
> > + igt_debug("Condition %s occurred in function %s, file %s:%i\n", \
> > + #condition, __func__, __FILE__, __LINE__); \
> > + ret__; \
> > + })
> > +
> > +/**
> > + * igt_debug_on_f:
> > + * @condition: condition to test
> > + * @...: format string and optional arguments
> > + *
> > + * Print a IGT_LOG_DEBUG level message if a condition is met.
> > + *
> > + * Should be used when something fails in a function that doesn't perform
> > + * a long jump in that case, and performs one or more operations in a
> > + * loop, each time with different values of parameters. This is useful
> > + * to streamline the test logic since it allows for replacing open conding
> > + * with function calls without loosing ability to provide debug output
> > + * with failure details.
> > + *
> > + * In addition to the plain igt_debug_on() helper this allows to print
> > + * additional debug information to help debugging operation failures.
> > + *
> > + * It also returns the value of @condition.
> > + */
> > +#define igt_debug_on_f(condition, f...) ({ \
> > + typeof(condition) ret__ = (condition); \
> > + if (ret__) {\
> > + igt_debug("condition %s occurred in function %s, file %s:%i\n", \
> > + #condition, __func__, __FILE__, __LINE__); \
> > + igt_debug(f); \
> > + } \
> > + ret__; \
> > + })
> > +
> > void igt_set_timeout(unsigned int seconds,
> > const char *op);
> >
>
More information about the igt-dev
mailing list