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

Side by Side Diff: Source/core/layout/compositing/CompositedDeprecatedPaintLayerMapping.cpp

Issue 1291703005: Issue invalidations when squashed layers move later or off of a grouped mapping. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 4 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 | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2009, 2010, 2011 Apple Inc. All rights reserved. 2 * Copyright (C) 2009, 2010, 2011 Apple Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 2233 matching lines...) Expand 10 before | Expand all | Expand 10 after
2244 layoutObject()->node()->document().compositorPendingAnimations().notifyCompo sitorAnimationStarted(monotonicTime, group); 2244 layoutObject()->node()->document().compositorPendingAnimations().notifyCompo sitorAnimationStarted(monotonicTime, group);
2245 } 2245 }
2246 2246
2247 IntRect CompositedDeprecatedPaintLayerMapping::pixelSnappedCompositedBounds() co nst 2247 IntRect CompositedDeprecatedPaintLayerMapping::pixelSnappedCompositedBounds() co nst
2248 { 2248 {
2249 LayoutRect bounds = m_compositedBounds; 2249 LayoutRect bounds = m_compositedBounds;
2250 bounds.move(m_owningLayer.subpixelAccumulation()); 2250 bounds.move(m_owningLayer.subpixelAccumulation());
2251 return pixelSnappedIntRect(bounds); 2251 return pixelSnappedIntRect(bounds);
2252 } 2252 }
2253 2253
2254 void CompositedDeprecatedPaintLayerMapping::clearLayerGroupingIfNoPrecedingEntry (size_t indexToClear) 2254 bool CompositedDeprecatedPaintLayerMapping::invalidateLayerIfNoPrecedingEntry(si ze_t indexToClear)
2255 { 2255 {
2256 DeprecatedPaintLayer* layerToRemove = m_squashedLayers[indexToClear].paintLa yer; 2256 DeprecatedPaintLayer* layerToRemove = m_squashedLayers[indexToClear].paintLa yer;
2257 size_t previousIndex = 0; 2257 size_t previousIndex = 0;
2258 for (; previousIndex < indexToClear; ++previousIndex) { 2258 for (; previousIndex < indexToClear; ++previousIndex) {
2259 if (m_squashedLayers[previousIndex].paintLayer == layerToRemove) 2259 if (m_squashedLayers[previousIndex].paintLayer == layerToRemove)
2260 break; 2260 break;
2261 } 2261 }
2262 if (previousIndex == indexToClear) { 2262 if (previousIndex == indexToClear && layerToRemove->groupedMapping() == this ) {
2263 // Assert on incorrect mappings between layers and groups 2263 compositor()->paintInvalidationOnCompositingChange(layerToRemove);
2264 ASSERT(layerToRemove->groupedMapping() == this); 2264 return true;
chrishtr 2015/08/12 19:29:55 The new call site to this function may not satisfy
2265 layerToRemove->setGroupedMapping(nullptr, DeprecatedPaintLayer::DoNotInv alidateLayerAndRemoveFromMapping);
2266 } 2265 }
2266 return false;
2267 } 2267 }
2268 2268
2269 bool CompositedDeprecatedPaintLayerMapping::updateSquashingLayerAssignment(Depre catedPaintLayer* squashedLayer, size_t nextSquashedLayerIndex) 2269 bool CompositedDeprecatedPaintLayerMapping::updateSquashingLayerAssignment(Depre catedPaintLayer* squashedLayer, size_t nextSquashedLayerIndex)
2270 { 2270 {
2271 GraphicsLayerPaintInfo paintInfo; 2271 GraphicsLayerPaintInfo paintInfo;
2272 paintInfo.paintLayer = squashedLayer; 2272 paintInfo.paintLayer = squashedLayer;
2273 // NOTE: composited bounds are updated elsewhere 2273 // NOTE: composited bounds are updated elsewhere
2274 // NOTE: offsetFromLayoutObject is updated elsewhere 2274 // NOTE: offsetFromLayoutObject is updated elsewhere
2275 2275
2276 // Change tracking on squashing layers: at the first sign of something chang ed, just invalidate the layer. 2276 // Change tracking on squashing layers: at the first sign of something chang ed, just invalidate the layer.
2277 // FIXME: Perhaps we can find a tighter more clever mechanism later. 2277 // FIXME: Perhaps we can find a tighter more clever mechanism later.
2278 if (nextSquashedLayerIndex < m_squashedLayers.size()) { 2278 if (nextSquashedLayerIndex < m_squashedLayers.size()) {
2279 if (paintInfo.paintLayer == m_squashedLayers[nextSquashedLayerIndex].pai ntLayer) 2279 if (paintInfo.paintLayer == m_squashedLayers[nextSquashedLayerIndex].pai ntLayer)
2280 return false; 2280 return false;
2281 2281
2282 // Must invalidate before adding the squashed layer to the mapping. 2282 // Must invalidate before adding the squashed layer to the mapping.
2283 compositor()->paintInvalidationOnCompositingChange(squashedLayer); 2283 compositor()->paintInvalidationOnCompositingChange(squashedLayer);
2284 2284
2285 // If the layer which was previously at |nextSquashedLayerIndex| is not earlier in the grouped mapping, invalidate its current
2286 // backing now, since it will move later or be removed from the squashin g layer.
2287 invalidateLayerIfNoPrecedingEntry(nextSquashedLayerIndex);
2288
2285 m_squashedLayers.insert(nextSquashedLayerIndex, paintInfo); 2289 m_squashedLayers.insert(nextSquashedLayerIndex, paintInfo);
Stephen Chennney 2015/08/13 16:31:18 Because we insert here now ...
2286 } else { 2290 } else {
2287 // Must invalidate before adding the squashed layer to the mapping. 2291 // Must invalidate before adding the squashed layer to the mapping.
2288 compositor()->paintInvalidationOnCompositingChange(squashedLayer); 2292 compositor()->paintInvalidationOnCompositingChange(squashedLayer);
2289 m_squashedLayers.append(paintInfo); 2293 m_squashedLayers.append(paintInfo);
2290 } 2294 }
2291 squashedLayer->setGroupedMapping(this, DeprecatedPaintLayer::InvalidateLayer AndRemoveFromMapping); 2295 squashedLayer->setGroupedMapping(this, DeprecatedPaintLayer::InvalidateLayer AndRemoveFromMapping);
2292 2296
2293 return true; 2297 return true;
2294 } 2298 }
2295 2299
(...skipping 23 matching lines...) Expand all
2319 return false; 2323 return false;
2320 } 2324 }
2321 #endif 2325 #endif
2322 2326
2323 void CompositedDeprecatedPaintLayerMapping::finishAccumulatingSquashingLayers(si ze_t nextSquashedLayerIndex) 2327 void CompositedDeprecatedPaintLayerMapping::finishAccumulatingSquashingLayers(si ze_t nextSquashedLayerIndex)
2324 { 2328 {
2325 if (nextSquashedLayerIndex < m_squashedLayers.size()) { 2329 if (nextSquashedLayerIndex < m_squashedLayers.size()) {
2326 // Any additional squashed Layers in the array no longer belong here, bu t they might have been 2330 // Any additional squashed Layers in the array no longer belong here, bu t they might have been
2327 // added already at an earlier index. Clear pointers on those that do no t appear in the valid set 2331 // added already at an earlier index. Clear pointers on those that do no t appear in the valid set
2328 // before removing all the extra entries. 2332 // before removing all the extra entries.
2329 for (size_t i = nextSquashedLayerIndex; i < m_squashedLayers.size(); ++i ) 2333 for (size_t i = nextSquashedLayerIndex; i < m_squashedLayers.size(); ++i ) {
2330 clearLayerGroupingIfNoPrecedingEntry(i); 2334 if (invalidateLayerIfNoPrecedingEntry(i))
2335 m_squashedLayers[i].paintLayer->setGroupedMapping(nullptr, Depre catedPaintLayer::DoNotInvalidateLayerAndRemoveFromMapping);
Stephen Chennney 2015/08/13 16:31:18 ... it's safe to only null here now. I think that'
chrishtr 2015/08/13 17:05:59 I think it's correct because the code here keeps t
2336 }
2337
2331 m_squashedLayers.remove(nextSquashedLayerIndex, m_squashedLayers.size() - nextSquashedLayerIndex); 2338 m_squashedLayers.remove(nextSquashedLayerIndex, m_squashedLayers.size() - nextSquashedLayerIndex);
2332 } 2339 }
2333 } 2340 }
2334 2341
2335 String CompositedDeprecatedPaintLayerMapping::debugName(const GraphicsLayer* gra phicsLayer) 2342 String CompositedDeprecatedPaintLayerMapping::debugName(const GraphicsLayer* gra phicsLayer)
2336 { 2343 {
2337 String name; 2344 String name;
2338 if (graphicsLayer == m_graphicsLayer.get()) { 2345 if (graphicsLayer == m_graphicsLayer.get()) {
2339 name = m_owningLayer.debugName(); 2346 name = m_owningLayer.debugName();
2340 } else if (graphicsLayer == m_squashingContainmentLayer.get()) { 2347 } else if (graphicsLayer == m_squashingContainmentLayer.get()) {
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
2372 } else if (graphicsLayer == m_scrollingBlockSelectionLayer.get()) { 2379 } else if (graphicsLayer == m_scrollingBlockSelectionLayer.get()) {
2373 name = "Scrolling Block Selection Layer"; 2380 name = "Scrolling Block Selection Layer";
2374 } else { 2381 } else {
2375 ASSERT_NOT_REACHED(); 2382 ASSERT_NOT_REACHED();
2376 } 2383 }
2377 2384
2378 return name; 2385 return name;
2379 } 2386 }
2380 2387
2381 } // namespace blink 2388 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698