On Sun, 03 Apr 2016 01:20:41 -0700 Jeremy Huddleston Sequoia <[email protected]> wrote:
> The use of __attribute(section()), __start_test_section, and > __stop_test_section is not portable. Could you please follow this up > with a change that allows rendercheck to continue to function on > non-ELF platforms as well? Preferably by just having alternate > implementations of the DECLARE_RENDERCHECK_ARG_TEST and for_each_test > macros. FWIW, I'd also be interested to see how you can write an anternative implementation without causing more "duplicate" code to have to be written by hand for each test. Apart from a parser script collecting entries from C file and generating the table, I haven't come up with anything. The reason I'm interested is that I've heard -flto breaking Wayland/Weston test suites, which use the same section trick. Maybe that could be fixed otherwise, but learning about portable solutions is interesting. Thanks, pq > > On Feb 1, 2016, at 13:48, Eric Anholt <[email protected]> wrote: > > > > Managing the group logic was really error-prone (forget to edit > > success_mask when copy and pasting? Forget to printf a description > > of the group?). Most new tests being written can be described as a > > single call that does a couple subtests. > > > > This doesn't convert all of the tests. Some of the remaining ones > > use "win" for presenting results (which we may want to just put in a > > global?), and the rest use the pre-created pictures, which would > > need some much bigger refactoring if we want to move their test > > logic into their test files. > > > > Signed-off-by: Eric Anholt <[email protected]> > > --- > > main.c | 47 > > ++++++++++++++++++++++++++++++++++------------- > > rendercheck.h | 51 > > ++++++++++++++++++++++++++++++++++++++++++++------- > > t_gtk_argb_xbgr.c | 17 ++++++++++++----- t_libreoffice_xrgb.c | > > 18 ++++++++++++++++-- tests.c | 37 > > ++++++++++++++----------------------- 5 files changed, 120 > > insertions(+), 50 deletions(-) > > > > diff --git a/rendercheck.h b/rendercheck.h > > index 2195cb4..f0fa7b7 100644 > > --- a/rendercheck.h > > +++ b/rendercheck.h > > @@ -64,6 +64,19 @@ struct op_info { > > bool disabled; > > }; > > > > +struct rendercheck_test_result { > > + int tests; > > + int passed; > > +}; > > + > > +static inline void > > +record_result(struct rendercheck_test_result *result, bool success) > > +{ > > + result->tests++; > > + if (success) > > + result->passed++; > > +} > > + > > #define TEST_FILL 0x0001 > > #define TEST_DSTCOORDS 0x0002 > > #define TEST_SRCCOORDS 0x0004 > > @@ -77,8 +90,27 @@ struct op_info { > > #define TEST_REPEAT 0x0400 > > #define TEST_TRIANGLES 0x0800 > > #define TEST_BUG7366 0x1000 > > -#define TEST_GTK_ARGB_XBGR 0x2000 > > -#define TEST_LIBREOFFICE_XRGB 0x4000 > > +#define TEST_gtk_argb_xbgr 0x2000 > > +#define TEST_libreoffice_xrgb 0x4000 > > + > > +struct rendercheck_test { > > + int bit; > > + const char *arg_name; > > + const char *long_name; > > + struct rendercheck_test_result (*func)(Display *dpy); > > +}; > > + > > +#define DECLARE_RENDERCHECK_TEST(name) \ > > + const struct rendercheck_test test_desc_##name \ > > + __attribute__ ((section ("test_section"))) > > + > > +#define DECLARE_RENDERCHECK_ARG_TEST(arg_name_, long_name_, > > func_) \ > > + DECLARE_RENDERCHECK_TEST(arg_name_) = > > { \ > > + .bit = > > TEST_##arg_name_, \ > > + .arg_name = > > #arg_name_, \ > > + .long_name = > > long_name_, \ > > + .func = > > func_, \ > > + } > > > > struct render_format { > > XRenderPictFormat *format; > > @@ -88,6 +120,12 @@ struct render_format { > > extern struct render_format *formats; > > extern int nformats; > > > > +/* Storage that will point at the start and end of the ELF section > > for test > > + * structs. These are automatically set up by the linker when > > placing things > > + * in their sections. > > + */ > > +extern struct rendercheck_test __start_test_section, > > __stop_test_section; + > > extern int pixmap_move_iter; > > extern int win_width, win_height; > > extern struct op_info ops[]; > > @@ -226,8 +264,7 @@ trifan_test(Display *dpy, picture_info *win, > > picture_info *dst, int op, bool > > bug7366_test(Display *dpy); > > > > -bool > > -gtk_argb_xbgr_test(Display *dpy); > > - > > -bool > > -libreoffice_xrgb_test(Display *dpy, bool invert); > > +#define > > for_each_test(test) \ > > + for (struct rendercheck_test *test = > > &__start_test_section; \ > > + test < > > &__stop_test_section; \ > > + test++)
pgptvY1uLTDlA.pgp
Description: OpenPGP digital signature
_______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: https://lists.x.org/mailman/listinfo/xorg-devel
