From 8d74c4d0198326f2d216e3c8c0b18e121cdb1436 Mon Sep 17 00:00:00 2001 From: Uli Schlachter Date: Fri, 30 Dec 2022 16:36:22 +0100 Subject: [PATCH] Speed up coverage-column-triangles test This commit changes the height of the coverage-column-triangles test by using a smaller height for the test. Previously the image was 40 pixels in height and the test took 517 seconds for me. Now, the image has a height of 4 pixels and the test takes 55 seconds. This is possible since column_triangles() does the same thing for each y coordinate. Thus, previously this test just did the same thing 40 times. Times are measured with the backends I happened to have enabled locally: script, xcb, xlib, image, recording. Thanks a lot to Christian Rohlfs for coming up with this idea in https://gitlab.freedesktop.org/cairo/cairo/-/issues/498#note_1700197 Possibly-fixes: https://gitlab.freedesktop.org/cairo/cairo/-/issues/498 Signed-off-by: Uli Schlachter --- test/coverage.c | 3 ++- .../coverage-column-triangles.ref.png | Bin 208 -> 886 bytes .../coverage-column-triangles.xfail.png | Bin 7632 -> 560 bytes .../coverage-column-triangles.xlib.xfail.png | Bin 12745 -> 1364 bytes 4 files changed, 2 insertions(+), 1 deletion(-) diff --git a/test/coverage.c b/test/coverage.c index f6626f3d0..0749fa22a 100644 --- a/test/coverage.c +++ b/test/coverage.c @@ -491,7 +491,8 @@ CAIRO_TEST (coverage_column_triangles, "Check the fidelity of the rasterisation.", NULL, /* keywords */ "target=raster", /* requirements */ - WIDTH, HEIGHT, + /* Smaller height since this test does not vary by y-coordinate */ + WIDTH, 4, NULL, column_triangles) CAIRO_TEST (coverage_triangles, "Check the fidelity of the rasterisation.", diff --git a/test/reference/coverage-column-triangles.ref.png b/test/reference/coverage-column-triangles.ref.png index aa61031b7265a6c03194a271fc82a097d7f883a2..24ccc9f2a476e38d951e5d54e4bd50561b020c6b 100644 GIT binary patch delta 860 zcmV-i1Ec)V0rm!v7YYOj0ssI2?)G+*ks%a+11m{HK~zYIot8_Mk-j@ zE^F7+EF`_Q;1o~~QX##m5I9O6%R~0nOd4A0gI4#IB^mNiBJU^ABF+XL3_TG?%FJg=-f1N+$c`9_S@;pz1DDf#z z($`sJE~w&k7D7FbNi@mN&(E&O^E~{2_fhYc$q*TtLUMD0oWx64sC>2*< zBTVYnYh7|AWHU~G`Dd!Ui#&L;t{xG(UAN-za*7NCZ$_GIRo zroI=_^`RT}l#BbLy?0KzC|W2HqZgH(pb?uF+wk5XJ1&yS&Em~KI1{u`A?A30;K0^w zGA#T~+MAJKqA|G_=ez(+(bMH{Ic(?CG>r@Jp6%xjgQntIY6u+Dq0j8gLaYBAiW3b9 zNezJiGd=}i?oTlUZB$v_JsQpl$tolv9Ml~3LXltNEqs>;Cz`$z-tyG(?R&swJ$FSu zhvswfXUkfeQyFcKBNG7*$zEQ6SI1*R1GCS+qRH!yR`rJgTV(4UCUioXjxqu?Q(GHb zUYYoW)YDfLbHlaz4Kh=vZz=H=(job3gMTs$PJ>q)EHYN(=JXnw5%>9UC(QBle6E!{N4BzK&}aAGc}qVe!KsFJKiJ2l!F}3 zyHdU@GGG7KPsit80(RxqYtGmY;h2o&&OupbUef#Z&o`F+2%}Cr)|7$!^%XsD=Ss{+ zD9zP)e=;SKy{O6X*IW1J(7JddZG&m}VC#|o4~7uWO{dhXSCy6t$^BcCAHv3 msX1#Q*#z___n+1LcjF(rGAWuigkFjO0000cByV>YhW{YAVDIwDK#^8Y z7srr_Id3mJGBOzOv}}0&r+c2jBzC?Xxwqf>ncgtxFlNYPQ#i}8M6$tzc|sb)B_4-a ej2=`Lw7d71@vO~+LzO@WF?hQAxvX|@wz6z+s7>cC&=4ZJ`B$Wa}j76Pgl5mR?sI{+koT4Bm zKtdHRpnAYJsU1@&Lhk)7M#ccuHjpN3u8}u##D5>3%}$qtr0sW65tB;evm*2ve9ZuV zUwpaO4HU+hDsquuak%PE(1*2xDz{OM5Bg$d#VW)d8Ejc$oPWWezP5O4Z{vIkPMzERZ+Tb~K@55-eM2aSjh$~Pr zCSkr0X1}+4gyEp!J1y5g$E4O~(&IIM0&}+tctX(7W8%y+;c(xRAcu;$4dY5nbqn|$BwLm V>2t#*ExP~!002ovPDHLkV1k)^2)zIR literal 7632 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 diff --git a/test/reference/coverage-column-triangles.xlib.xfail.png b/test/reference/coverage-column-triangles.xlib.xfail.png index f433b7a849ec966e72e35866e0ef19998fa52b44..18e4af2dae6e271f32ba071106cd61b8860f32d8 100644 GIT binary patch delta 1342 zcmV-E1;P5sW7G`0D7@u7KS_5SzT z`9emZ2J*~4t)Y$vB7qB#002-V$r4$fv34K#WHKZ%?bG;th=}*bdZdF(9o%-pj#3k5j1Wc^R!ch)*QE8+Hn0c6i(Z@W?9Toy2j>wyPM&2&0DF`ku#$FRQDW2o5h?&kO;lC_iIADd$Qp#_ z#yl7G>1qE4b3OloZz5>`9_`zj%gY5=0BKBrAClfR61{O(avD z;DSfJl7bX-%x%~J$A<*E59`iI1iFiV8MdGh(12v1XaP|`0b)D}fNS>ZXS$%1^+;0I z=pX9y>HP1>UqM81$tGn-YQ?P_YW@{QGyr00OA6 zgd4FWka-+b(;27G)28!NxEpmT6azlgm`p09UsJw-fi2n+BflV++$F(an{&t#1~ExA zEEUksRuM~qtrwNECPV|3`zGsG7ihR!zIKPUI%-+EBKUA2L95$p#C|1z=9=aSVU$(S z_CYi%B#^6jbu0)J0QF&05_VA;B3tHgE-*|l1(C*bqGgd7T`?o<%b%=odtnC zJVMZ65{VK_JVec}^I6a)5P%>75rq*Rp^H$FLUbzwgcQ)fTZM9dABzulK{N>I z>ryhYw2{j){J}JWw~@+t#DyEfS!6dK*t);fROBkoH}FYP?7Kh_ep?Pxg`5fc11{oa zH9R7;mt|X=&q;57M{A$1z+HTf+pylO{4qin5((&wG|IjSMz*Sd(0=ekg_~kmv_#++ zkeVel5w+w(ydJ+xAd(h4Q@4*+aIsx>{$^|y5fy1SYiTTC;k%o^eor)Ie$C?eUj?fKVVg3sVvqTBOs!#dbz4CcO5~23Wj;C!xqyK@gdn(Ord2*gC6y(LHZ$md`#t#!H$fy78?AsviI&8_Mku$*ZEvlB_Rs3z|d9ebGnc0 zwUHvUdMw zT~>rhT+**8H2kLFAxkE}=`62MggutuLrE3?3)`BQ8X*cB?*IS*07*qoM6N<$f+rAI A-T(jq literal 12745 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