Bug 1258916 part 7 - Optimize PNG files when importing them. draft
authorXidorn Quan <quanxunzhen@gmail.com>
Thu, 24 Mar 2016 14:50:51 +0800
changeset 345465 754b78aa0f05072c72b217ef83259c8b9cbcc7d0
parent 345464 88813a93cac78dbee0245f425742ebfd444fd5c8
child 345466 5a921ea1149b336b0cf5f582677d0d8a6d664887
push id14093
push userxquan@mozilla.com
push dateTue, 29 Mar 2016 12:05:19 +0000
bugs1258916
milestone48.0a1
Bug 1258916 part 7 - Optimize PNG files when importing them. MozReview-Commit-ID: H29v1z3p4Oo
layout/reftests/w3c-css/import-tests.py
layout/reftests/w3c-css/received/css-values-3/support/1x1-maroon.png
layout/reftests/w3c-css/received/css-values-3/support/1x1-navy.png
layout/reftests/w3c-css/received/css-values-3/support/1x1-white.png
layout/reftests/w3c-css/received/css-values-3/support/60x60-gg-rr.png
layout/reftests/w3c-css/received/css-values-3/support/60x60-green.png
layout/reftests/w3c-css/received/css-values-3/support/60x60-red.png
layout/reftests/w3c-css/received/css-values-3/support/cat.png
layout/reftests/w3c-css/received/css-values-3/support/pattern-grg-rgr-grg.png
layout/reftests/w3c-css/received/css-values-3/support/pattern-grg-rrg-rgg.png
layout/reftests/w3c-css/received/css-values-3/support/pattern-rgr-grg-rgr.png
layout/reftests/w3c-css/received/css-values-3/support/pattern-tr.png
layout/reftests/w3c-css/received/css-values-3/support/ruler-h-50%.png
layout/reftests/w3c-css/received/css-values-3/support/ruler-h-50px.png
layout/reftests/w3c-css/received/css-values-3/support/ruler-v-100px.png
layout/reftests/w3c-css/received/css-values-3/support/ruler-v-50px.png
layout/reftests/w3c-css/received/css-values-3/support/support/swatch-green.png
layout/reftests/w3c-css/received/css-values-3/support/support/swatch-red.png
layout/reftests/w3c-css/received/css-values-3/support/swatch-blue.png
layout/reftests/w3c-css/received/css-values-3/support/swatch-green.png
layout/reftests/w3c-css/received/css-values-3/support/swatch-lime.png
layout/reftests/w3c-css/received/css-values-3/support/swatch-orange.png
layout/reftests/w3c-css/received/css-values-3/support/swatch-red.png
layout/reftests/w3c-css/received/css-values-3/support/swatch-yellow.png
layout/reftests/w3c-css/received/css-values-3/support/test-br.png
layout/reftests/w3c-css/received/css-values-3/support/test-inner-half-size.png
layout/reftests/w3c-css/received/css-values-3/support/test-outer.png
layout/reftests/w3c-css/received/css-values-3/support/test-tl.png
layout/reftests/w3c-css/received/css-values-3/support/test-tr.png
layout/reftests/w3c-css/received/import.log
--- a/layout/reftests/w3c-css/import-tests.py
+++ b/layout/reftests/w3c-css/import-tests.py
@@ -44,16 +44,18 @@ gPrefixedProperties = [
     "column-rule-color",
     "column-rule-style",
     "column-rule-width",
     "columns",
     "column-span",
     "column-width"
 ]
 
+gPrefixingExts = {".html", ".htm", ".xht"}
+
 # Map of about:config prefs that need toggling, for a given test subdirectory.
 # Entries should look like:
 #  "$SUBDIR_NAME": "pref($PREF_NAME, $PREF_VALUE)"
 #
 # For example, when "@supports" was behind a pref, gDefaultPreferences had:
 #  "css3-conditional": "pref(layout.css.supports-rule.enabled,true)"
 gDefaultPreferences = {
 }
@@ -66,16 +68,17 @@ support_dirs_mapped = set()
 filemap = {}
 speclinkmap = {}
 propsaddedfor = []
 tests = []
 gOptions = None
 gArgs = None
 gTestfiles = []
 gTestFlags = {}
+gPngFiles = []
 
 def to_unix_path_sep(path):
     return path.replace('\\', '/')
 
 def log_output_of(subprocess):
     global gLog
     subprocess.wait()
     if (subprocess.returncode != 0):
@@ -116,32 +119,39 @@ def populate_test_files():
                 if f == "README" or \
                    f.find("-ref.") != -1:
                     continue
                 gTestfiles.append(os.path.join(dirpath, f))
 
     gTestfiles.sort()
 
 def copy_file(test, srcfile, destname, isSupportFile=False):
-    global gDestPath, gLog, gSrcPath
+    global gDestPath, gLog, gSrcPath, gPngFiles
     if not srcfile.startswith(gSrcPath):
         raise StandardError("Filename " + srcfile + " does not start with " + gSrcPath)
     logname = srcfile[len(gSrcPath):]
     gLog.write("Importing " + to_unix_path_sep(logname) +
                " to " + to_unix_path_sep(destname) + "\n")
     destfile = os.path.join(gDestPath, destname)
     destdir = os.path.dirname(destfile)
     if not os.path.exists(destdir):
         os.makedirs(destdir)
     if os.path.exists(destfile):
         if filecmp.cmp(srcfile, destfile):
             print "Warning: duplicate file {}".format(destname)
             return
         raise StandardError("file " + destfile + " already exists")
-    copy_and_prefix(test, srcfile, destfile, gPrefixedProperties, isSupportFile)
+    _, ext = os.path.splitext(srcfile)
+    if ext in gPrefixingExts:
+        copy_and_prefix(test, srcfile, destfile,
+                        gPrefixedProperties, isSupportFile)
+    else:
+        shutil.copy(srcfile, destfile)
+        if ext == ".png":
+            gPngFiles.append(destfile)
 
 def copy_support_files(test, dirname, spec):
     if dirname in support_dirs_mapped:
         return
     support_dirs_mapped.add(dirname)
     support_dir = os.path.join(dirname, "support")
     if not os.path.exists(support_dir):
         return
@@ -291,16 +301,51 @@ def read_fail_list():
         for line in f:
             line = line.strip()
             if not line or line.startswith("#"):
                 continue
             item = line.split()
             pat = re.compile(fnmatch.translate(item.pop()))
             gFailList.append((pat, item))
 
+def optimize_pngs():
+    global gDestPath, gLog, gPngFiles
+    PROCESSING_RE = re.compile(r"\*\* Processing: (.+)")
+    INPUT_SIZE_RE = re.compile(r"Input file size = (\d+ bytes)")
+    OUTPUT_SIZE_RE = re.compile(r"Output file size = (\d+ bytes)")
+
+    gLog.write("\n")
+    optipng = Popen(["optipng", "--version"] + gPngFiles,
+                    stderr=PIPE, universal_newlines=True)
+    gLog.write(optipng.stderr.readline())
+    processing = inputSize = None
+    for line in optipng.stderr:
+        if not line:
+            break
+        match = PROCESSING_RE.match(line)
+        if match:
+            processing = os.path.relpath(match.group(1), gDestPath)
+            processing = to_unix_path_sep(processing)
+            inputSize = None
+            continue
+        match = INPUT_SIZE_RE.match(line)
+        if match:
+            inputSize = match.group(1)
+            continue
+        match = OUTPUT_SIZE_RE.match(line)
+        if match:
+            if not processing or not inputSize:
+                raise StandardError("unexpected output from optipng")
+            gLog.write("Optimized {}: {} => {}\n".format(
+                processing, inputSize, match.group(1)))
+            processing = inputSize = None
+    optipng.wait()
+    if optipng.returncode != 0:
+        raise StandardError("error while running optipng")
+
 def main():
     global gDestPath, gLog, gTestfiles, gTestFlags, gFailList
     read_options()
     setup_paths()
     read_fail_list()
     setup_log()
     write_log_header()
     remove_existing_dirs()
@@ -340,12 +385,13 @@ def main():
         # We may mark a reftest fail for "match", but in that case there
         # is a good chance we do not fail the "mismatch" references.
         if "fails" in fail and testType == "!=":
             fail = ["skip"]
         test = fail + test
         listfile.write(" ".join(test) + "\n")
     listfile.close()
 
+    optimize_pngs()
     gLog.close()
 
 if __name__ == '__main__':
     main()
index 3f86b0721955eb4e0f014102c68c2a9764ef7593..2a072e53c022be7fc31c4fc329d773a051a3feed
GIT binary patch
literal 108
zc%17D@N?(olHy`uVBq!ia0vp^j3CUx1SBVv2j2ryoCO|{#X#BvjNMLV+W{GDN#5=*
s3=Iq*v8CK^ffSFYi(?3fY;s0I0?>dKhQ{pMe99nsPgg&ebxsLQ0N>UW=Kufz
index 9b9a03955baea7abde9e056e8604e18694e49b66..4f4b259a06565b4f92d5b082b1ca37a5402d9de6
GIT binary patch
literal 108
zc%17D@N?(olHy`uVBq!ia0vp^j3CUx1SBVv2j2ryoCO|{#X#BvjNMLV+W{GDN#5=*
r3?R@T^4lUFNb`8QIEHY@CMP6h0C_D8jnM(EmLLV5u6{1-oD!M<(@zwc
index dd43faec54ae60a210f1eab6ff4e7c88b8e34c97..64d3351748faea00ecd829757fcf29d3e856c581
GIT binary patch
literal 102
zc%17D@N?(olHy`uVBq!ia0vp^j3CSbBp9sfW`_bP&H|6fVj%4S#%?FG?SKrXByV>Y
qhX3vTXZ8bmT%InDAsn*FKlm9K85tSO;?o;I26(#qxvX<aXaWF*z7%T!
index 84f5b2a4f1d1865d763cac875bfa6a8c5c576c91..21665cb399439ac37d136497f782ae27be3914dc
GIT binary patch
literal 185
zc%17D@N?(olHy`uVBq!ia0vp^HXzK%3?vzhybXaQV{wqX6T`Z5GB1G~&H|6fVg?3o
zVGw3ym^DWND9B#o>FdgVi&d1v!f*ylfG<!;vcxr_#5q4VH#M(>!MP|ku_QG`p**uB
zL&4qCHz2%`PaLR-Ex;$lm7#&*KLf)mN!txT5fM)p#}JM4$q5py9uMqUY9vw_BpHl%
Vy!B^v)LaE}lBcVm%Q~loCIE2(DqH{n
index b3c8cf3eb4c89bd8f2d1ffde051856f375e3a3de..c7faf7ac8968b29b298d956f66fc7ce628aa9277
GIT binary patch
literal 176
zc%17D@N?(olHy`uVBq!ia0vp^HXzK%3?vzhybXaQV{wqX6T`Z5GB1G~&H|6fVg?3o
zVGw3ym^DWND9B#o>FdgVi&d1vLgLo86N*3~$r9Iy66gHf+|;}h2Ir#G#FEq$h4Rdj
z3<Y;j-+=H&K5?KT<^Z1%SB3_LIX{<91akR2T^vIsB$Fjr7c;OkFfhq5Fix@kZwhjW
Mr>mdKI;Vst08+dsg#Z8m
index 823f125b8e4a60f780f00443c9c9a10b9fa1f447..4951578dadf79c13cf54f17be0dc3ba419d5a381
GIT binary patch
literal 176
zc%17D@N?(olHy`uVBq!ia0vp^HXzK%3?vzhybXaQV{wqX6T`Z5GB1G~&H|6fVg?3o
zVGw3ym^DWND9B#o>FdgVi&d1vR3vTPFL$7jWQl7;iF1B#Zfaf$gL6@8Vo7R>LV0FM
zhJw4NZ$Nk>pEytvbAV5X>wlo)N1WzBE}y51V~B)gvIOg526hGpCK(3CDYpMjK`!xh
L^>bP0l+XkK8LB2p
index 85dd7324815b8f8ef1a1d0496224c1a0661db9d8..701b95a2b2873fbc731c8d9f03a9e2bdce8240d5
GIT binary patch
literal 1057
zc$@(t1m63JP)<h;3K|Lk000e1NJLTq003eD003hG0{{R4YLE@C0000LbVXQnLvm$d
zbZKvHAXI5>WdH}z3>gRm8%$Aad;kCd2XskIMF-Ff83-yN8ye1400009a7bBm000id
z000id0mpBsWB>pF2~bQ_MF0Q*0pXwj|Npoa1L^<(1ByvRK~zY`jg~#GD>n><4^%lS
zQ=}f;Y95!7WxOg&AygS!Kx#roz<jGrA!$6m_Xddp!$TkPh(AZP1-N=KSN@KR-d(+S
z*XYgFt-GMRI=H4Y!}UBuN~McL-VwhdDgxAM6(C!0K+rWFA4(m{k9vTM(YxVlDVzLH
zz=a>vHlE<h#5%44q`3fC_T;gTNGba<nn}O_<;M_c9D0Hn-E4k<O029Z1Hk|^fQInX
z3`G@gVvwNzeD;n8&s7->0R-wW$?hLBIW-^=14gJ7MK9u`oJR_Oh$6zykKVP4Y4!Qh
z&(o$=N7GTMfXgd2{%UmAI9k+7)MbSPVat;?cB25IKui_@Bh@CB(xcFFp4V}wt+=#m
zL@uimnVY2p6988l*UQ!R<IZdWhD+O1wsX0#%d;<*YMA8|LyKB58&M<?jVQ$PJWh!o
zMXDMU-z;IT+Tp4w@*KUEWx1WBpU1LFJ;(EiU2XA)BKI6x(NVVr)w!l(Sp3<S1^n{I
zZ}rvr;%D7cF}$n>+$MJA=>@VbPg=Xrua&#yb;o6ewE3R>Oe6P&^>QASopne@r3Sc=
zkiccQ(khz5nse{aFBPO2WA!D8JV&haFd}l^9~X@=lBLf+?;*6iCT3i`>4j}MxatPJ
z^W?4`xMTWX*jKgkrq+1NrNL==T5iwN@-!;$qQ_}@+Gtf$nxFEs4D@*E^E^EzTB~P$
z9Q|S8qPwJrdQP>5<kCRp((WrWpHdD2zZw&QRLz=J1EtCxiASM?)yNuEcf?JWDyf2-
z+YJ#>T{@%!QE$j>Xvk7VmJ11$*-nAmwf9~zfB)2vpKh~+JK{fns!act_-6Bx(yN$T
zOiJ~&I_?NAEy=7Yhw#N~S$T_zGIbdBGqRs@vz5=t=HG(|)jhC_Op>jR&N{M!beo(c
z$w-|=+SWd&fTWOcX&)Dtk8AA<zj90Cm0-LngxFYC^o|ggHE0w9c0Kc_1h>HFda;{A
zfI^##br&4Ep0A}pMG|i}_x{@$N__(2%HVx0-^}O6CIdn)``4JyY;(JO$M)*AeL3g9
zV!nRoYo`9D=DnT1k7*ZM`L;cwm_o`5xdiN!ZElS6LZSev(A>B;1g~33dmE%`s!%AB
zQX<Sl1=pdPQgaBElz<ZRNCVungkAqULPDXcEFR`jK*v<9B<YYI(!3JuFBp(|2ttpt
bZ&~~UD@YN*$YBs~00000NkvXXu0mjfd{gZT
index 9b88fbd81149891234185f54f8b4a0431759f181..cbda1b8022db84d9aef2c318698932fcc626e2e7
GIT binary patch
literal 176
zc%17D@N?(olHy`uVBq!ia0vp^HXzKz3?$tr89oG3jKx9jP7LeL$-D$|I14-?iy0WW
zg+Z8+Vb&Z8pdfpRr>`sfEe-)z0fmhE%A+840X`wF3=Itb85sWm|8Ju7@CeAHByV>Y
zrZn!F6d*^z)5S4F<9u=gLt}tIf<r@~-NhOf;X_hSCm)md^%wcbC=uRru|*@O7pRuO
M)78&qol`;+08Jz<Bme*a
index fcf4f3fd7d95431b8cd1bc5f5129fcb724c5e40f..152d72300e9dc37391300f82f08f39b171e057a5
GIT binary patch
literal 142
zc%17D@N?(olHy`uVBq!ia0vp^x**KR%)r1{e%Zkv$YBfc32|j;VEE6#uu9T)15m`-
z)5S4F;_}>M2YDL|cvud4GGE~OyFX|Ww}V;yb74&n>s_BKS`2*u-oGQ_DiE_a$JKk?
qs?Ab6!=*FNulSy^s?M*-NM1&;>QKnT*<nEA7(8A5T-G@yGywpK6D?x^
index d454e3a630cd98146c241537dbb3d4cef313f465..f3f48723058a4777a23e883ed8eb8f061b7609bf
GIT binary patch
literal 174
zc%17D@N?(olHy`uVBq!ia0vp^HXzKz3?$tr89oG3jKx9jP7LeL$-D$|I14-?iy0WW
zg+Z8+Vb&Z8pdfpRr>`sfEe-)z0fmhE%A+840X`wF3=Itb85sWm|8Ju7@CeAHByV>Y
zrZn!F6d*^=)5S4F<9sp)D<hjg!v?pXOFmwlxwz)ikHs%LmFyT|E0?i)Re3J}s$}qV
L^>bP0l+XkKHNGyy
index 8b4b25364e0ffbe09e563e13b567fa57330e48d5..4b58f4f4abfd580d66f299c4ccaad70715db5d6f
GIT binary patch
literal 118
zc%17D@N?(olHy`uVBq!ia0vp^azM<_$jrdNxUcxGCy>Jy;1l8sr2jK8NdNCu0<suO
zg8YIR9G=}s1F83PaSY+Oo@|iN;83UVq}i#hp5sUdv!TJi|IPCm7&f;`y%z8;{{>XZ
N;OXk;vd$@?2>=zkASM6+
index cf2eea6b438a11503a89414cbb2f9f1fde55df0c..a36baa53baa519a49333a438daf56faaad5f2384
GIT binary patch
literal 330
zc$@)B0k!^#P)<h;3K|Lk000e1NJLTq0077U001%w00001OFjFm0003INkl<ZXx{CZ
zy-ve06h<wos_K#^&O0zLqAU!INEr|X@icVnMquM-&I*r%+C+k8W2cCrRfqPlurgGY
zn>hOJU|G7lK0dZ&%QpNMrjATh`wX_v%wKmNtsNzXByWq0O5B$ilVC5mqx62D@K9e6
zK?JD}V)}1<%?ZjEhmhOeC&vj437#9hT&^2I8VYIN%_xW<f(YUZ#29AXia4J*gmg}c
zh$#jmm&>&z#KKKjx`Q01ymu>@KE!%y?GfU6Pa+a=CDNME(I^p#NJJtMk%&YjB9T2p
z{)W29R@oJVlW9a+`MD$C*%2IUSa;yj+Pjk{8|VIsTz@RaXK<da?uP)gl%OaFZTjJm
ch(tV&UnlPru;P}gLjV8(07*qoM6N<$f+^;Vc>n+a
index 9f46583665ca6471075227f9e2244f1ba1ffece0..5ddf97a6cf7aafec30f4bb7f35273b204f447d8a
GIT binary patch
literal 347
zc$@)S0i^zkP)<h;3K|Lk000e1NJLTq0074T001%w00001x;CID0003ZNkl<ZXx{CY
zze)o^5Qhij5yZwnrL__)<q#V?10oU$c0R*Fp25z;#uu>5O9T|Ox6sm<&ce=!V9W~o
z+1ROthkIt?Z;EBOVegx7_YQWA@4`x~JkR}g2Sq9~U)GDf&FvJs>5Ywxro^9OBt<As
z?)3!`M3C5!$~v>mv$sG-D;8vFlk22MZIz77=W=QIe?#OiP7E=`5W^wE%t+J7jHxT`
z``C1c&S|u@s`A*!NVvF+#5kzlvXWwxUCvJ8?)mQ@hsro$mCI13OxdSwTw*k@kR@~_
z4|&K#9`cZfJmevdpLg}~w2_Cr>3csO@@1HK<Fx{IK5Q>S*f?&y`10884)*J?orl96
tu)E>W8icKOJ$U{<MzeE&J<7vhyaV2K?Rc@Tp^*Rp002ovPDHLkV1n8$s1E=D
index a837eca2225082917dc952efd5c689e1b51d7bbd..098806f2893c3d318db4fd295a47d858107541c4
GIT binary patch
literal 348
zc$@)T0i*tjP)<h;3K|Lk000e1NJLTq001%o0074b000012@G#h0003aNkl<ZXx{CT
zy-EW?6h<%VR2Jr^v=*$xAb9|7L?X66!-CJT*!Ti=d5M5RtZXc7W45=;LO{p{^w@;m
zgcwa=2eR@_^X;88bD48l1HiD-bLhkL{Vhw2q|9ckWA?daRjn}wUbpaNn^!89i)S2u
zo}}hpiesixg((&`MMTyhb()M)Y`;hEu^?s)TtdrZdvEj~G&hk-6GTKrL;{lO0eH{Q
zB};b<Mk#fgTpto~vp~ivH5%|S-`&iNmS^A+j!%e)G;0wN5s}bj<-vb&rC8FJzVxLp
zed$ZTs`@jZPMpP8dHkhs06SlN?&e`nlkO2@r}v%dPY*MIi#WTz%){O%cWubdyJy*&
uE*55Dw!zZRFMa7tU;5IQzVxMEHT`cT!{KxH0s&<J0000<MNUMnLSTY<mz!n)
index 84141028020b7e8cdf2412acbca3c799ba50a534..15440734fc609a33e1d5d83ce38626c552713293
GIT binary patch
literal 347
zc$@)S0i^zkP)<h;3K|Lk000e1NJLTq001%o0074b000012@G#h0003ZNkl<ZXx{CT
zu}Z^G6owDhP^3%M(OHp>62!&Lf{0Y4Tc07|Gq@RC`T}l!iGqUe4mw)9Ik;I7w7r6U
zE&(m1BvLeT{qJ(_pYPn0e3uvihGkZJsGQ~LE3#&k>+F`_Ey;F@bac1IET>aW@i!G0
z<``JFn}jl<_0Eg@9EHNe*h4RgnGuHRXUaScFaj>G(x#dJw<97Vl1>oun3!=J^wUUb
zlX(_tEfH}rK5a;q1$h2C-2hg$xe5BLt`iaIu0=#dL_|dX2btLD!I94;ed+t9pKKbj
zi}!QuKgKnfdFQPJb}{NKgWEc3yiR;ev-fgXhuzp6?}6Qq+8f|@I(3)R#ePQLzOnT4
tOJDlZm%j9+FMa7tU;5IQzV!dR{s;X&?Ra-+|7idK002ovPDHLkV1kycqpSb`
index 1caf25c992aa8e23483cddb3334b5f51ec967f4a..896b893ea4536aad9f39571aa5b7aef9b4ffb63e
GIT binary patch
literal 83
zc%17D@N?(olHy`uVBq!ia0vp^{2<K83?vyP*g1g|bAV5X>wg9Y$w!>#KrXkZi(?3f
cY_b9?kfY1M*xPa76_CZ?>FVdQ&MBb@0OULlQ~&?~
index 0aa79b0c86bd72c2220ecce39b9553e2cd3605b9..4fc2cfb8354ca7060f923e9038e3bac1fe91931a
GIT binary patch
literal 83
zc%17D@N?(olHy`uVBq!ia0vp^{2<K83?vyP*g1g|bAV5XD?<aroS#c40=e9tE{-7_
cvdIdpK#nd0V{gZSS3nknr>mdKI;Vst011c>WdHyG
index bf2759634d45dbe3df13868341eddb7e4bf24172..1ab9b4e84f8141f21e7fe858074b7895ca10689a
GIT binary patch
literal 83
zc%17D@N?(olHy`uVBq!ia0vp^{2<K83?vyP*g1g|bAV5XD+9y-u8K?HKrXkZi(?3f
cY_b9?kfY1M*xPa76_CZ?>FVdQ&MBb@00mVKL;wH)
index 0aa79b0c86bd72c2220ecce39b9553e2cd3605b9..4fc2cfb8354ca7060f923e9038e3bac1fe91931a
GIT binary patch
literal 83
zc%17D@N?(olHy`uVBq!ia0vp^{2<K83?vyP*g1g|bAV5XD?<aroS#c40=e9tE{-7_
cvdIdpK#nd0V{gZSS3nknr>mdKI;Vst011c>WdHyG
index 55fd7fdaedfc1ed505b111f20fabbca568c68fa5..8910b823f48016b53519aca60d729bd686d6d616
GIT binary patch
literal 83
zc%17D@N?(olHy`uVBq!ia0vp^{2<K83?vyP*g1g|bAV5XE5m;VlehybfLv}*7sn6|
c*<=M)AV-&hvA5&ED<F%()78&qol`;+0R9;d6951J
index d3cd498b52bd88ea6c991f050f1ecb1cfdd136bb..db967b46e4dffd6c75473aa644cca0e580a1e264
GIT binary patch
literal 83
zc%17D@N?(olHy`uVBq!ia0vp^{2<K83?vyP*g1g|bAV5X>;I(;rzSbh26DMQT^vI=
cWRn$GfgD{1#@>ztuYfEDPgg&ebxsLQ03-Jg_5c6?
index 1caf25c992aa8e23483cddb3334b5f51ec967f4a..896b893ea4536aad9f39571aa5b7aef9b4ffb63e
GIT binary patch
literal 83
zc%17D@N?(olHy`uVBq!ia0vp^{2<K83?vyP*g1g|bAV5X>wg9Y$w!>#KrXkZi(?3f
cY_b9?kfY1M*xPa76_CZ?>FVdQ&MBb@0OULlQ~&?~
index 1591aa0e2e274854ed836cf582235ea0202f9c8e..7ab0fd6199db77a645266d8deef91a94d2184c08
GIT binary patch
literal 83
zc%17D@N?(olHy`uVBq!ia0vp^{2<K83?vyP*g1g|bAV5X>;L}@UB|w-0=e9tE{-7_
cvdIdpK#nd0V{gZSS3nknr>mdKI;Vst06riPp#T5?
index f413ff5c1a0f2ad9f9a345d3e07be57a59a82207..14c19b1a7bb25e78a8187210e1efea189b723906
GIT binary patch
literal 1033
zc$@(V1or!hP)<h;3K|Lk000e1NJLTq003kF003kJ0{{R3g3O3#0000aP)t-s005aY
zGnr;)nE(LHGc(L)X3UwH%*@QpW@i7Hng7hp|NsC0s-1y@0000CbW%=J|NsC0|NsC0
z|Ns9065r0w00001VoOIv3m@0SzyJUPdr3q=R9M69mtAh7Fc8NFZ4SUx<_6mv^Z-SI
zzDHtMb)O4W^1fOr2Uuwj&`4>Yn<{XE!sXWZ18lHO`@Ee<5nn(2|9i&921ff{MAsZE
zqAf#YDPGryevGb&fybt7#VLHtcjK+MUnS*ql@XPXje$JifG~|fqK<ep&8en}|7w%y
z->U(MP$T@vd|`7r){ndArZtcY31K4wnD2Wt8Xne#{!F(+E6IegUE2raP1@Jb@x!cK
zLC#xg|Gw7<mWMTDXeDAlCxqRHn>k7(*%?Ur97aTsMKmEit^2UBY<LQ?{e(oxV^G;S
zm0nE5%BI(TVjw)5htJvPXL-=fu~^s#$nQhQYbqbo!bB}3!OST8x#=ZJf;A((pk;ro
zYiD#%Td;ae4uw2~R3eqAM?9eHvX>AdpV4In_NfOMq-;pN7H+LZT_K15Bpy=Bnk!~Q
zzX!VmooOkoq0d{1*D6L<B_umb7=#hDiVEzK3ly>*`pU~#*v{n7dI;>{<LcvwSsuV1
zr2e!_*#>(maJeUejLGkTR_u4L@}+F7+*SMCFX<kCv>&yvtt1n&W`9KX?MLmO3yDm%
zzGlBu)63>=9E5B3-z({!-L?G(?JupY+E<A*tgPABiQE|T$%_3kk&_iI%x8a@$kpk>
z;a(wl?Ll4_iPTdc(jhb=%|vSC#`EdFEEB0`{tdZ5mQPX_npVQ!7ga5`6^%IixKpWz
z8+w@|=s_w~EzA-jE?v1h>{uvW_EJI?kaMZf$!T)#z8CH0t_2Bqq7gd<qFtx1OO>Ho
z71ZqvL2~Kpj+G)X-z^Z=hq8Mk`HkR(pWFBOrL1&(jxTkV#^79f4NmqUS$yd|yU%;j
z;bfA<oy>J}C%d35%;)zZt6xI0B3e`|(4h^>+Ak2t>V1;Mk^6-R_}g5b?R|kM>&nrc
zQ1jrs56+z$@pt-Dq#8kTR3A{06H#5(DyoVMSxYCwG>$p4fy?AymSv-?d3EW$V1$?=
zLnh!Yrtu`pxl9xHV&Ghi;xCQ>LbCLv<O+|h5aN*)Kzy?N2>N6N5b`c+J=U35mIsM=
za{Zf4kxGbTlZc~$ELAXwW-7UJDi8imz)+S&wq^NLF!-J703nLMDtRrBWyuS>JcYJ%
zFpQE@Jw;X5zk~a~9^@{+F@~7E+4mryi!bC0`EQYbVxOudc^R9k00000NkvXXu0mjf
DB(eC8
index e473bf80efc66766cb32ec2cc60244ed37dc1157..08d508ba2f12bfc01ca24741f2727125406a2410
GIT binary patch
literal 112
zc%17D@N?(olHy`uVBq!ia0vp^azJdv$jrdN$Tt0?6_CRg;1lA?!0?~p|No;dYYzfN
zR6SiBLnJOICmi5n38?7dNnuoD`@|?MtoYZcVrNE@k%$GWr#^$rT833cUW==N8W=oX
L{an^LB{Ts5mWmw&
index 82eeace7fc0c4202f79610978ab423e62abf8939..87ce881c705102db1da3b32aa26fbde3fbe93d6a
GIT binary patch
literal 1193
zc$@*L1XlZrP)<h;3K|Lk000e1NJLTq0077U009^X0{{R4S;%>z0002wP)t-s00000
z0Du7h{{jL60|NsD1Ox>I1q%xc4-XFz5D*a&5fTy-6B82~8yh1dBPAszC@3f@Dk?88
zFETPRG&D3eHa0joI6FH#K|w)8L_|eJMM_FaOiWBpPEJoxPf<}(Q&Uq{S65nET5N1=
zZ*OmjiHVDgi;$3zl9G~?l$4#Fous6stE;QCv$MImxxBo*y}iA_z`()5!N<qP$jHdd
z%*@Wt&d|`%)6>)0+1c9K+S}XP+}zyX-{0rw=j-e1?Ck9B?(XmJ@AC5U_4W1m`1twx
z`TF|${r&y^{{H^}0RR90XDuvv000AkNkl<Zc-rlpSySRb6h?2N;@~oFxQiRc4MlX^
z#SJAY-~azV^MX|A03%C65>7u5t3v1W$?e<eG%=<I#p)lS?Wuk(9qn<P=pL=NoUq!~
zbdT#gJ=_yktLx{@mK)Y-Uiz6O3V+YHv(w2Q$BFLIddmr`ZEBH?z1$O4t3S`%`&8pP
zKhMTXy@s15O~07XD%F;ygDS4;x=!GfBsDCuE=f9LAysi4$BAT>B==<NtYHnyn`V_7
zh>^ej%2Y{CmDc$Z*($E<x*d$kNzvzw5f@yjLgybe3Vke*<Ji*B@P{hO2CCmd`Oif1
zmuBut?M+8b=jrjUUt=~N%_{955C{+;QHE5zC_vgOZml?+E+F(SAVA0yAjAX+5FiXI
zn9zlR02zp6ygpLa-;n183E7g?{B?P|vdV&1SCSO?sI5Voq<f8NLfezdX(tGXnaNBy
zsgkDWl~ay&VIYG7;S>S^0t5&UAPI$ZbL#*ENN|wP#e(=l%p9lwuW|$)2oT0D#x8mn
z5FkK+a6KXLK*$sF1PBlyK!5;Yw!&<Mm=F_U!YB*`2oNAZxH85v@SByiJWpAFBS@2{
zqCVa=q+y-q<sZHU0XcY-yj`vN>w4IepZ7_|7LZU%GrMj+di;puA89{ztV|~G=OBOU
zxhxwks89?HvM9ZjWlHJdDiDa7%uI6`*~qO<PXc~y)OgAk2oNAZdOLUq3hq|}5kUkI
zL=Zs)5kwF{1QA3KNxVp6%1?!>eJVZgT8JPLgoqgt=~~1-fBts<{S`b;BJQ_>2+2;e
zBZ3IYPDBu4t`*fON*|M*xfUXbaAl`!A%Y0WPS-+&`w^z`h>#<QaAik?buC0lc0>^2
z%1%TOL4;%{B8VVDvJ(+R5Mec*RTOfBmBztbpd&}f5xN$u@gzGUh;YwN*Fpplk{uC5
z5Q%8AbBBls$=)-O{n^yav2>S7WlHr;Ot0+szooHfl_%;O+a8@PNV$TFJF)3nmy73;
z(l08H*Ec4;rX*e1RcyLe?S)}CbE!<JzOm_%`CBP>s*_x-liiXyYFUz|@%{QMDX%w-
zhe++EgqzouqqLOud~YN01_l(7+F_rTiqg=B-iIYStK_F7fB7)`7Bi89tw%{(^Zea)
z$sQ_u3zEN@U-1>^SAbe9yH@xOL<A8;5J3bHL=Zt_fJOcSsVa)!=QmmM00000NkvXX
Hu0mjfziA}g
index f6ac0ef7e8f6e192c9c26239884bf92b13cf67b8..48d1d884826bf4e54ba099b59aced1b7b0cb53fc
GIT binary patch
literal 1016
zc$@+F0|)$xP)<h;3K|Lk000e1NJLTq003kF003kJ0{{R3g3O3#0000aP)t-s005aY
zGnr;)nE(LHGc(L)X3UwH%*@QpW@i7Hng7hp|NsC0s-1y@0000CbW%=J|NsC0|NsC0
z|Ns9065r0w00001VoOIv3m@0SzyJUPYDq*vR9M69mrZV?Fcg5Fr5qqnf+KW4M+h3b
zdn%qY>AE0=eY5Bd<^Vwo*{1?d5OcX%*e1b0DP7H`EE|9DzV~ChFn;@iALIx5LH;+=
z_g&kc`mXIy-RacA*Q>kcP}zqh$w!FlyXH`p6%iGJI2EGcobyLWe=w^vEHKTmz~nbz
z29Jo6D8mdB#5E$rH6j4O1LU)M(W`;M?1`I{lzXcmBPZgx2KWZjSH#0a3{ef`5h8|k
zWrp8F`iim`5kW5Tup-E{%y3%47<^qy)!4A~YW%ukR7EB%hFD}N7k6#B2_m1R35%_`
zAfi&*<}bvrU|{NKOc-*KRaKp)5i2+bk*>5RNPoMw?}wXX1i6$O9oI@!=YV4%u7jxw
z3i;tw3&TiXnpQ#D_Oogk$3R?#kxyhh`})N=`bbk4LhJ`;=GNirt1{O}DtqTu7(sed
zM<(`8>P^59Q(+06oz&-%PF9Uh3v*3u>Y0y}+{D$+<FY0Qk(Oi$%|Fsu6A!U1$<n<u
z4}~GTJ-IXUh_nyR14{`aEs67@s7r2<J%n45@ohL?iEt5{7o^(BV`ly?2N*+nVL0!|
z@k+l<bJs3n^1@O%IFn-Hl4s|5wRu^IdI;I0*f}S%{e>koA4m1B?GxF$$l+xjj7z;~
z`(!t`$h*zUyd}pgZFF3(?o~k%H+5{skUh$?i<p-&?#6Y=*E;nc(iIr0<IR3MIEXrO
z1OQk)w_$|8dWdPs<j*jM+Qobw0@Ic5!jp>6X9t-|oYo$q(;_^?6cV3m?;Okl022Qz
z2ip}N9)h>B%#c!FC%Cgqj-#^3;3K*#wu6hjY2?{QGA&tqd)wPa*ULqW<jUFeZoj0S
zi<NZt;)nXhz2qYOYhl{eM`HTj+g-aZ)4vb`00{ppw)&ono+C(iLrh=z2nM$NJAJ<`
zFIqpT<4Efvdca=Ch`#BIJEWm?;2^#`*IBZ22D#DONXX@=595^_LK$Oe9k_7hW*_@-
zkSwM@+7W-M=Ns%rZ<RcRklEh1Lr9<Yq5D>*Unhr!`lEW+GrpqpQhgg4QoB^&b~%cA
zss5;nY%1n5{ZSpWshG?3Z^ab*rTSAb6WK1*w<&`})(iEgVzN{&)SrsUP%PD-BAX!(
m^~cU$>(izBqblt`5B~rfR*Em4<G@n@0000<MNUMnLSTaAqVC85
index 59843ae54b64f6ce4f7e616d4be491c911ea84cf..856d2209344646a87e6025bb4fcb5c370e31c87e
GIT binary patch
literal 1234
zc$@*!1TFiCP)<h;3K|Lk000e1NJLTq003kF003kJ0{{R3g3O3#0000aP)t-s005aY
zGnr;)nE(LHGc(L)X3UwH%*@QpW@i7Hng7hp|NsC0s-1y@0000CbW%=J|NsC0|NsC0
z|Ns9065r0w00001VoOIv3m@0SzyJUQL`g(JR9M69mrHKjIuwRU)C<sQr3G}*d6y6Y
zWachN1-avpfiq8nn;mokF(Th_ZJ1tx>CIh=FOhmU&Y-gh8N`V`p7Wn4jZPna&?oYV
zd?J4pQLWl<lsbF>k?v`gx)`CHaPx?pe>WFW2&x)bU3HjzI9!GRh611@giyY^#166#
z#t4c6GkUvG7a|>HehNaHm&3(~<0xxZ?*%+Z5Ew!C>O%;^z?*lNA%dW!&H2EM5d5wF
z(VR^X8b1K!tQ}O0?LbY>*+Eke268=bX9j^YcF@cN?0PPz>DdKjv7XCmc%{JK2r*UN
zM`Jdp!9YnUVVppLvz*Q&of}QNmW(n;>{Rl<83cbZPPFQv_6DjU$tj--n+<76<;MO`
zwSqH9<;)?xZ!9Gl^h`-tQ%GJOdM|j7;A(Z4Lh>TiJJH+0)r1;^%Ry=Atsu~MX|ow2
z#@#`}_G`{#+@Kk`hN@<i;?xdQd^mH^REDh`mr`8v`w=pg;4TKWw?l@9qUp9!Z!x7X
z3^bZ+q;;q^7zTQFi)q1&P&PLgB3lt$BhAZYyYl!N)%?gjJF{N5{CiN7g*8F6%D1e3
z3Iz&th<cXKty$1vW%g=-{xgN>Ry0yH!ffZ&##z%b(B<u60#TAPPP;A38~*GJ?FI8l
zTF(JdPn?+zTSG;FhjFC0cdpdT5Evsnv4n2Lb_?39GGFq?SBGGd1OSET{EE}4fW_BJ
zZhWA9oD<JbP_itt6~k|=Ye#VvW{nyk+t44efv>G=T6oV)r{#zVXFb>#&NaPVy3{Oa
z>@<%EHr~wEwViMX{u(_)K3*_dFx1wsmMk2xN)f&NH9~M{UD0bE)a1yc8$ubkpt5si
zACWMh9U_QxriOkiVJfX>PayzYCCHJx=$B*(rGY{Nzc`(>xB8MGd)FA<oriP6e2Ppn
zx-7dnh^vPL**XN%-}h2BoCfdRJFV*)$Prg9B{l8UsyC6xNITDB$Sm^5z2h6Hi>rMn
zWa8C{seGTI{%`RZ<pW5(Cx4t6+VqHCFEf27*Cn|0pZ9mpiJJrwPD?n|Yl}x5Z98K~
ztq32m&_-*Ict^DlS%%md2Q)P6niQ%0qkwdpSwuSDBjQ6ugJZ&Kty1KX3>>pZECQnM
zY&|WmQ^%OA7aw>Z4(Ji*Sc<&5h%LN6#jcXFjNwV;`v{r8xp#J~$dC#7CqEOwSIpXf
z4Bb8<|K$7FEbQN^HyYb;LVnUkjhXt&S2Ddl&B~8;Xv|P4-@KGqKU4DcV_b{oyBs6A
z`bqhrExS84l<ca=)KAJcyC+U@GcVk)QT?R+u49V$oy-pya(g->-*`40<Hp*<>5Tlo
z%MzsD4nz6A64xAxeDe1@Xeht+{Vl#jzF+z)@=(5XhiS>l&mtY-{l#r4Kiq<L-Q7Jh
wm?Ud^D8KRxO+A@AHTbV)=9^V=OC8AnABwf1MLrTrUjP6A07*qoM6N<$g6`E!2LJ#7
--- a/layout/reftests/w3c-css/received/import.log
+++ b/layout/reftests/w3c-css/received/import.log
@@ -158,8 +158,38 @@ Importing css-values-3/vh-support-atview
 Importing css-values-3/vh-support-margin.html to css-values-3/vh-support-margin.html
 Importing css-values-3/vh-support-transform-origin.html to css-values-3/vh-support-transform-origin.html
 Importing css-values-3/vh-support-transform-translate.html to css-values-3/vh-support-transform-translate.html
 Importing css-values-3/vh-support.html to css-values-3/vh-support.html
 Importing css-values-3/vh-zero-support.html to css-values-3/vh-zero-support.html
 Importing css-values-3/vh_not_refreshing_on_chrome.html to css-values-3/vh_not_refreshing_on_chrome.html
 Importing css-values-3/reference/vh_not_refreshing_on_chrome-ref.html to css-values-3/vh_not_refreshing_on_chrome-ref.html
 Importing css-values-3/vh_not_refreshing_on_chrome_iframe.html to css-values-3/vh_not_refreshing_on_chrome_iframe.html
+
+OptiPNG version 0.7.5
+Optimized css-values-3/support/1x1-maroon.png: 109 bytes => 108 bytes
+Optimized css-values-3/support/1x1-navy.png: 109 bytes => 108 bytes
+Optimized css-values-3/support/1x1-white.png: 109 bytes => 102 bytes
+Optimized css-values-3/support/60x60-gg-rr.png: 224 bytes => 185 bytes
+Optimized css-values-3/support/60x60-green.png: 218 bytes => 176 bytes
+Optimized css-values-3/support/60x60-red.png: 217 bytes => 176 bytes
+Optimized css-values-3/support/cat.png: 1883 bytes => 1057 bytes
+Optimized css-values-3/support/pattern-grg-rgr-grg.png: 222 bytes => 176 bytes
+Optimized css-values-3/support/pattern-grg-rrg-rgg.png: 231 bytes => 142 bytes
+Optimized css-values-3/support/pattern-rgr-grg-rgr.png: 223 bytes => 174 bytes
+Optimized css-values-3/support/pattern-tr.png: 137 bytes => 118 bytes
+Optimized css-values-3/support/ruler-h-50%.png: 691 bytes => 330 bytes
+Optimized css-values-3/support/ruler-h-50px.png: 671 bytes => 347 bytes
+Optimized css-values-3/support/ruler-v-100px.png: 760 bytes => 348 bytes
+Optimized css-values-3/support/ruler-v-50px.png: 757 bytes => 347 bytes
+Optimized css-values-3/support/swatch-blue.png: 84 bytes => 83 bytes
+Optimized css-values-3/support/swatch-green.png: 84 bytes => 83 bytes
+Optimized css-values-3/support/swatch-lime.png: 84 bytes => 83 bytes
+Optimized css-values-3/support/swatch-orange.png: 84 bytes => 83 bytes
+Optimized css-values-3/support/swatch-red.png: 84 bytes => 83 bytes
+Optimized css-values-3/support/swatch-yellow.png: 84 bytes => 83 bytes
+Optimized css-values-3/support/test-br.png: 1045 bytes => 1033 bytes
+Optimized css-values-3/support/test-inner-half-size.png: 180 bytes => 112 bytes
+Optimized css-values-3/support/test-outer.png: 2412 bytes => 1193 bytes
+Optimized css-values-3/support/test-tl.png: 1025 bytes => 1016 bytes
+Optimized css-values-3/support/test-tr.png: 1235 bytes => 1234 bytes
+Optimized css-values-3/support/support/swatch-green.png: 84 bytes => 83 bytes
+Optimized css-values-3/support/support/swatch-red.png: 84 bytes => 83 bytes