From: Simon McVittie Date: Tue, 6 Dec 2022 11:45:14 +0000 (+0000) Subject: d/patches: Sort Debian-specific patches to the end of the series X-Git-Tag: archive/raspbian/4.8.3+ds-2+rpi1~3^2~26 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=762cd74a9a9b40de9456e0bba7c74928d761590d;p=gtk4.git d/patches: Sort Debian-specific patches to the end of the series --- diff --git a/debian/patches/Disable-inscription-markup.ui-reftest.patch b/debian/patches/Disable-inscription-markup.ui-reftest.patch deleted file mode 100644 index b035172711..0000000000 --- a/debian/patches/Disable-inscription-markup.ui-reftest.patch +++ /dev/null @@ -1,26 +0,0 @@ -From: Simon McVittie -Date: Fri, 12 Aug 2022 10:44:17 +0100 -Subject: Disable inscription-markup.ui reftest - -It's rendered 1px to the left of where it should be, which is not a -serious problem for practical use of GTK, but is a test failure. - -Bug: https://gitlab.gnome.org/GNOME/gtk/-/issues/5099 -Forwarded: not-needed, workaround ---- - testsuite/reftests/meson.build | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/testsuite/reftests/meson.build b/testsuite/reftests/meson.build -index 329348d..8edf55d 100644 ---- a/testsuite/reftests/meson.build -+++ b/testsuite/reftests/meson.build -@@ -608,6 +608,8 @@ flaky = [ - # to be left enabled. Remove it until somebody figures out - # what is going on there. - 'treeview-headers-hidden.ui', -+ # https://gitlab.gnome.org/GNOME/gtk/-/issues/5099 -+ 'inscription-markup.ui', - ] - - reftest_env = environment() diff --git a/debian/patches/debian/Disable-inscription-markup.ui-reftest.patch b/debian/patches/debian/Disable-inscription-markup.ui-reftest.patch new file mode 100644 index 0000000000..b035172711 --- /dev/null +++ b/debian/patches/debian/Disable-inscription-markup.ui-reftest.patch @@ -0,0 +1,26 @@ +From: Simon McVittie +Date: Fri, 12 Aug 2022 10:44:17 +0100 +Subject: Disable inscription-markup.ui reftest + +It's rendered 1px to the left of where it should be, which is not a +serious problem for practical use of GTK, but is a test failure. + +Bug: https://gitlab.gnome.org/GNOME/gtk/-/issues/5099 +Forwarded: not-needed, workaround +--- + testsuite/reftests/meson.build | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/testsuite/reftests/meson.build b/testsuite/reftests/meson.build +index 329348d..8edf55d 100644 +--- a/testsuite/reftests/meson.build ++++ b/testsuite/reftests/meson.build +@@ -608,6 +608,8 @@ flaky = [ + # to be left enabled. Remove it until somebody figures out + # what is going on there. + 'treeview-headers-hidden.ui', ++ # https://gitlab.gnome.org/GNOME/gtk/-/issues/5099 ++ 'inscription-markup.ui', + ] + + reftest_env = environment() diff --git a/debian/patches/debian/reftest_compare_surfaces-Report-how-much-the-images-diffe.patch b/debian/patches/debian/reftest_compare_surfaces-Report-how-much-the-images-diffe.patch new file mode 100644 index 0000000000..c772906cc5 --- /dev/null +++ b/debian/patches/debian/reftest_compare_surfaces-Report-how-much-the-images-diffe.patch @@ -0,0 +1,171 @@ +From: Simon McVittie +Date: Sat, 13 Feb 2021 18:26:24 +0000 +Subject: reftest_compare_surfaces: Report how much the images differ + +In unattended/non-interactive/autobuilder environments where the images +are not trivially accessible, this provides a way to distinguish between +totally different rendering and more subtle issues. + +Signed-off-by: Simon McVittie +Forwarded: https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/3195 +Applied-upstream: no, upstream want reftests to be a strict pass/fail with identical results required +--- + testsuite/gsk/compare-render.c | 9 ++++++++- + testsuite/reftests/gtk-reftest.c | 9 ++++++++- + testsuite/reftests/reftest-compare.c | 28 +++++++++++++++++++++++++--- + testsuite/reftests/reftest-compare.h | 5 ++++- + 4 files changed, 45 insertions(+), 6 deletions(-) + +diff --git a/testsuite/gsk/compare-render.c b/testsuite/gsk/compare-render.c +index 919957e..7145363 100644 +--- a/testsuite/gsk/compare-render.c ++++ b/testsuite/gsk/compare-render.c +@@ -227,12 +227,19 @@ main (int argc, char **argv) + else + { + GdkTexture *diff_texture; ++ guint max_diff = 0; ++ guint pixels_changed = 0; ++ guint pixels = 0; + + /* Now compare the two */ +- diff_texture = reftest_compare_textures (rendered_texture, reference_texture); ++ diff_texture = reftest_compare_textures (rendered_texture, reference_texture, ++ &max_diff, &pixels_changed, &pixels); + + if (diff_texture) + { ++ g_print ("%u (out of %u) pixels differ from reference by up to %u levels\n", ++ pixels_changed, pixels, max_diff); ++ + save_image (diff_texture, node_file, ".diff.png"); + g_object_unref (diff_texture); + success = FALSE; +diff --git a/testsuite/reftests/gtk-reftest.c b/testsuite/reftests/gtk-reftest.c +index a057a2e..78cd4dc 100644 +--- a/testsuite/reftests/gtk-reftest.c ++++ b/testsuite/reftests/gtk-reftest.c +@@ -347,6 +347,9 @@ test_ui_file (GFile *file) + char *ui_file, *reference_file; + GdkTexture *ui_image, *reference_image, *diff_image; + GtkStyleProvider *provider; ++ guint max_diff = 0; ++ guint pixels_changed = 0; ++ guint pixels = 0; + + ui_file = g_file_get_path (file); + +@@ -378,12 +381,16 @@ test_ui_file (GFile *file) + if (reference_image == NULL) + reference_image = gdk_memory_texture_new (1, 1, GDK_MEMORY_DEFAULT, g_bytes_new ((guchar[4]) {0, 0, 0, 0}, 4), 4); + +- diff_image = reftest_compare_textures (ui_image, reference_image); ++ diff_image = reftest_compare_textures (ui_image, reference_image, ++ &max_diff, &pixels_changed, &pixels); + + save_image (ui_image, ui_file, ".out.png"); + save_image (reference_image, ui_file, ".ref.png"); ++ + if (diff_image) + { ++ g_test_message ("%u (out of %u) pixels differ from reference by up to %u levels", ++ pixels_changed, pixels, max_diff); + save_node (g_object_get_data (G_OBJECT (ui_image), "source-render-node"), ui_file, ".out.node"); + save_node (g_object_get_data (G_OBJECT (reference_image), "source-render-node"), ui_file, ".ref.node"); + save_image (diff_image, ui_file, ".diff.png"); +diff --git a/testsuite/reftests/reftest-compare.c b/testsuite/reftests/reftest-compare.c +index bb6c6eb..202fcf5 100644 +--- a/testsuite/reftests/reftest-compare.c ++++ b/testsuite/reftests/reftest-compare.c +@@ -35,12 +35,16 @@ buffer_diff_core (const guchar *buf_a, + const guchar *buf_b, + int stride_b, + int width, +- int height) ++ int height, ++ guint *max_diff_out, ++ guint *pixels_changed_out) + { + int x, y; + guchar *buf_diff = NULL; + int stride_diff = 0; + GdkTexture *diff = NULL; ++ guint max_diff = 0; ++ guint pixels_changed = 0; + + for (y = 0; y < height; y++) + { +@@ -84,6 +88,10 @@ buffer_diff_core (const guchar *buf_a, + guint channel_diff; + + channel_diff = ABS (value_a - value_b); ++ ++ if (channel_diff > max_diff) ++ max_diff = channel_diff; ++ + channel_diff *= 4; /* emphasize */ + if (channel_diff) + channel_diff += 128; /* make sure it's visible */ +@@ -92,6 +100,8 @@ buffer_diff_core (const guchar *buf_a, + diff_pixel |= channel_diff << (channel * 8); + } + ++ pixels_changed++; ++ + if ((diff_pixel & 0x00ffffff) == 0) + { + /* alpha only difference, convert to luminance */ +@@ -105,12 +115,21 @@ buffer_diff_core (const guchar *buf_a, + } + } + ++ if (max_diff_out != NULL) ++ *max_diff_out = max_diff; ++ ++ if (pixels_changed_out != NULL) ++ *pixels_changed_out = pixels_changed; ++ + return diff; + } + + GdkTexture * + reftest_compare_textures (GdkTexture *texture1, +- GdkTexture *texture2) ++ GdkTexture *texture2, ++ guint *max_diff_out, ++ guint *pixels_changed_out, ++ guint *pixels_out) + { + int w, h; + guchar *data1, *data2; +@@ -126,10 +145,13 @@ reftest_compare_textures (GdkTexture *texture1, + + diff = buffer_diff_core (data1, w * 4, + data2, w * 4, +- w, h); ++ w, h, max_diff_out, pixels_changed_out); + + g_free (data1); + g_free (data2); + ++ if (pixels_out != NULL) ++ *pixels_out = w * h; ++ + return diff; + } +diff --git a/testsuite/reftests/reftest-compare.h b/testsuite/reftests/reftest-compare.h +index d5e02a1..b71636e 100644 +--- a/testsuite/reftests/reftest-compare.h ++++ b/testsuite/reftests/reftest-compare.h +@@ -24,7 +24,10 @@ G_BEGIN_DECLS + + G_MODULE_EXPORT + GdkTexture * reftest_compare_textures (GdkTexture *texture1, +- GdkTexture *texture2); ++ GdkTexture *texture2, ++ guint *max_diff_out, ++ guint *pixels_changed_out, ++ guint *pixels_out); + + G_END_DECLS + diff --git a/debian/patches/debian/reftests-Allow-minor-differences-to-be-tolerated.patch b/debian/patches/debian/reftests-Allow-minor-differences-to-be-tolerated.patch new file mode 100644 index 0000000000..f45ae07375 --- /dev/null +++ b/debian/patches/debian/reftests-Allow-minor-differences-to-be-tolerated.patch @@ -0,0 +1,152 @@ +From: Simon McVittie +Date: Sat, 13 Feb 2021 16:19:10 +0000 +Subject: reftests: Allow minor differences to be tolerated + +Based on an earlier patch by Michael Biebl, as used in Debian's GTK 3 +packaging, with additional inspiration from librsvg's reftests. + +Each .ui or .node reftest can have an accompanying .keyfile file +like this: + + [reftest] + tolerated-diff-level=20 + tolerated-diff-pixels=1000 + +If the image differs, but the number of pixels that differ is no more +than tolerated-diff-pixels and the differences are no more than +tolerated-diff-level, then we treat it as a success with warnings, save +the .diff.png for analysis, and use g_test_incomplete() to record the +test-case as "TODO". + +Signed-off-by: Simon McVittie +Forwarded: https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/3195 +Applied-upstream: no, upstream want reftests to be a strict pass/fail with identical results required +--- + testsuite/gsk/compare-render.c | 31 ++++++++++++++++++++++++++++++- + testsuite/reftests/gtk-reftest.c | 32 +++++++++++++++++++++++++++++++- + testsuite/reftests/image-compare.c | 2 +- + 3 files changed, 62 insertions(+), 3 deletions(-) + +diff --git a/testsuite/gsk/compare-render.c b/testsuite/gsk/compare-render.c +index 7145363..2d5fdf9 100644 +--- a/testsuite/gsk/compare-render.c ++++ b/testsuite/gsk/compare-render.c +@@ -98,6 +98,12 @@ get_output_file (const char *file, + return result; + } + ++static char * ++get_test_keyfile (const char *node_file) ++{ ++ return file_replace_extension (node_file, ".node", ".keyfile"); ++} ++ + static void + save_image (GdkTexture *texture, + const char *test_name, +@@ -237,12 +243,35 @@ main (int argc, char **argv) + + if (diff_texture) + { ++ char *keyfile_path = get_test_keyfile (node_file); ++ GKeyFile *keyfile = g_key_file_new (); ++ guint64 tolerated_diff = 0; ++ guint64 tolerated_pixels = 0; ++ ++ if (keyfile_path != NULL && g_file_test (keyfile_path, G_FILE_TEST_EXISTS)) ++ { ++ GError *error = NULL; ++ g_key_file_load_from_file (keyfile, keyfile_path, G_KEY_FILE_NONE, &error); ++ g_assert_no_error (error); ++ tolerated_diff = g_key_file_get_uint64 (keyfile, "reftest", "tolerated-diff-level", NULL); ++ g_print ("Maximum difference tolerated: %" G_GUINT64_FORMAT " levels\n", tolerated_diff); ++ tolerated_pixels = g_key_file_get_uint64 (keyfile, "reftest", "tolerated-diff-pixels", NULL); ++ g_print ("Different pixels tolerated: %" G_GUINT64_FORMAT "\n", tolerated_pixels); ++ } ++ + g_print ("%u (out of %u) pixels differ from reference by up to %u levels\n", + pixels_changed, pixels, max_diff); + + save_image (diff_texture, node_file, ".diff.png"); + g_object_unref (diff_texture); +- success = FALSE; ++ ++ if (max_diff <= tolerated_diff && pixels_changed <= tolerated_pixels) ++ g_print ("not right, but close enough?\n"); ++ else ++ success = FALSE; ++ ++ g_key_file_unref (keyfile); ++ g_free (keyfile_path); + } + } + +diff --git a/testsuite/reftests/gtk-reftest.c b/testsuite/reftests/gtk-reftest.c +index 78cd4dc..8062854 100644 +--- a/testsuite/reftests/gtk-reftest.c ++++ b/testsuite/reftests/gtk-reftest.c +@@ -308,6 +308,12 @@ save_image (GdkTexture *texture, + g_free (filename); + } + ++static char * ++get_test_keyfile (const char *ui_file) ++{ ++ return get_test_file (ui_file, ".keyfile", TRUE); ++} ++ + static void + save_node (GskRenderNode *node, + const char *test_name, +@@ -389,13 +395,37 @@ test_ui_file (GFile *file) + + if (diff_image) + { ++ char *keyfile_path = get_test_keyfile (ui_file); ++ GKeyFile *keyfile = g_key_file_new (); ++ guint64 tolerated_diff = 0; ++ guint64 tolerated_pixels = 0; ++ ++ if (keyfile_path != NULL) ++ { ++ GError *error = NULL; ++ g_key_file_load_from_file (keyfile, keyfile_path, G_KEY_FILE_NONE, &error); ++ g_assert_no_error (error); ++ tolerated_diff = g_key_file_get_uint64 (keyfile, "reftest", "tolerated-diff-level", NULL); ++ g_test_message ("Maximum difference tolerated: %" G_GUINT64_FORMAT " levels", tolerated_diff); ++ tolerated_pixels = g_key_file_get_uint64 (keyfile, "reftest", "tolerated-diff-pixels", NULL); ++ g_test_message ("Different pixels tolerated: %" G_GUINT64_FORMAT, tolerated_pixels); ++ } ++ + g_test_message ("%u (out of %u) pixels differ from reference by up to %u levels", + pixels_changed, pixels, max_diff); ++ + save_node (g_object_get_data (G_OBJECT (ui_image), "source-render-node"), ui_file, ".out.node"); + save_node (g_object_get_data (G_OBJECT (reference_image), "source-render-node"), ui_file, ".ref.node"); + save_image (diff_image, ui_file, ".diff.png"); + g_object_unref (diff_image); +- g_test_fail (); ++ ++ if (max_diff <= tolerated_diff && pixels_changed <= tolerated_pixels) ++ g_test_incomplete ("not right, but close enough?"); ++ else ++ g_test_fail (); ++ ++ g_key_file_unref (keyfile); ++ g_free (keyfile_path); + } + + remove_extra_css (provider); +diff --git a/testsuite/reftests/image-compare.c b/testsuite/reftests/image-compare.c +index dd9c26c..e68a161 100644 +--- a/testsuite/reftests/image-compare.c ++++ b/testsuite/reftests/image-compare.c +@@ -51,7 +51,7 @@ main (int argc, char **argv) + exit (1); + } + +- diff = reftest_compare_textures (image1, image2); ++ diff = reftest_compare_textures (image1, image2, NULL, NULL, NULL); + + if (opt_filename && diff) + { diff --git a/debian/patches/reftest_compare_surfaces-Report-how-much-the-images-diffe.patch b/debian/patches/reftest_compare_surfaces-Report-how-much-the-images-diffe.patch deleted file mode 100644 index c772906cc5..0000000000 --- a/debian/patches/reftest_compare_surfaces-Report-how-much-the-images-diffe.patch +++ /dev/null @@ -1,171 +0,0 @@ -From: Simon McVittie -Date: Sat, 13 Feb 2021 18:26:24 +0000 -Subject: reftest_compare_surfaces: Report how much the images differ - -In unattended/non-interactive/autobuilder environments where the images -are not trivially accessible, this provides a way to distinguish between -totally different rendering and more subtle issues. - -Signed-off-by: Simon McVittie -Forwarded: https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/3195 -Applied-upstream: no, upstream want reftests to be a strict pass/fail with identical results required ---- - testsuite/gsk/compare-render.c | 9 ++++++++- - testsuite/reftests/gtk-reftest.c | 9 ++++++++- - testsuite/reftests/reftest-compare.c | 28 +++++++++++++++++++++++++--- - testsuite/reftests/reftest-compare.h | 5 ++++- - 4 files changed, 45 insertions(+), 6 deletions(-) - -diff --git a/testsuite/gsk/compare-render.c b/testsuite/gsk/compare-render.c -index 919957e..7145363 100644 ---- a/testsuite/gsk/compare-render.c -+++ b/testsuite/gsk/compare-render.c -@@ -227,12 +227,19 @@ main (int argc, char **argv) - else - { - GdkTexture *diff_texture; -+ guint max_diff = 0; -+ guint pixels_changed = 0; -+ guint pixels = 0; - - /* Now compare the two */ -- diff_texture = reftest_compare_textures (rendered_texture, reference_texture); -+ diff_texture = reftest_compare_textures (rendered_texture, reference_texture, -+ &max_diff, &pixels_changed, &pixels); - - if (diff_texture) - { -+ g_print ("%u (out of %u) pixels differ from reference by up to %u levels\n", -+ pixels_changed, pixels, max_diff); -+ - save_image (diff_texture, node_file, ".diff.png"); - g_object_unref (diff_texture); - success = FALSE; -diff --git a/testsuite/reftests/gtk-reftest.c b/testsuite/reftests/gtk-reftest.c -index a057a2e..78cd4dc 100644 ---- a/testsuite/reftests/gtk-reftest.c -+++ b/testsuite/reftests/gtk-reftest.c -@@ -347,6 +347,9 @@ test_ui_file (GFile *file) - char *ui_file, *reference_file; - GdkTexture *ui_image, *reference_image, *diff_image; - GtkStyleProvider *provider; -+ guint max_diff = 0; -+ guint pixels_changed = 0; -+ guint pixels = 0; - - ui_file = g_file_get_path (file); - -@@ -378,12 +381,16 @@ test_ui_file (GFile *file) - if (reference_image == NULL) - reference_image = gdk_memory_texture_new (1, 1, GDK_MEMORY_DEFAULT, g_bytes_new ((guchar[4]) {0, 0, 0, 0}, 4), 4); - -- diff_image = reftest_compare_textures (ui_image, reference_image); -+ diff_image = reftest_compare_textures (ui_image, reference_image, -+ &max_diff, &pixels_changed, &pixels); - - save_image (ui_image, ui_file, ".out.png"); - save_image (reference_image, ui_file, ".ref.png"); -+ - if (diff_image) - { -+ g_test_message ("%u (out of %u) pixels differ from reference by up to %u levels", -+ pixels_changed, pixels, max_diff); - save_node (g_object_get_data (G_OBJECT (ui_image), "source-render-node"), ui_file, ".out.node"); - save_node (g_object_get_data (G_OBJECT (reference_image), "source-render-node"), ui_file, ".ref.node"); - save_image (diff_image, ui_file, ".diff.png"); -diff --git a/testsuite/reftests/reftest-compare.c b/testsuite/reftests/reftest-compare.c -index bb6c6eb..202fcf5 100644 ---- a/testsuite/reftests/reftest-compare.c -+++ b/testsuite/reftests/reftest-compare.c -@@ -35,12 +35,16 @@ buffer_diff_core (const guchar *buf_a, - const guchar *buf_b, - int stride_b, - int width, -- int height) -+ int height, -+ guint *max_diff_out, -+ guint *pixels_changed_out) - { - int x, y; - guchar *buf_diff = NULL; - int stride_diff = 0; - GdkTexture *diff = NULL; -+ guint max_diff = 0; -+ guint pixels_changed = 0; - - for (y = 0; y < height; y++) - { -@@ -84,6 +88,10 @@ buffer_diff_core (const guchar *buf_a, - guint channel_diff; - - channel_diff = ABS (value_a - value_b); -+ -+ if (channel_diff > max_diff) -+ max_diff = channel_diff; -+ - channel_diff *= 4; /* emphasize */ - if (channel_diff) - channel_diff += 128; /* make sure it's visible */ -@@ -92,6 +100,8 @@ buffer_diff_core (const guchar *buf_a, - diff_pixel |= channel_diff << (channel * 8); - } - -+ pixels_changed++; -+ - if ((diff_pixel & 0x00ffffff) == 0) - { - /* alpha only difference, convert to luminance */ -@@ -105,12 +115,21 @@ buffer_diff_core (const guchar *buf_a, - } - } - -+ if (max_diff_out != NULL) -+ *max_diff_out = max_diff; -+ -+ if (pixels_changed_out != NULL) -+ *pixels_changed_out = pixels_changed; -+ - return diff; - } - - GdkTexture * - reftest_compare_textures (GdkTexture *texture1, -- GdkTexture *texture2) -+ GdkTexture *texture2, -+ guint *max_diff_out, -+ guint *pixels_changed_out, -+ guint *pixels_out) - { - int w, h; - guchar *data1, *data2; -@@ -126,10 +145,13 @@ reftest_compare_textures (GdkTexture *texture1, - - diff = buffer_diff_core (data1, w * 4, - data2, w * 4, -- w, h); -+ w, h, max_diff_out, pixels_changed_out); - - g_free (data1); - g_free (data2); - -+ if (pixels_out != NULL) -+ *pixels_out = w * h; -+ - return diff; - } -diff --git a/testsuite/reftests/reftest-compare.h b/testsuite/reftests/reftest-compare.h -index d5e02a1..b71636e 100644 ---- a/testsuite/reftests/reftest-compare.h -+++ b/testsuite/reftests/reftest-compare.h -@@ -24,7 +24,10 @@ G_BEGIN_DECLS - - G_MODULE_EXPORT - GdkTexture * reftest_compare_textures (GdkTexture *texture1, -- GdkTexture *texture2); -+ GdkTexture *texture2, -+ guint *max_diff_out, -+ guint *pixels_changed_out, -+ guint *pixels_out); - - G_END_DECLS - diff --git a/debian/patches/reftests-Allow-minor-differences-to-be-tolerated.patch b/debian/patches/reftests-Allow-minor-differences-to-be-tolerated.patch deleted file mode 100644 index f45ae07375..0000000000 --- a/debian/patches/reftests-Allow-minor-differences-to-be-tolerated.patch +++ /dev/null @@ -1,152 +0,0 @@ -From: Simon McVittie -Date: Sat, 13 Feb 2021 16:19:10 +0000 -Subject: reftests: Allow minor differences to be tolerated - -Based on an earlier patch by Michael Biebl, as used in Debian's GTK 3 -packaging, with additional inspiration from librsvg's reftests. - -Each .ui or .node reftest can have an accompanying .keyfile file -like this: - - [reftest] - tolerated-diff-level=20 - tolerated-diff-pixels=1000 - -If the image differs, but the number of pixels that differ is no more -than tolerated-diff-pixels and the differences are no more than -tolerated-diff-level, then we treat it as a success with warnings, save -the .diff.png for analysis, and use g_test_incomplete() to record the -test-case as "TODO". - -Signed-off-by: Simon McVittie -Forwarded: https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/3195 -Applied-upstream: no, upstream want reftests to be a strict pass/fail with identical results required ---- - testsuite/gsk/compare-render.c | 31 ++++++++++++++++++++++++++++++- - testsuite/reftests/gtk-reftest.c | 32 +++++++++++++++++++++++++++++++- - testsuite/reftests/image-compare.c | 2 +- - 3 files changed, 62 insertions(+), 3 deletions(-) - -diff --git a/testsuite/gsk/compare-render.c b/testsuite/gsk/compare-render.c -index 7145363..2d5fdf9 100644 ---- a/testsuite/gsk/compare-render.c -+++ b/testsuite/gsk/compare-render.c -@@ -98,6 +98,12 @@ get_output_file (const char *file, - return result; - } - -+static char * -+get_test_keyfile (const char *node_file) -+{ -+ return file_replace_extension (node_file, ".node", ".keyfile"); -+} -+ - static void - save_image (GdkTexture *texture, - const char *test_name, -@@ -237,12 +243,35 @@ main (int argc, char **argv) - - if (diff_texture) - { -+ char *keyfile_path = get_test_keyfile (node_file); -+ GKeyFile *keyfile = g_key_file_new (); -+ guint64 tolerated_diff = 0; -+ guint64 tolerated_pixels = 0; -+ -+ if (keyfile_path != NULL && g_file_test (keyfile_path, G_FILE_TEST_EXISTS)) -+ { -+ GError *error = NULL; -+ g_key_file_load_from_file (keyfile, keyfile_path, G_KEY_FILE_NONE, &error); -+ g_assert_no_error (error); -+ tolerated_diff = g_key_file_get_uint64 (keyfile, "reftest", "tolerated-diff-level", NULL); -+ g_print ("Maximum difference tolerated: %" G_GUINT64_FORMAT " levels\n", tolerated_diff); -+ tolerated_pixels = g_key_file_get_uint64 (keyfile, "reftest", "tolerated-diff-pixels", NULL); -+ g_print ("Different pixels tolerated: %" G_GUINT64_FORMAT "\n", tolerated_pixels); -+ } -+ - g_print ("%u (out of %u) pixels differ from reference by up to %u levels\n", - pixels_changed, pixels, max_diff); - - save_image (diff_texture, node_file, ".diff.png"); - g_object_unref (diff_texture); -- success = FALSE; -+ -+ if (max_diff <= tolerated_diff && pixels_changed <= tolerated_pixels) -+ g_print ("not right, but close enough?\n"); -+ else -+ success = FALSE; -+ -+ g_key_file_unref (keyfile); -+ g_free (keyfile_path); - } - } - -diff --git a/testsuite/reftests/gtk-reftest.c b/testsuite/reftests/gtk-reftest.c -index 78cd4dc..8062854 100644 ---- a/testsuite/reftests/gtk-reftest.c -+++ b/testsuite/reftests/gtk-reftest.c -@@ -308,6 +308,12 @@ save_image (GdkTexture *texture, - g_free (filename); - } - -+static char * -+get_test_keyfile (const char *ui_file) -+{ -+ return get_test_file (ui_file, ".keyfile", TRUE); -+} -+ - static void - save_node (GskRenderNode *node, - const char *test_name, -@@ -389,13 +395,37 @@ test_ui_file (GFile *file) - - if (diff_image) - { -+ char *keyfile_path = get_test_keyfile (ui_file); -+ GKeyFile *keyfile = g_key_file_new (); -+ guint64 tolerated_diff = 0; -+ guint64 tolerated_pixels = 0; -+ -+ if (keyfile_path != NULL) -+ { -+ GError *error = NULL; -+ g_key_file_load_from_file (keyfile, keyfile_path, G_KEY_FILE_NONE, &error); -+ g_assert_no_error (error); -+ tolerated_diff = g_key_file_get_uint64 (keyfile, "reftest", "tolerated-diff-level", NULL); -+ g_test_message ("Maximum difference tolerated: %" G_GUINT64_FORMAT " levels", tolerated_diff); -+ tolerated_pixels = g_key_file_get_uint64 (keyfile, "reftest", "tolerated-diff-pixels", NULL); -+ g_test_message ("Different pixels tolerated: %" G_GUINT64_FORMAT, tolerated_pixels); -+ } -+ - g_test_message ("%u (out of %u) pixels differ from reference by up to %u levels", - pixels_changed, pixels, max_diff); -+ - save_node (g_object_get_data (G_OBJECT (ui_image), "source-render-node"), ui_file, ".out.node"); - save_node (g_object_get_data (G_OBJECT (reference_image), "source-render-node"), ui_file, ".ref.node"); - save_image (diff_image, ui_file, ".diff.png"); - g_object_unref (diff_image); -- g_test_fail (); -+ -+ if (max_diff <= tolerated_diff && pixels_changed <= tolerated_pixels) -+ g_test_incomplete ("not right, but close enough?"); -+ else -+ g_test_fail (); -+ -+ g_key_file_unref (keyfile); -+ g_free (keyfile_path); - } - - remove_extra_css (provider); -diff --git a/testsuite/reftests/image-compare.c b/testsuite/reftests/image-compare.c -index dd9c26c..e68a161 100644 ---- a/testsuite/reftests/image-compare.c -+++ b/testsuite/reftests/image-compare.c -@@ -51,7 +51,7 @@ main (int argc, char **argv) - exit (1); - } - -- diff = reftest_compare_textures (image1, image2); -+ diff = reftest_compare_textures (image1, image2, NULL, NULL, NULL); - - if (opt_filename && diff) - { diff --git a/debian/patches/series b/debian/patches/series index 7dffe6c74d..0b44154c4e 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -14,8 +14,8 @@ gtktext-Claim-gesture-more-selectively.patch gdksurface-Do-not-consider-GDK_TOUCH_END-CANCEL-as-popup-.patch testsuite-Use-separate-setups-for-unstable-tests-instead-.patch testsuite-Don-t-create-.test-files-for-flaky-or-failing-t.patch -reftest_compare_surfaces-Report-how-much-the-images-diffe.patch -reftests-Allow-minor-differences-to-be-tolerated.patch -Disable-inscription-markup.ui-reftest.patch -debian/Disable-clipboard-test.patch node-editor-Save-test-data-relative-to-current-working-di.patch +debian/reftest_compare_surfaces-Report-how-much-the-images-diffe.patch +debian/reftests-Allow-minor-differences-to-be-tolerated.patch +debian/Disable-inscription-markup.ui-reftest.patch +debian/Disable-clipboard-test.patch