Commit 7cfc857d authored by Yoshifumi Inoue's avatar Yoshifumi Inoue Committed by Commit Bot

Avoid to check equality of saturated line width in MaxSizeFromMinSize::ComputeFromMinSize()

This patch changes |MaxSizeFromMinSize::ComputeFromMinSize()| to avoid
checking equality when line width calculation is saturated.

Note: This CL is similar to the CL[1] which dose same thing in
|NGLineBreaker|.

[1] http://crrev.com/c/Make NGLineBreaker::ComputeLineLocation() to avoid
DCHECK() when line width calculation saturated


Bug: 1112560
Change-Id: I1e1cc1135412cebfc2e2c3cf635dc08fe19578a6
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2340843
Auto-Submit: Yoshifumi Inoue <yosin@chromium.org>
Commit-Queue: Koji Ishii <kojii@chromium.org>
Reviewed-by: default avatarKoji Ishii <kojii@chromium.org>
Cr-Commit-Position: refs/heads/master@{#795418}
parent 524a904c
......@@ -1581,10 +1581,15 @@ static LayoutUnit ComputeContentSize(
break;
LayoutUnit inline_size = line_info.Width();
#if DCHECK_IS_ON()
// Text measurement is done using floats which may introduce small rounding
// errors for near-saturated values.
DCHECK_EQ(inline_size.Round(),
line_info.ComputeWidth().ClampNegativeToZero().Round());
// See http://crbug.com/1112560
if (!LayoutUnit(line_info.ComputeWidthInFloat()).MightBeSaturated()) {
DCHECK_EQ(inline_size.Round(),
line_info.ComputeWidth().ClampNegativeToZero().Round());
}
#endif
for (const NGInlineItemResult& item_result : line_info.Results()) {
DCHECK(item_result.item);
......
......@@ -475,6 +475,29 @@ TEST_F(NGInlineNodeTest, MinMaxSizesFloatsClearance) {
EXPECT_EQ(160, sizes.max_size);
}
// For http://crbug.com/1112560
TEST_F(NGInlineNodeTest, MinMaxSizesSaturated) {
LoadAhem();
SetupHtml("t", R"HTML(
<style>
b {
display: inline-block;
border-inline-start: groove;
width:1e8px;
}
#t {
float: left;
font: 10px Ahem;
}
</style>
<div id=t><b></b> <img></div>)HTML");
NGInlineNodeForTest node = CreateInlineNode();
MinMaxSizes sizes = ComputeMinMaxSizes(node);
EXPECT_EQ(LayoutUnit(33554431), sizes.min_size.Round());
// Note: |sizes.max_size.Round()| isn't |LayoutUnit::Max()| on some platform.
}
TEST_F(NGInlineNodeTest, MinMaxSizesTabulationWithBreakWord) {
LoadAhem();
SetupHtml("t", R"HTML(
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment