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

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

Issue 2692853016: Change PaintLayer::m_layoutObject to a reference. (Closed)
Patch Set: Added TODO Created 3 years, 10 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) 2012 Apple Inc. All rights reserved. 2 * Copyright (C) 2012 Apple 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 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
183 AutoReset<size_t> positionChange(&m_insertionPosition, m_mapping.size()); 183 AutoReset<size_t> positionChange(&m_insertionPosition, m_mapping.size());
184 do { 184 do {
185 layoutObject = 185 layoutObject =
186 layoutObject->pushMappingToContainer(ancestorLayoutObject, *this); 186 layoutObject->pushMappingToContainer(ancestorLayoutObject, *this);
187 } while (layoutObject && layoutObject != ancestorLayoutObject); 187 } while (layoutObject && layoutObject != ancestorLayoutObject);
188 188
189 ASSERT(m_mapping.isEmpty() || 189 ASSERT(m_mapping.isEmpty() ||
190 isTopmostLayoutView(m_mapping[0].m_layoutObject)); 190 isTopmostLayoutView(m_mapping[0].m_layoutObject));
191 } 191 }
192 192
193 static bool canMapBetweenLayoutObjects(const LayoutObject* layoutObject, 193 static bool canMapBetweenLayoutObjects(const LayoutObject& layoutObject,
194 const LayoutObject* ancestor) { 194 const LayoutObject& ancestor) {
195 for (const LayoutObject* current = layoutObject;; 195 for (const LayoutObject* current = &layoutObject;;
196 current = current->parent()) { 196 current = current->parent()) {
197 const ComputedStyle& style = current->styleRef(); 197 const ComputedStyle& style = current->styleRef();
198 if (style.position() == EPosition::kFixed || 198 if (style.position() == EPosition::kFixed ||
199 style.isFlippedBlocksWritingMode()) 199 style.isFlippedBlocksWritingMode())
200 return false; 200 return false;
201 201
202 if (current->style()->canContainFixedPositionObjects() || 202 if (current->style()->canContainFixedPositionObjects() ||
203 current->isLayoutFlowThread() || current->isSVGRoot()) 203 current->isLayoutFlowThread() || current->isSVGRoot())
204 return false; 204 return false;
205 205
206 if (current == ancestor) 206 if (current == &ancestor)
207 break; 207 break;
208 208
209 if (current->isFloatingWithNonContainingBlockParent()) 209 if (current->isFloatingWithNonContainingBlockParent())
210 return false; 210 return false;
211 } 211 }
212 212
213 return true; 213 return true;
214 } 214 }
215 215
216 void LayoutGeometryMap::pushMappingsToAncestor( 216 void LayoutGeometryMap::pushMappingsToAncestor(
217 const PaintLayer* layer, 217 const PaintLayer* layer,
218 const PaintLayer* ancestorLayer) { 218 const PaintLayer* ancestorLayer) {
219 const LayoutObject* layoutObject = layer->layoutObject(); 219 const LayoutObject& layoutObject = layer->layoutObject();
220 220
221 bool crossDocument = 221 bool crossDocument =
222 ancestorLayer && 222 ancestorLayer &&
223 layer->layoutObject()->frame() != ancestorLayer->layoutObject()->frame(); 223 layoutObject.frame() != ancestorLayer->layoutObject().frame();
224 ASSERT(!crossDocument || m_mapCoordinatesFlags & TraverseDocumentBoundaries); 224 ASSERT(!crossDocument || m_mapCoordinatesFlags & TraverseDocumentBoundaries);
225 225
226 // We have to visit all the layoutObjects to detect flipped blocks. This might 226 // We have to visit all the layoutObjects to detect flipped blocks. This might
227 // defeat the gains from mapping via layers. 227 // defeat the gains from mapping via layers.
228 bool canConvertInLayerTree = 228 bool canConvertInLayerTree =
229 (ancestorLayer && !crossDocument) 229 (ancestorLayer && !crossDocument)
230 ? canMapBetweenLayoutObjects(layer->layoutObject(), 230 ? canMapBetweenLayoutObjects(layoutObject,
231 ancestorLayer->layoutObject()) 231 ancestorLayer->layoutObject())
232 : false; 232 : false;
233 233
234 LAYOUT_GEOMETRY_MAP_LOG( 234 LAYOUT_GEOMETRY_MAP_LOG(
235 "LayoutGeometryMap::pushMappingsToAncestor from layer %p to layer %p, " 235 "LayoutGeometryMap::pushMappingsToAncestor from layer %p to layer %p, "
236 "canConvertInLayerTree=%d\n", 236 "canConvertInLayerTree=%d\n",
237 layer, ancestorLayer, canConvertInLayerTree); 237 layer, ancestorLayer, canConvertInLayerTree);
238 238
239 if (canConvertInLayerTree) { 239 if (canConvertInLayerTree) {
240 LayoutPoint layerOffset; 240 LayoutPoint layerOffset;
241 layer->convertToLayerCoords(ancestorLayer, layerOffset); 241 layer->convertToLayerCoords(ancestorLayer, layerOffset);
242 242
243 // The LayoutView must be pushed first. 243 // The LayoutView must be pushed first.
244 if (!m_mapping.size()) { 244 if (!m_mapping.size()) {
245 ASSERT(ancestorLayer->layoutObject()->isLayoutView()); 245 DCHECK(ancestorLayer->layoutObject().isLayoutView());
246 pushMappingsToAncestor(ancestorLayer->layoutObject(), 0); 246 pushMappingsToAncestor(&ancestorLayer->layoutObject(), 0);
247 } 247 }
248 248
249 AutoReset<size_t> positionChange(&m_insertionPosition, m_mapping.size()); 249 AutoReset<size_t> positionChange(&m_insertionPosition, m_mapping.size());
250 bool accumulatingTransform = 250 bool accumulatingTransform =
251 layer->layoutObject()->style()->preserves3D() || 251 layoutObject.style()->preserves3D() ||
252 ancestorLayer->layoutObject()->style()->preserves3D(); 252 ancestorLayer->layoutObject().style()->preserves3D();
253 push(layoutObject, toLayoutSize(layerOffset), 253 push(&layoutObject, toLayoutSize(layerOffset),
254 accumulatingTransform ? AccumulatingTransform : 0); 254 accumulatingTransform ? AccumulatingTransform : 0);
255 return; 255 return;
256 } 256 }
257 const LayoutBoxModelObject* ancestorLayoutObject = 257 const LayoutBoxModelObject* ancestorLayoutObject =
258 ancestorLayer ? ancestorLayer->layoutObject() : 0; 258 ancestorLayer ? &ancestorLayer->layoutObject() : 0;
259 pushMappingsToAncestor(layoutObject, ancestorLayoutObject); 259 pushMappingsToAncestor(&layoutObject, ancestorLayoutObject);
260 } 260 }
261 261
262 void LayoutGeometryMap::push(const LayoutObject* layoutObject, 262 void LayoutGeometryMap::push(const LayoutObject* layoutObject,
263 const LayoutSize& offsetFromContainer, 263 const LayoutSize& offsetFromContainer,
264 GeometryInfoFlags flags, 264 GeometryInfoFlags flags,
265 LayoutSize offsetForFixedPosition) { 265 LayoutSize offsetForFixedPosition) {
266 LAYOUT_GEOMETRY_MAP_LOG("LayoutGeometryMap::push %p %d,%d isNonUniform=%d\n", 266 LAYOUT_GEOMETRY_MAP_LOG("LayoutGeometryMap::push %p %d,%d isNonUniform=%d\n",
267 layoutObject, offsetFromContainer.width().toInt(), 267 layoutObject, offsetFromContainer.width().toInt(),
268 offsetFromContainer.height().toInt(), isNonUniform); 268 offsetFromContainer.height().toInt(), isNonUniform);
269 269
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
321 } 321 }
322 if (UNLIKELY(mightBeSaturated)) { 322 if (UNLIKELY(mightBeSaturated)) {
323 m_accumulatedOffset = LayoutSize(); 323 m_accumulatedOffset = LayoutSize();
324 for (const auto& step : m_mapping) 324 for (const auto& step : m_mapping)
325 m_accumulatedOffset += step.m_offset; 325 m_accumulatedOffset += step.m_offset;
326 } 326 }
327 } 327 }
328 328
329 void LayoutGeometryMap::popMappingsToAncestor(const PaintLayer* ancestorLayer) { 329 void LayoutGeometryMap::popMappingsToAncestor(const PaintLayer* ancestorLayer) {
330 const LayoutBoxModelObject* ancestorLayoutObject = 330 const LayoutBoxModelObject* ancestorLayoutObject =
331 ancestorLayer ? ancestorLayer->layoutObject() : 0; 331 ancestorLayer ? &ancestorLayer->layoutObject() : 0;
332 popMappingsToAncestor(ancestorLayoutObject); 332 popMappingsToAncestor(ancestorLayoutObject);
333 } 333 }
334 334
335 void LayoutGeometryMap::stepInserted(const LayoutGeometryMapStep& step) { 335 void LayoutGeometryMap::stepInserted(const LayoutGeometryMapStep& step) {
336 m_accumulatedOffset += step.m_offset; 336 m_accumulatedOffset += step.m_offset;
337 337
338 if (step.m_flags & IsNonUniform) 338 if (step.m_flags & IsNonUniform)
339 ++m_nonUniformStepsCount; 339 ++m_nonUniformStepsCount;
340 340
341 if (step.m_transform) 341 if (step.m_transform)
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
373 // If we're not working with multiple LayoutViews, then any view is considered 373 // If we're not working with multiple LayoutViews, then any view is considered
374 // "topmost" (to preserve original behavior). 374 // "topmost" (to preserve original behavior).
375 if (!(m_mapCoordinatesFlags & TraverseDocumentBoundaries)) 375 if (!(m_mapCoordinatesFlags & TraverseDocumentBoundaries))
376 return true; 376 return true;
377 377
378 return layoutObject->frame()->isMainFrame(); 378 return layoutObject->frame()->isMainFrame();
379 } 379 }
380 #endif 380 #endif
381 381
382 } // namespace blink 382 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/layout/LayoutBoxModelObject.cpp ('k') | third_party/WebKit/Source/core/layout/LayoutObject.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698