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

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

Issue 2511893002: Paint solid color background into both scrolling contents layer and graphics layer. (Closed)
Patch Set: Add Mac rebaselines. Created 4 years 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) 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 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
170 return (!page) ? nullptr : page->scrollingCoordinator(); 170 return (!page) ? nullptr : page->scrollingCoordinator();
171 } 171 }
172 172
173 CompositedLayerMapping::CompositedLayerMapping(PaintLayer& layer) 173 CompositedLayerMapping::CompositedLayerMapping(PaintLayer& layer)
174 : m_owningLayer(layer), 174 : m_owningLayer(layer),
175 m_contentOffsetInCompositingLayerDirty(false), 175 m_contentOffsetInCompositingLayerDirty(false),
176 m_pendingUpdateScope(GraphicsLayerUpdateNone), 176 m_pendingUpdateScope(GraphicsLayerUpdateNone),
177 m_isMainFrameLayoutViewLayer(false), 177 m_isMainFrameLayoutViewLayer(false),
178 m_backgroundLayerPaintsFixedRootBackground(false), 178 m_backgroundLayerPaintsFixedRootBackground(false),
179 m_scrollingContentsAreEmpty(false), 179 m_scrollingContentsAreEmpty(false),
180 m_backgroundPaintsOntoScrollingContentsLayer(false) { 180 m_backgroundPaintsOntoScrollingContentsLayer(false),
181 m_backgroundPaintsOntoGraphicsLayer(false) {
181 if (layer.isRootLayer() && layoutObject()->frame()->isMainFrame()) 182 if (layer.isRootLayer() && layoutObject()->frame()->isMainFrame())
182 m_isMainFrameLayoutViewLayer = true; 183 m_isMainFrameLayoutViewLayer = true;
183 184
184 createPrimaryGraphicsLayer(); 185 createPrimaryGraphicsLayer();
185 } 186 }
186 187
187 CompositedLayerMapping::~CompositedLayerMapping() { 188 CompositedLayerMapping::~CompositedLayerMapping() {
188 // Hits in compositing/squashing/squash-onto-nephew.html. 189 // Hits in compositing/squashing/squash-onto-nephew.html.
189 DisableCompositingQueryAsserts disabler; 190 DisableCompositingQueryAsserts disabler;
190 191
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
355 ASSERT(m_owningLayer.stackingNode()->isStackingContext() || !isolate); 356 ASSERT(m_owningLayer.stackingNode()->isStackingContext() || !isolate);
356 357
357 m_graphicsLayer->setIsRootForIsolatedGroup(isolate); 358 m_graphicsLayer->setIsRootForIsolatedGroup(isolate);
358 } 359 }
359 360
360 void CompositedLayerMapping:: 361 void CompositedLayerMapping::
361 updateBackgroundPaintsOntoScrollingContentsLayer() { 362 updateBackgroundPaintsOntoScrollingContentsLayer() {
362 // We can only paint the background onto the scrolling contents layer if 363 // We can only paint the background onto the scrolling contents layer if
363 // it would be visually correct and we are using composited scrolling meaning 364 // it would be visually correct and we are using composited scrolling meaning
364 // we have a scrolling contents layer to paint it into. 365 // we have a scrolling contents layer to paint it into.
366 BackgroundPaintLocation paintLocation =
367 m_owningLayer.backgroundPaintLocation();
365 bool shouldPaintOntoScrollingContentsLayer = 368 bool shouldPaintOntoScrollingContentsLayer =
366 m_owningLayer.canPaintBackgroundOntoScrollingContentsLayer() && 369 paintLocation & BackgroundPaintInScrollingContents &&
367 m_owningLayer.getScrollableArea()->usesCompositedScrolling(); 370 m_owningLayer.getScrollableArea()->usesCompositedScrolling();
368 if (shouldPaintOntoScrollingContentsLayer != 371 if (shouldPaintOntoScrollingContentsLayer !=
369 backgroundPaintsOntoScrollingContentsLayer()) { 372 backgroundPaintsOntoScrollingContentsLayer()) {
370 m_backgroundPaintsOntoScrollingContentsLayer = 373 m_backgroundPaintsOntoScrollingContentsLayer =
371 shouldPaintOntoScrollingContentsLayer; 374 shouldPaintOntoScrollingContentsLayer;
372 // If the background is no longer painted onto the scrolling contents layer 375 // If the background is no longer painted onto the scrolling contents layer
373 // the scrolling contents layer needs to be updated. If it is going to be 376 // the scrolling contents layer needs to be updated. If it is going to be
374 // painted onto the scrolling contents layer this update will be triggered 377 // painted onto the scrolling contents layer this update will be triggered
375 // by LayoutBoxModelObject::setBackingNeedsPaintInvalidationInRect 378 // by LayoutBoxModelObject::setBackingNeedsPaintInvalidationInRect
376 if (hasScrollingLayer() && !shouldPaintOntoScrollingContentsLayer) 379 if (hasScrollingLayer() && !shouldPaintOntoScrollingContentsLayer)
377 m_scrollingContentsLayer->setNeedsDisplay(); 380 m_scrollingContentsLayer->setNeedsDisplay();
378 } 381 }
382 m_backgroundPaintsOntoGraphicsLayer =
383 !m_backgroundPaintsOntoScrollingContentsLayer ||
384 paintLocation & BackgroundPaintInGraphicsLayer;
379 } 385 }
380 386
381 void CompositedLayerMapping::updateContentsOpaque() { 387 void CompositedLayerMapping::updateContentsOpaque() {
382 if (isAcceleratedCanvas(layoutObject())) { 388 if (isAcceleratedCanvas(layoutObject())) {
383 // Determine whether the rendering context's external texture layer is 389 // Determine whether the rendering context's external texture layer is
384 // opaque. 390 // opaque.
385 CanvasRenderingContext* context = 391 CanvasRenderingContext* context =
386 toHTMLCanvasElement(layoutObject()->node())->renderingContext(); 392 toHTMLCanvasElement(layoutObject()->node())->renderingContext();
387 if (!context->creationAttributes().alpha()) 393 if (!context->creationAttributes().alpha())
388 m_graphicsLayer->setContentsOpaque(true); 394 m_graphicsLayer->setContentsOpaque(true);
(...skipping 13 matching lines...) Expand all
402 if (hasScrollingLayer() && m_backgroundPaintsOntoScrollingContentsLayer) { 408 if (hasScrollingLayer() && m_backgroundPaintsOntoScrollingContentsLayer) {
403 // Backgrounds painted onto the foreground are clipped by the padding box 409 // Backgrounds painted onto the foreground are clipped by the padding box
404 // rect. 410 // rect.
405 // TODO(flackr): This should actually check the entire overflow rect 411 // TODO(flackr): This should actually check the entire overflow rect
406 // within the scrolling contents layer but since we currently only trigger 412 // within the scrolling contents layer but since we currently only trigger
407 // this for solid color backgrounds the answer will be the same. 413 // this for solid color backgrounds the answer will be the same.
408 m_scrollingContentsLayer->setContentsOpaque( 414 m_scrollingContentsLayer->setContentsOpaque(
409 m_owningLayer.backgroundIsKnownToBeOpaqueInRect( 415 m_owningLayer.backgroundIsKnownToBeOpaqueInRect(
410 toLayoutBox(layoutObject())->paddingBoxRect())); 416 toLayoutBox(layoutObject())->paddingBoxRect()));
411 417
412 // When we paint the background onto the scrolling contents layer we are 418 if (m_owningLayer.backgroundPaintLocation() &
413 // going to leave a hole in the m_graphicsLayer where the background is so 419 BackgroundPaintInGraphicsLayer) {
414 // it is not opaque. 420 m_graphicsLayer->setContentsOpaque(
415 m_graphicsLayer->setContentsOpaque(false); 421 m_owningLayer.backgroundIsKnownToBeOpaqueInRect(
422 compositedBounds()));
423 } else {
424 // If we only paint the background onto the scrolling contents layer we
425 // are going to leave a hole in the m_graphicsLayer where the background
426 // is so it is not opaque.
427 m_graphicsLayer->setContentsOpaque(false);
428 }
416 } else { 429 } else {
417 if (hasScrollingLayer()) 430 if (hasScrollingLayer())
418 m_scrollingContentsLayer->setContentsOpaque(false); 431 m_scrollingContentsLayer->setContentsOpaque(false);
419 m_graphicsLayer->setContentsOpaque( 432 m_graphicsLayer->setContentsOpaque(
420 m_owningLayer.backgroundIsKnownToBeOpaqueInRect(compositedBounds())); 433 m_owningLayer.backgroundIsKnownToBeOpaqueInRect(compositedBounds()));
421 } 434 }
422 } 435 }
423 } 436 }
424 437
425 void CompositedLayerMapping::updateCompositedBounds() { 438 void CompositedLayerMapping::updateCompositedBounds() {
(...skipping 2636 matching lines...) Expand 10 before | Expand all | Expand 10 after
3062 graphicsLayer == m_childClippingMaskLayer.get() || 3075 graphicsLayer == m_childClippingMaskLayer.get() ||
3063 graphicsLayer == m_scrollingContentsLayer.get() || 3076 graphicsLayer == m_scrollingContentsLayer.get() ||
3064 graphicsLayer == m_decorationOutlineLayer.get()) { 3077 graphicsLayer == m_decorationOutlineLayer.get()) {
3065 bool paintRootBackgroundOntoScrollingContentsLayer = 3078 bool paintRootBackgroundOntoScrollingContentsLayer =
3066 m_backgroundPaintsOntoScrollingContentsLayer; 3079 m_backgroundPaintsOntoScrollingContentsLayer;
3067 DCHECK(!paintRootBackgroundOntoScrollingContentsLayer || 3080 DCHECK(!paintRootBackgroundOntoScrollingContentsLayer ||
3068 (!m_backgroundLayer && !m_foregroundLayer)); 3081 (!m_backgroundLayer && !m_foregroundLayer));
3069 if (paintRootBackgroundOntoScrollingContentsLayer) { 3082 if (paintRootBackgroundOntoScrollingContentsLayer) {
3070 if (graphicsLayer == m_scrollingContentsLayer.get()) 3083 if (graphicsLayer == m_scrollingContentsLayer.get())
3071 paintLayerFlags &= ~PaintLayerPaintingSkipRootBackground; 3084 paintLayerFlags &= ~PaintLayerPaintingSkipRootBackground;
3072 else 3085 else if (!m_backgroundPaintsOntoGraphicsLayer)
3073 paintLayerFlags |= PaintLayerPaintingSkipRootBackground; 3086 paintLayerFlags |= PaintLayerPaintingSkipRootBackground;
3074 } 3087 }
3075 GraphicsLayerPaintInfo paintInfo; 3088 GraphicsLayerPaintInfo paintInfo;
3076 paintInfo.paintLayer = &m_owningLayer; 3089 paintInfo.paintLayer = &m_owningLayer;
3077 paintInfo.compositedBounds = compositedBounds(); 3090 paintInfo.compositedBounds = compositedBounds();
3078 paintInfo.offsetFromLayoutObject = graphicsLayer->offsetFromLayoutObject(); 3091 paintInfo.offsetFromLayoutObject = graphicsLayer->offsetFromLayoutObject();
3079 adjustForCompositedScrolling(graphicsLayer, 3092 adjustForCompositedScrolling(graphicsLayer,
3080 paintInfo.offsetFromLayoutObject); 3093 paintInfo.offsetFromLayoutObject);
3081 3094
3082 // We have to use the same root as for hit testing, because both methods can 3095 // We have to use the same root as for hit testing, because both methods can
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after
3345 } else if (graphicsLayer == m_decorationOutlineLayer.get()) { 3358 } else if (graphicsLayer == m_decorationOutlineLayer.get()) {
3346 name = "Decoration Layer"; 3359 name = "Decoration Layer";
3347 } else { 3360 } else {
3348 ASSERT_NOT_REACHED(); 3361 ASSERT_NOT_REACHED();
3349 } 3362 }
3350 3363
3351 return name; 3364 return name;
3352 } 3365 }
3353 3366
3354 } // namespace blink 3367 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698