Bug 1458159 - Use rounding instead of ceiling on max{Ascent,Descent} for DWriteFont. r?jfkthame draft
authorXidorn Quan <me@upsuper.org>
Tue, 01 May 2018 15:18:55 +1000
changeset 797915 0e82abaf829a8e7278641e8ed39462b4d653ee4f
parent 797914 0f9eab3ccbb23eea14e00f2954d70a75c35e0711
push id110619
push userxquan@mozilla.com
push dateMon, 21 May 2018 22:52:53 +0000
reviewersjfkthame
bugs1458159, 549190, 368020, 1462514, 456147
milestone62.0a1
Bug 1458159 - Use rounding instead of ceiling on max{Ascent,Descent} for DWriteFont. r?jfkthame The ceiling was introduced in bug 549190 for improve the consistency of underline positioning. However, removing ceiling now doesn't seem to regress the testcases in that bug, probably thanks to improvement in other part. The ceiling here causes us to have different font metrics than other browsers on Windows, and can lead to webcompat issue. We also don't do this for other backends. So it's probably better removing it in favor of rounding. There are several test changes: * min-intrinsic-with-percents-across-elements.html changes result due to height of wrapping div in reference page depends on line height, so a fixed line height is set to work around the issue. * 368020-1.html changes result because a slightly different line-height triggers bug 1462514. It is changed to use fixed line-height to work around the issue. * 456147.xul is disabled because it compares XUL against HTML page, but XUL has different approach to position text in its elements than HTML. Specifically, XUL elements don't seem to respect line height while HTML elements do. The original line height in the file was probably chosen to make the HTML match XUL, so it seems to be non-trivial to fix it in a platform-independent way. * sizing-orthog-{vlr,vrl}-in-htb-{008,020}.xht fails due to text in <p> after the testing block shifts 1px up for unknown reason. MozReview-Commit-ID: 2WJG1AigWl1
gfx/thebes/gfxDWriteFonts.cpp
layout/reftests/bugs/368020-1-ref.html
layout/reftests/bugs/368020-1.html
layout/reftests/bugs/reftest.list
layout/reftests/css-sizing/min-intrinsic-with-percents-across-elements-ref.html
layout/reftests/css-sizing/min-intrinsic-with-percents-across-elements.html
layout/reftests/floats/reftest.list
layout/reftests/text/reftest.list
layout/reftests/w3c-css/failures.list
layout/reftests/w3c-css/received/reftest_writing_modes.list
widget/reftests/reftest.list
--- a/gfx/thebes/gfxDWriteFonts.cpp
+++ b/gfx/thebes/gfxDWriteFonts.cpp
@@ -198,18 +198,18 @@ gfxDWriteFont::ComputeMetrics(AntialiasO
     mMetrics = new gfxFont::Metrics;
     ::memset(mMetrics, 0, sizeof(*mMetrics));
 
     mFUnitsConvFactor = float(mAdjustedSize / fontMetrics.designUnitsPerEm);
 
     mMetrics->xHeight = fontMetrics.xHeight * mFUnitsConvFactor;
     mMetrics->capHeight = fontMetrics.capHeight * mFUnitsConvFactor;
 
-    mMetrics->maxAscent = ceil(fontMetrics.ascent * mFUnitsConvFactor);
-    mMetrics->maxDescent = ceil(fontMetrics.descent * mFUnitsConvFactor);
+    mMetrics->maxAscent = round(fontMetrics.ascent * mFUnitsConvFactor);
+    mMetrics->maxDescent = round(fontMetrics.descent * mFUnitsConvFactor);
     mMetrics->maxHeight = mMetrics->maxAscent + mMetrics->maxDescent;
 
     mMetrics->emHeight = mAdjustedSize;
     mMetrics->emAscent = mMetrics->emHeight *
         mMetrics->maxAscent / mMetrics->maxHeight;
     mMetrics->emDescent = mMetrics->emHeight - mMetrics->emAscent;
 
     mMetrics->maxAdvance = mAdjustedSize;
--- a/layout/reftests/bugs/368020-1-ref.html
+++ b/layout/reftests/bugs/368020-1-ref.html
@@ -1,16 +1,16 @@
 <!DOCTYPE HTML>
 <html>
 <head>
 <title>Testcase, bug 368020</title>
 </head>
 <body>
 
-<div style="-moz-column-count: 2; column-count: 2; -moz-column-fill: auto; height: 4.5em; background:yellow">
+<div style="-moz-column-count: 2; column-count: 2; -moz-column-fill: auto; height: 72px; background:yellow; line-height: 16px">
 
   <div style="margin: 7px 1% 2px 2em; border: medium dotted; border-width: 2px 3px 4px 5px;">
     <div style="background: url(repeatable-diagonal-gradient.png);">
       <div style="padding: 8px 6px 4px 2px;">
         blah<br>
         blah<br>
         blah<br>
         blah
--- a/layout/reftests/bugs/368020-1.html
+++ b/layout/reftests/bugs/368020-1.html
@@ -1,16 +1,16 @@
 <!DOCTYPE HTML>
 <html>
 <head>
 <title>Testcase, bug 368020</title>
 </head>
 <body>
 
-<div style="-moz-column-count: 2; column-count: 2; -moz-column-fill: auto; height: 4.5em; background:yellow">
+<div style="-moz-column-count: 2; column-count: 2; -moz-column-fill: auto; height: 72px; background:yellow; line-height: 16px">
 
   <div>
     <div style="background: url(repeatable-diagonal-gradient.png); background-clip: padding-box; background-clip: padding; background-origin: padding-box; background-origin: padding; margin: 7px 1% 2px 2em; border: medium dotted; border-width: 2px 3px 4px 5px; padding: 8px 6px 4px 2px;">
       <div>
         blah<br>
         blah<br>
         blah<br>
         blah
--- a/layout/reftests/bugs/reftest.list
+++ b/layout/reftests/bugs/reftest.list
@@ -1190,17 +1190,17 @@ fuzzy-if(webrender,4,361) == 449519-1.ht
 == 452915-1.html 452915-1-ref.html
 == 452964-1.html 452964-1-ref.html
 == 454361.html about:blank
 == 455105-1.html 455105-ref.html
 == 455105-2.html 455105-ref.html
 == 455171-5.html 455171-5-ref.html
 == 455280-1.xhtml 455280-1-ref.xhtml
 == 455826-1.html 455826-1-ref.html
-fails-if(Android||cocoaWidget) fuzzy-if(webrender&&winWidget,222-222,2806-2806) == 456147.xul 456147-ref.html # bug 458047
+fails-if(Android||cocoaWidget||winWidget) == 456147.xul 456147-ref.html # bug 458047
 fuzzy-if(Android,11,41) fuzzy-if(winWidget||gtkWidget,4,6) fuzzy-if(d2d,15,69) fuzzy-if(skiaContent,42,154) == 456219-1a.html 456219-1-ref.html # bug 1128229
 fuzzy-if(Android,11,41) fuzzy-if(winWidget||gtkWidget,4,6) fuzzy-if(d2d,15,69) fuzzy-if(skiaContent,42,154) == 456219-1b.html 456219-1-ref.html # bug 1128229
 fuzzy-if(Android,11,41) fuzzy-if(winWidget||gtkWidget,4,6) fuzzy-if(d2d,15,69) fuzzy-if(skiaContent,42,154) == 456219-1c.html 456219-1-ref.html # bug 1128229
 fuzzy-if(skiaContent,1,45) == 456219-2.html 456219-2-ref.html
 == 456330-1.gif 456330-1-ref.png
 == 456484-1.html 456484-1-ref.html
 == 457398-1.html 457398-1-ref.html
 == 457398-2.html 457398-2-ref.html
--- a/layout/reftests/css-sizing/min-intrinsic-with-percents-across-elements-ref.html
+++ b/layout/reftests/css-sizing/min-intrinsic-with-percents-across-elements-ref.html
@@ -1,26 +1,28 @@
 <!DOCTYPE HTML>
 <title>References for bug 823483</title>
 <style>
 
 body, input { font-size: 10px }
+body { line-height: 1.5 }
 input { padding: 0 1px; border: 1px solid maroon; font-family: monospace }
 
 td:first-child {
    background: aqua;
    border: thin solid;
    padding: 1px 0;
 }
 
 td:nth-child(2) {
   width: 100%;
 }
 
 td:nth-child(1) > * { vertical-align: bottom }
+td:nth-child(1) > div > * { vertical-align: bottom }
 
 canvas {
   background: blue
 }
 
 </style>
 
 <table><tr>
--- a/layout/reftests/css-sizing/min-intrinsic-with-percents-across-elements.html
+++ b/layout/reftests/css-sizing/min-intrinsic-with-percents-across-elements.html
@@ -1,13 +1,14 @@
 <!DOCTYPE HTML>
 <title>Tests for bug 823483</title>
 <style>
 
 body, input { font-size: 10px }
+body { line-height: 1.5 }
 input { padding: 0 1px; border: 1px solid maroon; font-family: monospace }
 
 td:first-child {
    background: aqua;
    border: thin solid;
    padding: 1px 0;
 }
 
--- a/layout/reftests/floats/reftest.list
+++ b/layout/reftests/floats/reftest.list
@@ -87,17 +87,17 @@ fuzzy-if(skiaContent,1,12000) == float-i
 == float-in-rtl-vrl-3b.html float-in-rtl-vrl-3-ref.html
 == float-in-rtl-vrl-3c.html float-in-rtl-vrl-3-ref.html
 == float-in-rtl-vrl-3d.html float-in-rtl-vrl-3-ref.html
 == float-in-rtl-vrl-4a.html float-in-rtl-vrl-4-ref.html
 == float-in-rtl-vrl-4b.html float-in-rtl-vrl-4-ref.html
 == float-in-rtl-vrl-4c.html float-in-rtl-vrl-4-ref.html
 == float-in-rtl-vrl-4d.html float-in-rtl-vrl-4-ref.html
 fuzzy-if(OSX==1010,28,11) fuzzy-if(Android,16,2) == orthogonal-floats-1a.html orthogonal-floats-1-ref.html
-fuzzy-if(OSX==1010,28,11) == orthogonal-floats-1b.html orthogonal-floats-1-ref.html
+fuzzy-if(OSX==1010,28,11) fuzzy-if(winWidget,137,3) == orthogonal-floats-1b.html orthogonal-floats-1-ref.html
 fuzzy-if(OSX==1010,103,802) fuzzy-if(winWidget,135,700) == orthogonal-floats-1c.html orthogonal-floats-1-ref.html
 fuzzy-if(OSX==1010,103,802) fuzzy-if(winWidget,135,700) == orthogonal-floats-1d.html orthogonal-floats-1-ref.html
 
 == logical-float-side-1.html logical-float-side-1-ref.html
 == logical-float-side-2.html logical-float-side-2-ref.html
 == logical-float-side-3.html logical-float-side-3-ref.html
 == logical-float-side-4.html logical-float-side-4-ref.html
 
--- a/layout/reftests/text/reftest.list
+++ b/layout/reftests/text/reftest.list
@@ -19,17 +19,17 @@ random-if(!cocoaWidget) == font-size-adj
 == justification-cjk-extension.html justification-cjk-extension-ref.html
 == justification-space-diacritic.html justification-space-diacritic-ref.html
 load ligature-with-space-1.html
 == line-editing-1a.html line-editing-1-ref.html
 == line-editing-1b.html line-editing-1-ref.html
 == line-editing-1c.html line-editing-1-ref.html
 == line-editing-1d.html line-editing-1-ref.html
 == line-editing-1e.html line-editing-1-ref.html
-fails-if(cocoaWidget||(winWidget&&dwrite)) == lineheight-metrics-1.html lineheight-metrics-1-ref.html # bug 657864
+fails-if(cocoaWidget) == lineheight-metrics-1.html lineheight-metrics-1-ref.html # bug 657864
 == lineheight-metrics-2a.html lineheight-metrics-2-ref.html
 == lineheight-metrics-2b.html lineheight-metrics-2-ref.html
 == lineheight-percentage-1.html lineheight-percentage-1-ref.html
 == long-1.html long-ref.html
 fuzzy-if(Android,255,325) == pre-line-1.html pre-line-1-ref.html
 == pre-line-2.html pre-line-2-ref.html
 == pre-line-3.html pre-line-3-ref.html
 == pre-line-4.html pre-line-4-ref.html
--- a/layout/reftests/w3c-css/failures.list
+++ b/layout/reftests/w3c-css/failures.list
@@ -58,20 +58,20 @@ fails css-writing-modes/float-rgt-orthog
 fails css-writing-modes/float-rgt-orthog-vrl-in-htb-003.xht
 fails css-writing-modes/sizing-orthog-htb-in-vrl-001.xht
 fails css-writing-modes/sizing-orthog-htb-in-vrl-004.xht
 fails css-writing-modes/sizing-orthog-htb-in-vrl-013.xht
 fails-if(OSX||winWidget||Android) css-writing-modes/sizing-orthog-htb-in-vlr-008.xht
 fails-if(OSX||winWidget||Android) css-writing-modes/sizing-orthog-htb-in-vlr-020.xht
 fails-if(OSX||winWidget||Android) css-writing-modes/sizing-orthog-htb-in-vrl-008.xht
 fails-if(OSX||winWidget||Android) css-writing-modes/sizing-orthog-htb-in-vrl-020.xht
-css-writing-modes/sizing-orthog-vlr-in-htb-008.xht
-css-writing-modes/sizing-orthog-vlr-in-htb-020.xht
-css-writing-modes/sizing-orthog-vrl-in-htb-008.xht
-css-writing-modes/sizing-orthog-vrl-in-htb-020.xht
+fuzzy-if(winWidget,255,713) css-writing-modes/sizing-orthog-vlr-in-htb-008.xht
+fuzzy-if(winWidget,255,713) css-writing-modes/sizing-orthog-vlr-in-htb-020.xht
+fuzzy-if(winWidget,255,713) css-writing-modes/sizing-orthog-vrl-in-htb-008.xht
+fuzzy-if(winWidget,255,713) css-writing-modes/sizing-orthog-vrl-in-htb-020.xht
 fails-if(Android) css-writing-modes/sizing-orthog-htb-in-vlr-003.xht
 fails-if(Android) css-writing-modes/sizing-orthog-htb-in-vlr-009.xht
 fails-if(Android) css-writing-modes/sizing-orthog-htb-in-vlr-015.xht
 fails-if(Android) css-writing-modes/sizing-orthog-htb-in-vlr-021.xht
 fails-if(Android) css-writing-modes/sizing-orthog-htb-in-vrl-003.xht
 fails-if(Android) css-writing-modes/sizing-orthog-htb-in-vrl-009.xht
 fails-if(Android) css-writing-modes/sizing-orthog-htb-in-vrl-015.xht
 fails-if(Android) css-writing-modes/sizing-orthog-htb-in-vrl-021.xht
--- a/layout/reftests/w3c-css/received/reftest_writing_modes.list
+++ b/layout/reftests/w3c-css/received/reftest_writing_modes.list
@@ -744,47 +744,47 @@ fails-if(Android) == css-writing-modes/s
 == css-writing-modes/sizing-orthog-prct-vrl-in-htb-006.xht css-writing-modes/sizing-orthog-prct-vrl-in-htb-006-ref.xht
 == css-writing-modes/sizing-orthog-prct-vrl-in-htb-007.xht css-writing-modes/sizing-orthog-prct-vrl-in-htb-007-ref.xht
 == css-writing-modes/sizing-orthog-prct-vrl-in-htb-008.xht css-writing-modes/sizing-orthog-prct-vrl-in-htb-008-ref.xht
 == css-writing-modes/sizing-orthog-vlr-in-htb-001.xht css-writing-modes/sizing-orthog-vlr-in-htb-001-ref.xht
 fails-if(Android) == css-writing-modes/sizing-orthog-vlr-in-htb-003.xht css-writing-modes/sizing-orthog-vlr-in-htb-003-ref.xht
 == css-writing-modes/sizing-orthog-vlr-in-htb-004.xht css-writing-modes/sizing-orthog-vlr-in-htb-004-ref.xht
 == css-writing-modes/sizing-orthog-vlr-in-htb-006.xht css-writing-modes/sizing-orthog-vlr-in-htb-006-ref.xht
 == css-writing-modes/sizing-orthog-vlr-in-htb-007.xht css-writing-modes/sizing-orthog-vlr-in-htb-007-ref.xht
-== css-writing-modes/sizing-orthog-vlr-in-htb-008.xht css-writing-modes/sizing-orthog-vlr-in-htb-008-ref.xht
+fuzzy-if(winWidget,255,713) == css-writing-modes/sizing-orthog-vlr-in-htb-008.xht css-writing-modes/sizing-orthog-vlr-in-htb-008-ref.xht
 fails-if(Android) == css-writing-modes/sizing-orthog-vlr-in-htb-009.xht css-writing-modes/sizing-orthog-vlr-in-htb-009-ref.xht
 == css-writing-modes/sizing-orthog-vlr-in-htb-010.xht css-writing-modes/sizing-orthog-vlr-in-htb-010-ref.xht
 == css-writing-modes/sizing-orthog-vlr-in-htb-011.xht css-writing-modes/sizing-orthog-vlr-in-htb-011-ref.xht
 == css-writing-modes/sizing-orthog-vlr-in-htb-012.xht css-writing-modes/sizing-orthog-vlr-in-htb-012-ref.xht
 == css-writing-modes/sizing-orthog-vlr-in-htb-013.xht css-writing-modes/sizing-orthog-vlr-in-htb-013-ref.xht
 fails-if(Android) == css-writing-modes/sizing-orthog-vlr-in-htb-015.xht css-writing-modes/sizing-orthog-vlr-in-htb-015-ref.xht
 == css-writing-modes/sizing-orthog-vlr-in-htb-016.xht css-writing-modes/sizing-orthog-vlr-in-htb-016-ref.xht
 == css-writing-modes/sizing-orthog-vlr-in-htb-018.xht css-writing-modes/sizing-orthog-vlr-in-htb-018-ref.xht
 == css-writing-modes/sizing-orthog-vlr-in-htb-019.xht css-writing-modes/sizing-orthog-vlr-in-htb-019-ref.xht
-== css-writing-modes/sizing-orthog-vlr-in-htb-020.xht css-writing-modes/sizing-orthog-vlr-in-htb-020-ref.xht
+fuzzy-if(winWidget,255,713) == css-writing-modes/sizing-orthog-vlr-in-htb-020.xht css-writing-modes/sizing-orthog-vlr-in-htb-020-ref.xht
 fails-if(Android) == css-writing-modes/sizing-orthog-vlr-in-htb-021.xht css-writing-modes/sizing-orthog-vlr-in-htb-015-ref.xht
 == css-writing-modes/sizing-orthog-vlr-in-htb-022.xht css-writing-modes/sizing-orthog-vlr-in-htb-022-ref.xht
 == css-writing-modes/sizing-orthog-vlr-in-htb-023.xht css-writing-modes/sizing-orthog-vlr-in-htb-023-ref.xht
 == css-writing-modes/sizing-orthog-vlr-in-htb-024.xht css-writing-modes/sizing-orthog-vlr-in-htb-018-ref.xht
 == css-writing-modes/sizing-orthog-vrl-in-htb-001.xht css-writing-modes/sizing-orthog-vrl-in-htb-001-ref.xht
 fails-if(Android) == css-writing-modes/sizing-orthog-vrl-in-htb-003.xht css-writing-modes/sizing-orthog-vrl-in-htb-003-ref.xht
 == css-writing-modes/sizing-orthog-vrl-in-htb-004.xht css-writing-modes/sizing-orthog-vrl-in-htb-004-ref.xht
 == css-writing-modes/sizing-orthog-vrl-in-htb-006.xht css-writing-modes/sizing-orthog-vrl-in-htb-006-ref.xht
 == css-writing-modes/sizing-orthog-vrl-in-htb-007.xht css-writing-modes/sizing-orthog-vrl-in-htb-007-ref.xht
-== css-writing-modes/sizing-orthog-vrl-in-htb-008.xht css-writing-modes/sizing-orthog-vrl-in-htb-008-ref.xht
+fuzzy-if(winWidget,255,713) == css-writing-modes/sizing-orthog-vrl-in-htb-008.xht css-writing-modes/sizing-orthog-vrl-in-htb-008-ref.xht
 fails-if(Android) == css-writing-modes/sizing-orthog-vrl-in-htb-009.xht css-writing-modes/sizing-orthog-vrl-in-htb-009-ref.xht
 == css-writing-modes/sizing-orthog-vrl-in-htb-010.xht css-writing-modes/sizing-orthog-vrl-in-htb-010-ref.xht
 == css-writing-modes/sizing-orthog-vrl-in-htb-011.xht css-writing-modes/sizing-orthog-vrl-in-htb-011-ref.xht
 == css-writing-modes/sizing-orthog-vrl-in-htb-012.xht css-writing-modes/sizing-orthog-vrl-in-htb-012-ref.xht
 == css-writing-modes/sizing-orthog-vrl-in-htb-013.xht css-writing-modes/sizing-orthog-vrl-in-htb-013-ref.xht
 fails-if(Android) == css-writing-modes/sizing-orthog-vrl-in-htb-015.xht css-writing-modes/sizing-orthog-vrl-in-htb-015-ref.xht
 == css-writing-modes/sizing-orthog-vrl-in-htb-016.xht css-writing-modes/sizing-orthog-vrl-in-htb-016-ref.xht
 == css-writing-modes/sizing-orthog-vrl-in-htb-018.xht css-writing-modes/sizing-orthog-vrl-in-htb-018-ref.xht
 == css-writing-modes/sizing-orthog-vrl-in-htb-019.xht css-writing-modes/sizing-orthog-vrl-in-htb-019-ref.xht
-== css-writing-modes/sizing-orthog-vrl-in-htb-020.xht css-writing-modes/sizing-orthog-vrl-in-htb-020-ref.xht
+fuzzy-if(winWidget,255,713) == css-writing-modes/sizing-orthog-vrl-in-htb-020.xht css-writing-modes/sizing-orthog-vrl-in-htb-020-ref.xht
 fails-if(Android) == css-writing-modes/sizing-orthog-vrl-in-htb-021.xht css-writing-modes/sizing-orthog-vrl-in-htb-015-ref.xht
 == css-writing-modes/sizing-orthog-vrl-in-htb-022.xht css-writing-modes/sizing-orthog-vrl-in-htb-022-ref.xht
 == css-writing-modes/sizing-orthog-vrl-in-htb-023.xht css-writing-modes/sizing-orthog-vrl-in-htb-023-ref.xht
 == css-writing-modes/sizing-orthog-vrl-in-htb-024.xht css-writing-modes/sizing-orthog-vrl-in-htb-018-ref.xht
 skip == css-writing-modes/table-cell-001.html css-writing-modes/reference/table-cell-001-ref.html
 skip == css-writing-modes/table-cell-002.html css-writing-modes/reference/table-cell-002-ref.html
 fuzzy-if(OSX||winWidget,110,1200) == css-writing-modes/table-column-order-002.xht css-writing-modes/block-flow-direction-001-ref.xht
 fuzzy-if(OSX||winWidget,110,1200) == css-writing-modes/table-column-order-003.xht css-writing-modes/block-flow-direction-001-ref.xht
--- a/widget/reftests/reftest.list
+++ b/widget/reftests/reftest.list
@@ -1,6 +1,6 @@
 skip-if(!cocoaWidget) != 507947.html about:blank
 == progressbar-fallback-default-style.html progressbar-fallback-default-style-ref.html
-fuzzy-if(Android,17,1120) fuzzy-if(webrender&&winWidget,1-1,10-10) == meter-native-style.html meter-native-style-ref.html
+fuzzy-if(Android,17,1120) fuzzy-if(webrender&&winWidget,1-1,5-5) == meter-native-style.html meter-native-style-ref.html
 skip-if(!cocoaWidget) == meter-vertical-native-style.html meter-vertical-native-style-ref.html # dithering
 == meter-fallback-default-style.html meter-fallback-default-style-ref.html
 load 664925.xhtml