Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
| 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
| 4 * (C) 2005 Allan Sandfeld Jensen (kde@carewolf.com) | 4 * (C) 2005 Allan Sandfeld Jensen (kde@carewolf.com) |
| 5 * (C) 2005, 2006 Samuel Weinig (sam.weinig@gmail.com) | 5 * (C) 2005, 2006 Samuel Weinig (sam.weinig@gmail.com) |
| 6 * Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. | 6 * Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. |
| 7 * Copyright (C) 2010 Google Inc. All rights reserved. | 7 * Copyright (C) 2010 Google Inc. All rights reserved. |
| 8 * | 8 * |
| 9 * This library is free software; you can redistribute it and/or | 9 * This library is free software; you can redistribute it and/or |
| 10 * modify it under the terms of the GNU Library General Public | 10 * modify it under the terms of the GNU Library General Public |
| (...skipping 394 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 405 if (!RuntimeEnabledFeatures::slimmingPaintV2Enabled() | 405 if (!RuntimeEnabledFeatures::slimmingPaintV2Enabled() |
| 406 && previousPaintInvalidationRect != this->previousPaintInvalidationRect( ) | 406 && previousPaintInvalidationRect != this->previousPaintInvalidationRect( ) |
| 407 && !usesCompositedScrolling() | 407 && !usesCompositedScrolling() |
| 408 && hasOverflowClip()) | 408 && hasOverflowClip()) |
| 409 newPaintInvalidationState.setForceSubtreeInvalidationRectUpdateWithinCon tainer(); | 409 newPaintInvalidationState.setForceSubtreeInvalidationRectUpdateWithinCon tainer(); |
| 410 | 410 |
| 411 newPaintInvalidationState.updateForChildren(reason); | 411 newPaintInvalidationState.updateForChildren(reason); |
| 412 invalidatePaintOfSubtreesIfNeeded(newPaintInvalidationState); | 412 invalidatePaintOfSubtreesIfNeeded(newPaintInvalidationState); |
| 413 } | 413 } |
| 414 | 414 |
| 415 static bool compositedScrollsWithRespectTo(const LayoutObject* layoutObject, con st LayoutBoxModelObject& paintInvalidationContainer) | |
|
wkorman
2016/05/31 18:34:15
If layoutObject is never null can use const &?
chrishtr
2016/05/31 18:51:54
It can be null, due to the default parameter of in
| |
| 416 { | |
| 417 return paintInvalidationContainer.usesCompositedScrolling() && layoutObject != &paintInvalidationContainer; | |
| 418 } | |
| 419 | |
| 415 void LayoutBoxModelObject::setBackingNeedsPaintInvalidationInRect(const LayoutRe ct& r, PaintInvalidationReason invalidationReason, const LayoutObject& object) c onst | 420 void LayoutBoxModelObject::setBackingNeedsPaintInvalidationInRect(const LayoutRe ct& r, PaintInvalidationReason invalidationReason, const LayoutObject& object) c onst |
| 416 { | 421 { |
| 417 // TODO(wangxianzhu): Enable the following assert after paint invalidation f or spv2 is ready. | 422 // TODO(wangxianzhu): Enable the following assert after paint invalidation f or spv2 is ready. |
| 418 // ASSERT(!RuntimeEnabledFeatures::slimmingPaintV2Enabled()); | 423 // ASSERT(!RuntimeEnabledFeatures::slimmingPaintV2Enabled()); |
| 419 | 424 |
| 420 // https://bugs.webkit.org/show_bug.cgi?id=61159 describes an unreproducible crash here, | 425 // https://bugs.webkit.org/show_bug.cgi?id=61159 describes an unreproducible crash here, |
| 421 // so assert but check that the layer is composited. | 426 // so assert but check that the layer is composited. |
| 422 ASSERT(compositingState() != NotComposited); | 427 ASSERT(compositingState() != NotComposited); |
| 423 | 428 |
| 424 // FIXME: generalize accessors to backing GraphicsLayers so that this code i s squashing-agnostic. | 429 // FIXME: generalize accessors to backing GraphicsLayers so that this code i s squashing-agnostic. |
| 425 if (layer()->groupedMapping()) { | 430 if (layer()->groupedMapping()) { |
| 426 LayoutRect paintInvalidationRect = r; | 431 LayoutRect paintInvalidationRect = r; |
| 427 if (GraphicsLayer* squashingLayer = layer()->groupedMapping()->squashing Layer()) { | 432 if (GraphicsLayer* squashingLayer = layer()->groupedMapping()->squashing Layer()) { |
| 428 // Note: the subpixel accumulation of layer() does not need to be ad ded here. It is already taken into account. | 433 // Note: the subpixel accumulation of layer() does not need to be ad ded here. It is already taken into account. |
| 429 squashingLayer->setNeedsDisplayInRect(enclosingIntRect(paintInvalida tionRect), invalidationReason, object); | 434 squashingLayer->setNeedsDisplayInRect(enclosingIntRect(paintInvalida tionRect), invalidationReason, object); |
| 430 } | 435 } |
| 436 } else if (compositedScrollsWithRespectTo(&object, *this)) { | |
| 437 layer()->compositedLayerMapping()->setScrollingContentsNeedDisplayInRect (r, invalidationReason, object); | |
| 431 } else { | 438 } else { |
| 439 // TODO(chrishtr): we should be able to skip scrolling content layers in this case. | |
| 432 layer()->compositedLayerMapping()->setContentsNeedDisplayInRect(r, inval idationReason, object); | 440 layer()->compositedLayerMapping()->setContentsNeedDisplayInRect(r, inval idationReason, object); |
| 433 } | 441 } |
| 434 } | 442 } |
| 435 | 443 |
| 436 void LayoutBoxModelObject::invalidateDisplayItemClientOnBacking(const DisplayIte mClient& displayItemClient, PaintInvalidationReason invalidationReason) const | 444 void LayoutBoxModelObject::invalidateDisplayItemClientOnBacking(const DisplayIte mClient& displayItemClient, PaintInvalidationReason invalidationReason, const La youtObject* layoutObject) const |
| 437 { | 445 { |
| 438 displayItemClient.setDisplayItemsUncached(); | 446 displayItemClient.setDisplayItemsUncached(); |
| 439 | 447 |
| 440 // We need to inform the GraphicsLayer about this paint invalidation only wh en we are tracking | 448 // We need to inform the GraphicsLayer about this paint invalidation only wh en we are tracking |
| 441 // paint invalidation or ENABLE(ASSERT). | 449 // paint invalidation or ENABLE(ASSERT). |
| 442 #if !ENABLE(ASSERT) | 450 #if !ENABLE(ASSERT) |
| 443 if (!frameView()->isTrackingPaintInvalidations()) | 451 if (!frameView()->isTrackingPaintInvalidations()) |
| 444 return; | 452 return; |
| 445 #endif | 453 #endif |
| 446 | 454 |
| 447 if (layer()->groupedMapping()) { | 455 if (layer()->groupedMapping()) { |
| 448 if (GraphicsLayer* squashingLayer = layer()->groupedMapping()->squashing Layer()) | 456 if (GraphicsLayer* squashingLayer = layer()->groupedMapping()->squashing Layer()) |
| 449 squashingLayer->displayItemClientWasInvalidated(displayItemClient, i nvalidationReason); | 457 squashingLayer->displayItemClientWasInvalidated(displayItemClient, i nvalidationReason); |
| 450 } else if (CompositedLayerMapping* compositedLayerMapping = layer()->composi tedLayerMapping()) { | 458 } else if (CompositedLayerMapping* compositedLayerMapping = layer()->composi tedLayerMapping()) { |
| 451 compositedLayerMapping->displayItemClientWasInvalidated(displayItemClien t, invalidationReason); | 459 if (compositedScrollsWithRespectTo(layoutObject, *this)) |
| 460 compositedLayerMapping->scrollingDisplayItemClientWasInvalidated(dis playItemClient, invalidationReason); | |
| 461 else | |
| 462 compositedLayerMapping->displayItemClientWasInvalidated(displayItemC lient, invalidationReason); | |
| 452 } | 463 } |
| 453 } | 464 } |
| 454 | 465 |
| 455 void LayoutBoxModelObject::addOutlineRectsForNormalChildren(Vector<LayoutRect>& rects, const LayoutPoint& additionalOffset, IncludeBlockVisualOverflowOrNot incl udeBlockOverflows) const | 466 void LayoutBoxModelObject::addOutlineRectsForNormalChildren(Vector<LayoutRect>& rects, const LayoutPoint& additionalOffset, IncludeBlockVisualOverflowOrNot incl udeBlockOverflows) const |
| 456 { | 467 { |
| 457 for (LayoutObject* child = slowFirstChild(); child; child = child->nextSibli ng()) { | 468 for (LayoutObject* child = slowFirstChild(); child; child = child->nextSibli ng()) { |
| 458 // Outlines of out-of-flow positioned descendants are handled in LayoutB lock::addOutlineRects(). | 469 // Outlines of out-of-flow positioned descendants are handled in LayoutB lock::addOutlineRects(). |
| 459 if (child->isOutOfFlowPositioned()) | 470 if (child->isOutOfFlowPositioned()) |
| 460 continue; | 471 continue; |
| 461 | 472 |
| (...skipping 656 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1118 if (rootElementStyle->hasBackground()) | 1129 if (rootElementStyle->hasBackground()) |
| 1119 return false; | 1130 return false; |
| 1120 | 1131 |
| 1121 if (node() != document().firstBodyElement()) | 1132 if (node() != document().firstBodyElement()) |
| 1122 return false; | 1133 return false; |
| 1123 | 1134 |
| 1124 return true; | 1135 return true; |
| 1125 } | 1136 } |
| 1126 | 1137 |
| 1127 } // namespace blink | 1138 } // namespace blink |
| OLD | NEW |