[Intel-gfx] [PATCH i-g-t v5 4/7] Introduce common frame dumping configuration and helpers
Paul Kocialkowski
paul.kocialkowski at linux.intel.com
Thu Jul 20 14:14:14 UTC 2017
On Thu, 2017-07-20 at 09:24 +0200, Daniel Vetter wrote:
> On Wed, Jul 19, 2017 at 04:46:07PM +0300, Paul Kocialkowski wrote:
> > This introduces a common FrameDumpPath configuration field, as well
> > as
> > helper functions in dedicated igt_frame for writing cairo surfaces
> > to png files.
> >
> > Signed-off-by: Paul Kocialkowski <paul.kocialkowski at linux.intel.com>
> > ---
> > lib/Makefile.sources | 2 +
> > lib/igt.h | 1 +
> > lib/igt_core.c | 12 +++++
> > lib/igt_core.h | 2 +-
> > lib/igt_frame.c | 137
> > +++++++++++++++++++++++++++++++++++++++++++++++++++
> > lib/igt_frame.h | 43 ++++++++++++++++
>
> Please make sure you pull the new docs into the docs build too. And
> while
> doing that, please review for other stuff added in the past year and
> include that too. And please build the docs and check the result.
I've just sent out a patch for that, thanks for pointing it out!
Cheers,
Paul
> Thanks, Daniel
>
> > 6 files changed, 196 insertions(+), 1 deletion(-)
> > create mode 100644 lib/igt_frame.c
> > create mode 100644 lib/igt_frame.h
> >
> > diff --git a/lib/Makefile.sources b/lib/Makefile.sources
> > index 53fdb54c..c2e58809 100644
> > --- a/lib/Makefile.sources
> > +++ b/lib/Makefile.sources
> > @@ -83,6 +83,8 @@ lib_source_list = \
> > uwildmat/uwildmat.c \
> > igt_kmod.c \
> > igt_kmod.h \
> > + igt_frame.c \
> > + igt_frame.h \
> > $(NULL)
> >
> > .PHONY: version.h.tmp
> > diff --git a/lib/igt.h b/lib/igt.h
> > index a069deb3..d16a4991 100644
> > --- a/lib/igt.h
> > +++ b/lib/igt.h
> > @@ -34,6 +34,7 @@
> > #include "igt_draw.h"
> > #include "igt_dummyload.h"
> > #include "igt_fb.h"
> > +#include "igt_frame.h"
> > #include "igt_gt.h"
> > #include "igt_kms.h"
> > #include "igt_pm.h"
> > diff --git a/lib/igt_core.c b/lib/igt_core.c
> > index 1ba79361..5a3b00e8 100644
> > --- a/lib/igt_core.c
> > +++ b/lib/igt_core.c
> > @@ -235,6 +235,10 @@
> > * An example configuration follows:
> > *
> > * |[<!-- language="plain" -->
> > + * # The common configuration secton follows.
> > + * [Common]
> > + * FrameDumpPath=/tmp # The path to dump frames that fail
> > comparison checks
> > + *
> > * # The following section is used for configuring the
> > Device Under Test.
> > * # It is not mandatory and allows overriding default
> > values.
> > * [DUT]
> > @@ -290,6 +294,7 @@ static struct {
> > static pthread_mutex_t log_buffer_mutex =
> > PTHREAD_MUTEX_INITIALIZER;
> >
> > GKeyFile *igt_key_file;
> > +char *frame_dump_path;
> >
> > const char *igt_test_name(void)
> > {
> > @@ -621,6 +626,13 @@ static int config_parse(void)
> > if (!igt_key_file)
> > return 0;
> >
> > + frame_dump_path = getenv("IGT_FRAME_DUMP_PATH");
> > +
> > + if (!frame_dump_path)
> > + frame_dump_path =
> > g_key_file_get_string(igt_key_file, "Common",
> > + "FrameDumpP
> > ath",
> > + &error);
> > +
> > rc = g_key_file_get_integer(igt_key_file, "DUT",
> > "SuspendResumeDelay",
> > &error);
> > if (error && error->code == G_KEY_FILE_ERROR_INVALID_VALUE)
> > diff --git a/lib/igt_core.h b/lib/igt_core.h
> > index 0739ca83..1619a9d6 100644
> > --- a/lib/igt_core.h
> > +++ b/lib/igt_core.h
> > @@ -50,7 +50,7 @@
> > extern const char* __igt_test_description __attribute__((weak));
> > extern bool __igt_plain_output;
> > extern GKeyFile *igt_key_file;
> > -
> > +extern char *frame_dump_path;
> >
> > /**
> > * IGT_TEST_DESCRIPTION:
> > diff --git a/lib/igt_frame.c b/lib/igt_frame.c
> > new file mode 100644
> > index 00000000..dfafe53d
> > --- /dev/null
> > +++ b/lib/igt_frame.c
> > @@ -0,0 +1,137 @@
> > +/*
> > + * Copyright © 2017 Intel Corporation
> > + *
> > + * Permission is hereby granted, free of charge, to any person
> > obtaining a
> > + * copy of this software and associated documentation files (the
> > "Software"),
> > + * to deal in the Software without restriction, including without
> > limitation
> > + * the rights to use, copy, modify, merge, publish, distribute,
> > sublicense,
> > + * and/or sell copies of the Software, and to permit persons to
> > whom the
> > + * Software is furnished to do so, subject to the following
> > conditions:
> > + *
> > + * The above copyright notice and this permission notice (including
> > the next
> > + * paragraph) shall be included in all copies or substantial
> > portions of the
> > + * Software.
> > + *
> > + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> > EXPRESS OR
> > + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> > MERCHANTABILITY,
> > + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO
> > EVENT SHALL
> > + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
> > DAMAGES OR OTHER
> > + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
> > ARISING
> > + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
> > OTHER DEALINGS
> > + * IN THE SOFTWARE.
> > + *
> > + * Authors:
> > + * Paul Kocialkowski <paul.kocialkowski at linux.intel.com>
> > + */
> > +
> > +#include "config.h"
> > +
> > +#include <fcntl.h>
> > +#include <pixman.h>
> > +#include <cairo.h>
> > +
> > +#include "igt.h"
> > +
> > +/**
> > + * SECTION:igt_frame
> > + * @short_description: Library for frame-related tests
> > + * @title: Frame
> > + * @include: igt_frame.h
> > + *
> > + * This library contains helpers for frame-related tests. This
> > includes common
> > + * frame dumping as well as frame comparison helpers.
> > + */
> > +
> > +/**
> > + * igt_frame_dump_is_enabled:
> > + *
> > + * Get whether frame dumping is enabled.
> > + *
> > + * Returns: A boolean indicating whether frame dumping is enabled
> > + */
> > +bool igt_frame_dump_is_enabled(void)
> > +{
> > + return frame_dump_path != NULL;
> > +}
> > +
> > +static void igt_write_frame_to_png(cairo_surface_t *surface, int
> > fd,
> > + const char *qualifier, const
> > char *suffix)
> > +{
> > + char path[PATH_MAX];
> > + const char *test_name;
> > + const char *subtest_name;
> > + cairo_status_t status;
> > + int index;
> > +
> > + test_name = igt_test_name();
> > + subtest_name = igt_subtest_name();
> > +
> > + if (suffix)
> > + snprintf(path, PATH_MAX, "%s/frame-%s-%s-%s-
> > %s.png",
> > + frame_dump_path, test_name, subtest_name,
> > qualifier,
> > + suffix);
> > + else
> > + snprintf(path, PATH_MAX, "%s/frame-%s-%s-%s.png",
> > + frame_dump_path, test_name, subtest_name,
> > qualifier);
> > +
> > + igt_debug("Dumping %s frame to %s...\n", qualifier, path);
> > +
> > + status = cairo_surface_write_to_png(surface, path);
> > +
> > + igt_assert_eq(status, CAIRO_STATUS_SUCCESS);
> > +
> > + index = strlen(path);
> > +
> > + if (fd >= 0 && index < (PATH_MAX - 1)) {
> > + path[index++] = '\n';
> > + path[index] = '\0';
> > +
> > + write(fd, path, strlen(path));
> > + }
> > +}
> > +
> > +/**
> > + * igt_write_compared_frames_to_png:
> > + * @reference: The reference cairo surface
> > + * @capture: The captured cairo surface
> > + * @reference_suffix: The suffix to give to the reference png file
> > + * @capture_suffix: The suffix to give to the capture png file
> > + *
> > + * Write previously compared frames to png files.
> > + */
> > +void igt_write_compared_frames_to_png(cairo_surface_t *reference,
> > + cairo_surface_t *capture,
> > + const char *reference_suffix,
> > + const char *capture_suffix)
> > +{
> > + char *id;
> > + const char *test_name;
> > + const char *subtest_name;
> > + char path[PATH_MAX];
> > + int fd = -1;
> > +
> > + if (!igt_frame_dump_is_enabled())
> > + return;
> > +
> > + id = getenv("IGT_FRAME_DUMP_ID");
> > +
> > + test_name = igt_test_name();
> > + subtest_name = igt_subtest_name();
> > +
> > + if (id)
> > + snprintf(path, PATH_MAX, "%s/frame-%s-%s-%s.txt",
> > + frame_dump_path, test_name, subtest_name,
> > id);
> > + else
> > + snprintf(path, PATH_MAX, "%s/frame-%s-%s.txt",
> > + frame_dump_path, test_name, subtest_name);
> > +
> > + fd = open(path, O_WRONLY | O_CREAT | O_TRUNC, 0644);
> > + igt_assert(fd >= 0);
> > +
> > + igt_debug("Writing dump report to %s...\n", path);
> > +
> > + igt_write_frame_to_png(reference, fd, "reference",
> > reference_suffix);
> > + igt_write_frame_to_png(capture, fd, "capture",
> > capture_suffix);
> > +
> > + close(fd);
> > +}
> > diff --git a/lib/igt_frame.h b/lib/igt_frame.h
> > new file mode 100644
> > index 00000000..ec6a1643
> > --- /dev/null
> > +++ b/lib/igt_frame.h
> > @@ -0,0 +1,43 @@
> > +/*
> > + * Copyright © 2017 Intel Corporation
> > + *
> > + * Permission is hereby granted, free of charge, to any person
> > obtaining a
> > + * copy of this software and associated documentation files (the
> > "Software"),
> > + * to deal in the Software without restriction, including without
> > limitation
> > + * the rights to use, copy, modify, merge, publish, distribute,
> > sublicense,
> > + * and/or sell copies of the Software, and to permit persons to
> > whom the
> > + * Software is furnished to do so, subject to the following
> > conditions:
> > + *
> > + * The above copyright notice and this permission notice (including
> > the next
> > + * paragraph) shall be included in all copies or substantial
> > portions of the
> > + * Software.
> > + *
> > + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> > EXPRESS OR
> > + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> > MERCHANTABILITY,
> > + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO
> > EVENT SHALL
> > + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
> > DAMAGES OR OTHER
> > + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
> > ARISING
> > + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
> > OTHER DEALINGS
> > + * IN THE SOFTWARE.
> > + *
> > + * Authors:
> > + * Paul Kocialkowski <paul.kocialkowski at linux.intel.com>
> > + */
> > +
> > +#ifndef IGT_FRAME_H
> > +#define IGT_FRAME_H
> > +
> > +#ifdef HAVE_CONFIG_H
> > +#include "config.h"
> > +#endif
> > +
> > +#include "igt.h"
> > +#include <stdbool.h>
> > +
> > +bool igt_frame_dump_is_enabled(void);
> > +void igt_write_compared_frames_to_png(cairo_surface_t *reference,
> > + cairo_surface_t *capture,
> > + const char *reference_suffix,
> > + const char *capture_suffix);
> > +
> > +#endif
> > --
> > 2.13.2
> >
> > _______________________________________________
> > Intel-gfx mailing list
> > Intel-gfx at lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/intel-gfx
>
>
--
Paul Kocialkowski <paul.kocialkowski at linux.intel.com>
Intel Finland Oy - BIC 0357606-4 - Westendinkatu 7, 02160 Espoo, Finland
More information about the Intel-gfx
mailing list