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

Side by Side Diff: third_party/WebKit/Source/core/paint/PaintLayer.h

Issue 2392443009: reflow comments in core/paint (Closed)
Patch Set: Created 4 years, 2 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) 2003, 2009, 2012 Apple Inc. All rights reserved. 2 * Copyright (C) 2003, 2009, 2012 Apple Inc. All rights reserved.
3 * Copyright (C) 2013 Intel Corporation. All rights reserved. 3 * Copyright (C) 2013 Intel Corporation. All rights reserved.
4 * 4 *
5 * Portions are Copyright (C) 1998 Netscape Communications Corporation. 5 * Portions are Copyright (C) 1998 Netscape Communications Corporation.
6 * 6 *
7 * Other contributors: 7 * Other contributors:
8 * Robert O'Callahan <roc+@cs.cmu.edu> 8 * Robert O'Callahan <roc+@cs.cmu.edu>
9 * David Baron <dbaron@fas.harvard.edu> 9 * David Baron <dbaron@fas.harvard.edu>
10 * Christian Biesinger <cbiesinger@web.de> 10 * Christian Biesinger <cbiesinger@web.de>
11 * Randall Jesup <rjesup@wgate.com> 11 * Randall Jesup <rjesup@wgate.com>
12 * Roland Mainz <roland.mainz@informatik.med.uni-giessen.de> 12 * Roland Mainz <roland.mainz@informatik.med.uni-giessen.de>
13 * Josh Soref <timeless@mac.com> 13 * Josh Soref <timeless@mac.com>
14 * Boris Zbarsky <bzbarsky@mit.edu> 14 * Boris Zbarsky <bzbarsky@mit.edu>
15 * 15 *
16 * This library is free software; you can redistribute it and/or 16 * This library is free software; you can redistribute it and/or
17 * modify it under the terms of the GNU Lesser General Public 17 * modify it under the terms of the GNU Lesser General Public
18 * License as published by the Free Software Foundation; either 18 * License as published by the Free Software Foundation; either
19 * version 2.1 of the License, or (at your option) any later version. 19 * version 2.1 of the License, or (at your option) any later version.
20 * 20 *
21 * This library is distributed in the hope that it will be useful, 21 * This library is distributed in the hope that it will be useful,
22 * but WITHOUT ANY WARRANTY; without even the implied warranty of 22 * but WITHOUT ANY WARRANTY; without even the implied warranty of
23 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 23 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
24 * Lesser General Public License for more details. 24 * Lesser General Public License for more details.
25 * 25 *
26 * You should have received a copy of the GNU Lesser General Public 26 * You should have received a copy of the GNU Lesser General Public
27 * License along with this library; if not, write to the Free Software 27 * License along with this library; if not, write to the Free Software
28 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 US A 28 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
29 * 29 *
30 * Alternatively, the contents of this file may be used under the terms 30 * Alternatively, the contents of this file may be used under the terms
31 * of either the Mozilla Public License Version 1.1, found at 31 * of either the Mozilla Public License Version 1.1, found at
32 * http://www.mozilla.org/MPL/ (the "MPL") or the GNU General Public 32 * http://www.mozilla.org/MPL/ (the "MPL") or the GNU General Public
33 * License Version 2.0, found at http://www.fsf.org/copyleft/gpl.html 33 * License Version 2.0, found at http://www.fsf.org/copyleft/gpl.html
34 * (the "GPL"), in which case the provisions of the MPL or the GPL are 34 * (the "GPL"), in which case the provisions of the MPL or the GPL are
35 * applicable instead of those above. If you wish to allow use of your 35 * applicable instead of those above. If you wish to allow use of your
36 * version of this file only under the terms of one of those two 36 * version of this file only under the terms of one of those two
37 * licenses (the MPL or the GPL) and not to allow others to use your 37 * licenses (the MPL or the GPL) and not to allow others to use your
38 * version of this file under the LGPL, indicate your decision by 38 * version of this file under the LGPL, indicate your decision by
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
96 96
97 struct PaintLayerRareData { 97 struct PaintLayerRareData {
98 PaintLayerRareData(); 98 PaintLayerRareData();
99 ~PaintLayerRareData(); 99 ~PaintLayerRareData();
100 100
101 // Our current relative position offset. 101 // Our current relative position offset.
102 LayoutSize offsetForInFlowPosition; 102 LayoutSize offsetForInFlowPosition;
103 103
104 std::unique_ptr<TransformationMatrix> transform; 104 std::unique_ptr<TransformationMatrix> transform;
105 105
106 // Pointer to the enclosing Layer that caused us to be paginated. It is 0 if w e are not paginated. 106 // Pointer to the enclosing Layer that caused us to be paginated. It is 0 if
107 // we are not paginated.
107 // 108 //
108 // See LayoutMultiColumnFlowThread and 109 // See LayoutMultiColumnFlowThread and
109 // https://sites.google.com/a/chromium.org/dev/developers/design-documents/mul ti-column-layout 110 // https://sites.google.com/a/chromium.org/dev/developers/design-documents/mul ti-column-layout
110 // for more information about the multicol implementation. It's important to u nderstand the 111 // for more information about the multicol implementation. It's important to
111 // difference between flow thread coordinates and visual coordinates when work ing with multicol 112 // understand the difference between flow thread coordinates and visual
112 // in Layer, since Layer is one of the few places where we have to worry about the 113 // coordinates when working with multicol in Layer, since Layer is one of the
113 // visual ones. Internally we try to use flow-thread coordinates whenever poss ible. 114 // few places where we have to worry about the visual ones. Internally we try
115 // to use flow-thread coordinates whenever possible.
114 PaintLayer* enclosingPaginationLayer; 116 PaintLayer* enclosingPaginationLayer;
115 117
116 // These compositing reasons are updated whenever style changes, not while upd ating compositing layers. 118 // These compositing reasons are updated whenever style changes, not while
117 // They should not be used to infer the compositing state of this layer. 119 // updating compositing layers. They should not be used to infer the
120 // compositing state of this layer.
118 CompositingReasons potentialCompositingReasonsFromStyle; 121 CompositingReasons potentialCompositingReasonsFromStyle;
119 122
120 // Once computed, indicates all that a layer needs to become composited using the CompositingReasons enum bitfield. 123 // Once computed, indicates all that a layer needs to become composited using
124 // the CompositingReasons enum bitfield.
121 CompositingReasons compositingReasons; 125 CompositingReasons compositingReasons;
122 126
123 // This captures reasons why a paint layer might be forced to be separately 127 // This captures reasons why a paint layer might be forced to be separately
124 // composited rather than sharing a backing with another layer. 128 // composited rather than sharing a backing with another layer.
125 SquashingDisallowedReasons squashingDisallowedReasons; 129 SquashingDisallowedReasons squashingDisallowedReasons;
126 130
127 // If the layer paints into its own backings, this keeps track of the backings . 131 // If the layer paints into its own backings, this keeps track of the
128 // It's nullptr if the layer is not composited or paints into grouped backing. 132 // backings. It's nullptr if the layer is not composited or paints into
133 // grouped backing.
129 std::unique_ptr<CompositedLayerMapping> compositedLayerMapping; 134 std::unique_ptr<CompositedLayerMapping> compositedLayerMapping;
130 135
131 // If the layer paints into grouped backing (i.e. squashed), this points to th e 136 // If the layer paints into grouped backing (i.e. squashed), this points to
132 // grouped CompositedLayerMapping. It's null if the layer is not composited or 137 // the grouped CompositedLayerMapping. It's null if the layer is not
133 // paints into its own backing. 138 // composited or paints into its own backing.
134 CompositedLayerMapping* groupedMapping; 139 CompositedLayerMapping* groupedMapping;
135 140
136 Persistent<PaintLayerFilterInfo> filterInfo; 141 Persistent<PaintLayerFilterInfo> filterInfo;
137 142
138 // The accumulated subpixel offset of a composited layer's composited bounds c ompared to absolute coordinates. 143 // The accumulated subpixel offset of a composited layer's composited bounds
144 // compared to absolute coordinates.
139 LayoutSize subpixelAccumulation; 145 LayoutSize subpixelAccumulation;
140 }; 146 };
141 147
142 // PaintLayer is an old object that handles lots of unrelated operations. 148 // PaintLayer is an old object that handles lots of unrelated operations.
143 // 149 //
144 // We want it to die at some point and be replaced by more focused objects, 150 // We want it to die at some point and be replaced by more focused objects,
145 // which would remove (or at least compartimentalize) a lot of complexity. 151 // which would remove (or at least compartimentalize) a lot of complexity.
146 // See the STATUS OF PAINTLAYER section below. 152 // See the STATUS OF PAINTLAYER section below.
147 // 153 //
148 // The class is central to painting and hit-testing. That's because it handles 154 // The class is central to painting and hit-testing. That's because it handles
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
222 return m_layoutObject && m_layoutObject->isBox() 228 return m_layoutObject && m_layoutObject->isBox()
223 ? toLayoutBox(m_layoutObject) 229 ? toLayoutBox(m_layoutObject)
224 : 0; 230 : 0;
225 } 231 }
226 PaintLayer* parent() const { return m_parent; } 232 PaintLayer* parent() const { return m_parent; }
227 PaintLayer* previousSibling() const { return m_previous; } 233 PaintLayer* previousSibling() const { return m_previous; }
228 PaintLayer* nextSibling() const { return m_next; } 234 PaintLayer* nextSibling() const { return m_next; }
229 PaintLayer* firstChild() const { return m_first; } 235 PaintLayer* firstChild() const { return m_first; }
230 PaintLayer* lastChild() const { return m_last; } 236 PaintLayer* lastChild() const { return m_last; }
231 237
232 // TODO(wangxianzhu): Find a better name for it. 'paintContainer' might be goo d but 238 // TODO(wangxianzhu): Find a better name for it. 'paintContainer' might be
233 // we can't use it for now because it conflicts with PaintInfo::paintContainer . 239 // good but we can't use it for now because it conflicts with
240 // PaintInfo::paintContainer.
234 PaintLayer* compositingContainer() const; 241 PaintLayer* compositingContainer() const;
235 242
236 void addChild(PaintLayer* newChild, PaintLayer* beforeChild = 0); 243 void addChild(PaintLayer* newChild, PaintLayer* beforeChild = 0);
237 PaintLayer* removeChild(PaintLayer*); 244 PaintLayer* removeChild(PaintLayer*);
238 245
239 void removeOnlyThisLayerAfterStyleChange(); 246 void removeOnlyThisLayerAfterStyleChange();
240 void insertOnlyThisLayerAfterStyleChange(); 247 void insertOnlyThisLayerAfterStyleChange();
241 248
242 void styleDidChange(StyleDifference, const ComputedStyle* oldStyle); 249 void styleDidChange(StyleDifference, const ComputedStyle* oldStyle);
243 250
244 // FIXME: Many people call this function while it has out-of-date information. 251 // FIXME: Many people call this function while it has out-of-date information.
245 bool isSelfPaintingLayer() const { return m_isSelfPaintingLayer; } 252 bool isSelfPaintingLayer() const { return m_isSelfPaintingLayer; }
246 253
247 // PaintLayers which represent LayoutParts may become self-painting due to bei ng composited. 254 // PaintLayers which represent LayoutParts may become self-painting due to
248 // If this is the case, this method returns true. 255 // being composited. If this is the case, this method returns true.
249 bool isSelfPaintingOnlyBecauseIsCompositedPart() const; 256 bool isSelfPaintingOnlyBecauseIsCompositedPart() const;
250 257
251 bool isTransparent() const { 258 bool isTransparent() const {
252 return layoutObject()->isTransparent() || 259 return layoutObject()->isTransparent() ||
253 layoutObject()->style()->hasBlendMode() || layoutObject()->hasMask(); 260 layoutObject()->style()->hasBlendMode() || layoutObject()->hasMask();
254 } 261 }
255 262
256 const PaintLayer* root() const { 263 const PaintLayer* root() const {
257 const PaintLayer* curr = this; 264 const PaintLayer* curr = this;
258 while (curr->parent()) 265 while (curr->parent())
259 curr = curr->parent(); 266 curr = curr->parent();
260 return curr; 267 return curr;
261 } 268 }
262 269
263 const LayoutPoint& location() const { 270 const LayoutPoint& location() const {
264 ASSERT(!m_needsPositionUpdate); 271 ASSERT(!m_needsPositionUpdate);
265 return m_location; 272 return m_location;
266 } 273 }
267 // FIXME: size() should ASSERT(!m_needsPositionUpdate) as well, but that fails in some tests, 274 // FIXME: size() should ASSERT(!m_needsPositionUpdate) as well, but that fails
268 // for example, fast/repaint/clipped-relative.html. 275 // in some tests, for example, fast/repaint/clipped-relative.html.
269 const IntSize& size() const { return m_size; } 276 const IntSize& size() const { return m_size; }
270 void setSizeHackForLayoutTreeAsText(const IntSize& size) { m_size = size; } 277 void setSizeHackForLayoutTreeAsText(const IntSize& size) { m_size = size; }
271 278
272 LayoutRect rect() const { return LayoutRect(location(), LayoutSize(size())); } 279 LayoutRect rect() const { return LayoutRect(location(), LayoutSize(size())); }
273 280
274 bool isRootLayer() const { return m_isRootLayer; } 281 bool isRootLayer() const { return m_isRootLayer; }
275 282
276 PaintLayerCompositor* compositor() const; 283 PaintLayerCompositor* compositor() const;
277 284
278 // Notification from the layoutObject that its content changed (e.g. current f rame of image changed). 285 // Notification from the layoutObject that its content changed (e.g. current
279 // Allows updates of layer content without invalidating paint. 286 // frame of image changed). Allows updates of layer content without
287 // invalidating paint.
280 void contentChanged(ContentChangeType); 288 void contentChanged(ContentChangeType);
281 289
282 void updateLayerPosition(); 290 void updateLayerPosition();
283 291
284 void updateLayerPositionsAfterLayout(); 292 void updateLayerPositionsAfterLayout();
285 void updateLayerPositionsAfterOverflowScroll(const DoubleSize& scrollDelta); 293 void updateLayerPositionsAfterOverflowScroll(const DoubleSize& scrollDelta);
286 294
287 PaintLayer* enclosingPaginationLayer() const { 295 PaintLayer* enclosingPaginationLayer() const {
288 return m_rareData ? m_rareData->enclosingPaginationLayer : nullptr; 296 return m_rareData ? m_rareData->enclosingPaginationLayer : nullptr;
289 } 297 }
290 298
291 void updateTransformationMatrix(); 299 void updateTransformationMatrix();
292 PaintLayer* renderingContextRoot(); 300 PaintLayer* renderingContextRoot();
293 const PaintLayer* renderingContextRoot() const; 301 const PaintLayer* renderingContextRoot() const;
294 302
295 LayoutSize offsetForInFlowPosition() const { 303 LayoutSize offsetForInFlowPosition() const {
296 return m_rareData ? m_rareData->offsetForInFlowPosition : LayoutSize(); 304 return m_rareData ? m_rareData->offsetForInFlowPosition : LayoutSize();
297 } 305 }
298 306
299 PaintLayerStackingNode* stackingNode() { return m_stackingNode.get(); } 307 PaintLayerStackingNode* stackingNode() { return m_stackingNode.get(); }
300 const PaintLayerStackingNode* stackingNode() const { 308 const PaintLayerStackingNode* stackingNode() const {
301 return m_stackingNode.get(); 309 return m_stackingNode.get();
302 } 310 }
303 311
304 bool subtreeIsInvisible() const { 312 bool subtreeIsInvisible() const {
305 return !hasVisibleContent() && !hasVisibleDescendant(); 313 return !hasVisibleContent() && !hasVisibleDescendant();
306 } 314 }
307 315
308 // FIXME: hasVisibleContent() should call updateDescendantDependentFlags() if m_isVisibleContentDirty. 316 // FIXME: hasVisibleContent() should call updateDescendantDependentFlags() if
317 // m_isVisibleContentDirty.
309 bool hasVisibleContent() const { 318 bool hasVisibleContent() const {
310 DCHECK(!m_isVisibleContentDirty); 319 DCHECK(!m_isVisibleContentDirty);
311 return m_hasVisibleContent; 320 return m_hasVisibleContent;
312 } 321 }
313 322
314 // FIXME: hasVisibleDescendant() should call updateDescendantDependentFlags() if m_isVisibleDescendantDirty. 323 // FIXME: hasVisibleDescendant() should call updateDescendantDependentFlags()
324 // if m_isVisibleDescendantDirty.
315 bool hasVisibleDescendant() const { 325 bool hasVisibleDescendant() const {
316 DCHECK(!m_isVisibleDescendantDirty); 326 DCHECK(!m_isVisibleDescendantDirty);
317 return m_hasVisibleDescendant; 327 return m_hasVisibleDescendant;
318 } 328 }
319 329
320 void dirtyVisibleContentStatus(); 330 void dirtyVisibleContentStatus();
321 void potentiallyDirtyVisibleContentStatus(EVisibility); 331 void potentiallyDirtyVisibleContentStatus(EVisibility);
322 332
323 bool hasBoxDecorationsOrBackground() const; 333 bool hasBoxDecorationsOrBackground() const;
324 bool hasVisibleBoxDecorations() const; 334 bool hasVisibleBoxDecorations() const;
325 // True if this layer container layoutObjects that paint. 335 // True if this layer container layoutObjects that paint.
326 bool hasNonEmptyChildLayoutObjects() const; 336 bool hasNonEmptyChildLayoutObjects() const;
327 337
328 // Will ensure that isAllScrollingContentComposited() is up to date. 338 // Will ensure that isAllScrollingContentComposited() is up to date.
329 void updateScrollingStateAfterCompositingChange(); 339 void updateScrollingStateAfterCompositingChange();
330 bool isAllScrollingContentComposited() const { 340 bool isAllScrollingContentComposited() const {
331 return m_isAllScrollingContentComposited; 341 return m_isAllScrollingContentComposited;
332 } 342 }
333 343
334 // Gets the ancestor layer that serves as the containing block of this layer. This is either 344 // Gets the ancestor layer that serves as the containing block of this layer.
335 // another out of flow positioned layer, or one that contains paint. 345 // This is either another out of flow positioned layer, or one that contains
336 // If |ancestor| is specified, |*skippedAncestor| will be set to true if |ance stor| is found in 346 // paint. If |ancestor| is specified, |*skippedAncestor| will be set to true
337 // the ancestry chain between this layer and the containing block layer; if no t found, it will 347 // if |ancestor| is found in the ancestry chain between this layer and the
338 // be set to false. Either both |ancestor| and |skippedAncestor| should be nul lptr, or none of 348 // containing block layer; if not found, it will be set to false. Either both
339 // them should. 349 // |ancestor| and |skippedAncestor| should be nullptr, or none of them should.
340 PaintLayer* containingLayerForOutOfFlowPositioned( 350 PaintLayer* containingLayerForOutOfFlowPositioned(
341 const PaintLayer* ancestor = nullptr, 351 const PaintLayer* ancestor = nullptr,
342 bool* skippedAncestor = nullptr) const; 352 bool* skippedAncestor = nullptr) const;
343 353
344 bool isPaintInvalidationContainer() const; 354 bool isPaintInvalidationContainer() const;
345 355
346 // Do *not* call this method unless you know what you are dooing. You probably want to call enclosingCompositingLayerForPaintInvalidation() instead. 356 // Do *not* call this method unless you know what you are dooing. You probably
357 // want to call enclosingCompositingLayerForPaintInvalidation() instead.
347 // If includeSelf is true, may return this. 358 // If includeSelf is true, may return this.
348 PaintLayer* enclosingLayerWithCompositedLayerMapping(IncludeSelfOrNot) const; 359 PaintLayer* enclosingLayerWithCompositedLayerMapping(IncludeSelfOrNot) const;
349 360
350 // Returns the enclosing layer root into which this layer paints, inclusive of this one. Note that the enclosing layer may or may not have its own 361 // Returns the enclosing layer root into which this layer paints, inclusive of
351 // GraphicsLayer backing, but is nevertheless the root for a call to the Layer ::paint*() methods. 362 // this one. Note that the enclosing layer may or may not have its own
363 // GraphicsLayer backing, but is nevertheless the root for a call to the
364 // Layer::paint*() methods.
352 PaintLayer* enclosingLayerForPaintInvalidation() const; 365 PaintLayer* enclosingLayerForPaintInvalidation() const;
353 366
354 PaintLayer* enclosingLayerForPaintInvalidationCrossingFrameBoundaries() const; 367 PaintLayer* enclosingLayerForPaintInvalidationCrossingFrameBoundaries() const;
355 368
356 bool hasAncestorWithFilterThatMovesPixels() const; 369 bool hasAncestorWithFilterThatMovesPixels() const;
357 370
358 bool canUseConvertToLayerCoords() const { 371 bool canUseConvertToLayerCoords() const {
359 // These LayoutObjects have an impact on their layers without the layoutObje cts knowing about it. 372 // These LayoutObjects have an impact on their layers without the
373 // layoutObjects knowing about it.
360 return !layoutObject()->hasTransformRelatedProperty() && 374 return !layoutObject()->hasTransformRelatedProperty() &&
361 !layoutObject()->isSVGRoot(); 375 !layoutObject()->isSVGRoot();
362 } 376 }
363 377
364 void convertToLayerCoords(const PaintLayer* ancestorLayer, 378 void convertToLayerCoords(const PaintLayer* ancestorLayer,
365 LayoutPoint&) const; 379 LayoutPoint&) const;
366 void convertToLayerCoords(const PaintLayer* ancestorLayer, LayoutRect&) const; 380 void convertToLayerCoords(const PaintLayer* ancestorLayer, LayoutRect&) const;
367 381
368 // Does the same as convertToLayerCoords() when not in multicol. For multicol, however, 382 // Does the same as convertToLayerCoords() when not in multicol. For multicol,
369 // convertToLayerCoords() calculates the offset in flow-thread coordinates (wh at the layout 383 // however, convertToLayerCoords() calculates the offset in flow-thread
370 // engine uses internally), while this method calculates the visual coordinate s; i.e. it figures 384 // coordinates (what the layout engine uses internally), while this method
371 // out which column the layer starts in and adds in the offset. See 385 // calculates the visual coordinates; i.e. it figures out which column the
372 // http://www.chromium.org/developers/design-documents/multi-column-layout for more info. 386 // layer starts in and adds in the offset. See
387 // http://www.chromium.org/developers/design-documents/multi-column-layout for
388 // more info.
373 LayoutPoint visualOffsetFromAncestor(const PaintLayer* ancestorLayer) const; 389 LayoutPoint visualOffsetFromAncestor(const PaintLayer* ancestorLayer) const;
374 390
375 // Convert a bounding box from flow thread coordinates, relative to |this|, to visual coordinates, relative to |ancestorLayer|. 391 // Convert a bounding box from flow thread coordinates, relative to |this|, to
376 // See http://www.chromium.org/developers/design-documents/multi-column-layout for more info on these coordinate types. 392 // visual coordinates, relative to |ancestorLayer|.
377 // This method requires this layer to be paginated; i.e. it must have an enclo singPaginationLayer(). 393 // See http://www.chromium.org/developers/design-documents/multi-column-layout
394 // for more info on these coordinate types. This method requires this layer
395 // to be paginated; i.e. it must have an enclosingPaginationLayer().
378 void convertFromFlowThreadToVisualBoundingBoxInAncestor( 396 void convertFromFlowThreadToVisualBoundingBoxInAncestor(
379 const PaintLayer* ancestorLayer, 397 const PaintLayer* ancestorLayer,
380 LayoutRect&) const; 398 LayoutRect&) const;
381 399
382 // The hitTest() method looks for mouse events by walking layers that intersec t the point from front to back. 400 // The hitTest() method looks for mouse events by walking layers that
401 // intersect the point from front to back.
383 bool hitTest(HitTestResult&); 402 bool hitTest(HitTestResult&);
384 403
385 bool intersectsDamageRect(const LayoutRect& layerBounds, 404 bool intersectsDamageRect(const LayoutRect& layerBounds,
386 const LayoutRect& damageRect, 405 const LayoutRect& damageRect,
387 const LayoutPoint& offsetFromRoot) const; 406 const LayoutPoint& offsetFromRoot) const;
388 407
389 // MaybeIncludeTransformForAncestorLayer means that a transform on |ancestorLa yer| may be applied to the bounding box, 408 // MaybeIncludeTransformForAncestorLayer means that a transform on
390 // in particular if paintsWithTransform() is true. 409 // |ancestorLayer| may be applied to the bounding box, in particular if
410 // paintsWithTransform() is true.
391 enum CalculateBoundsOptions { 411 enum CalculateBoundsOptions {
392 MaybeIncludeTransformForAncestorLayer, 412 MaybeIncludeTransformForAncestorLayer,
393 NeverIncludeTransformForAncestorLayer, 413 NeverIncludeTransformForAncestorLayer,
394 IncludeTransformsAndCompositedChildLayers, 414 IncludeTransformsAndCompositedChildLayers,
395 }; 415 };
396 416
397 // Bounding box relative to some ancestor layer. Pass offsetFromRoot if known. 417 // Bounding box relative to some ancestor layer. Pass offsetFromRoot if known.
398 LayoutRect physicalBoundingBox(const LayoutPoint& offsetFromRoot) const; 418 LayoutRect physicalBoundingBox(const LayoutPoint& offsetFromRoot) const;
399 LayoutRect physicalBoundingBox(const PaintLayer* ancestorLayer) const; 419 LayoutRect physicalBoundingBox(const PaintLayer* ancestorLayer) const;
400 LayoutRect physicalBoundingBoxIncludingStackingChildren( 420 LayoutRect physicalBoundingBoxIncludingStackingChildren(
401 const LayoutPoint& offsetFromRoot, 421 const LayoutPoint& offsetFromRoot,
402 CalculateBoundsOptions = MaybeIncludeTransformForAncestorLayer) const; 422 CalculateBoundsOptions = MaybeIncludeTransformForAncestorLayer) const;
403 LayoutRect fragmentsBoundingBox(const PaintLayer* ancestorLayer) const; 423 LayoutRect fragmentsBoundingBox(const PaintLayer* ancestorLayer) const;
404 424
405 FloatRect boxForFilter() const; 425 FloatRect boxForFilter() const;
406 LayoutRect boxForClipPath() const; 426 LayoutRect boxForClipPath() const;
407 427
408 LayoutRect boundingBoxForCompositingOverlapTest() const; 428 LayoutRect boundingBoxForCompositingOverlapTest() const;
409 429
410 // If true, this layer's children are included in its bounds for overlap testi ng. 430 // If true, this layer's children are included in its bounds for overlap
411 // We can't rely on the children's positions if this layer has a filter that c ould have moved the children's pixels around. 431 // testing. We can't rely on the children's positions if this layer has a
432 // filter that could have moved the children's pixels around.
412 bool overlapBoundsIncludeChildren() const; 433 bool overlapBoundsIncludeChildren() const;
413 LayoutRect boundingBoxForCompositing( 434 LayoutRect boundingBoxForCompositing(
414 const PaintLayer* ancestorLayer = 0, 435 const PaintLayer* ancestorLayer = 0,
415 CalculateBoundsOptions = MaybeIncludeTransformForAncestorLayer) const; 436 CalculateBoundsOptions = MaybeIncludeTransformForAncestorLayer) const;
416 437
417 LayoutUnit staticInlinePosition() const { return m_staticInlinePosition; } 438 LayoutUnit staticInlinePosition() const { return m_staticInlinePosition; }
418 LayoutUnit staticBlockPosition() const { return m_staticBlockPosition; } 439 LayoutUnit staticBlockPosition() const { return m_staticBlockPosition; }
419 440
420 void setStaticInlinePosition(LayoutUnit position) { 441 void setStaticInlinePosition(LayoutUnit position) {
421 m_staticInlinePosition = position; 442 m_staticInlinePosition = position;
422 } 443 }
423 void setStaticBlockPosition(LayoutUnit position) { 444 void setStaticBlockPosition(LayoutUnit position) {
424 m_staticBlockPosition = position; 445 m_staticBlockPosition = position;
425 } 446 }
426 447
427 LayoutSize subpixelAccumulation() const; 448 LayoutSize subpixelAccumulation() const;
428 void setSubpixelAccumulation(const LayoutSize&); 449 void setSubpixelAccumulation(const LayoutSize&);
429 450
430 bool hasTransformRelatedProperty() const { 451 bool hasTransformRelatedProperty() const {
431 return layoutObject()->hasTransformRelatedProperty(); 452 return layoutObject()->hasTransformRelatedProperty();
432 } 453 }
433 // Note that this transform has the transform-origin baked in. 454 // Note that this transform has the transform-origin baked in.
434 TransformationMatrix* transform() const { 455 TransformationMatrix* transform() const {
435 return m_rareData ? m_rareData->transform.get() : nullptr; 456 return m_rareData ? m_rareData->transform.get() : nullptr;
436 } 457 }
437 458
438 // currentTransform computes a transform which takes accelerated animations in to account. The 459 // currentTransform computes a transform which takes accelerated animations
439 // resulting transform has transform-origin baked in. If the layer does not ha ve a transform, 460 // into account. The resulting transform has transform-origin baked in. If the
440 // returns the identity matrix. 461 // layer does not have a transform, returns the identity matrix.
441 TransformationMatrix currentTransform() const; 462 TransformationMatrix currentTransform() const;
442 TransformationMatrix renderableTransform(GlobalPaintFlags) const; 463 TransformationMatrix renderableTransform(GlobalPaintFlags) const;
443 464
444 // Get the perspective transform, which is applied to transformed sublayers. 465 // Get the perspective transform, which is applied to transformed sublayers.
445 // Returns true if the layer has a -webkit-perspective. 466 // Returns true if the layer has a -webkit-perspective.
446 // Note that this transform does not have the perspective-origin baked in. 467 // Note that this transform does not have the perspective-origin baked in.
447 TransformationMatrix perspectiveTransform() const; 468 TransformationMatrix perspectiveTransform() const;
448 FloatPoint perspectiveOrigin() const; 469 FloatPoint perspectiveOrigin() const;
449 bool preserves3D() const { return layoutObject()->style()->preserves3D(); } 470 bool preserves3D() const { return layoutObject()->style()->preserves3D(); }
450 bool has3DTransform() const { 471 bool has3DTransform() const {
451 return m_rareData && m_rareData->transform && 472 return m_rareData && m_rareData->transform &&
452 !m_rareData->transform->isAffine(); 473 !m_rareData->transform->isAffine();
453 } 474 }
454 475
455 // FIXME: reflections should force transform-style to be flat in the style: ht tps://bugs.webkit.org/show_bug.cgi?id=106959 476 // FIXME: reflections should force transform-style to be flat in the style:
477 // https://bugs.webkit.org/show_bug.cgi?id=106959
456 bool shouldPreserve3D() const { 478 bool shouldPreserve3D() const {
457 return !layoutObject()->hasReflection() && 479 return !layoutObject()->hasReflection() &&
458 layoutObject()->style()->preserves3D(); 480 layoutObject()->style()->preserves3D();
459 } 481 }
460 482
461 void filterNeedsPaintInvalidation(); 483 void filterNeedsPaintInvalidation();
462 484
463 // Returns |true| if any property that renders using filter operations is 485 // Returns |true| if any property that renders using filter operations is
464 // used (including, but not limited to, 'filter' and 'box-reflect'). 486 // used (including, but not limited to, 'filter' and 'box-reflect').
465 bool hasFilterInducingProperty() const { 487 bool hasFilterInducingProperty() const {
466 return layoutObject()->hasFilterInducingProperty(); 488 return layoutObject()->hasFilterInducingProperty();
467 } 489 }
468 490
469 void* operator new(size_t); 491 void* operator new(size_t);
470 // Only safe to call from LayoutBoxModelObject::destroyLayer() 492 // Only safe to call from LayoutBoxModelObject::destroyLayer()
471 void operator delete(void*); 493 void operator delete(void*);
472 494
473 CompositingState compositingState() const; 495 CompositingState compositingState() const;
474 496
475 // This returns true if our document is in a phase of its lifestyle during whi ch 497 // This returns true if our document is in a phase of its lifestyle during
476 // compositing state may legally be read. 498 // which compositing state may legally be read.
477 bool isAllowedToQueryCompositingState() const; 499 bool isAllowedToQueryCompositingState() const;
478 500
479 // Don't null check this. 501 // Don't null check this.
480 // FIXME: Rename. 502 // FIXME: Rename.
481 CompositedLayerMapping* compositedLayerMapping() const; 503 CompositedLayerMapping* compositedLayerMapping() const;
482 GraphicsLayer* graphicsLayerBacking() const; 504 GraphicsLayer* graphicsLayerBacking() const;
483 GraphicsLayer* graphicsLayerBackingForScrolling() const; 505 GraphicsLayer* graphicsLayerBackingForScrolling() const;
484 // Returns true for layers with scrollable overflow which have a background 506 // Returns true for layers with scrollable overflow which have a background
485 // that can be painted into the composited scrolling contents layer when it ex ist 507 // that can be painted into the composited scrolling contents layer when it
486 // (i.e. the background can scroll with the content). When the background is a lso 508 // exist (i.e. the background can scroll with the content). When the
487 // opaque this allows us to composite the scroller even on low DPI as we can 509 // background is also opaque this allows us to composite the scroller even on
488 // draw with subpixel anti-aliasing. 510 // low DPI as we can draw with subpixel anti-aliasing.
489 bool canPaintBackgroundOntoScrollingContentsLayer() const; 511 bool canPaintBackgroundOntoScrollingContentsLayer() const;
490 // NOTE: If you are using hasCompositedLayerMapping to determine the state of compositing for this layer, 512 // NOTE: If you are using hasCompositedLayerMapping to determine the state of
491 // (and not just to do bookkeeping related to the mapping like, say, allocatin g or deallocating a mapping), 513 // compositing for this layer, (and not just to do bookkeeping related to the
492 // then you may have incorrect logic. Use compositingState() instead. 514 // mapping like, say, allocating or deallocating a mapping), then you may have
493 // FIXME: This is identical to null checking compositedLayerMapping(), why not just call that? 515 // incorrect logic. Use compositingState() instead.
516 // FIXME: This is identical to null checking compositedLayerMapping(), why not
517 // just call that?
494 bool hasCompositedLayerMapping() const { 518 bool hasCompositedLayerMapping() const {
495 return m_rareData && m_rareData->compositedLayerMapping; 519 return m_rareData && m_rareData->compositedLayerMapping;
496 } 520 }
497 void ensureCompositedLayerMapping(); 521 void ensureCompositedLayerMapping();
498 void clearCompositedLayerMapping(bool layerBeingDestroyed = false); 522 void clearCompositedLayerMapping(bool layerBeingDestroyed = false);
499 CompositedLayerMapping* groupedMapping() const { 523 CompositedLayerMapping* groupedMapping() const {
500 return m_rareData ? m_rareData->groupedMapping : nullptr; 524 return m_rareData ? m_rareData->groupedMapping : nullptr;
501 } 525 }
502 enum SetGroupMappingOptions { 526 enum SetGroupMappingOptions {
503 InvalidateLayerAndRemoveFromMapping, 527 InvalidateLayerAndRemoveFromMapping,
504 DoNotInvalidateLayerAndRemoveFromMapping 528 DoNotInvalidateLayerAndRemoveFromMapping
505 }; 529 };
506 void setGroupedMapping(CompositedLayerMapping*, SetGroupMappingOptions); 530 void setGroupedMapping(CompositedLayerMapping*, SetGroupMappingOptions);
507 531
508 bool hasCompositedMask() const; 532 bool hasCompositedMask() const;
509 bool hasCompositedClippingMask() const; 533 bool hasCompositedClippingMask() const;
510 bool needsCompositedScrolling() const { 534 bool needsCompositedScrolling() const {
511 return m_scrollableArea && m_scrollableArea->needsCompositedScrolling(); 535 return m_scrollableArea && m_scrollableArea->needsCompositedScrolling();
512 } 536 }
513 537
514 static void mapPointInPaintInvalidationContainerToBacking( 538 static void mapPointInPaintInvalidationContainerToBacking(
515 const LayoutBoxModelObject& paintInvalidationContainer, 539 const LayoutBoxModelObject& paintInvalidationContainer,
516 FloatPoint&); 540 FloatPoint&);
517 static void mapRectInPaintInvalidationContainerToBacking( 541 static void mapRectInPaintInvalidationContainerToBacking(
518 const LayoutBoxModelObject& paintInvalidationContainer, 542 const LayoutBoxModelObject& paintInvalidationContainer,
519 LayoutRect&); 543 LayoutRect&);
520 544
521 // Adjusts the given rect (in the coordinate space of the LayoutObject) to the coordinate space of |paintInvalidationContainer|'s GraphicsLayer backing. 545 // Adjusts the given rect (in the coordinate space of the LayoutObject) to the
522 // Should use PaintInvalidationState::mapRectToPaintInvalidationBacking() inst ead if PaintInvalidationState is available. 546 // coordinate space of |paintInvalidationContainer|'s GraphicsLayer backing.
547 // Should use PaintInvalidationState::mapRectToPaintInvalidationBacking()
548 // instead if PaintInvalidationState is available.
523 static void mapRectToPaintInvalidationBacking( 549 static void mapRectToPaintInvalidationBacking(
524 const LayoutObject&, 550 const LayoutObject&,
525 const LayoutBoxModelObject& paintInvalidationContainer, 551 const LayoutBoxModelObject& paintInvalidationContainer,
526 LayoutRect&); 552 LayoutRect&);
527 553
528 bool paintsWithTransparency(GlobalPaintFlags globalPaintFlags) const { 554 bool paintsWithTransparency(GlobalPaintFlags globalPaintFlags) const {
529 return isTransparent() && 555 return isTransparent() &&
530 ((globalPaintFlags & GlobalPaintFlattenCompositingLayers) || 556 ((globalPaintFlags & GlobalPaintFlattenCompositingLayers) ||
531 compositingState() != PaintsIntoOwnBacking); 557 compositingState() != PaintsIntoOwnBacking);
532 } 558 }
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
575 bool isInTopLayer() const; 601 bool isInTopLayer() const;
576 602
577 bool scrollsWithViewport() const; 603 bool scrollsWithViewport() const;
578 bool scrollsWithRespectTo(const PaintLayer*) const; 604 bool scrollsWithRespectTo(const PaintLayer*) const;
579 605
580 void addLayerHitTestRects(LayerHitTestRects&) const; 606 void addLayerHitTestRects(LayerHitTestRects&) const;
581 607
582 // Compute rects only for this layer 608 // Compute rects only for this layer
583 void computeSelfHitTestRects(LayerHitTestRects&) const; 609 void computeSelfHitTestRects(LayerHitTestRects&) const;
584 610
585 // FIXME: This should probably return a ScrollableArea but a lot of internal m ethods are mistakenly exposed. 611 // FIXME: This should probably return a ScrollableArea but a lot of internal
612 // methods are mistakenly exposed.
586 PaintLayerScrollableArea* getScrollableArea() const { 613 PaintLayerScrollableArea* getScrollableArea() const {
587 return m_scrollableArea.get(); 614 return m_scrollableArea.get();
588 } 615 }
589 616
590 PaintLayerClipper clipper() const { return PaintLayerClipper(*this); } 617 PaintLayerClipper clipper() const { return PaintLayerClipper(*this); }
591 618
592 bool scrollsOverflow() const; 619 bool scrollsOverflow() const;
593 620
594 CompositingReasons potentialCompositingReasonsFromStyle() const { 621 CompositingReasons potentialCompositingReasonsFromStyle() const {
595 return m_rareData ? m_rareData->potentialCompositingReasonsFromStyle 622 return m_rareData ? m_rareData->potentialCompositingReasonsFromStyle
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
785 ASSERT(isAllowedToQueryCompositingState()); 812 ASSERT(isAllowedToQueryCompositingState());
786 return m_shouldIsolateCompositedDescendants; 813 return m_shouldIsolateCompositedDescendants;
787 } 814 }
788 void setShouldIsolateCompositedDescendants(bool); 815 void setShouldIsolateCompositedDescendants(bool);
789 816
790 void updateDescendantDependentFlags(); 817 void updateDescendantDependentFlags();
791 818
792 void updateOrRemoveFilterEffect(); 819 void updateOrRemoveFilterEffect();
793 820
794 void updateSelfPaintingLayer(); 821 void updateSelfPaintingLayer();
795 // This is O(depth) so avoid calling this in loops. Instead use optimizations like 822 // This is O(depth) so avoid calling this in loops. Instead use optimizations
796 // those in PaintInvalidationState. 823 // like those in PaintInvalidationState.
797 PaintLayer* enclosingSelfPaintingLayer(); 824 PaintLayer* enclosingSelfPaintingLayer();
798 825
799 PaintLayer* enclosingTransformedAncestor() const; 826 PaintLayer* enclosingTransformedAncestor() const;
800 LayoutPoint computeOffsetFromTransformedAncestor() const; 827 LayoutPoint computeOffsetFromTransformedAncestor() const;
801 828
802 void didUpdateNeedsCompositedScrolling(); 829 void didUpdateNeedsCompositedScrolling();
803 830
804 bool hasSelfPaintingLayerDescendant() const { 831 bool hasSelfPaintingLayerDescendant() const {
805 if (m_hasSelfPaintingLayerDescendantDirty) 832 if (m_hasSelfPaintingLayerDescendantDirty)
806 updateHasSelfPaintingLayerDescendant(); 833 updateHasSelfPaintingLayerDescendant();
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
850 const PaintLayer* rootLayer, 877 const PaintLayer* rootLayer,
851 TransparencyClipBoxBehavior transparencyBehavior, 878 TransparencyClipBoxBehavior transparencyBehavior,
852 TransparencyClipBoxMode transparencyMode, 879 TransparencyClipBoxMode transparencyMode,
853 const LayoutSize& subPixelAccumulation, 880 const LayoutSize& subPixelAccumulation,
854 GlobalPaintFlags = GlobalPaintNormalPhase); 881 GlobalPaintFlags = GlobalPaintNormalPhase);
855 882
856 bool needsRepaint() const { return m_needsRepaint; } 883 bool needsRepaint() const { return m_needsRepaint; }
857 void setNeedsRepaint(); 884 void setNeedsRepaint();
858 void clearNeedsRepaintRecursively(); 885 void clearNeedsRepaintRecursively();
859 886
860 // These previousXXX() functions are for subsequence caching. They save the pa inting status of the layer 887 // These previousXXX() functions are for subsequence caching. They save the
861 // during the previous painting with subsequence. A painting without subsequen ce [1] doesn't change this status. 888 // painting status of the layer during the previous painting with subsequence.
862 // [1] See shouldCreateSubsequence() in PaintLayerPainter.cpp for the cases we use subsequence when painting a PaintLayer. 889 // A painting without subsequence [1] doesn't change this status. [1] See
890 // shouldCreateSubsequence() in PaintLayerPainter.cpp for the cases we use
891 // subsequence when painting a PaintLayer.
863 892
864 IntSize previousScrollOffsetAccumulationForPainting() const { 893 IntSize previousScrollOffsetAccumulationForPainting() const {
865 return m_previousScrollOffsetAccumulationForPainting; 894 return m_previousScrollOffsetAccumulationForPainting;
866 } 895 }
867 void setPreviousScrollOffsetAccumulationForPainting(const IntSize& s) { 896 void setPreviousScrollOffsetAccumulationForPainting(const IntSize& s) {
868 m_previousScrollOffsetAccumulationForPainting = s; 897 m_previousScrollOffsetAccumulationForPainting = s;
869 } 898 }
870 899
871 ClipRects* previousPaintingClipRects() const { 900 ClipRects* previousPaintingClipRects() const {
872 return m_previousPaintingClipRects.get(); 901 return m_previousPaintingClipRects.get();
873 } 902 }
874 void setPreviousPaintingClipRects(ClipRects& clipRects) { 903 void setPreviousPaintingClipRects(ClipRects& clipRects) {
875 m_previousPaintingClipRects = &clipRects; 904 m_previousPaintingClipRects = &clipRects;
876 } 905 }
877 906
878 LayoutRect previousPaintDirtyRect() const { return m_previousPaintDirtyRect; } 907 LayoutRect previousPaintDirtyRect() const { return m_previousPaintDirtyRect; }
879 void setPreviousPaintDirtyRect(const LayoutRect& rect) { 908 void setPreviousPaintDirtyRect(const LayoutRect& rect) {
880 m_previousPaintDirtyRect = rect; 909 m_previousPaintDirtyRect = rect;
881 } 910 }
882 911
883 PaintLayerPainter::PaintResult previousPaintResult() const { 912 PaintLayerPainter::PaintResult previousPaintResult() const {
884 return static_cast<PaintLayerPainter::PaintResult>(m_previousPaintResult); 913 return static_cast<PaintLayerPainter::PaintResult>(m_previousPaintResult);
885 } 914 }
886 void setPreviousPaintResult(PaintLayerPainter::PaintResult result) { 915 void setPreviousPaintResult(PaintLayerPainter::PaintResult result) {
887 m_previousPaintResult = static_cast<unsigned>(result); 916 m_previousPaintResult = static_cast<unsigned>(result);
888 ASSERT(m_previousPaintResult == static_cast<unsigned>(result)); 917 ASSERT(m_previousPaintResult == static_cast<unsigned>(result));
889 } 918 }
890 919
891 // Used to skip PaintPhaseDescendantOutlinesOnly for layers that have never ha d descendant outlines. 920 // Used to skip PaintPhaseDescendantOutlinesOnly for layers that have never
892 // The flag is set during paint invalidation on a self painting layer if any c ontained object has outline. 921 // had descendant outlines. The flag is set during paint invalidation on a
893 // It's cleared during painting if PaintPhaseDescendantOutlinesOnly painted no thing. 922 // self painting layer if any contained object has outline. It's cleared
923 // during painting if PaintPhaseDescendantOutlinesOnly painted nothing.
894 // For more details, see core/paint/REAME.md#Empty paint phase optimization. 924 // For more details, see core/paint/REAME.md#Empty paint phase optimization.
895 bool needsPaintPhaseDescendantOutlines() const { 925 bool needsPaintPhaseDescendantOutlines() const {
896 return m_needsPaintPhaseDescendantOutlines && 926 return m_needsPaintPhaseDescendantOutlines &&
897 !m_previousPaintPhaseDescendantOutlinesWasEmpty; 927 !m_previousPaintPhaseDescendantOutlinesWasEmpty;
898 } 928 }
899 void setNeedsPaintPhaseDescendantOutlines() { 929 void setNeedsPaintPhaseDescendantOutlines() {
900 DCHECK(isSelfPaintingLayer()); 930 DCHECK(isSelfPaintingLayer());
901 m_needsPaintPhaseDescendantOutlines = true; 931 m_needsPaintPhaseDescendantOutlines = true;
902 m_previousPaintPhaseDescendantOutlinesWasEmpty = false; 932 m_previousPaintPhaseDescendantOutlinesWasEmpty = false;
903 } 933 }
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
1035 1065
1036 bool shouldBeSelfPaintingLayer() const; 1066 bool shouldBeSelfPaintingLayer() const;
1037 1067
1038 // FIXME: We should only create the stacking node if needed. 1068 // FIXME: We should only create the stacking node if needed.
1039 bool requiresStackingNode() const { return true; } 1069 bool requiresStackingNode() const { return true; }
1040 void updateStackingNode(); 1070 void updateStackingNode();
1041 1071
1042 FilterOperations addReflectionToFilterOperations(const ComputedStyle&) const; 1072 FilterOperations addReflectionToFilterOperations(const ComputedStyle&) const;
1043 FilterEffect* updateFilterEffect() const; 1073 FilterEffect* updateFilterEffect() const;
1044 1074
1045 // FIXME: We could lazily allocate our ScrollableArea based on style propertie s ('overflow', ...) 1075 // FIXME: We could lazily allocate our ScrollableArea based on style
1046 // but for now, we are always allocating it for LayoutBox as it's safer. crbug .com/467721. 1076 // properties ('overflow', ...) but for now, we are always allocating it for
1077 // LayoutBox as it's safer. crbug.com/467721.
1047 bool requiresScrollableArea() const { return layoutBox(); } 1078 bool requiresScrollableArea() const { return layoutBox(); }
1048 void updateScrollableArea(); 1079 void updateScrollableArea();
1049 1080
1050 void dirtyAncestorChainVisibleDescendantStatus(); 1081 void dirtyAncestorChainVisibleDescendantStatus();
1051 1082
1052 bool attemptDirectCompositingUpdate(StyleDifference, 1083 bool attemptDirectCompositingUpdate(StyleDifference,
1053 const ComputedStyle* oldStyle); 1084 const ComputedStyle* oldStyle);
1054 void updateTransform(const ComputedStyle* oldStyle, 1085 void updateTransform(const ComputedStyle* oldStyle,
1055 const ComputedStyle& newStyle); 1086 const ComputedStyle& newStyle);
1056 1087
(...skipping 18 matching lines...) Expand all
1075 layer.m_needsPaintPhaseDescendantOutlines; 1106 layer.m_needsPaintPhaseDescendantOutlines;
1076 m_needsPaintPhaseFloat |= layer.m_needsPaintPhaseFloat; 1107 m_needsPaintPhaseFloat |= layer.m_needsPaintPhaseFloat;
1077 m_needsPaintPhaseDescendantBlockBackgrounds |= 1108 m_needsPaintPhaseDescendantBlockBackgrounds |=
1078 layer.m_needsPaintPhaseDescendantBlockBackgrounds; 1109 layer.m_needsPaintPhaseDescendantBlockBackgrounds;
1079 } 1110 }
1080 1111
1081 bool isSelfPaintingLayerForIntrinsicOrScrollingReasons() const; 1112 bool isSelfPaintingLayerForIntrinsicOrScrollingReasons() const;
1082 1113
1083 bool shouldFragmentCompositedBounds(const PaintLayer* compositingLayer) const; 1114 bool shouldFragmentCompositedBounds(const PaintLayer* compositingLayer) const;
1084 1115
1085 // Self-painting layer is an optimization where we avoid the heavy Layer paint ing 1116 // Self-painting layer is an optimization where we avoid the heavy Layer
1086 // machinery for a Layer allocated only to handle the overflow clip case. 1117 // painting machinery for a Layer allocated only to handle the overflow clip
1087 // FIXME(crbug.com/332791): Self-painting layer should be merged into the over flow-only concept. 1118 // case.
1119 // FIXME(crbug.com/332791): Self-painting layer should be merged into the
1120 // overflow-only concept.
1088 unsigned m_isSelfPaintingLayer : 1; 1121 unsigned m_isSelfPaintingLayer : 1;
1089 1122
1090 // If have no self-painting descendants, we don't have to walk our children du ring painting. This can lead to 1123 // If have no self-painting descendants, we don't have to walk our children
1091 // significant savings, especially if the tree has lots of non-self-painting l ayers grouped together (e.g. table cells). 1124 // during painting. This can lead to significant savings, especially if the
1125 // tree has lots of non-self-painting layers grouped together (e.g. table
1126 // cells).
1092 mutable unsigned m_hasSelfPaintingLayerDescendant : 1; 1127 mutable unsigned m_hasSelfPaintingLayerDescendant : 1;
1093 mutable unsigned m_hasSelfPaintingLayerDescendantDirty : 1; 1128 mutable unsigned m_hasSelfPaintingLayerDescendantDirty : 1;
1094 1129
1095 const unsigned m_isRootLayer : 1; 1130 const unsigned m_isRootLayer : 1;
1096 1131
1097 unsigned m_isVisibleContentDirty : 1; 1132 unsigned m_isVisibleContentDirty : 1;
1098 unsigned m_hasVisibleContent : 1; 1133 unsigned m_hasVisibleContent : 1;
1099 unsigned m_isVisibleDescendantDirty : 1; 1134 unsigned m_isVisibleDescendantDirty : 1;
1100 unsigned m_hasVisibleDescendant : 1; 1135 unsigned m_hasVisibleDescendant : 1;
1101 1136
1102 #if ENABLE(ASSERT) 1137 #if ENABLE(ASSERT)
1103 unsigned m_needsPositionUpdate : 1; 1138 unsigned m_needsPositionUpdate : 1;
1104 #endif 1139 #endif
1105 1140
1106 unsigned m_is3DTransformedDescendantDirty : 1; 1141 unsigned m_is3DTransformedDescendantDirty : 1;
1107 // Set on a stacking context layer that has 3D descendants anywhere 1142 // Set on a stacking context layer that has 3D descendants anywhere
1108 // in a preserves3D hierarchy. Hint to do 3D-aware hit testing. 1143 // in a preserves3D hierarchy. Hint to do 3D-aware hit testing.
1109 unsigned m_has3DTransformedDescendant : 1; 1144 unsigned m_has3DTransformedDescendant : 1;
1110 1145
1111 unsigned m_containsDirtyOverlayScrollbars : 1; 1146 unsigned m_containsDirtyOverlayScrollbars : 1;
1112 1147
1113 unsigned m_needsAncestorDependentCompositingInputsUpdate : 1; 1148 unsigned m_needsAncestorDependentCompositingInputsUpdate : 1;
1114 unsigned m_needsDescendantDependentCompositingInputsUpdate : 1; 1149 unsigned m_needsDescendantDependentCompositingInputsUpdate : 1;
1115 unsigned m_childNeedsCompositingInputsUpdate : 1; 1150 unsigned m_childNeedsCompositingInputsUpdate : 1;
1116 1151
1117 // Used only while determining what layers should be composited. Applies to th e tree of z-order lists. 1152 // Used only while determining what layers should be composited. Applies to
1153 // the tree of z-order lists.
1118 unsigned m_hasCompositingDescendant : 1; 1154 unsigned m_hasCompositingDescendant : 1;
1119 1155
1120 // True iff we have scrollable overflow and all children of m_layoutObject are known to paint 1156 // True iff we have scrollable overflow and all children of m_layoutObject are
1121 // exclusively into their own composited layers. Set by updateScrollingStateA fterCompositingChange(). 1157 // known to paint exclusively into their own composited layers. Set by
1158 // updateScrollingStateAfterCompositingChange().
1122 unsigned m_isAllScrollingContentComposited : 1; 1159 unsigned m_isAllScrollingContentComposited : 1;
1123 1160
1124 // Should be for stacking contexts having unisolated blending descendants. 1161 // Should be for stacking contexts having unisolated blending descendants.
1125 unsigned m_shouldIsolateCompositedDescendants : 1; 1162 unsigned m_shouldIsolateCompositedDescendants : 1;
1126 1163
1127 // True if this layout layer just lost its grouped mapping due to the Composit edLayerMapping being destroyed, 1164 // True if this layout layer just lost its grouped mapping due to the
1128 // and we don't yet know to what graphics layer this Layer will be assigned. 1165 // CompositedLayerMapping being destroyed, and we don't yet know to what
1166 // graphics layer this Layer will be assigned.
1129 unsigned m_lostGroupedMapping : 1; 1167 unsigned m_lostGroupedMapping : 1;
1130 1168
1131 unsigned m_needsRepaint : 1; 1169 unsigned m_needsRepaint : 1;
1132 unsigned m_previousPaintResult : 1; // PaintLayerPainter::PaintResult 1170 unsigned m_previousPaintResult : 1; // PaintLayerPainter::PaintResult
1133 1171
1134 unsigned m_needsPaintPhaseDescendantOutlines : 1; 1172 unsigned m_needsPaintPhaseDescendantOutlines : 1;
1135 unsigned m_previousPaintPhaseDescendantOutlinesWasEmpty : 1; 1173 unsigned m_previousPaintPhaseDescendantOutlinesWasEmpty : 1;
1136 unsigned m_needsPaintPhaseFloat : 1; 1174 unsigned m_needsPaintPhaseFloat : 1;
1137 unsigned m_previousPaintPhaseFloatWasEmpty : 1; 1175 unsigned m_previousPaintPhaseFloatWasEmpty : 1;
1138 unsigned m_needsPaintPhaseDescendantBlockBackgrounds : 1; 1176 unsigned m_needsPaintPhaseDescendantBlockBackgrounds : 1;
1139 unsigned m_previousPaintPhaseDescendantBlockBackgroundsWasEmpty : 1; 1177 unsigned m_previousPaintPhaseDescendantBlockBackgroundsWasEmpty : 1;
1140 1178
1141 // These bitfields are part of ancestor/descendant dependent compositing input s. 1179 // These bitfields are part of ancestor/descendant dependent compositing
1180 // inputs.
1142 unsigned m_hasDescendantWithClipPath : 1; 1181 unsigned m_hasDescendantWithClipPath : 1;
1143 unsigned m_hasNonIsolatedDescendantWithBlendMode : 1; 1182 unsigned m_hasNonIsolatedDescendantWithBlendMode : 1;
1144 unsigned m_hasAncestorWithClipPath : 1; 1183 unsigned m_hasAncestorWithClipPath : 1;
1145 unsigned m_hasRootScrollerAsDescendant : 1; 1184 unsigned m_hasRootScrollerAsDescendant : 1;
1146 1185
1147 LayoutBoxModelObject* m_layoutObject; 1186 LayoutBoxModelObject* m_layoutObject;
1148 1187
1149 PaintLayer* m_parent; 1188 PaintLayer* m_parent;
1150 PaintLayer* m_previous; 1189 PaintLayer* m_previous;
1151 PaintLayer* m_next; 1190 PaintLayer* m_next;
1152 PaintLayer* m_first; 1191 PaintLayer* m_first;
1153 PaintLayer* m_last; 1192 PaintLayer* m_last;
1154 1193
1155 // Our (x,y) coordinates are in our parent layer's coordinate space. 1194 // Our (x,y) coordinates are in our parent layer's coordinate space.
1156 LayoutPoint m_location; 1195 LayoutPoint m_location;
1157 1196
1158 // The layer's size. 1197 // The layer's size.
1159 // 1198 //
1160 // If the associated LayoutBoxModelObject is a LayoutBox, it's its border 1199 // If the associated LayoutBoxModelObject is a LayoutBox, it's its border
1161 // box. Otherwise, this is the LayoutInline's lines' bounding box. 1200 // box. Otherwise, this is the LayoutInline's lines' bounding box.
1162 IntSize m_size; 1201 IntSize m_size;
1163 1202
1164 // Cached normal flow values for absolute positioned elements with static left /top values. 1203 // Cached normal flow values for absolute positioned elements with static
1204 // left/top values.
1165 LayoutUnit m_staticInlinePosition; 1205 LayoutUnit m_staticInlinePosition;
1166 LayoutUnit m_staticBlockPosition; 1206 LayoutUnit m_staticBlockPosition;
1167 1207
1168 // The first ancestor having a non visible overflow. 1208 // The first ancestor having a non visible overflow.
1169 const PaintLayer* m_ancestorOverflowLayer; 1209 const PaintLayer* m_ancestorOverflowLayer;
1170 1210
1171 AncestorDependentCompositingInputs m_ancestorDependentCompositingInputs; 1211 AncestorDependentCompositingInputs m_ancestorDependentCompositingInputs;
1172 std::unique_ptr<RareAncestorDependentCompositingInputs> 1212 std::unique_ptr<RareAncestorDependentCompositingInputs>
1173 m_rareAncestorDependentCompositingInputs; 1213 m_rareAncestorDependentCompositingInputs;
1174 1214
(...skipping 12 matching lines...) Expand all
1187 1227
1188 } // namespace blink 1228 } // namespace blink
1189 1229
1190 #ifndef NDEBUG 1230 #ifndef NDEBUG
1191 // Outside the WebCore namespace for ease of invocation from gdb. 1231 // Outside the WebCore namespace for ease of invocation from gdb.
1192 void showLayerTree(const blink::PaintLayer*); 1232 void showLayerTree(const blink::PaintLayer*);
1193 void showLayerTree(const blink::LayoutObject*); 1233 void showLayerTree(const blink::LayoutObject*);
1194 #endif 1234 #endif
1195 1235
1196 #endif // Layer_h 1236 #endif // Layer_h
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/paint/PaintInvalidator.cpp ('k') | third_party/WebKit/Source/core/paint/PaintLayer.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698