From: Paulo Zanoni <paulo.r.zanoni@intel.com>
To: Daniel Vetter <daniel.vetter@ffwll.ch>,
Intel Graphics Development <intel-gfx@lists.freedesktop.org>
Cc: Daniel Vetter <daniel.vetter@intel.com>
Subject: Re: [PATCH i-g-t] tests/kms_frontbuffer_tracking: convert macros to functions
Date: Fri, 04 Aug 2017 15:30:30 -0300 [thread overview]
Message-ID: <1501871430.2634.24.camel@intel.com> (raw)
In-Reply-To: <1501863684-31321-1-git-send-email-daniel.vetter@ffwll.ch>
Em Sex, 2017-08-04 às 18:21 +0200, Daniel Vetter escreveu:
> I guess this was done to have a better indication of which testcase
> and function failed, but igt nowadays dumps an entire stacktrace.
But we may have multiple do_assertions() calls in a single function.
> And
> macros of this magnitude mean the line number is entirely
> meaningless,
> since it doesn't point at a specific check.
False. It always points to a do_assertions() call, which is what
matters.
>
> Reason I've started to looking into this is that in our full igt CI
> runs we have a serious problem with the fbc testcases randomly
> failing with
>
> (kms_frontbuffer_tracking:1609) CRITICAL: Test assertion failure
> function enable_prim_screen_and_wait, file
> kms_frontbuffer_tracking.c:1771:
https://cgit.freedesktop.org/xorg/app/intel-gpu-tools/tree/tests/kms_fr
ontbuffer_tracking.c#n1771
See?
> (kms_frontbuffer_tracking:1609) CRITICAL: Failed assertion: false
> (kms_frontbuffer_tracking:1609) CRITICAL: FBC disabled
>
> And that's not entirely helpful. Also, macros of this magnitude are
> just horrible to read.
NAK. Being a macro instead of a function is extremely helpful and the
line number always points me to the correct do_assertions() call, at
least when I run this locally.
If the line number in the CI system doesn't match what you see in your
file, then it's a problem either on your side or on the CI side. But I
don't think that's your problem. I think your problem is that we print
two different line numbers (1609 and 1771), and you're looking at the
wrong one. I would totally ACK a patch removing the 1609 one... But I
don't think that would require patching kms_frontbuffuer_tracking.c.
If you really really want to change this to a function, can't you try
to find a way to pass a __LINE__ argument that corresponds to the exact
line of the do_assertions() call and print it somewhere? Maybe another
wrapper macro could auto-include __LINE__? But seriously, patch IGT to
not print those bogus numbers, so you won't be confused next time.
>
> Cc: Paulo Zanoni <paulo.r.zanoni@intel.com>
> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> ---
> tests/kms_frontbuffer_tracking.c | 166 ++++++++++++++++++++---------
> ----------
> 1 file changed, 84 insertions(+), 82 deletions(-)
>
> diff --git a/tests/kms_frontbuffer_tracking.c
> b/tests/kms_frontbuffer_tracking.c
> index e03524f1c45b..8d11dc065623 100644
> --- a/tests/kms_frontbuffer_tracking.c
> +++ b/tests/kms_frontbuffer_tracking.c
> @@ -1677,88 +1677,90 @@ static int adjust_assertion_flags(const
> struct test_mode *t, int flags)
> return flags;
> }
>
> -#define do_crc_assertions(flags, mandatory_sink_crc) do {
> \
> - int flags__ = (flags);
> \
> - struct both_crcs crc_;
> \
> -
> \
> - if (!opt.check_crc || (flags__ & DONT_ASSERT_CRC))
> \
> - break;
> \
> -
> \
> - collect_crcs(&crc_, mandatory_sink_crc);
> \
> - print_crc("Calculated CRC:", &crc_);
> \
> -
> \
> - igt_assert(wanted_crc);
> \
> - igt_assert_crc_equal(&crc_.pipe, &wanted_crc->pipe);
> \
> - if (mandatory_sink_crc)
> \
> - assert_sink_crc_equal(&crc_.sink, &wanted_crc-
> >sink); \
> - else if (sink_crc.reliable &&
> \
> - !sink_crc_equal(&crc_.sink, &wanted_crc->sink))
> \
> - igt_info("Sink CRC differ, but not required\n");
> \
> -} while (0)
> -
> -#define do_status_assertions(flags_) do {
> \
> - if (!opt.check_status) {
> \
> - /* Make sure we settle before continuing. */
> \
> - sleep(1);
> \
> - break;
> \
> - }
> \
> -
> \
> - if (flags_ & ASSERT_FBC_ENABLED) {
> \
> - igt_require(!fbc_not_enough_stolen());
> \
> - igt_require(!fbc_stride_not_supported());
> \
> - if (!fbc_wait_until_enabled()) {
> \
> - fbc_print_status();
> \
> - igt_assert_f(false, "FBC disabled\n");
> \
> - }
> \
> -
> \
> - if (opt.fbc_check_compression)
> \
> - igt_assert(fbc_wait_for_compression());
> \
> - } else if (flags_ & ASSERT_FBC_DISABLED) {
> \
> - igt_assert(!fbc_wait_until_enabled());
> \
> - }
> \
> -
> \
> - if (flags_ & ASSERT_PSR_ENABLED) {
> \
> - if (!psr_wait_until_enabled()) {
> \
> - psr_print_status();
> \
> - igt_assert_f(false, "PSR disabled\n");
> \
> - }
> \
> - } else if (flags_ & ASSERT_PSR_DISABLED) {
> \
> - igt_assert(!psr_wait_until_enabled());
> \
> - }
> \
> -} while (0)
> -
> -#define do_assertions(flags) do {
> \
> - int flags_ = adjust_assertion_flags(t, (flags));
> \
> - bool mandatory_sink_crc = t->feature & FEATURE_PSR;
> \
> -
> \
> - wait_user(2, "Paused before assertions.");
> \
> -
> \
> - /* Check the CRC to make sure the drawing operations work
> \
> - * immediately, independently of the features being enabled.
> */ \
> - do_crc_assertions(flags_, mandatory_sink_crc);
> \
> -
> \
> - /* Now we can flush things to make the test faster. */
> \
> - do_flush(t);
> \
> -
> \
> - do_status_assertions(flags_);
> \
> -
> \
> - /* Check CRC again to make sure the compressed screen is ok,
> \
> - * except if we're not drawing on the primary screen. On
> this \
> - * case, the first check should be enough and a new CRC
> check \
> - * would only delay the test suite while adding no value to
> the \
> - * test suite. */
> \
> - if (t->screen == SCREEN_PRIM)
> \
> - do_crc_assertions(flags_, mandatory_sink_crc);
> \
> -
> \
> - if (fbc.supports_last_action && opt.fbc_check_last_action) {
> \
> - if (flags_ & ASSERT_LAST_ACTION_CHANGED)
> \
> - igt_assert(fbc_last_action_changed());
> \
> - else if (flags_ & ASSERT_NO_ACTION_CHANGE)
> \
> - igt_assert(!fbc_last_action_changed());
> \
> - }
> \
> -
> \
> - wait_user(1, "Paused after assertions.");
> \
> -} while (0)
> +static void do_crc_assertions(int flags, bool mandatory_sink_crc)
> +{
> + struct both_crcs crc;
> +
> + if (!opt.check_crc || (flags & DONT_ASSERT_CRC))
> + return;
> +
> + collect_crcs(&crc, mandatory_sink_crc);
> + print_crc("Calculated CRC:", &crc);
> +
> + igt_assert(wanted_crc);
> + igt_assert_crc_equal(&crc.pipe, &wanted_crc->pipe);
> + if (mandatory_sink_crc)
> + assert_sink_crc_equal(&crc.sink, &wanted_crc->sink);
> + else if (sink_crc.reliable &&
> + !sink_crc_equal(&crc.sink, &wanted_crc->sink))
> + igt_info("Sink CRC differ, but not required\n");
> +}
> +
> +static void do_status_assertions(int flags)
> +{
> + if (!opt.check_status) {
> + /* Make sure we settle before continuing. */
> + sleep(1);
> + return;
> + }
> +
> + if (flags & ASSERT_FBC_ENABLED) {
> + igt_require(!fbc_not_enough_stolen());
> + igt_require(!fbc_stride_not_supported());
> + if (!fbc_wait_until_enabled()) {
> + fbc_print_status();
> + igt_assert_f(false, "FBC disabled\n");
> + }
> +
> + if (opt.fbc_check_compression)
> + igt_assert(fbc_wait_for_compression());
> + } else if (flags & ASSERT_FBC_DISABLED) {
> + igt_assert(!fbc_wait_until_enabled());
> + }
> +
> + if (flags & ASSERT_PSR_ENABLED) {
> + if (!psr_wait_until_enabled()) {
> + psr_print_status();
> + igt_assert_f(false, "PSR disabled\n");
> + }
> + } else if (flags & ASSERT_PSR_DISABLED) {
> + igt_assert(!psr_wait_until_enabled());
> + }
> +}
> +
> +static void do_assertions(int flags)
> +{
> + flags = adjust_assertion_flags(t, flags);
> + bool mandatory_sink_crc = t->feature & FEATURE_PSR;
> +
> + wait_user(2, "Paused before assertions.");
> +
> + /* Check the CRC to make sure the drawing operations work
> + * immediately, independently of the features being enabled.
> */
> + do_crc_assertions(flags, mandatory_sink_crc);
> +
> + /* Now we can flush things to make the test faster. */
> + do_flush(t);
> +
> + do_status_assertions(flags);
> +
> + /* Check CRC again to make sure the compressed screen is ok,
> + * except if we're not drawing on the primary screen. On
> this
> + * case, the first check should be enough and a new CRC
> check
> + * would only delay the test suite while adding no value to
> the
> + * test suite. */
> + if (t->screen == SCREEN_PRIM)
> + do_crc_assertions(flags, mandatory_sink_crc);
> +
> + if (fbc.supports_last_action && opt.fbc_check_last_action) {
> + if (flags & ASSERT_LAST_ACTION_CHANGED)
> + igt_assert(fbc_last_action_changed());
> + else if (flags_ & ASSERT_NO_ACTION_CHANGE)
> + igt_assert(!fbc_last_action_changed());
> + }
> +
> + wait_user(1, "Paused after assertions.");
> +}
>
> static void enable_prim_screen_and_wait(const struct test_mode *t)
> {
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
next prev parent reply other threads:[~2017-08-04 18:30 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-08-04 16:21 [PATCH i-g-t] tests/kms_frontbuffer_tracking: convert macros to functions Daniel Vetter
2017-08-04 18:30 ` Paulo Zanoni [this message]
2017-08-07 16:19 ` Daniel Vetter
-- strict thread matches above, loose matches on Subject: below --
2017-08-14 9:25 Daniel Vetter
2017-08-14 9:25 Daniel Vetter
2017-09-01 19:44 ` Paulo Zanoni
2017-09-04 8:00 ` Daniel Vetter
2017-09-04 18:09 ` Paulo Zanoni
2017-09-05 11:18 ` Daniel Vetter
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1501871430.2634.24.camel@intel.com \
--to=paulo.r.zanoni@intel.com \
--cc=daniel.vetter@ffwll.ch \
--cc=daniel.vetter@intel.com \
--cc=intel-gfx@lists.freedesktop.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox