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

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

Issue 2051333005: Let FrameView track object paint invalidations (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@TrackInvalidation
Patch Set: NeedsRebaseline Created 4 years, 6 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) 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) 2000 Dirk Mueller (mueller@kde.org) 4 * (C) 2000 Dirk Mueller (mueller@kde.org)
5 * (C) 2004 Allan Sandfeld Jensen (kde@carewolf.com) 5 * (C) 2004 Allan Sandfeld Jensen (kde@carewolf.com)
6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2011 Apple Inc. All rights reserv ed. 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2011 Apple Inc. All rights reserv ed.
7 * Copyright (C) 2009 Google Inc. All rights reserved. 7 * Copyright (C) 2009 Google Inc. All rights reserved.
8 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmo bile.com/) 8 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmo bile.com/)
9 * 9 *
10 * This library is free software; you can redistribute it and/or 10 * This library is free software; you can redistribute it and/or
(...skipping 1212 matching lines...) Expand 10 before | Expand all | Expand 10 after
1223 1223
1224 // This conditional handles situations where non-rooted (and hence non-compo sited) frames are 1224 // This conditional handles situations where non-rooted (and hence non-compo sited) frames are
1225 // painted, such as SVG images. 1225 // painted, such as SVG images.
1226 if (!paintInvalidationContainer.isPaintInvalidationContainer()) 1226 if (!paintInvalidationContainer.isPaintInvalidationContainer())
1227 invalidatePaintRectangleOnWindow(paintInvalidationContainer, enclosingIn tRect(dirtyRect)); 1227 invalidatePaintRectangleOnWindow(paintInvalidationContainer, enclosingIn tRect(dirtyRect));
1228 1228
1229 if (paintInvalidationContainer.view()->usesCompositing() && paintInvalidatio nContainer.isPaintInvalidationContainer()) 1229 if (paintInvalidationContainer.view()->usesCompositing() && paintInvalidatio nContainer.isPaintInvalidationContainer())
1230 paintInvalidationContainer.setBackingNeedsPaintInvalidationInRect(dirtyR ect, invalidationReason, *this); 1230 paintInvalidationContainer.setBackingNeedsPaintInvalidationInRect(dirtyR ect, invalidationReason, *this);
1231 } 1231 }
1232 1232
1233 void LayoutObject::invalidateDisplayItemClient(const DisplayItemClient& displayI temClient) const 1233 void LayoutObject::invalidateDisplayItemClient(const DisplayItemClient& client, PaintInvalidationReason reason) const
1234 { 1234 {
1235 if (PaintLayer* paintingLayer = this->paintingLayer()) { 1235 // It's caller's responsibility to ensure enclosingSelfPaintingLayer's needs Repaint is set.
1236 paintingLayer->setNeedsRepaint(); 1236 // Don't set the flag here because getting enclosingSelfPaintLayer has cost and the caller can use
1237 // various ways (e.g. PaintInvalidatinState::enclosingSelfPaintingLayer()) t o reduce the cost.
1238 client.setDisplayItemsUncached();
1237 1239
1238 #if !ENABLE(ASSERT) 1240 if (FrameView* frameView = this->frameView())
1239 // This is a fast path when we don't need to inform the GraphicsLayer ab out this paint invalidation. 1241 frameView->trackObjectPaintInvalidation(client, reason);
1240 FrameView* frameView = this->frameView();
1241 if (!frameView || !frameView->isTrackingPaintInvalidations()) {
1242 displayItemClient.setDisplayItemsUncached();
1243 return;
1244 }
1245 #endif
1246 // This is valid because we want to invalidate the client in the display item list of the current backing.
1247 DisableCompositingQueryAsserts disabler;
1248 if (const PaintLayer* paintInvalidationLayer = paintingLayer->enclosingL ayerForPaintInvalidationCrossingFrameBoundaries())
1249 paintInvalidationLayer->layoutObject()->invalidateDisplayItemClientO nBacking(displayItemClient, PaintInvalidationFull);
1250 }
1251 } 1242 }
1252 1243
1253 void LayoutObject::setPaintingLayerNeedsRepaint() const 1244 void LayoutObject::setPaintingLayerNeedsRepaintAndInvalidateDisplayItemClient(co nst PaintInvalidationState& paintInvalidationState, const DisplayItemClient& cli ent, PaintInvalidationReason reason) const
1245 {
1246 paintInvalidationState.paintingLayer().setNeedsRepaint();
1247 invalidateDisplayItemClient(client, reason);
1248 }
1249
1250 void LayoutObject::slowSetPaintingLayerNeedsRepaint() const
1254 { 1251 {
1255 if (PaintLayer* paintingLayer = this->paintingLayer()) 1252 if (PaintLayer* paintingLayer = this->paintingLayer())
1256 paintingLayer->setNeedsRepaint(); 1253 paintingLayer->setNeedsRepaint();
1257 } 1254 }
1258 1255
1259 void LayoutObject::invalidateDisplayItemClients(const LayoutBoxModelObject& pain tInvalidationContainer, PaintInvalidationReason invalidationReason) const 1256 void LayoutObject::invalidateDisplayItemClients(PaintInvalidationReason reason) const
1260 { 1257 {
1261 // It's caller's responsibility to ensure enclosingSelfPaintingLayer's needs Repaint is set. 1258 invalidateDisplayItemClient(*this, reason);
1262 // Don't set the flag here because getting enclosingSelfPaintLayer has cost and the caller can use
1263 // various ways (e.g. PaintInvalidatinState::enclosingSelfPaintingLayer()) t o reduce the cost.
1264 ASSERT(!paintingLayer() || paintingLayer()->needsRepaint());
1265 paintInvalidationContainer.invalidateDisplayItemClientOnBacking(*this, inval idationReason, this);
1266 } 1259 }
1267 1260
1268 void LayoutObject::invalidateDisplayItemClientsWithPaintInvalidationState(const LayoutBoxModelObject& paintInvalidationContainer, const PaintInvalidationState& paintInvalidationState, PaintInvalidationReason invalidationReason) const 1261 void LayoutObject::invalidateDisplayItemClientsWithPaintInvalidationState(const PaintInvalidationState& paintInvalidationState, PaintInvalidationReason reason) const
1269 { 1262 {
1270 paintInvalidationState.paintingLayer().setNeedsRepaint(); 1263 paintInvalidationState.paintingLayer().setNeedsRepaint();
1271 invalidateDisplayItemClients(paintInvalidationContainer, invalidationReason) ; 1264 invalidateDisplayItemClients(reason);
1272 } 1265 }
1273 1266
1274
1275 bool LayoutObject::compositedScrollsWithRespectTo(const LayoutBoxModelObject& pa intInvalidationContainer) const 1267 bool LayoutObject::compositedScrollsWithRespectTo(const LayoutBoxModelObject& pa intInvalidationContainer) const
1276 { 1268 {
1277 return paintInvalidationContainer.usesCompositedScrolling() && this != &pain tInvalidationContainer; 1269 return paintInvalidationContainer.usesCompositedScrolling() && this != &pain tInvalidationContainer;
1278 } 1270 }
1279 1271
1280 const LayoutBoxModelObject* LayoutObject::invalidatePaintRectangleInternal(const LayoutRect& dirtyRect) const 1272 void LayoutObject::invalidatePaintRectangle(const LayoutRect& dirtyRect) const
1281 { 1273 {
1282 RELEASE_ASSERT(isRooted()); 1274 RELEASE_ASSERT(isRooted());
1283 1275
1284 if (dirtyRect.isEmpty()) 1276 if (dirtyRect.isEmpty())
1285 return nullptr; 1277 return;
1286 1278
1287 if (view()->document().printing()) 1279 if (view()->document().printing())
1288 return nullptr; // Don't invalidate paints if we're printing. 1280 return; // Don't invalidate paints if we're printing.
1289 1281
1290 const LayoutBoxModelObject& paintInvalidationContainer = containerForPaintIn validation(); 1282 const LayoutBoxModelObject& paintInvalidationContainer = containerForPaintIn validation();
1291 LayoutRect dirtyRectOnBacking = dirtyRect; 1283 LayoutRect dirtyRectOnBacking = dirtyRect;
1292 PaintLayer::mapRectToPaintInvalidationBacking(*this, paintInvalidationContai ner, dirtyRectOnBacking); 1284 PaintLayer::mapRectToPaintInvalidationBacking(*this, paintInvalidationContai ner, dirtyRectOnBacking);
1293 1285
1294 // Composited scrolling should not be included in the bounds of composited-s crolled items. 1286 // Composited scrolling should not be included in the bounds of composited-s crolled items.
1295 if (compositedScrollsWithRespectTo(paintInvalidationContainer)) { 1287 if (compositedScrollsWithRespectTo(paintInvalidationContainer)) {
1296 LayoutSize inverseOffset(toLayoutBox(&paintInvalidationContainer)->scrol ledContentOffset()); 1288 LayoutSize inverseOffset(toLayoutBox(&paintInvalidationContainer)->scrol ledContentOffset());
1297 dirtyRectOnBacking.move(inverseOffset); 1289 dirtyRectOnBacking.move(inverseOffset);
1298 } 1290 }
1299 1291
1300 invalidatePaintUsingContainer(paintInvalidationContainer, dirtyRectOnBacking , PaintInvalidationRectangle); 1292 invalidatePaintUsingContainer(paintInvalidationContainer, dirtyRectOnBacking , PaintInvalidationRectangle);
1301 return &paintInvalidationContainer;
1302 }
1303 1293
1304 void LayoutObject::invalidatePaintRectangle(const LayoutRect& rect) const 1294 slowSetPaintingLayerNeedsRepaint();
1305 { 1295 invalidateDisplayItemClients(PaintInvalidationRectangle);
1306 setPaintingLayerNeedsRepaint();
1307 const LayoutBoxModelObject* paintInvalidationContainer = invalidatePaintRect angleInternal(rect);
1308 if (paintInvalidationContainer)
1309 invalidateDisplayItemClients(*paintInvalidationContainer, PaintInvalidat ionRectangle);
1310 }
1311
1312 void LayoutObject::invalidatePaintRectangleNotInvalidatingDisplayItemClients(con st LayoutRect& r) const
1313 {
1314 invalidatePaintRectangleInternal(r);
1315 } 1296 }
1316 1297
1317 void LayoutObject::invalidateTreeIfNeeded(const PaintInvalidationState& paintInv alidationState) 1298 void LayoutObject::invalidateTreeIfNeeded(const PaintInvalidationState& paintInv alidationState)
1318 { 1299 {
1319 ASSERT(!needsLayout()); 1300 ASSERT(!needsLayout());
1320 1301
1321 // If we didn't need paint invalidation then our children don't need as well . 1302 // If we didn't need paint invalidation then our children don't need as well .
1322 // Skip walking down the tree as everything should be fine below us. 1303 // Skip walking down the tree as everything should be fine below us.
1323 if (!shouldCheckForPaintInvalidation(paintInvalidationState)) 1304 if (!shouldCheckForPaintInvalidation(paintInvalidationState))
1324 return; 1305 return;
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
1407 newSelectionRect.move(inverseOffset); 1388 newSelectionRect.move(inverseOffset);
1408 } 1389 }
1409 } 1390 }
1410 1391
1411 setPreviousSelectionRectForPaintInvalidation(newSelectionRect); 1392 setPreviousSelectionRectForPaintInvalidation(newSelectionRect);
1412 1393
1413 // TODO(wangxianzhu): Combine the following two conditions when removing Lay outView::doingFullPaintInvalidation(). 1394 // TODO(wangxianzhu): Combine the following two conditions when removing Lay outView::doingFullPaintInvalidation().
1414 if (!fullInvalidation) 1395 if (!fullInvalidation)
1415 fullyInvalidatePaint(paintInvalidationContainer, PaintInvalidationSelect ion, oldSelectionRect, newSelectionRect); 1396 fullyInvalidatePaint(paintInvalidationContainer, PaintInvalidationSelect ion, oldSelectionRect, newSelectionRect);
1416 if (shouldInvalidateSelection()) 1397 if (shouldInvalidateSelection())
1417 invalidateDisplayItemClientsWithPaintInvalidationState(paintInvalidation Container, paintInvalidationState, PaintInvalidationSelection); 1398 invalidateDisplayItemClientsWithPaintInvalidationState(paintInvalidation State, PaintInvalidationSelection);
1418 } 1399 }
1419 1400
1420 PaintInvalidationReason LayoutObject::invalidatePaintIfNeeded(const PaintInvalid ationState& paintInvalidationState) 1401 PaintInvalidationReason LayoutObject::invalidatePaintIfNeeded(const PaintInvalid ationState& paintInvalidationState)
1421 { 1402 {
1422 ASSERT(&paintInvalidationState.currentObject() == this); 1403 ASSERT(&paintInvalidationState.currentObject() == this);
1423 1404
1424 if (styleRef().hasOutline()) { 1405 if (styleRef().hasOutline()) {
1425 PaintLayer& layer = paintInvalidationState.paintingLayer(); 1406 PaintLayer& layer = paintInvalidationState.paintingLayer();
1426 if (layer.layoutObject() != this) 1407 if (layer.layoutObject() != this)
1427 layer.setNeedsPaintPhaseDescendantOutlines(); 1408 layer.setNeedsPaintPhaseDescendantOutlines();
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
1471 invalidationReason = PaintInvalidationBackgroundObscurationChange; 1452 invalidationReason = PaintInvalidationBackgroundObscurationChange;
1472 m_bitfields.setLastBoxDecorationBackgroundObscured(boxDecorationBackgroundOb scured); 1453 m_bitfields.setLastBoxDecorationBackgroundObscured(boxDecorationBackgroundOb scured);
1473 1454
1474 if (invalidationReason == PaintInvalidationNone) { 1455 if (invalidationReason == PaintInvalidationNone) {
1475 // TODO(trchen): Currently we don't keep track of paint offset of layout objects. 1456 // TODO(trchen): Currently we don't keep track of paint offset of layout objects.
1476 // There are corner cases that the display items need to be invalidated for paint offset 1457 // There are corner cases that the display items need to be invalidated for paint offset
1477 // mutation, but incurs no pixel difference (i.e. bounds stay the same) so no rect-based 1458 // mutation, but incurs no pixel difference (i.e. bounds stay the same) so no rect-based
1478 // invalidation is issued. See crbug.com/508383 and crbug.com/515977. 1459 // invalidation is issued. See crbug.com/508383 and crbug.com/515977.
1479 // This is a workaround to force display items to update paint offset. 1460 // This is a workaround to force display items to update paint offset.
1480 if (!RuntimeEnabledFeatures::slimmingPaintInvalidationEnabled() && paint InvalidationState.forcedSubtreeInvalidationCheckingWithinContainer()) 1461 if (!RuntimeEnabledFeatures::slimmingPaintInvalidationEnabled() && paint InvalidationState.forcedSubtreeInvalidationCheckingWithinContainer())
1481 invalidateDisplayItemClientsWithPaintInvalidationState(paintInvalida tionContainer, paintInvalidationState, invalidationReason); 1462 invalidateDisplayItemClientsWithPaintInvalidationState(paintInvalida tionState, invalidationReason);
1482 1463
1483 return invalidationReason; 1464 return invalidationReason;
1484 } 1465 }
1485 1466
1486 if (invalidationReason == PaintInvalidationIncremental) 1467 if (invalidationReason == PaintInvalidationIncremental)
1487 incrementallyInvalidatePaint(paintInvalidationContainer, oldBounds, newB ounds, newLocation); 1468 incrementallyInvalidatePaint(paintInvalidationContainer, oldBounds, newB ounds, newLocation);
1488 else 1469 else
1489 fullyInvalidatePaint(paintInvalidationContainer, invalidationReason, old Bounds, newBounds); 1470 fullyInvalidatePaint(paintInvalidationContainer, invalidationReason, old Bounds, newBounds);
1490 1471
1491 invalidateDisplayItemClientsWithPaintInvalidationState(paintInvalidationCont ainer, paintInvalidationState, invalidationReason); 1472 invalidateDisplayItemClientsWithPaintInvalidationState(paintInvalidationStat e, invalidationReason);
1492 return invalidationReason; 1473 return invalidationReason;
1493 } 1474 }
1494 1475
1495 PaintInvalidationReason LayoutObject::getPaintInvalidationReason(const PaintInva lidationState& paintInvalidationState, 1476 PaintInvalidationReason LayoutObject::getPaintInvalidationReason(const PaintInva lidationState& paintInvalidationState,
1496 const LayoutRect& oldBounds, const LayoutPoint& oldPositionFromPaintInvalida tionBacking, 1477 const LayoutRect& oldBounds, const LayoutPoint& oldPositionFromPaintInvalida tionBacking,
1497 const LayoutRect& newBounds, const LayoutPoint& newPositionFromPaintInvalida tionBacking) const 1478 const LayoutRect& newBounds, const LayoutPoint& newPositionFromPaintInvalida tionBacking) const
1498 { 1479 {
1499 if (paintInvalidationState.forcedSubtreeFullInvalidationWithinContainer()) 1480 if (paintInvalidationState.forcedSubtreeFullInvalidationWithinContainer())
1500 return PaintInvalidationSubtree; 1481 return PaintInvalidationSubtree;
1501 1482
(...skipping 2066 matching lines...) Expand 10 before | Expand all | Expand 10 after
3568 3549
3569 // If a paint invalidation container is not a stacking context, 3550 // If a paint invalidation container is not a stacking context,
3570 // some of its descendants may belong to the parent container. 3551 // some of its descendants may belong to the parent container.
3571 findNonCompositedDescendantLayerToTraverse(*descendant, functor); 3552 findNonCompositedDescendantLayerToTraverse(*descendant, functor);
3572 descendant = descendant->nextInPreOrderAfterChildren(&object); 3553 descendant = descendant->nextInPreOrderAfterChildren(&object);
3573 } 3554 }
3574 } 3555 }
3575 3556
3576 } // unnamed namespace 3557 } // unnamed namespace
3577 3558
3578 void LayoutObject::invalidateDisplayItemClientsIncludingNonCompositingDescendant s(const LayoutBoxModelObject* paintInvalidationContainer, PaintInvalidationReaso n paintInvalidationReason) const 3559 void LayoutObject::invalidateDisplayItemClientsIncludingNonCompositingDescendant s(PaintInvalidationReason reason) const
3579 { 3560 {
3580 // This is valid because we want to invalidate the client in the display ite m list of the current backing. 3561 // This is valid because we want to invalidate the client in the display ite m list of the current backing.
3581 DisableCompositingQueryAsserts disabler; 3562 DisableCompositingQueryAsserts disabler;
3582 if (!paintInvalidationContainer) {
3583 paintInvalidationContainer = enclosingCompositedContainer();
3584 if (!paintInvalidationContainer)
3585 return;
3586 }
3587 3563
3588 traverseNonCompositingDescendants(const_cast<LayoutObject&>(*this), [&paintI nvalidationContainer, paintInvalidationReason](LayoutObject& object) { 3564 slowSetPaintingLayerNeedsRepaint();
3589 if (object.hasLayer()) 3565 traverseNonCompositingDescendants(const_cast<LayoutObject&>(*this), [reason] (LayoutObject& object) {
3566 if (object.hasLayer() && toLayoutBoxModelObject(object).hasSelfPaintingL ayer())
3590 toLayoutBoxModelObject(object).layer()->setNeedsRepaint(); 3567 toLayoutBoxModelObject(object).layer()->setNeedsRepaint();
3591 object.invalidateDisplayItemClients(*paintInvalidationContainer, paintIn validationReason); 3568 object.invalidateDisplayItemClients(reason);
3592 }); 3569 });
3593 } 3570 }
3594 3571
3595 void LayoutObject::invalidatePaintOfPreviousPaintInvalidationRect(const LayoutBo xModelObject& paintInvalidationContainer, PaintInvalidationReason reason) 3572 void LayoutObject::invalidatePaintOfPreviousPaintInvalidationRect(const LayoutBo xModelObject& paintInvalidationContainer, PaintInvalidationReason reason)
3596 { 3573 {
3597 // It's caller's responsibility to ensure enclosingSelfPaintingLayer's needs Repaint is set. 3574 // It's caller's responsibility to ensure enclosingSelfPaintingLayer's needs Repaint is set.
3598 // Don't set the flag here because getting enclosingSelfPaintLayer has cost and the caller can use 3575 // Don't set the flag here because getting enclosingSelfPaintLayer has cost and the caller can use
3599 // various ways (e.g. PaintInvalidatinState::enclosingSelfPaintingLayer()) t o reduce the cost. 3576 // various ways (e.g. PaintInvalidatinState::enclosingSelfPaintingLayer()) t o reduce the cost.
3600 ASSERT(!paintingLayer() || paintingLayer()->needsRepaint()); 3577 ASSERT(!paintingLayer() || paintingLayer()->needsRepaint());
3601 3578
3602 // These disablers are valid because we want to use the current compositing/ invalidation status. 3579 // These disablers are valid because we want to use the current compositing/ invalidation status.
3603 DisablePaintInvalidationStateAsserts invalidationDisabler; 3580 DisablePaintInvalidationStateAsserts invalidationDisabler;
3604 DisableCompositingQueryAsserts compositingDisabler; 3581 DisableCompositingQueryAsserts compositingDisabler;
3605 3582
3606 LayoutRect invalidationRect = previousPaintInvalidationRect(); 3583 LayoutRect invalidationRect = previousPaintInvalidationRect();
3607 invalidatePaintUsingContainer(paintInvalidationContainer, invalidationRect, reason); 3584 invalidatePaintUsingContainer(paintInvalidationContainer, invalidationRect, reason);
3608 invalidateDisplayItemClients(paintInvalidationContainer, reason); 3585 invalidateDisplayItemClients(reason);
3609 3586
3610 // This method may be used to invalidate paint of an object changing paint i nvalidation container. 3587 // This method may be used to invalidate paint of an object changing paint i nvalidation container.
3611 // Clear previous paint invalidation rect on the original paint invalidation container to avoid 3588 // Clear previous paint invalidation rect on the original paint invalidation container to avoid
3612 // under-invalidation if the new paint invalidation rect on the new paint in validation container 3589 // under-invalidation if the new paint invalidation rect on the new paint in validation container
3613 // happens to be the same as the old one. 3590 // happens to be the same as the old one.
3614 clearPreviousPaintInvalidationRects(); 3591 clearPreviousPaintInvalidationRects();
3615 } 3592 }
3616 3593
3617 void LayoutObject::invalidatePaintIncludingNonCompositingDescendants() 3594 void LayoutObject::invalidatePaintIncludingNonCompositingDescendants()
3618 { 3595 {
(...skipping 10 matching lines...) Expand all
3629 { 3606 {
3630 // Clear first because PaintInvalidationSubtree overrides other full paint i nvalidation reasons. 3607 // Clear first because PaintInvalidationSubtree overrides other full paint i nvalidation reasons.
3631 clearShouldDoFullPaintInvalidation(); 3608 clearShouldDoFullPaintInvalidation();
3632 setShouldDoFullPaintInvalidation(PaintInvalidationSubtree); 3609 setShouldDoFullPaintInvalidation(PaintInvalidationSubtree);
3633 } 3610 }
3634 3611
3635 void LayoutObject::invalidatePaintIncludingNonSelfPaintingLayerDescendantsIntern al(const LayoutBoxModelObject& paintInvalidationContainer) 3612 void LayoutObject::invalidatePaintIncludingNonSelfPaintingLayerDescendantsIntern al(const LayoutBoxModelObject& paintInvalidationContainer)
3636 { 3613 {
3637 invalidatePaintOfPreviousPaintInvalidationRect(paintInvalidationContainer, P aintInvalidationSubtree); 3614 invalidatePaintOfPreviousPaintInvalidationRect(paintInvalidationContainer, P aintInvalidationSubtree);
3638 for (LayoutObject* child = slowFirstChild(); child; child = child->nextSibli ng()) { 3615 for (LayoutObject* child = slowFirstChild(); child; child = child->nextSibli ng()) {
3639 if (child->hasLayer())
3640 toLayoutBoxModelObject(child)->layer()->setNeedsRepaint();
3641 if (!child->hasLayer() || !toLayoutBoxModelObject(child)->layer()->isSel fPaintingLayer()) 3616 if (!child->hasLayer() || !toLayoutBoxModelObject(child)->layer()->isSel fPaintingLayer())
3642 child->invalidatePaintIncludingNonSelfPaintingLayerDescendantsIntern al(paintInvalidationContainer); 3617 child->invalidatePaintIncludingNonSelfPaintingLayerDescendantsIntern al(paintInvalidationContainer);
3643 } 3618 }
3644 } 3619 }
3645 3620
3646 void LayoutObject::invalidatePaintIncludingNonSelfPaintingLayerDescendants(const LayoutBoxModelObject& paintInvalidationContainer) 3621 void LayoutObject::invalidatePaintIncludingNonSelfPaintingLayerDescendants(const LayoutBoxModelObject& paintInvalidationContainer)
3647 { 3622 {
3648 setPaintingLayerNeedsRepaint(); 3623 slowSetPaintingLayerNeedsRepaint();
3649 invalidatePaintIncludingNonSelfPaintingLayerDescendantsInternal(paintInvalid ationContainer); 3624 invalidatePaintIncludingNonSelfPaintingLayerDescendantsInternal(paintInvalid ationContainer);
3650 } 3625 }
3651 3626
3652 void LayoutObject::setIsBackgroundAttachmentFixedObject(bool isBackgroundAttachm entFixedObject) 3627 void LayoutObject::setIsBackgroundAttachmentFixedObject(bool isBackgroundAttachm entFixedObject)
3653 { 3628 {
3654 ASSERT(frameView()); 3629 ASSERT(frameView());
3655 if (m_bitfields.isBackgroundAttachmentFixedObject() == isBackgroundAttachmen tFixedObject) 3630 if (m_bitfields.isBackgroundAttachmentFixedObject() == isBackgroundAttachmen tFixedObject)
3656 return; 3631 return;
3657 m_bitfields.setIsBackgroundAttachmentFixedObject(isBackgroundAttachmentFixed Object); 3632 m_bitfields.setIsBackgroundAttachmentFixedObject(isBackgroundAttachmentFixed Object);
3658 if (isBackgroundAttachmentFixedObject) 3633 if (isBackgroundAttachmentFixedObject)
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
3714 const blink::LayoutObject* root = object1; 3689 const blink::LayoutObject* root = object1;
3715 while (root->parent()) 3690 while (root->parent())
3716 root = root->parent(); 3691 root = root->parent();
3717 root->showLayoutTreeAndMark(object1, "*", object2, "-", 0); 3692 root->showLayoutTreeAndMark(object1, "*", object2, "-", 0);
3718 } else { 3693 } else {
3719 fprintf(stderr, "Cannot showLayoutTree. Root is (nil)\n"); 3694 fprintf(stderr, "Cannot showLayoutTree. Root is (nil)\n");
3720 } 3695 }
3721 } 3696 }
3722 3697
3723 #endif 3698 #endif
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/layout/LayoutObject.h ('k') | third_party/WebKit/Source/core/layout/LayoutObjectChildList.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698