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) 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 1312 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1323 const LayoutBoxModelObject* paintInvalidationContainer = invalidatePaintRect
angleInternal(rect); | 1323 const LayoutBoxModelObject* paintInvalidationContainer = invalidatePaintRect
angleInternal(rect); |
1324 if (paintInvalidationContainer) | 1324 if (paintInvalidationContainer) |
1325 invalidateDisplayItemClients(*paintInvalidationContainer, PaintInvalidat
ionRectangle); | 1325 invalidateDisplayItemClients(*paintInvalidationContainer, PaintInvalidat
ionRectangle); |
1326 } | 1326 } |
1327 | 1327 |
1328 void LayoutObject::invalidatePaintRectangleNotInvalidatingDisplayItemClients(con
st LayoutRect& r) const | 1328 void LayoutObject::invalidatePaintRectangleNotInvalidatingDisplayItemClients(con
st LayoutRect& r) const |
1329 { | 1329 { |
1330 invalidatePaintRectangleInternal(r); | 1330 invalidatePaintRectangleInternal(r); |
1331 } | 1331 } |
1332 | 1332 |
1333 void LayoutObject::invalidateTreeIfNeeded(PaintInvalidationState& paintInvalidat
ionState) | 1333 void LayoutObject::invalidateTreeIfNeeded(const PaintInvalidationState& paintInv
alidationState) |
1334 { | 1334 { |
1335 ASSERT(!needsLayout()); | 1335 ASSERT(!needsLayout()); |
1336 | 1336 |
1337 // If we didn't need paint invalidation then our children don't need as well
. | 1337 // If we didn't need paint invalidation then our children don't need as well
. |
1338 // Skip walking down the tree as everything should be fine below us. | 1338 // Skip walking down the tree as everything should be fine below us. |
1339 if (!shouldCheckForPaintInvalidation(paintInvalidationState)) | 1339 if (!shouldCheckForPaintInvalidation(paintInvalidationState)) |
1340 return; | 1340 return; |
1341 | 1341 |
1342 PaintInvalidationReason reason = invalidatePaintIfNeeded(paintInvalidationSt
ate, paintInvalidationState.paintInvalidationContainer()); | 1342 PaintInvalidationReason reason = invalidatePaintIfNeeded(paintInvalidationSt
ate); |
1343 clearPaintInvalidationState(paintInvalidationState); | 1343 clearPaintInvalidationFlags(paintInvalidationState); |
1344 | 1344 |
1345 if (reason == PaintInvalidationDelayedFull) | 1345 if (reason == PaintInvalidationDelayedFull) |
1346 paintInvalidationState.pushDelayedPaintInvalidationTarget(*this); | 1346 paintInvalidationState.pushDelayedPaintInvalidationTarget(*this); |
1347 | 1347 |
1348 invalidatePaintOfSubtreesIfNeeded(paintInvalidationState); | 1348 invalidatePaintOfSubtreesIfNeeded(paintInvalidationState); |
1349 } | 1349 } |
1350 | 1350 |
1351 void LayoutObject::invalidatePaintOfSubtreesIfNeeded(PaintInvalidationState& chi
ldPaintInvalidationState) | 1351 void LayoutObject::invalidatePaintOfSubtreesIfNeeded(const PaintInvalidationStat
e& childPaintInvalidationState) |
1352 { | 1352 { |
1353 for (LayoutObject* child = slowFirstChild(); child; child = child->nextSibli
ng()) { | 1353 for (LayoutObject* child = slowFirstChild(); child; child = child->nextSibli
ng()) { |
1354 if (!child->isOutOfFlowPositioned()) | 1354 if (!child->isOutOfFlowPositioned()) |
1355 child->invalidateTreeIfNeeded(childPaintInvalidationState); | 1355 child->invalidateTreeIfNeeded(childPaintInvalidationState); |
1356 } | 1356 } |
1357 } | 1357 } |
1358 | 1358 |
1359 static PassOwnPtr<TracedValue> jsonObjectForOldAndNewRects(const LayoutRect& old
Rect, const LayoutPoint& oldLocation, const LayoutRect& newRect, const LayoutPoi
nt& newLocation) | 1359 static PassOwnPtr<TracedValue> jsonObjectForOldAndNewRects(const LayoutRect& old
Rect, const LayoutPoint& oldLocation, const LayoutRect& newRect, const LayoutPoi
nt& newLocation) |
1360 { | 1360 { |
1361 OwnPtr<TracedValue> value = TracedValue::create(); | 1361 OwnPtr<TracedValue> value = TracedValue::create(); |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1416 | 1416 |
1417 if (shouldInvalidateSelection()) | 1417 if (shouldInvalidateSelection()) |
1418 invalidateDisplayItemClientsWithPaintInvalidationState(paintInvalidation
Container, paintInvalidationState, PaintInvalidationSelection); | 1418 invalidateDisplayItemClientsWithPaintInvalidationState(paintInvalidation
Container, paintInvalidationState, PaintInvalidationSelection); |
1419 | 1419 |
1420 if (fullInvalidation) | 1420 if (fullInvalidation) |
1421 return; | 1421 return; |
1422 | 1422 |
1423 fullyInvalidatePaint(paintInvalidationContainer, PaintInvalidationSelection,
oldSelectionRect, newSelectionRect); | 1423 fullyInvalidatePaint(paintInvalidationContainer, PaintInvalidationSelection,
oldSelectionRect, newSelectionRect); |
1424 } | 1424 } |
1425 | 1425 |
1426 PaintInvalidationReason LayoutObject::invalidatePaintIfNeeded(PaintInvalidationS
tate& paintInvalidationState, const LayoutBoxModelObject& paintInvalidationConta
iner) | 1426 PaintInvalidationReason LayoutObject::invalidatePaintIfNeeded(const PaintInvalid
ationState& paintInvalidationState) |
1427 { | 1427 { |
1428 if (styleRef().hasOutline()) { | 1428 if (styleRef().hasOutline()) { |
1429 PaintLayer& layer = paintInvalidationState.enclosingSelfPaintingLayer(*t
his); | 1429 PaintLayer& layer = paintInvalidationState.enclosingSelfPaintingLayer(*t
his); |
1430 if (layer.layoutObject() != this) | 1430 if (layer.layoutObject() != this) |
1431 layer.setNeedsPaintPhaseDescendantOutlines(); | 1431 layer.setNeedsPaintPhaseDescendantOutlines(); |
1432 } | 1432 } |
1433 | 1433 |
1434 LayoutView* v = view(); | 1434 LayoutView* v = view(); |
1435 if (v->document().printing()) | 1435 if (v->document().printing()) |
1436 return PaintInvalidationNone; // Don't invalidate paints if we're printi
ng. | 1436 return PaintInvalidationNone; // Don't invalidate paints if we're printi
ng. |
1437 | 1437 |
| 1438 const LayoutBoxModelObject& paintInvalidationContainer = paintInvalidationSt
ate.paintInvalidationContainer(); |
| 1439 // TODO(wangxianzhu): Enable this assert after we fix all paintInvalidationC
ontainer mismatch issues. crbug.com/360286 |
| 1440 // ASSERT(paintInvalidationContainer == containerForPaintInvalidation()); |
| 1441 |
1438 const LayoutRect oldBounds = previousPaintInvalidationRect(); | 1442 const LayoutRect oldBounds = previousPaintInvalidationRect(); |
1439 const LayoutPoint oldLocation = RuntimeEnabledFeatures::slimmingPaintInvalid
ationEnabled() ? LayoutPoint() : previousPositionFromPaintInvalidationBacking(); | 1443 const LayoutPoint oldLocation = RuntimeEnabledFeatures::slimmingPaintInvalid
ationEnabled() ? LayoutPoint() : previousPositionFromPaintInvalidationBacking(); |
1440 LayoutRect newBounds = boundsRectForPaintInvalidation(paintInvalidationConta
iner, &paintInvalidationState); | 1444 LayoutRect newBounds = boundsRectForPaintInvalidation(paintInvalidationConta
iner, &paintInvalidationState); |
1441 LayoutPoint newLocation = RuntimeEnabledFeatures::slimmingPaintInvalidationE
nabled() ? LayoutPoint() : PaintLayer::positionFromPaintInvalidationBacking(this
, &paintInvalidationContainer, &paintInvalidationState); | 1445 LayoutPoint newLocation = RuntimeEnabledFeatures::slimmingPaintInvalidationE
nabled() ? LayoutPoint() : PaintLayer::positionFromPaintInvalidationBacking(this
, &paintInvalidationContainer, &paintInvalidationState); |
1442 | 1446 |
1443 // Composited scrolling should not be included in the bounds and position tr
acking, because the graphics layer backing the scroller | 1447 // Composited scrolling should not be included in the bounds and position tr
acking, because the graphics layer backing the scroller |
1444 // does not move on scroll. | 1448 // does not move on scroll. |
1445 if (paintInvalidationContainer.usesCompositedScrolling() && &paintInvalidati
onContainer != this) { | 1449 if (paintInvalidationContainer.usesCompositedScrolling() && &paintInvalidati
onContainer != this) { |
1446 LayoutSize inverseOffset(toLayoutBox(&paintInvalidationContainer)->scrol
ledContentOffset()); | 1450 LayoutSize inverseOffset(toLayoutBox(&paintInvalidationContainer)->scrol
ledContentOffset()); |
1447 newLocation.move(inverseOffset); | 1451 newLocation.move(inverseOffset); |
(...skipping 2035 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3483 | 3487 |
3484 void LayoutObject::setMayNeedPaintInvalidation() | 3488 void LayoutObject::setMayNeedPaintInvalidation() |
3485 { | 3489 { |
3486 if (mayNeedPaintInvalidation()) | 3490 if (mayNeedPaintInvalidation()) |
3487 return; | 3491 return; |
3488 m_bitfields.setMayNeedPaintInvalidation(true); | 3492 m_bitfields.setMayNeedPaintInvalidation(true); |
3489 markContainerChainForPaintInvalidation(); | 3493 markContainerChainForPaintInvalidation(); |
3490 frameView()->scheduleVisualUpdateForPaintInvalidationIfNeeded(); | 3494 frameView()->scheduleVisualUpdateForPaintInvalidationIfNeeded(); |
3491 } | 3495 } |
3492 | 3496 |
3493 void LayoutObject::clearPaintInvalidationState(const PaintInvalidationState& pai
ntInvalidationState) | 3497 void LayoutObject::clearPaintInvalidationFlags(const PaintInvalidationState& pai
ntInvalidationState) |
3494 { | 3498 { |
3495 // paintInvalidationStateIsDirty should be kept in sync with the | 3499 // paintInvalidationStateIsDirty should be kept in sync with the |
3496 // booleans that are cleared below. | 3500 // booleans that are cleared below. |
3497 ASSERT(paintInvalidationState.forcedSubtreeInvalidationWithinContainer() ||
paintInvalidationState.forcedSubtreeInvalidationRectUpdateWithinContainer() || p
aintInvalidationStateIsDirty()); | 3501 ASSERT(paintInvalidationState.forcedSubtreeInvalidationWithinContainer() ||
paintInvalidationState.forcedSubtreeInvalidationRectUpdateWithinContainer() || p
aintInvalidationStateIsDirty()); |
3498 clearShouldDoFullPaintInvalidation(); | 3502 clearShouldDoFullPaintInvalidation(); |
3499 m_bitfields.setChildShouldCheckForPaintInvalidation(false); | 3503 m_bitfields.setChildShouldCheckForPaintInvalidation(false); |
3500 m_bitfields.setNeededLayoutBecauseOfChildren(false); | 3504 m_bitfields.setNeededLayoutBecauseOfChildren(false); |
3501 m_bitfields.setShouldInvalidateOverflowForPaint(false); | 3505 m_bitfields.setShouldInvalidateOverflowForPaint(false); |
3502 m_bitfields.setMayNeedPaintInvalidation(false); | 3506 m_bitfields.setMayNeedPaintInvalidation(false); |
3503 m_bitfields.setShouldInvalidateSelection(false); | 3507 m_bitfields.setShouldInvalidateSelection(false); |
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3733 const blink::LayoutObject* root = object1; | 3737 const blink::LayoutObject* root = object1; |
3734 while (root->parent()) | 3738 while (root->parent()) |
3735 root = root->parent(); | 3739 root = root->parent(); |
3736 root->showLayoutTreeAndMark(object1, "*", object2, "-", 0); | 3740 root->showLayoutTreeAndMark(object1, "*", object2, "-", 0); |
3737 } else { | 3741 } else { |
3738 fprintf(stderr, "Cannot showLayoutTree. Root is (nil)\n"); | 3742 fprintf(stderr, "Cannot showLayoutTree. Root is (nil)\n"); |
3739 } | 3743 } |
3740 } | 3744 } |
3741 | 3745 |
3742 #endif | 3746 #endif |
OLD | NEW |