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 1226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1237 // This is valid because we want to invalidate the client in the display
item list of the current backing. | 1237 // This is valid because we want to invalidate the client in the display
item list of the current backing. |
1238 DisableCompositingQueryAsserts disabler; | 1238 DisableCompositingQueryAsserts disabler; |
1239 if (const PaintLayer* paintInvalidationLayer = enclosingLayer->enclosing
LayerForPaintInvalidationCrossingFrameBoundaries()) | 1239 if (const PaintLayer* paintInvalidationLayer = enclosingLayer->enclosing
LayerForPaintInvalidationCrossingFrameBoundaries()) |
1240 paintInvalidationLayer->layoutObject()->invalidateDisplayItemClientO
nBacking(displayItemClient, PaintInvalidationFull); | 1240 paintInvalidationLayer->layoutObject()->invalidateDisplayItemClientO
nBacking(displayItemClient, PaintInvalidationFull); |
1241 enclosingLayer->setNeedsRepaint(); | 1241 enclosingLayer->setNeedsRepaint(); |
1242 } | 1242 } |
1243 } | 1243 } |
1244 | 1244 |
1245 void LayoutObject::invalidateDisplayItemClients(const LayoutBoxModelObject& pain
tInvalidationContainer, PaintInvalidationReason invalidationReason) const | 1245 void LayoutObject::invalidateDisplayItemClients(const LayoutBoxModelObject& pain
tInvalidationContainer, PaintInvalidationReason invalidationReason) const |
1246 { | 1246 { |
| 1247 // It's caller's responsibility to ensure enclosingLayer's needsRepaint is s
et. |
| 1248 // Don't set the flag here because enclosingLayer() has cost and the caller
can use |
| 1249 // various ways (e.g. PaintInvalidatinState::enclosingLayer()) to reduce the
cost. |
| 1250 ASSERT(!enclosingLayer() || enclosingLayer()->needsRepaint()); |
1247 paintInvalidationContainer.invalidateDisplayItemClientOnBacking(*this, inval
idationReason); | 1251 paintInvalidationContainer.invalidateDisplayItemClientOnBacking(*this, inval
idationReason); |
| 1252 } |
1248 | 1253 |
1249 if (PaintLayer* enclosingLayer = this->enclosingLayer()) | 1254 void LayoutObject::invalidateDisplayItemClientsWithPaintInvalidationState(const
LayoutBoxModelObject& paintInvalidationContainer, const PaintInvalidationState&
paintInvalidationState, PaintInvalidationReason invalidationReason) const |
1250 enclosingLayer->setNeedsRepaint(); | 1255 { |
| 1256 ASSERT(&paintInvalidationState.enclosingLayer(*this) == enclosingLayer()); |
| 1257 paintInvalidationState.enclosingLayer(*this).setNeedsRepaint(); |
| 1258 invalidateDisplayItemClients(paintInvalidationContainer, invalidationReason)
; |
1251 } | 1259 } |
1252 | 1260 |
1253 LayoutRect LayoutObject::boundsRectForPaintInvalidation(const LayoutBoxModelObje
ct& paintInvalidationContainer, const PaintInvalidationState* paintInvalidationS
tate) const | 1261 LayoutRect LayoutObject::boundsRectForPaintInvalidation(const LayoutBoxModelObje
ct& paintInvalidationContainer, const PaintInvalidationState* paintInvalidationS
tate) const |
1254 { | 1262 { |
1255 return PaintLayer::computePaintInvalidationRect(*this, paintInvalidationCont
ainer.layer(), paintInvalidationState); | 1263 return PaintLayer::computePaintInvalidationRect(*this, paintInvalidationCont
ainer.layer(), paintInvalidationState); |
1256 } | 1264 } |
1257 | 1265 |
1258 const LayoutBoxModelObject* LayoutObject::invalidatePaintRectangleInternal(const
LayoutRect& dirtyRect) const | 1266 const LayoutBoxModelObject* LayoutObject::invalidatePaintRectangleInternal(const
LayoutRect& dirtyRect) const |
1259 { | 1267 { |
1260 RELEASE_ASSERT(isRooted()); | 1268 RELEASE_ASSERT(isRooted()); |
1261 | 1269 |
1262 if (dirtyRect.isEmpty()) | 1270 if (dirtyRect.isEmpty()) |
1263 return nullptr; | 1271 return nullptr; |
1264 | 1272 |
1265 if (view()->document().printing()) | 1273 if (view()->document().printing()) |
1266 return nullptr; // Don't invalidate paints if we're printing. | 1274 return nullptr; // Don't invalidate paints if we're printing. |
1267 | 1275 |
1268 const LayoutBoxModelObject& paintInvalidationContainer = containerForPaintIn
validation(); | 1276 const LayoutBoxModelObject& paintInvalidationContainer = containerForPaintIn
validation(); |
1269 LayoutRect dirtyRectOnBacking = dirtyRect; | 1277 LayoutRect dirtyRectOnBacking = dirtyRect; |
1270 PaintLayer::mapRectToPaintInvalidationBacking(this, &paintInvalidationContai
ner, dirtyRectOnBacking); | 1278 PaintLayer::mapRectToPaintInvalidationBacking(this, &paintInvalidationContai
ner, dirtyRectOnBacking); |
1271 invalidatePaintUsingContainer(paintInvalidationContainer, dirtyRectOnBacking
, PaintInvalidationRectangle); | 1279 invalidatePaintUsingContainer(paintInvalidationContainer, dirtyRectOnBacking
, PaintInvalidationRectangle); |
1272 return &paintInvalidationContainer; | 1280 return &paintInvalidationContainer; |
1273 } | 1281 } |
1274 | 1282 |
1275 void LayoutObject::invalidatePaintRectangle(const LayoutRect& rect) const | 1283 void LayoutObject::invalidatePaintRectangle(const LayoutRect& rect) const |
1276 { | 1284 { |
| 1285 if (PaintLayer* enclosingLayer = this->enclosingLayer()) |
| 1286 enclosingLayer->setNeedsRepaint(); |
1277 const LayoutBoxModelObject* paintInvalidationContainer = invalidatePaintRect
angleInternal(rect); | 1287 const LayoutBoxModelObject* paintInvalidationContainer = invalidatePaintRect
angleInternal(rect); |
1278 if (paintInvalidationContainer) | 1288 if (paintInvalidationContainer) |
1279 invalidateDisplayItemClients(*paintInvalidationContainer, PaintInvalidat
ionRectangle); | 1289 invalidateDisplayItemClients(*paintInvalidationContainer, PaintInvalidat
ionRectangle); |
1280 } | 1290 } |
1281 | 1291 |
1282 void LayoutObject::invalidatePaintRectangleNotInvalidatingDisplayItemClients(con
st LayoutRect& r) const | 1292 void LayoutObject::invalidatePaintRectangleNotInvalidatingDisplayItemClients(con
st LayoutRect& r) const |
1283 { | 1293 { |
1284 invalidatePaintRectangleInternal(r); | 1294 invalidatePaintRectangleInternal(r); |
1285 } | 1295 } |
1286 | 1296 |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1341 selectionPaintInvalidationMap = new SelectionPaintInvalidationMap(); | 1351 selectionPaintInvalidationMap = new SelectionPaintInvalidationMap(); |
1342 } | 1352 } |
1343 | 1353 |
1344 if (selectionRect.isEmpty()) | 1354 if (selectionRect.isEmpty()) |
1345 selectionPaintInvalidationMap->remove(this); | 1355 selectionPaintInvalidationMap->remove(this); |
1346 else | 1356 else |
1347 selectionPaintInvalidationMap->set(this, selectionRect); | 1357 selectionPaintInvalidationMap->set(this, selectionRect); |
1348 } | 1358 } |
1349 | 1359 |
1350 // TODO(wangxianzhu): Remove this for slimming paint v2 because we won't care ab
out paint invalidation rects. | 1360 // TODO(wangxianzhu): Remove this for slimming paint v2 because we won't care ab
out paint invalidation rects. |
1351 inline void LayoutObject::invalidateSelectionIfNeeded(const LayoutBoxModelObject
& paintInvalidationContainer, PaintInvalidationReason invalidationReason) | 1361 inline void LayoutObject::invalidateSelectionIfNeeded(const LayoutBoxModelObject
& paintInvalidationContainer, const PaintInvalidationState& paintInvalidationSta
te, PaintInvalidationReason invalidationReason) |
1352 { | 1362 { |
1353 // Update selection rect when we are doing full invalidation (in case that t
he object is moved, composite status changed, etc.) | 1363 // Update selection rect when we are doing full invalidation (in case that t
he object is moved, composite status changed, etc.) |
1354 // or shouldInvalidationSelection is set (in case that the selection itself
changed). | 1364 // or shouldInvalidationSelection is set (in case that the selection itself
changed). |
1355 bool fullInvalidation = view()->doingFullPaintInvalidation() || isFullPaintI
nvalidationReason(invalidationReason); | 1365 bool fullInvalidation = view()->doingFullPaintInvalidation() || isFullPaintI
nvalidationReason(invalidationReason); |
1356 if (!fullInvalidation && !shouldInvalidateSelection()) | 1366 if (!fullInvalidation && !shouldInvalidateSelection()) |
1357 return; | 1367 return; |
1358 | 1368 |
1359 LayoutRect oldSelectionRect = previousSelectionRectForPaintInvalidation(); | 1369 LayoutRect oldSelectionRect = previousSelectionRectForPaintInvalidation(); |
1360 LayoutRect newSelectionRect = selectionRectForPaintInvalidation(&paintInvali
dationContainer); | 1370 LayoutRect newSelectionRect = selectionRectForPaintInvalidation(&paintInvali
dationContainer); |
1361 | 1371 |
1362 // Composited scrolling should not be included in the bounds and position tr
acking, because the graphics layer backing the scroller | 1372 // Composited scrolling should not be included in the bounds and position tr
acking, because the graphics layer backing the scroller |
1363 // does not move on scroll. | 1373 // does not move on scroll. |
1364 if (paintInvalidationContainer.usesCompositedScrolling() && &paintInvalidati
onContainer != this) { | 1374 if (paintInvalidationContainer.usesCompositedScrolling() && &paintInvalidati
onContainer != this) { |
1365 LayoutSize inverseOffset(toLayoutBox(&paintInvalidationContainer)->scrol
ledContentOffset()); | 1375 LayoutSize inverseOffset(toLayoutBox(&paintInvalidationContainer)->scrol
ledContentOffset()); |
1366 newSelectionRect.move(inverseOffset); | 1376 newSelectionRect.move(inverseOffset); |
1367 } | 1377 } |
1368 | 1378 |
1369 setPreviousSelectionRectForPaintInvalidation(newSelectionRect); | 1379 setPreviousSelectionRectForPaintInvalidation(newSelectionRect); |
1370 | 1380 |
1371 if (shouldInvalidateSelection()) | 1381 if (shouldInvalidateSelection()) |
1372 invalidateDisplayItemClients(paintInvalidationContainer, PaintInvalidati
onSelection); | 1382 invalidateDisplayItemClientsWithPaintInvalidationState(paintInvalidation
Container, paintInvalidationState, PaintInvalidationSelection); |
1373 | 1383 |
1374 if (fullInvalidation) | 1384 if (fullInvalidation) |
1375 return; | 1385 return; |
1376 | 1386 |
1377 fullyInvalidatePaint(paintInvalidationContainer, PaintInvalidationSelection,
oldSelectionRect, newSelectionRect); | 1387 fullyInvalidatePaint(paintInvalidationContainer, PaintInvalidationSelection,
oldSelectionRect, newSelectionRect); |
1378 } | 1388 } |
1379 | 1389 |
1380 PaintInvalidationReason LayoutObject::invalidatePaintIfNeeded(PaintInvalidationS
tate& paintInvalidationState, const LayoutBoxModelObject& paintInvalidationConta
iner) | 1390 PaintInvalidationReason LayoutObject::invalidatePaintIfNeeded(PaintInvalidationS
tate& paintInvalidationState, const LayoutBoxModelObject& paintInvalidationConta
iner) |
1381 { | 1391 { |
1382 LayoutView* v = view(); | 1392 LayoutView* v = view(); |
(...skipping 19 matching lines...) Expand all Loading... |
1402 | 1412 |
1403 if (!shouldCheckForPaintInvalidationRegardlessOfPaintInvalidationState() &&
!paintInvalidationState.forcedSubtreeInvalidationWithinContainer()) { | 1413 if (!shouldCheckForPaintInvalidationRegardlessOfPaintInvalidationState() &&
!paintInvalidationState.forcedSubtreeInvalidationWithinContainer()) { |
1404 ASSERT(paintInvalidationState.forcedSubtreeInvalidationRectUpdateWithinC
ontainer()); | 1414 ASSERT(paintInvalidationState.forcedSubtreeInvalidationRectUpdateWithinC
ontainer()); |
1405 return PaintInvalidationNone; | 1415 return PaintInvalidationNone; |
1406 } | 1416 } |
1407 | 1417 |
1408 PaintInvalidationReason invalidationReason = paintInvalidationReason(paintIn
validationContainer, oldBounds, oldLocation, newBounds, newLocation); | 1418 PaintInvalidationReason invalidationReason = paintInvalidationReason(paintIn
validationContainer, oldBounds, oldLocation, newBounds, newLocation); |
1409 | 1419 |
1410 // We need to invalidate the selection before checking for whether we are do
ing a full invalidation. | 1420 // We need to invalidate the selection before checking for whether we are do
ing a full invalidation. |
1411 // This is because we need to update the old rect regardless. | 1421 // This is because we need to update the old rect regardless. |
1412 invalidateSelectionIfNeeded(paintInvalidationContainer, invalidationReason); | 1422 invalidateSelectionIfNeeded(paintInvalidationContainer, paintInvalidationSta
te, invalidationReason); |
1413 | 1423 |
1414 TRACE_EVENT2(TRACE_DISABLED_BY_DEFAULT("blink.invalidation"), "LayoutObject:
:invalidatePaintIfNeeded()", | 1424 TRACE_EVENT2(TRACE_DISABLED_BY_DEFAULT("blink.invalidation"), "LayoutObject:
:invalidatePaintIfNeeded()", |
1415 "object", this->debugName().ascii(), | 1425 "object", this->debugName().ascii(), |
1416 "info", jsonObjectForOldAndNewRects(oldBounds, oldLocation, newBounds, n
ewLocation)); | 1426 "info", jsonObjectForOldAndNewRects(oldBounds, oldLocation, newBounds, n
ewLocation)); |
1417 | 1427 |
1418 bool boxDecorationBackgroundObscured = boxDecorationBackgroundIsKnownToBeObs
cured(); | 1428 bool boxDecorationBackgroundObscured = boxDecorationBackgroundIsKnownToBeObs
cured(); |
1419 if (!isFullPaintInvalidationReason(invalidationReason) && boxDecorationBackg
roundObscured != m_bitfields.lastBoxDecorationBackgroundObscured()) | 1429 if (!isFullPaintInvalidationReason(invalidationReason) && boxDecorationBackg
roundObscured != m_bitfields.lastBoxDecorationBackgroundObscured()) |
1420 invalidationReason = PaintInvalidationBackgroundObscurationChange; | 1430 invalidationReason = PaintInvalidationBackgroundObscurationChange; |
1421 m_bitfields.setLastBoxDecorationBackgroundObscured(boxDecorationBackgroundOb
scured); | 1431 m_bitfields.setLastBoxDecorationBackgroundObscured(boxDecorationBackgroundOb
scured); |
1422 | 1432 |
1423 if (invalidationReason == PaintInvalidationNone) { | 1433 if (invalidationReason == PaintInvalidationNone) { |
1424 // TODO(trchen): Currently we don't keep track of paint offset of layout
objects. | 1434 // TODO(trchen): Currently we don't keep track of paint offset of layout
objects. |
1425 // There are corner cases that the display items need to be invalidated
for paint offset | 1435 // There are corner cases that the display items need to be invalidated
for paint offset |
1426 // mutation, but incurs no pixel difference (i.e. bounds stay the same)
so no rect-based | 1436 // mutation, but incurs no pixel difference (i.e. bounds stay the same)
so no rect-based |
1427 // invalidation is issued. See crbug.com/508383 and crbug.com/515977. | 1437 // invalidation is issued. See crbug.com/508383 and crbug.com/515977. |
1428 // This is a workaround to force display items to update paint offset. | 1438 // This is a workaround to force display items to update paint offset. |
1429 if (!RuntimeEnabledFeatures::slimmingPaintOffsetCachingEnabled() && pain
tInvalidationState.forcedSubtreeInvalidationWithinContainer()) | 1439 if (!RuntimeEnabledFeatures::slimmingPaintOffsetCachingEnabled() && pain
tInvalidationState.forcedSubtreeInvalidationWithinContainer()) |
1430 invalidateDisplayItemClients(paintInvalidationContainer, invalidatio
nReason); | 1440 invalidateDisplayItemClientsWithPaintInvalidationState(paintInvalida
tionContainer, paintInvalidationState, invalidationReason); |
1431 | 1441 |
1432 return invalidationReason; | 1442 return invalidationReason; |
1433 } | 1443 } |
1434 | 1444 |
1435 invalidateDisplayItemClients(paintInvalidationContainer, invalidationReason)
; | 1445 invalidateDisplayItemClientsWithPaintInvalidationState(paintInvalidationCont
ainer, paintInvalidationState, invalidationReason); |
1436 | 1446 |
1437 if (invalidationReason == PaintInvalidationIncremental) { | 1447 if (invalidationReason == PaintInvalidationIncremental) { |
1438 incrementallyInvalidatePaint(paintInvalidationContainer, oldBounds, newB
ounds, newLocation); | 1448 incrementallyInvalidatePaint(paintInvalidationContainer, oldBounds, newB
ounds, newLocation); |
1439 return invalidationReason; | 1449 return invalidationReason; |
1440 } | 1450 } |
1441 | 1451 |
1442 fullyInvalidatePaint(paintInvalidationContainer, invalidationReason, oldBoun
ds, newBounds); | 1452 fullyInvalidatePaint(paintInvalidationContainer, invalidationReason, oldBoun
ds, newBounds); |
1443 | 1453 |
1444 return invalidationReason; | 1454 return invalidationReason; |
1445 } | 1455 } |
(...skipping 1947 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3393 PaintLayer* enclosingLayer = this->enclosingLayer(); | 3403 PaintLayer* enclosingLayer = this->enclosingLayer(); |
3394 if (!enclosingLayer) | 3404 if (!enclosingLayer) |
3395 return; | 3405 return; |
3396 const PaintLayer* paintInvalidationLayer = enclosingLayer->enclosingLaye
rForPaintInvalidationCrossingFrameBoundaries(); | 3406 const PaintLayer* paintInvalidationLayer = enclosingLayer->enclosingLaye
rForPaintInvalidationCrossingFrameBoundaries(); |
3397 if (!paintInvalidationLayer) | 3407 if (!paintInvalidationLayer) |
3398 return; | 3408 return; |
3399 paintInvalidationContainer = paintInvalidationLayer->layoutObject(); | 3409 paintInvalidationContainer = paintInvalidationLayer->layoutObject(); |
3400 } | 3410 } |
3401 | 3411 |
3402 traverseNonCompositingDescendants(const_cast<LayoutObject&>(*this), [&paintI
nvalidationContainer, paintInvalidationReason](LayoutObject& object) { | 3412 traverseNonCompositingDescendants(const_cast<LayoutObject&>(*this), [&paintI
nvalidationContainer, paintInvalidationReason](LayoutObject& object) { |
| 3413 if (object.hasLayer()) |
| 3414 toLayoutBoxModelObject(object).layer()->setNeedsRepaint(); |
3403 object.invalidateDisplayItemClients(*paintInvalidationContainer, paintIn
validationReason); | 3415 object.invalidateDisplayItemClients(*paintInvalidationContainer, paintIn
validationReason); |
3404 }); | 3416 }); |
3405 } | 3417 } |
3406 | 3418 |
3407 void LayoutObject::invalidatePaintOfPreviousPaintInvalidationRect(const LayoutBo
xModelObject& paintInvalidationContainer, PaintInvalidationReason reason) | 3419 void LayoutObject::invalidatePaintOfPreviousPaintInvalidationRect(const LayoutBo
xModelObject& paintInvalidationContainer, PaintInvalidationReason reason) |
3408 { | 3420 { |
| 3421 // It's caller's responsibility to ensure enclosingLayer's needsRepaint is s
et. |
| 3422 // Don't set the flag here because enclosingLayer() has cost and the caller
can use |
| 3423 // various ways (e.g. PaintInvalidatinState::enclosingLayer()) to reduce the
cost. |
| 3424 ASSERT(!enclosingLayer() || enclosingLayer()->needsRepaint()); |
| 3425 |
3409 // These disablers are valid because we want to use the current compositing/
invalidation status. | 3426 // These disablers are valid because we want to use the current compositing/
invalidation status. |
3410 DisablePaintInvalidationStateAsserts invalidationDisabler; | 3427 DisablePaintInvalidationStateAsserts invalidationDisabler; |
3411 DisableCompositingQueryAsserts compositingDisabler; | 3428 DisableCompositingQueryAsserts compositingDisabler; |
3412 | 3429 |
3413 LayoutRect invalidationRect = previousPaintInvalidationRect(); | 3430 LayoutRect invalidationRect = previousPaintInvalidationRect(); |
3414 adjustInvalidationRectForCompositedScrolling(invalidationRect, paintInvalida
tionContainer); | 3431 adjustInvalidationRectForCompositedScrolling(invalidationRect, paintInvalida
tionContainer); |
3415 invalidatePaintUsingContainer(paintInvalidationContainer, invalidationRect,
PaintInvalidationLayer); | 3432 invalidatePaintUsingContainer(paintInvalidationContainer, invalidationRect,
PaintInvalidationLayer); |
3416 invalidateDisplayItemClients(paintInvalidationContainer, PaintInvalidationLa
yer); | 3433 invalidateDisplayItemClients(paintInvalidationContainer, PaintInvalidationLa
yer); |
3417 | 3434 |
3418 // This method may be used to invalidate paint of an object changing paint i
nvalidation container. | 3435 // This method may be used to invalidate paint of an object changing paint i
nvalidation container. |
3419 // Clear previous paint invalidation rect on the original paint invalidation
container to avoid | 3436 // Clear previous paint invalidation rect on the original paint invalidation
container to avoid |
3420 // under-invalidation if the new paint invalidation rect on the new paint in
validation container | 3437 // under-invalidation if the new paint invalidation rect on the new paint in
validation container |
3421 // happens to be the same as the old one. | 3438 // happens to be the same as the old one. |
3422 clearPreviousPaintInvalidationRects(); | 3439 clearPreviousPaintInvalidationRects(); |
3423 } | 3440 } |
3424 | 3441 |
3425 void LayoutObject::invalidatePaintIncludingNonCompositingDescendants() | 3442 void LayoutObject::invalidatePaintIncludingNonCompositingDescendants() |
3426 { | 3443 { |
3427 // Since we're only painting non-composited layers, we know that they all sh
are the same paintInvalidationContainer. | 3444 // Since we're only painting non-composited layers, we know that they all sh
are the same paintInvalidationContainer. |
3428 const LayoutBoxModelObject& paintInvalidationContainer = containerForPaintIn
validation(); | 3445 const LayoutBoxModelObject& paintInvalidationContainer = containerForPaintIn
validation(); |
3429 traverseNonCompositingDescendants(*this, [&paintInvalidationContainer](Layou
tObject& object) { | 3446 traverseNonCompositingDescendants(*this, [&paintInvalidationContainer](Layou
tObject& object) { |
| 3447 if (object.hasLayer()) |
| 3448 toLayoutBoxModelObject(object).layer()->setNeedsRepaint(); |
3430 object.invalidatePaintOfPreviousPaintInvalidationRect(paintInvalidationC
ontainer, PaintInvalidationLayer); | 3449 object.invalidatePaintOfPreviousPaintInvalidationRect(paintInvalidationC
ontainer, PaintInvalidationLayer); |
3431 }); | 3450 }); |
3432 } | 3451 } |
3433 | 3452 |
3434 // FIXME: If we had a flag to force invalidations in a whole subtree, we could g
et rid of this function (crbug.com/410097). | 3453 // FIXME: If we had a flag to force invalidations in a whole subtree, we could g
et rid of this function (crbug.com/410097). |
3435 void LayoutObject::setShouldDoFullPaintInvalidationIncludingNonCompositingDescen
dants() | 3454 void LayoutObject::setShouldDoFullPaintInvalidationIncludingNonCompositingDescen
dants() |
3436 { | 3455 { |
3437 // Need to access the current compositing status. | 3456 // Need to access the current compositing status. |
3438 DisableCompositingQueryAsserts disabler; | 3457 DisableCompositingQueryAsserts disabler; |
3439 traverseNonCompositingDescendants(*this, [](LayoutObject& object) { | 3458 traverseNonCompositingDescendants(*this, [](LayoutObject& object) { |
3440 object.setShouldDoFullPaintInvalidation(); | 3459 object.setShouldDoFullPaintInvalidation(); |
3441 }); | 3460 }); |
3442 } | 3461 } |
3443 | 3462 |
| 3463 void LayoutObject::invalidatePaintIncludingNonSelfPaintingLayerDescendantsIntern
al(const LayoutBoxModelObject& paintInvalidationContainer) |
| 3464 { |
| 3465 invalidatePaintOfPreviousPaintInvalidationRect(paintInvalidationContainer, P
aintInvalidationLayer); |
| 3466 for (LayoutObject* child = slowFirstChild(); child; child = child->nextSibli
ng()) { |
| 3467 if (child->hasLayer()) |
| 3468 toLayoutBoxModelObject(child)->layer()->setNeedsRepaint(); |
| 3469 if (!child->hasLayer() || !toLayoutBoxModelObject(child)->layer()->isSel
fPaintingLayer()) |
| 3470 child->invalidatePaintIncludingNonSelfPaintingLayerDescendantsIntern
al(paintInvalidationContainer); |
| 3471 } |
| 3472 } |
| 3473 |
3444 void LayoutObject::invalidatePaintIncludingNonSelfPaintingLayerDescendants(const
LayoutBoxModelObject& paintInvalidationContainer) | 3474 void LayoutObject::invalidatePaintIncludingNonSelfPaintingLayerDescendants(const
LayoutBoxModelObject& paintInvalidationContainer) |
3445 { | 3475 { |
3446 invalidatePaintOfPreviousPaintInvalidationRect(paintInvalidationContainer, P
aintInvalidationLayer); | 3476 if (PaintLayer* enclosingLayer = this->enclosingLayer()) |
3447 for (LayoutObject* child = slowFirstChild(); child; child = child->nextSibli
ng()) { | 3477 enclosingLayer->setNeedsRepaint(); |
3448 if (!child->hasLayer() || !toLayoutBoxModelObject(child)->layer()->isSel
fPaintingLayer()) | 3478 invalidatePaintIncludingNonSelfPaintingLayerDescendantsInternal(paintInvalid
ationContainer); |
3449 child->invalidatePaintIncludingNonSelfPaintingLayerDescendants(paint
InvalidationContainer); | |
3450 } | |
3451 } | 3479 } |
3452 | 3480 |
3453 void LayoutObject::setIsBackgroundAttachmentFixedObject(bool isBackgroundAttachm
entFixedObject) | 3481 void LayoutObject::setIsBackgroundAttachmentFixedObject(bool isBackgroundAttachm
entFixedObject) |
3454 { | 3482 { |
3455 ASSERT(frameView()); | 3483 ASSERT(frameView()); |
3456 if (m_bitfields.isBackgroundAttachmentFixedObject() == isBackgroundAttachmen
tFixedObject) | 3484 if (m_bitfields.isBackgroundAttachmentFixedObject() == isBackgroundAttachmen
tFixedObject) |
3457 return; | 3485 return; |
3458 m_bitfields.setIsBackgroundAttachmentFixedObject(isBackgroundAttachmentFixed
Object); | 3486 m_bitfields.setIsBackgroundAttachmentFixedObject(isBackgroundAttachmentFixed
Object); |
3459 if (isBackgroundAttachmentFixedObject) | 3487 if (isBackgroundAttachmentFixedObject) |
3460 frameView()->addBackgroundAttachmentFixedObject(this); | 3488 frameView()->addBackgroundAttachmentFixedObject(this); |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3511 const blink::LayoutObject* root = object1; | 3539 const blink::LayoutObject* root = object1; |
3512 while (root->parent()) | 3540 while (root->parent()) |
3513 root = root->parent(); | 3541 root = root->parent(); |
3514 root->showLayoutTreeAndMark(object1, "*", object2, "-", 0); | 3542 root->showLayoutTreeAndMark(object1, "*", object2, "-", 0); |
3515 } else { | 3543 } else { |
3516 fprintf(stderr, "Cannot showLayoutTree. Root is (nil)\n"); | 3544 fprintf(stderr, "Cannot showLayoutTree. Root is (nil)\n"); |
3517 } | 3545 } |
3518 } | 3546 } |
3519 | 3547 |
3520 #endif | 3548 #endif |
OLD | NEW |