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

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

Issue 2000763003: Check subtree paint invalidation when overflow clip status changes (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 7 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 1295 matching lines...) Expand 10 before | Expand all | Expand 10 after
1306 void LayoutObject::invalidateTreeIfNeeded(const PaintInvalidationState& paintInv alidationState) 1306 void LayoutObject::invalidateTreeIfNeeded(const PaintInvalidationState& paintInv alidationState)
1307 { 1307 {
1308 ASSERT(!needsLayout()); 1308 ASSERT(!needsLayout());
1309 1309
1310 // If we didn't need paint invalidation then our children don't need as well . 1310 // If we didn't need paint invalidation then our children don't need as well .
1311 // Skip walking down the tree as everything should be fine below us. 1311 // Skip walking down the tree as everything should be fine below us.
1312 if (!shouldCheckForPaintInvalidation(paintInvalidationState)) 1312 if (!shouldCheckForPaintInvalidation(paintInvalidationState))
1313 return; 1313 return;
1314 1314
1315 PaintInvalidationState newPaintInvalidationState(paintInvalidationState, *th is); 1315 PaintInvalidationState newPaintInvalidationState(paintInvalidationState, *th is);
1316
1317 if (mayNeedPaintInvalidationSubtree())
1318 newPaintInvalidationState.setForceSubtreeInvalidationCheckingWithinConta iner();
1319
1316 PaintInvalidationReason reason = invalidatePaintIfNeeded(newPaintInvalidatio nState); 1320 PaintInvalidationReason reason = invalidatePaintIfNeeded(newPaintInvalidatio nState);
1317 clearPaintInvalidationFlags(newPaintInvalidationState); 1321 clearPaintInvalidationFlags(newPaintInvalidationState);
1318 1322
1319 newPaintInvalidationState.updateForChildren(reason); 1323 newPaintInvalidationState.updateForChildren(reason);
1320 invalidatePaintOfSubtreesIfNeeded(newPaintInvalidationState); 1324 invalidatePaintOfSubtreesIfNeeded(newPaintInvalidationState);
1321 } 1325 }
1322 1326
1323 void LayoutObject::invalidatePaintOfSubtreesIfNeeded(const PaintInvalidationStat e& childPaintInvalidationState) 1327 void LayoutObject::invalidatePaintOfSubtreesIfNeeded(const PaintInvalidationStat e& childPaintInvalidationState)
1324 { 1328 {
1325 for (LayoutObject* child = slowFirstChild(); child; child = child->nextSibli ng()) { 1329 for (LayoutObject* child = slowFirstChild(); child; child = child->nextSibli ng()) {
(...skipping 2118 matching lines...) Expand 10 before | Expand all | Expand 10 after
3444 3448
3445 void LayoutObject::setMayNeedPaintInvalidation() 3449 void LayoutObject::setMayNeedPaintInvalidation()
3446 { 3450 {
3447 if (mayNeedPaintInvalidation()) 3451 if (mayNeedPaintInvalidation())
3448 return; 3452 return;
3449 m_bitfields.setMayNeedPaintInvalidation(true); 3453 m_bitfields.setMayNeedPaintInvalidation(true);
3450 markAncestorsForPaintInvalidation(); 3454 markAncestorsForPaintInvalidation();
3451 frameView()->scheduleVisualUpdateForPaintInvalidationIfNeeded(); 3455 frameView()->scheduleVisualUpdateForPaintInvalidationIfNeeded();
3452 } 3456 }
3453 3457
3458 void LayoutObject::setMayNeedPaintInvalidationSubtree()
3459 {
3460 if (mayNeedPaintInvalidationSubtree())
3461 return;
3462 m_bitfields.setMayNeedPaintInvalidationSubtree(true);
3463 setMayNeedPaintInvalidation();
3464 }
3465
3454 void LayoutObject::clearPaintInvalidationFlags(const PaintInvalidationState& pai ntInvalidationState) 3466 void LayoutObject::clearPaintInvalidationFlags(const PaintInvalidationState& pai ntInvalidationState)
3455 { 3467 {
3456 // paintInvalidationStateIsDirty should be kept in sync with the 3468 // paintInvalidationStateIsDirty should be kept in sync with the
3457 // booleans that are cleared below. 3469 // booleans that are cleared below.
3458 ASSERT(!shouldCheckForPaintInvalidationRegardlessOfPaintInvalidationState() || paintInvalidationStateIsDirty()); 3470 ASSERT(!shouldCheckForPaintInvalidationRegardlessOfPaintInvalidationState() || paintInvalidationStateIsDirty());
3459 clearShouldDoFullPaintInvalidation(); 3471 clearShouldDoFullPaintInvalidation();
3460 m_bitfields.setChildShouldCheckForPaintInvalidation(false); 3472 m_bitfields.setChildShouldCheckForPaintInvalidation(false);
3461 m_bitfields.setNeededLayoutBecauseOfChildren(false); 3473 m_bitfields.setNeededLayoutBecauseOfChildren(false);
3462 m_bitfields.setShouldInvalidateOverflowForPaint(false); 3474 m_bitfields.setShouldInvalidateOverflowForPaint(false);
3463 m_bitfields.setMayNeedPaintInvalidation(false); 3475 m_bitfields.setMayNeedPaintInvalidation(false);
3476 m_bitfields.setMayNeedPaintInvalidationSubtree(false);
3464 m_bitfields.setShouldInvalidateSelection(false); 3477 m_bitfields.setShouldInvalidateSelection(false);
3465 } 3478 }
3466 3479
3467 bool LayoutObject::isAllowedToModifyLayoutTreeStructure(Document& document) 3480 bool LayoutObject::isAllowedToModifyLayoutTreeStructure(Document& document)
3468 { 3481 {
3469 return DeprecatedDisableModifyLayoutTreeStructureAsserts::canModifyLayoutTre eStateInAnyState() 3482 return DeprecatedDisableModifyLayoutTreeStructureAsserts::canModifyLayoutTre eStateInAnyState()
3470 || document.lifecycle().stateAllowsLayoutTreeMutations(); 3483 || document.lifecycle().stateAllowsLayoutTreeMutations();
3471 } 3484 }
3472 3485
3473 DeprecatedDisableModifyLayoutTreeStructureAsserts::DeprecatedDisableModifyLayout TreeStructureAsserts() 3486 DeprecatedDisableModifyLayoutTreeStructureAsserts::DeprecatedDisableModifyLayout TreeStructureAsserts()
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after
3686 const blink::LayoutObject* root = object1; 3699 const blink::LayoutObject* root = object1;
3687 while (root->parent()) 3700 while (root->parent())
3688 root = root->parent(); 3701 root = root->parent();
3689 root->showLayoutTreeAndMark(object1, "*", object2, "-", 0); 3702 root->showLayoutTreeAndMark(object1, "*", object2, "-", 0);
3690 } else { 3703 } else {
3691 fprintf(stderr, "Cannot showLayoutTree. Root is (nil)\n"); 3704 fprintf(stderr, "Cannot showLayoutTree. Root is (nil)\n");
3692 } 3705 }
3693 } 3706 }
3694 3707
3695 #endif 3708 #endif
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/layout/LayoutObject.h ('k') | third_party/WebKit/Source/core/layout/svg/LayoutSVGInline.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698