| OLD | NEW |
| 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 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 102 | 102 |
| 103 static IntRect backgroundRect(const LayoutObject& layoutObject) { | 103 static IntRect backgroundRect(const LayoutObject& layoutObject) { |
| 104 if (!layoutObject.isBox()) | 104 if (!layoutObject.isBox()) |
| 105 return IntRect(); | 105 return IntRect(); |
| 106 | 106 |
| 107 LayoutRect rect; | 107 LayoutRect rect; |
| 108 const LayoutBox& box = toLayoutBox(layoutObject); | 108 const LayoutBox& box = toLayoutBox(layoutObject); |
| 109 return pixelSnappedIntRect(box.backgroundRect(BackgroundClipRect)); | 109 return pixelSnappedIntRect(box.backgroundRect(BackgroundClipRect)); |
| 110 } | 110 } |
| 111 | 111 |
| 112 static inline bool isAcceleratedCanvas(const LayoutObject& layoutObject) { | 112 static inline bool isCompositedCanvas(const LayoutObject& layoutObject) { |
| 113 if (layoutObject.isCanvas()) { | 113 if (layoutObject.isCanvas()) { |
| 114 HTMLCanvasElement* canvas = toHTMLCanvasElement(layoutObject.node()); | 114 HTMLCanvasElement* canvas = toHTMLCanvasElement(layoutObject.node()); |
| 115 if (CanvasRenderingContext* context = canvas->renderingContext()) | 115 if (CanvasRenderingContext* context = canvas->renderingContext()) |
| 116 return context->isAccelerated(); | 116 return context->isComposited(); |
| 117 } | 117 } |
| 118 return false; | 118 return false; |
| 119 } | 119 } |
| 120 | 120 |
| 121 static inline bool isPlaceholderCanvas(const LayoutObject& layoutObject) { | 121 static inline bool isPlaceholderCanvas(const LayoutObject& layoutObject) { |
| 122 if (layoutObject.isCanvas()) { | 122 if (layoutObject.isCanvas()) { |
| 123 HTMLCanvasElement* canvas = toHTMLCanvasElement(layoutObject.node()); | 123 HTMLCanvasElement* canvas = toHTMLCanvasElement(layoutObject.node()); |
| 124 return canvas->surfaceLayerBridge(); | 124 return canvas->surfaceLayerBridge(); |
| 125 } | 125 } |
| 126 return false; | 126 return false; |
| (...skipping 19 matching lines...) Expand all Loading... |
| 146 } | 146 } |
| 147 | 147 |
| 148 static WebLayer* platformLayerForPlugin(LayoutObject& layoutObject) { | 148 static WebLayer* platformLayerForPlugin(LayoutObject& layoutObject) { |
| 149 if (!layoutObject.isEmbeddedObject()) | 149 if (!layoutObject.isEmbeddedObject()) |
| 150 return nullptr; | 150 return nullptr; |
| 151 PluginView* plugin = toLayoutEmbeddedObject(layoutObject).plugin(); | 151 PluginView* plugin = toLayoutEmbeddedObject(layoutObject).plugin(); |
| 152 return plugin ? plugin->platformLayer() : nullptr; | 152 return plugin ? plugin->platformLayer() : nullptr; |
| 153 } | 153 } |
| 154 | 154 |
| 155 static inline bool isAcceleratedContents(LayoutObject& layoutObject) { | 155 static inline bool isAcceleratedContents(LayoutObject& layoutObject) { |
| 156 return isAcceleratedCanvas(layoutObject) || | 156 return isCompositedCanvas(layoutObject) || |
| 157 (layoutObject.isEmbeddedObject() && | 157 (layoutObject.isEmbeddedObject() && |
| 158 toLayoutEmbeddedObject(layoutObject) | 158 toLayoutEmbeddedObject(layoutObject) |
| 159 .requiresAcceleratedCompositing()) || | 159 .requiresAcceleratedCompositing()) || |
| 160 layoutObject.isVideo(); | 160 layoutObject.isVideo(); |
| 161 } | 161 } |
| 162 | 162 |
| 163 // Get the scrolling coordinator in a way that works inside | 163 // Get the scrolling coordinator in a way that works inside |
| 164 // CompositedLayerMapping's destructor. | 164 // CompositedLayerMapping's destructor. |
| 165 static ScrollingCoordinator* scrollingCoordinatorFromLayer(PaintLayer& layer) { | 165 static ScrollingCoordinator* scrollingCoordinatorFromLayer(PaintLayer& layer) { |
| 166 Page* page = layer.layoutObject().frame()->page(); | 166 Page* page = layer.layoutObject().frame()->page(); |
| (...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 432 paintLocation & BackgroundPaintInGraphicsLayer; | 432 paintLocation & BackgroundPaintInGraphicsLayer; |
| 433 if (shouldPaintOntoGraphicsLayer != !!m_backgroundPaintsOntoGraphicsLayer) { | 433 if (shouldPaintOntoGraphicsLayer != !!m_backgroundPaintsOntoGraphicsLayer) { |
| 434 m_backgroundPaintsOntoGraphicsLayer = shouldPaintOntoGraphicsLayer; | 434 m_backgroundPaintsOntoGraphicsLayer = shouldPaintOntoGraphicsLayer; |
| 435 // The graphics layer needs to be updated for changed | 435 // The graphics layer needs to be updated for changed |
| 436 // m_backgroundPaintsOntoGraphicsLayer. | 436 // m_backgroundPaintsOntoGraphicsLayer. |
| 437 m_graphicsLayer->setNeedsDisplay(); | 437 m_graphicsLayer->setNeedsDisplay(); |
| 438 } | 438 } |
| 439 } | 439 } |
| 440 | 440 |
| 441 void CompositedLayerMapping::updateContentsOpaque() { | 441 void CompositedLayerMapping::updateContentsOpaque() { |
| 442 if (isAcceleratedCanvas(layoutObject())) { | 442 if (isCompositedCanvas(layoutObject())) { |
| 443 CanvasRenderingContext* context = | 443 CanvasRenderingContext* context = |
| 444 toHTMLCanvasElement(layoutObject().node())->renderingContext(); | 444 toHTMLCanvasElement(layoutObject().node())->renderingContext(); |
| 445 WebLayer* layer = context ? context->platformLayer() : nullptr; | 445 WebLayer* layer = context ? context->platformLayer() : nullptr; |
| 446 // Determine whether the external texture layer covers the whole graphics | 446 // Determine whether the external texture layer covers the whole graphics |
| 447 // layer. This may not be the case if there are box decorations or | 447 // layer. This may not be the case if there are box decorations or |
| 448 // shadows. | 448 // shadows. |
| 449 if (layer && | 449 if (layer && |
| 450 layer->bounds() == m_graphicsLayer->platformLayer()->bounds()) { | 450 layer->bounds() == m_graphicsLayer->platformLayer()->bounds()) { |
| 451 // Determine whether the rendering context's external texture layer is | 451 // Determine whether the rendering context's external texture layer is |
| 452 // opaque. | 452 // opaque. |
| (...skipping 349 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 802 m_graphicsLayer->setContentsToPlatformLayer(layer); | 802 m_graphicsLayer->setContentsToPlatformLayer(layer); |
| 803 } | 803 } |
| 804 } else if (layoutObject.isVideo()) { | 804 } else if (layoutObject.isVideo()) { |
| 805 HTMLMediaElement* mediaElement = toHTMLMediaElement(layoutObject.node()); | 805 HTMLMediaElement* mediaElement = toHTMLMediaElement(layoutObject.node()); |
| 806 m_graphicsLayer->setContentsToPlatformLayer(mediaElement->platformLayer()); | 806 m_graphicsLayer->setContentsToPlatformLayer(mediaElement->platformLayer()); |
| 807 } else if (isPlaceholderCanvas(layoutObject)) { | 807 } else if (isPlaceholderCanvas(layoutObject)) { |
| 808 HTMLCanvasElement* canvas = toHTMLCanvasElement(layoutObject.node()); | 808 HTMLCanvasElement* canvas = toHTMLCanvasElement(layoutObject.node()); |
| 809 m_graphicsLayer->setContentsToPlatformLayer( | 809 m_graphicsLayer->setContentsToPlatformLayer( |
| 810 canvas->surfaceLayerBridge()->getWebLayer()); | 810 canvas->surfaceLayerBridge()->getWebLayer()); |
| 811 layerConfigChanged = true; | 811 layerConfigChanged = true; |
| 812 } else if (isAcceleratedCanvas(layoutObject)) { | 812 } else if (isCompositedCanvas(layoutObject)) { |
| 813 HTMLCanvasElement* canvas = toHTMLCanvasElement(layoutObject.node()); | 813 HTMLCanvasElement* canvas = toHTMLCanvasElement(layoutObject.node()); |
| 814 if (CanvasRenderingContext* context = canvas->renderingContext()) | 814 if (CanvasRenderingContext* context = canvas->renderingContext()) |
| 815 m_graphicsLayer->setContentsToPlatformLayer(context->platformLayer()); | 815 m_graphicsLayer->setContentsToPlatformLayer(context->platformLayer()); |
| 816 layerConfigChanged = true; | 816 layerConfigChanged = true; |
| 817 } | 817 } |
| 818 if (layoutObject.isLayoutPart()) { | 818 if (layoutObject.isLayoutPart()) { |
| 819 if (PaintLayerCompositor::attachFrameContentLayersToIframeLayer( | 819 if (PaintLayerCompositor::attachFrameContentLayersToIframeLayer( |
| 820 toLayoutPart(layoutObject))) | 820 toLayoutPart(layoutObject))) |
| 821 layerConfigChanged = true; | 821 layerConfigChanged = true; |
| 822 } | 822 } |
| (...skipping 923 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1746 // contents need to paint. | 1746 // contents need to paint. |
| 1747 m_scrollingContentsAreEmpty = | 1747 m_scrollingContentsAreEmpty = |
| 1748 !m_owningLayer.hasVisibleContent() || | 1748 !m_owningLayer.hasVisibleContent() || |
| 1749 !(layoutObject().styleRef().hasBackground() || | 1749 !(layoutObject().styleRef().hasBackground() || |
| 1750 layoutObject().hasBackdropFilter() || paintsChildren()); | 1750 layoutObject().hasBackdropFilter() || paintsChildren()); |
| 1751 m_scrollingContentsLayer->setDrawsContent(!m_scrollingContentsAreEmpty); | 1751 m_scrollingContentsLayer->setDrawsContent(!m_scrollingContentsAreEmpty); |
| 1752 } | 1752 } |
| 1753 | 1753 |
| 1754 m_drawsBackgroundOntoContentLayer = false; | 1754 m_drawsBackgroundOntoContentLayer = false; |
| 1755 | 1755 |
| 1756 if (hasPaintedContent && isAcceleratedCanvas(layoutObject())) { | 1756 if (hasPaintedContent && isCompositedCanvas(layoutObject())) { |
| 1757 CanvasRenderingContext* context = | 1757 CanvasRenderingContext* context = |
| 1758 toHTMLCanvasElement(layoutObject().node())->renderingContext(); | 1758 toHTMLCanvasElement(layoutObject().node())->renderingContext(); |
| 1759 // Content layer may be null if context is lost. | 1759 // Content layer may be null if context is lost. |
| 1760 if (WebLayer* contentLayer = context->platformLayer()) { | 1760 if (WebLayer* contentLayer = context->platformLayer()) { |
| 1761 Color bgColor(Color::transparent); | 1761 Color bgColor(Color::transparent); |
| 1762 if (contentLayerSupportsDirectBackgroundComposition(layoutObject())) { | 1762 if (contentLayerSupportsDirectBackgroundComposition(layoutObject())) { |
| 1763 bgColor = layoutObjectBackgroundColor(); | 1763 bgColor = layoutObjectBackgroundColor(); |
| 1764 hasPaintedContent = false; | 1764 hasPaintedContent = false; |
| 1765 m_drawsBackgroundOntoContentLayer = true; | 1765 m_drawsBackgroundOntoContentLayer = true; |
| 1766 } | 1766 } |
| (...skipping 900 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2667 return false; | 2667 return false; |
| 2668 } | 2668 } |
| 2669 | 2669 |
| 2670 void CompositedLayerMapping::contentChanged(ContentChangeType changeType) { | 2670 void CompositedLayerMapping::contentChanged(ContentChangeType changeType) { |
| 2671 if ((changeType == ImageChanged) && layoutObject().isImage() && | 2671 if ((changeType == ImageChanged) && layoutObject().isImage() && |
| 2672 isDirectlyCompositedImage()) { | 2672 isDirectlyCompositedImage()) { |
| 2673 updateImageContents(); | 2673 updateImageContents(); |
| 2674 return; | 2674 return; |
| 2675 } | 2675 } |
| 2676 | 2676 |
| 2677 if (changeType == CanvasChanged && isAcceleratedCanvas(layoutObject())) { | 2677 if (changeType == CanvasChanged && isCompositedCanvas(layoutObject())) { |
| 2678 m_graphicsLayer->setContentsNeedsDisplay(); | 2678 m_graphicsLayer->setContentsNeedsDisplay(); |
| 2679 return; | 2679 return; |
| 2680 } | 2680 } |
| 2681 } | 2681 } |
| 2682 | 2682 |
| 2683 void CompositedLayerMapping::updateImageContents() { | 2683 void CompositedLayerMapping::updateImageContents() { |
| 2684 DCHECK(layoutObject().isImage()); | 2684 DCHECK(layoutObject().isImage()); |
| 2685 LayoutImage& imageLayoutObject = toLayoutImage(layoutObject()); | 2685 LayoutImage& imageLayoutObject = toLayoutImage(layoutObject()); |
| 2686 | 2686 |
| 2687 ImageResourceContent* cachedImage = imageLayoutObject.cachedImage(); | 2687 ImageResourceContent* cachedImage = imageLayoutObject.cachedImage(); |
| (...skipping 858 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3546 } else if (graphicsLayer == m_decorationOutlineLayer.get()) { | 3546 } else if (graphicsLayer == m_decorationOutlineLayer.get()) { |
| 3547 name = "Decoration Layer"; | 3547 name = "Decoration Layer"; |
| 3548 } else { | 3548 } else { |
| 3549 NOTREACHED(); | 3549 NOTREACHED(); |
| 3550 } | 3550 } |
| 3551 | 3551 |
| 3552 return name; | 3552 return name; |
| 3553 } | 3553 } |
| 3554 | 3554 |
| 3555 } // namespace blink | 3555 } // namespace blink |
| OLD | NEW |