Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(61)

Side by Side Diff: third_party/WebKit/Source/core/layout/LayoutBlockFlow.cpp

Issue 2863093004: Flowthread should move its floatlists to container when evacuating (Closed)
Patch Set: Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2013 Google Inc. All rights reserved. 2 * Copyright (C) 2013 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 3113 matching lines...) Expand 10 before | Expand all | Expand 10 after
3124 // If the child we're removing means that we can now treat all children as 3124 // If the child we're removing means that we can now treat all children as
3125 // inline without the need for anonymous blocks, then do that. 3125 // inline without the need for anonymous blocks, then do that.
3126 MakeChildrenInlineIfPossible(); 3126 MakeChildrenInlineIfPossible();
3127 } 3127 }
3128 } 3128 }
3129 3129
3130 void LayoutBlockFlow::MoveAllChildrenIncludingFloatsTo( 3130 void LayoutBlockFlow::MoveAllChildrenIncludingFloatsTo(
3131 LayoutBlock* to_block, 3131 LayoutBlock* to_block,
3132 bool full_remove_insert) { 3132 bool full_remove_insert) {
3133 LayoutBlockFlow* to_block_flow = ToLayoutBlockFlow(to_block); 3133 LayoutBlockFlow* to_block_flow = ToLayoutBlockFlow(to_block);
3134 MoveAllChildrenTo(to_block_flow, full_remove_insert);
3135 3134
3136 // When a portion of the layout tree is being detached, anonymous blocks 3135 // When a portion of the layout tree is being detached, anonymous blocks
3137 // will be combined as their children are deleted. In this process, the 3136 // will be combined as their children are deleted. In this process, the
3138 // anonymous block later in the tree is merged into the one preceding it. 3137 // anonymous block later in the tree is merged into the one preceding it.
3139 // It can happen that the later block (this) contains floats that the 3138 // It can happen that the later block (this) contains floats that the
3140 // previous block (toBlockFlow) did not contain, and thus are not in the 3139 // previous block (toBlockFlow) did not contain, and thus are not in the
3141 // floating objects list for toBlockFlow. This can result in toBlockFlow 3140 // floating objects list for toBlockFlow. This can result in toBlockFlow
3142 // containing floats that are not in it's floating objects list, but are in 3141 // containing floats that are not in it's floating objects list, but are in
3143 // the floating objects lists of siblings and parents. This can cause problems 3142 // the floating objects lists of siblings and parents. This can cause problems
3144 // when the float itself is deleted, since the deletion code assumes that if a 3143 // when the float itself is deleted, since the deletion code assumes that if a
(...skipping 17 matching lines...) Expand all
3162 it != end; ++it) { 3161 it != end; ++it) {
3163 const FloatingObject& floating_object = *it->get(); 3162 const FloatingObject& floating_object = *it->get();
3164 3163
3165 // Don't insert the object again if it's already in the list 3164 // Don't insert the object again if it's already in the list
3166 if (to_block_flow->ContainsFloat(floating_object.GetLayoutObject())) 3165 if (to_block_flow->ContainsFloat(floating_object.GetLayoutObject()))
3167 continue; 3166 continue;
3168 3167
3169 to_block_flow->floating_objects_->Add(floating_object.UnsafeClone()); 3168 to_block_flow->floating_objects_->Add(floating_object.UnsafeClone());
3170 } 3169 }
3171 } 3170 }
3171 MoveAllChildrenTo(to_block_flow, full_remove_insert);
rhogan 2017/05/05 19:04:07 If full_remove_insert is true, the object's floatl
3172 } 3172 }
3173 3173
3174 void LayoutBlockFlow::ChildBecameFloatingOrOutOfFlow(LayoutBox* child) { 3174 void LayoutBlockFlow::ChildBecameFloatingOrOutOfFlow(LayoutBox* child) {
3175 MakeChildrenInlineIfPossible(); 3175 MakeChildrenInlineIfPossible();
3176 3176
3177 // Reparent the child to an adjacent anonymous block if one is available. 3177 // Reparent the child to an adjacent anonymous block if one is available.
3178 LayoutObject* prev = child->PreviousSibling(); 3178 LayoutObject* prev = child->PreviousSibling();
3179 if (prev && prev->IsAnonymousBlock() && prev->IsLayoutBlockFlow()) { 3179 if (prev && prev->IsAnonymousBlock() && prev->IsLayoutBlockFlow()) {
3180 LayoutBlockFlow* new_container = ToLayoutBlockFlow(prev); 3180 LayoutBlockFlow* new_container = ToLayoutBlockFlow(prev);
3181 MoveChildTo(new_container, child, nullptr, false); 3181 MoveChildTo(new_container, child, nullptr, false);
(...skipping 1487 matching lines...) Expand 10 before | Expand all | Expand 10 after
4669 return LayoutBlock::DeprecatedInvalidatePaint(paint_invalidation_state); 4669 return LayoutBlock::DeprecatedInvalidatePaint(paint_invalidation_state);
4670 } 4670 }
4671 4671
4672 void LayoutBlockFlow::InvalidateDisplayItemClients( 4672 void LayoutBlockFlow::InvalidateDisplayItemClients(
4673 PaintInvalidationReason invalidation_reason) const { 4673 PaintInvalidationReason invalidation_reason) const {
4674 BlockFlowPaintInvalidator(*this).InvalidateDisplayItemClients( 4674 BlockFlowPaintInvalidator(*this).InvalidateDisplayItemClients(
4675 invalidation_reason); 4675 invalidation_reason);
4676 } 4676 }
4677 4677
4678 } // namespace blink 4678 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698