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 3373 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3384 object.invalidateDisplayItemClients(m_paintInvalidationContainer, Pa intInvalidationFull, invalidationRect, invalidationRect); | 3384 object.invalidateDisplayItemClients(m_paintInvalidationContainer, Pa intInvalidationFull, invalidationRect, invalidationRect); |
3385 } | 3385 } |
3386 private: | 3386 private: |
3387 const LayoutBoxModelObject& m_paintInvalidationContainer; | 3387 const LayoutBoxModelObject& m_paintInvalidationContainer; |
3388 }; | 3388 }; |
3389 | 3389 |
3390 const LayoutBoxModelObject& paintInvalidationContainer = *paintInvalidationL ayer->layoutObject(); | 3390 const LayoutBoxModelObject& paintInvalidationContainer = *paintInvalidationL ayer->layoutObject(); |
3391 traverseNonCompositingDescendants(const_cast<LayoutObject&>(object), Functor (paintInvalidationContainer)); | 3391 traverseNonCompositingDescendants(const_cast<LayoutObject&>(object), Functor (paintInvalidationContainer)); |
3392 } | 3392 } |
3393 | 3393 |
3394 void LayoutObject::invalidatePaintOfPreviousPaintInvalidationRect(const LayoutBo xModelObject& paintInvalidationContainer, PaintInvalidationReason reason) const | |
3395 { | |
3396 // These disablers are valid because we want to use the current compositing/ invalidation status. | |
3397 DisablePaintInvalidationStateAsserts invalidationDisabler; | |
3398 DisableCompositingQueryAsserts compositingDisabler; | |
3399 | |
3400 LayoutRect invalidationRect = previousPaintInvalidationRect(); | |
3401 adjustInvalidationRectForCompositedScrolling(invalidationRect, paintInvalida tionContainer); | |
3402 invalidatePaintUsingContainer(paintInvalidationContainer, invalidationRect, PaintInvalidationLayer); | |
3403 invalidateDisplayItemClients(paintInvalidationContainer, PaintInvalidationLa yer, invalidationRect, invalidationRect); | |
3404 } | |
3405 | |
3394 void LayoutObject::invalidatePaintIncludingNonCompositingDescendants() | 3406 void LayoutObject::invalidatePaintIncludingNonCompositingDescendants() |
3395 { | 3407 { |
3396 class Functor : public LayoutObjectTraversalFunctor { | 3408 class Functor : public LayoutObjectTraversalFunctor { |
3397 public: | 3409 public: |
3398 explicit Functor(const LayoutBoxModelObject& paintInvalidationContainer) : m_paintInvalidationContainer(paintInvalidationContainer) { } | 3410 explicit Functor(const LayoutBoxModelObject& paintInvalidationContainer) : m_paintInvalidationContainer(paintInvalidationContainer) { } |
3399 void operator()(LayoutObject& object) const override | 3411 void operator()(LayoutObject& object) const override |
3400 { | 3412 { |
3401 LayoutRect invalidationRect = object.previousPaintInvalidationRect() ; | 3413 object.invalidatePaintOfPreviousPaintInvalidationRect(m_paintInvalid ationContainer, PaintInvalidationLayer); |
3402 object.adjustInvalidationRectForCompositedScrolling(invalidationRect , m_paintInvalidationContainer); | 3414 object.setPreviousPaintInvalidationRect(LayoutRect()); |
3403 object.invalidatePaintUsingContainer(m_paintInvalidationContainer, i nvalidationRect, PaintInvalidationLayer); | |
3404 object.invalidateDisplayItemClients(m_paintInvalidationContainer, Pa intInvalidationLayer, invalidationRect, invalidationRect); | |
3405 } | 3415 } |
3406 private: | 3416 private: |
3407 const LayoutBoxModelObject& m_paintInvalidationContainer; | 3417 const LayoutBoxModelObject& m_paintInvalidationContainer; |
3408 }; | 3418 }; |
3409 | 3419 |
3410 // Since we're only painting non-composited layers, we know that they all sh are the same paintInvalidationContainer. | 3420 // Since we're only painting non-composited layers, we know that they all sh are the same paintInvalidationContainer. |
3411 const LayoutBoxModelObject& paintInvalidationContainer = containerForPaintIn validationOnRootedTree(); | 3421 const LayoutBoxModelObject& paintInvalidationContainer = containerForPaintIn validationOnRootedTree(); |
3412 traverseNonCompositingDescendants(*this, Functor(paintInvalidationContainer) ); | 3422 traverseNonCompositingDescendants(*this, Functor(paintInvalidationContainer) ); |
3413 } | 3423 } |
3414 | 3424 |
3415 // FIXME: If we had a flag to force invalidations in a whole subtree, we could g et rid of this function (crbug.com/410097). | 3425 // FIXME: If we had a flag to force invalidations in a whole subtree, we could g et rid of this function (crbug.com/410097). |
3416 void LayoutObject::setShouldDoFullPaintInvalidationIncludingNonCompositingDescen dants() | 3426 void LayoutObject::setShouldDoFullPaintInvalidationIncludingNonCompositingDescen dants() |
3417 { | 3427 { |
3418 class Functor : public LayoutObjectTraversalFunctor { | 3428 class Functor : public LayoutObjectTraversalFunctor { |
3419 public: | 3429 public: |
3420 void operator()(LayoutObject& object) const override | 3430 void operator()(LayoutObject& object) const override |
3421 { | 3431 { |
3422 object.setShouldDoFullPaintInvalidation(); | 3432 object.setShouldDoFullPaintInvalidation(); |
3423 } | 3433 } |
3424 }; | 3434 }; |
3425 | 3435 |
3426 // Need to access the current compositing status. | 3436 // Need to access the current compositing status. |
3427 DisableCompositingQueryAsserts disabler; | 3437 DisableCompositingQueryAsserts disabler; |
3428 traverseNonCompositingDescendants(*this, Functor()); | 3438 traverseNonCompositingDescendants(*this, Functor()); |
3429 } | 3439 } |
3430 | 3440 |
3441 void LayoutObject::invalidatePaintIncludingNonLayerDescendantsInternal(const Lay outBoxModelObject& paintInvalidationContainer) | |
chrishtr
2015/10/13 17:49:01
NonPaintLayer
Xianzhu
2015/10/13 23:58:12
Changed to invalidatePaintIncludingNonSelfPainting
| |
3442 { | |
3443 invalidatePaintOfPreviousPaintInvalidationRect(paintInvalidationContainer, P aintInvalidationLayer); | |
3444 setPreviousPaintInvalidationRect(LayoutRect()); | |
3445 for (LayoutObject* child = slowFirstChild(); child; child = child->nextSibli ng()) { | |
3446 if (!child->hasLayer()) | |
chrishtr
2015/10/13 17:49:00
What about non-self-painting layers?
Xianzhu
2015/10/13 23:58:12
We should also invalidate them. Done.
| |
3447 child->invalidatePaintIncludingNonLayerDescendantsInternal(paintInva lidationContainer); | |
3448 } | |
3449 } | |
3450 | |
3451 void LayoutObject::invalidatePaintIncludingNonLayerDescendants() | |
3452 { | |
3453 invalidatePaintIncludingNonLayerDescendantsInternal(containerForPaintInvalid ationOnRootedTree()); | |
3454 } | |
3455 | |
3431 void LayoutObject::setIsSlowRepaintObject(bool isSlowRepaintObject) | 3456 void LayoutObject::setIsSlowRepaintObject(bool isSlowRepaintObject) |
3432 { | 3457 { |
3433 ASSERT(frameView()); | 3458 ASSERT(frameView()); |
3434 if (m_bitfields.isSlowRepaintObject() == isSlowRepaintObject) | 3459 if (m_bitfields.isSlowRepaintObject() == isSlowRepaintObject) |
3435 return; | 3460 return; |
3436 m_bitfields.setIsSlowRepaintObject(isSlowRepaintObject); | 3461 m_bitfields.setIsSlowRepaintObject(isSlowRepaintObject); |
3437 if (isSlowRepaintObject) | 3462 if (isSlowRepaintObject) |
3438 frameView()->addSlowRepaintObject(); | 3463 frameView()->addSlowRepaintObject(); |
3439 else | 3464 else |
3440 frameView()->removeSlowRepaintObject(); | 3465 frameView()->removeSlowRepaintObject(); |
(...skipping 30 matching lines...) Expand all Loading... | |
3471 const blink::LayoutObject* root = object1; | 3496 const blink::LayoutObject* root = object1; |
3472 while (root->parent()) | 3497 while (root->parent()) |
3473 root = root->parent(); | 3498 root = root->parent(); |
3474 root->showLayoutTreeAndMark(object1, "*", object2, "-", 0); | 3499 root->showLayoutTreeAndMark(object1, "*", object2, "-", 0); |
3475 } else { | 3500 } else { |
3476 fprintf(stderr, "Cannot showLayoutTree. Root is (nil)\n"); | 3501 fprintf(stderr, "Cannot showLayoutTree. Root is (nil)\n"); |
3477 } | 3502 } |
3478 } | 3503 } |
3479 | 3504 |
3480 #endif | 3505 #endif |
OLD | NEW |