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

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

Issue 1368163002: Workaround rect-based paint invalidation on ancestor clip change (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 2 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 1338 matching lines...) Expand 10 before | Expand all | Expand 10 after
1349 if (paintInvalidationContainer.usesCompositedScrolling() && &paintInvalidati onContainer != this) { 1349 if (paintInvalidationContainer.usesCompositedScrolling() && &paintInvalidati onContainer != this) {
1350 LayoutSize inverseOffset(toLayoutBox(&paintInvalidationContainer)->scrol ledContentOffset()); 1350 LayoutSize inverseOffset(toLayoutBox(&paintInvalidationContainer)->scrol ledContentOffset());
1351 newLocation.move(inverseOffset); 1351 newLocation.move(inverseOffset);
1352 newBounds.move(inverseOffset); 1352 newBounds.move(inverseOffset);
1353 } 1353 }
1354 1354
1355 setPreviousPaintInvalidationRect(newBounds); 1355 setPreviousPaintInvalidationRect(newBounds);
1356 if (!RuntimeEnabledFeatures::slimmingPaintOffsetCachingEnabled()) 1356 if (!RuntimeEnabledFeatures::slimmingPaintOffsetCachingEnabled())
1357 setPreviousPositionFromPaintInvalidationBacking(newLocation); 1357 setPreviousPositionFromPaintInvalidationBacking(newLocation);
1358 1358
1359 if (!shouldCheckForPaintInvalidationRegardlessOfPaintInvalidationState() && !paintInvalidationState.forcedSubtreeInvalidationWithinContainer()) {
1360 ASSERT(paintInvalidationState.forcedSubtreeInvalidationRectUpdateWithinC ontainer());
1361 return PaintInvalidationNone;
1362 }
1363
1359 PaintInvalidationReason invalidationReason = paintInvalidationReason(paintIn validationContainer, oldBounds, oldLocation, newBounds, newLocation); 1364 PaintInvalidationReason invalidationReason = paintInvalidationReason(paintIn validationContainer, oldBounds, oldLocation, newBounds, newLocation);
1360 1365
1361 // We need to invalidate the selection before checking for whether we are do ing a full invalidation. 1366 // We need to invalidate the selection before checking for whether we are do ing a full invalidation.
1362 // This is because we need to update the old rect regardless. 1367 // This is because we need to update the old rect regardless.
1363 invalidateSelectionIfNeeded(paintInvalidationContainer, invalidationReason); 1368 invalidateSelectionIfNeeded(paintInvalidationContainer, invalidationReason);
1364 1369
1365 TRACE_EVENT2(TRACE_DISABLED_BY_DEFAULT("blink.invalidation"), "LayoutObject: :invalidatePaintIfNeeded()", 1370 TRACE_EVENT2(TRACE_DISABLED_BY_DEFAULT("blink.invalidation"), "LayoutObject: :invalidatePaintIfNeeded()",
1366 "object", this->debugName().ascii(), 1371 "object", this->debugName().ascii(),
1367 "info", jsonObjectForOldAndNewRects(oldBounds, oldLocation, newBounds, n ewLocation)); 1372 "info", jsonObjectForOldAndNewRects(oldBounds, oldLocation, newBounds, n ewLocation));
1368 1373
(...skipping 1816 matching lines...) Expand 10 before | Expand all | Expand 10 after
3185 return; 3190 return;
3186 m_bitfields.setMayNeedPaintInvalidation(true); 3191 m_bitfields.setMayNeedPaintInvalidation(true);
3187 markContainerChainForPaintInvalidation(); 3192 markContainerChainForPaintInvalidation();
3188 frame()->page()->animator().scheduleVisualUpdate(); // In case that this is called outside of FrameView::updateLayoutAndStyleForPainting(). 3193 frame()->page()->animator().scheduleVisualUpdate(); // In case that this is called outside of FrameView::updateLayoutAndStyleForPainting().
3189 } 3194 }
3190 3195
3191 void LayoutObject::clearPaintInvalidationState(const PaintInvalidationState& pai ntInvalidationState) 3196 void LayoutObject::clearPaintInvalidationState(const PaintInvalidationState& pai ntInvalidationState)
3192 { 3197 {
3193 // paintInvalidationStateIsDirty should be kept in sync with the 3198 // paintInvalidationStateIsDirty should be kept in sync with the
3194 // booleans that are cleared below. 3199 // booleans that are cleared below.
3195 ASSERT(paintInvalidationState.forcedSubtreeInvalidationWithinContainer() || paintInvalidationStateIsDirty()); 3200 ASSERT(paintInvalidationState.forcedSubtreeInvalidationWithinContainer() || paintInvalidationState.forcedSubtreeInvalidationRectUpdateWithinContainer() || p aintInvalidationStateIsDirty());
3196 clearShouldDoFullPaintInvalidation(); 3201 clearShouldDoFullPaintInvalidation();
3197 m_bitfields.setChildShouldCheckForPaintInvalidation(false); 3202 m_bitfields.setChildShouldCheckForPaintInvalidation(false);
3198 m_bitfields.setNeededLayoutBecauseOfChildren(false); 3203 m_bitfields.setNeededLayoutBecauseOfChildren(false);
3199 m_bitfields.setShouldInvalidateOverflowForPaint(false); 3204 m_bitfields.setShouldInvalidateOverflowForPaint(false);
3200 m_bitfields.setMayNeedPaintInvalidation(false); 3205 m_bitfields.setMayNeedPaintInvalidation(false);
3201 m_bitfields.setShouldInvalidateSelection(false); 3206 m_bitfields.setShouldInvalidateSelection(false);
3202 } 3207 }
3203 3208
3204 bool LayoutObject::isAllowedToModifyLayoutTreeStructure(Document& document) 3209 bool LayoutObject::isAllowedToModifyLayoutTreeStructure(Document& document)
3205 { 3210 {
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
3394 const blink::LayoutObject* root = object1; 3399 const blink::LayoutObject* root = object1;
3395 while (root->parent()) 3400 while (root->parent())
3396 root = root->parent(); 3401 root = root->parent();
3397 root->showLayoutTreeAndMark(object1, "*", object2, "-", 0); 3402 root->showLayoutTreeAndMark(object1, "*", object2, "-", 0);
3398 } else { 3403 } else {
3399 fprintf(stderr, "Cannot showLayoutTree. Root is (nil)\n"); 3404 fprintf(stderr, "Cannot showLayoutTree. Root is (nil)\n");
3400 } 3405 }
3401 } 3406 }
3402 3407
3403 #endif 3408 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698