Commit 442328de authored by Robert Hogan's avatar Robert Hogan Committed by Commit Bot

[LayoutNG] Don't combine exclusions on a node if its desendants have some

If the descendants of an opportunity tree node have exclusions they will
get lost when combining the node's current exclusions, so avoid doing that.

Bug: 798436
Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng
Change-Id: I90cde607c99fcfc808c1dafc531445bc25774cca
Reviewed-on: https://chromium-review.googlesource.com/847595Reviewed-by: default avatarEmil A Eklund <eae@chromium.org>
Commit-Queue: Emil A Eklund <eae@chromium.org>
Cr-Commit-Position: refs/heads/master@{#526554}
parent 50f4576e
...@@ -3424,7 +3424,6 @@ crbug.com/591099 fast/block/child-not-removed-from-parent-lineboxes-crash.html [ ...@@ -3424,7 +3424,6 @@ crbug.com/591099 fast/block/child-not-removed-from-parent-lineboxes-crash.html [
crbug.com/591099 fast/block/containing-block-negative-margins.html [ Failure ] crbug.com/591099 fast/block/containing-block-negative-margins.html [ Failure ]
crbug.com/591099 fast/block/float-avoids-padding-inline-ancestors.html [ Crash ] crbug.com/591099 fast/block/float-avoids-padding-inline-ancestors.html [ Crash ]
crbug.com/591099 fast/block/float/003.html [ Failure ] crbug.com/591099 fast/block/float/003.html [ Failure ]
crbug.com/591099 fast/block/float/010.html [ Failure ]
crbug.com/714962 fast/block/float/015.html [ Failure ] crbug.com/714962 fast/block/float/015.html [ Failure ]
crbug.com/591099 fast/block/float/018.html [ Failure ] crbug.com/591099 fast/block/float/018.html [ Failure ]
crbug.com/714962 fast/block/float/021.html [ Failure ] crbug.com/714962 fast/block/float/021.html [ Failure ]
......
...@@ -187,6 +187,16 @@ NGLayoutOpportunity GetTopSpace(const NGLayoutOpportunity& parent_opportunity, ...@@ -187,6 +187,16 @@ NGLayoutOpportunity GetTopSpace(const NGLayoutOpportunity& parent_opportunity,
return NGLayoutOpportunity(); return NGLayoutOpportunity();
} }
bool CanCombineExclusions(NGLayoutOpportunityTreeNode* node) {
if (node->left && node->left->combined_exclusion)
return false;
if (node->right && node->right->combined_exclusion)
return false;
if (node->bottom && node->bottom->combined_exclusion)
return false;
return true;
}
// Inserts the exclusion into the Layout Opportunity tree. // Inserts the exclusion into the Layout Opportunity tree.
void InsertExclusion(NGLayoutOpportunityTreeNode* node, void InsertExclusion(NGLayoutOpportunityTreeNode* node,
const NGExclusion* exclusion, const NGExclusion* exclusion,
...@@ -218,7 +228,8 @@ void InsertExclusion(NGLayoutOpportunityTreeNode* node, ...@@ -218,7 +228,8 @@ void InsertExclusion(NGLayoutOpportunityTreeNode* node,
DCHECK(!node->exclusions.IsEmpty()); DCHECK(!node->exclusions.IsEmpty());
if (node->combined_exclusion->MaybeCombineWith(*exclusion)) { if (CanCombineExclusions(node) &&
node->combined_exclusion->MaybeCombineWith(*exclusion)) {
SplitNGLayoutOpportunityTreeNode(node->combined_exclusion->rect, node); SplitNGLayoutOpportunityTreeNode(node->combined_exclusion->rect, node);
node->exclusions.push_back(exclusion); node->exclusions.push_back(exclusion);
} else { } else {
......
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