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

Unified Diff: Source/core/paint/LayerPainter.cpp

Issue 744163002: Enable fast/images with slimming paint (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Remove bad merge in virtual test suites Created 6 years, 1 month 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 side-by-side diff with in-line comments
Download patch
Index: Source/core/paint/LayerPainter.cpp
diff --git a/Source/core/paint/LayerPainter.cpp b/Source/core/paint/LayerPainter.cpp
index 132f05091df16eb51ce9739a29fa4dd29ad7217b..d7067ffe6c9377a02122cdd09c23280b123a76d7 100644
--- a/Source/core/paint/LayerPainter.cpp
+++ b/Source/core/paint/LayerPainter.cpp
@@ -106,47 +106,6 @@ void LayerPainter::paintLayer(GraphicsContext* context, const LayerPaintingInfo&
paintLayerContentsAndReflection(context, paintingInfo, paintFlags);
}
-class TransparencyLayerHelper {
-public:
- TransparencyLayerHelper(GraphicsContext* context, RenderLayer& renderLayer, const RenderLayer* rootLayer, const LayoutRect& paintDirtyRect, const LayoutSize& subPixelAccumulation, PaintBehavior paintBehavior)
- : m_transparencyLayerInProgress(false)
- , m_context(context)
- , m_renderLayer(renderLayer)
- {
- // Blending operations must be performed only with the nearest ancestor stacking context.
- // Note that there is no need to create a transparency layer if we're painting the root.
- // FIXME: this should be unified further into RenderLayer::paintsWithTransparency().
- bool shouldUseTransparencyLayerForBlendMode = !renderLayer.renderer()->isDocumentElement() && renderLayer.stackingNode()->isStackingContext() && renderLayer.hasNonIsolatedDescendantWithBlendMode();
- if (!shouldUseTransparencyLayerForBlendMode && !renderLayer.paintsWithTransparency(paintBehavior))
- return;
-
- OwnPtr<BeginTransparencyDisplayItem> beginTransparencyDisplayItem = adoptPtr(new BeginTransparencyDisplayItem(
- renderLayer.renderer(), DisplayItem::BeginTransparency, renderLayer.paintingExtent(rootLayer, paintDirtyRect, subPixelAccumulation, paintBehavior),
- renderLayer.renderer()->style()->blendMode(), renderLayer.renderer()->opacity()));
- if (RuntimeEnabledFeatures::slimmingPaintEnabled())
- renderLayer.renderer()->view()->viewDisplayList().add(beginTransparencyDisplayItem.release());
- else
- beginTransparencyDisplayItem->replay(context);
-
- m_transparencyLayerInProgress = true;
- }
-
- ~TransparencyLayerHelper()
- {
- if (!m_transparencyLayerInProgress)
- return;
- OwnPtr<EndTransparencyDisplayItem> endTransparencyDisplayItem = adoptPtr(new EndTransparencyDisplayItem(m_renderLayer.renderer(), DisplayItem::EndTransparency));
- if (RuntimeEnabledFeatures::slimmingPaintEnabled())
- m_renderLayer.renderer()->view()->viewDisplayList().add(endTransparencyDisplayItem.release());
- else
- endTransparencyDisplayItem->replay(m_context);
- }
-private:
- bool m_transparencyLayerInProgress;
- GraphicsContext* m_context;
- const RenderLayer& m_renderLayer;
-};
-
void LayerPainter::paintLayerContentsAndReflection(GraphicsContext* context, const LayerPaintingInfo& paintingInfo, PaintLayerFlags paintFlags)
{
ASSERT(m_renderLayer.isSelfPaintingLayer() || m_renderLayer.hasSelfPaintingLayerDescendant());
@@ -270,7 +229,16 @@ void LayerPainter::paintLayerContents(GraphicsContext* context, const LayerPaint
// These helpers output clip and transparency layers using a RAII pattern. Stack-allocated-varibles are destructed in the reverse order of construction,
// so they are nested properly.
ClipPathHelper clipPathHelper(context, m_renderLayer, paintingInfo, rootRelativeBounds, rootRelativeBoundsComputed, offsetFromRoot, paintFlags);
- TransparencyLayerHelper transparencyLayerHelper(context, m_renderLayer, paintingInfo.rootLayer, paintingInfo.paintDirtyRect, paintingInfo.subPixelAccumulation, paintingInfo.paintBehavior);
+
+ OwnPtr<TransparencyRecorder> transparencyRecorder;
+ // Blending operations must be performed only with the nearest ancestor stacking context.
+ // Note that there is no need to create a transparency layer if we're painting the root.
+ // FIXME: this should be unified further into RenderLayer::paintsWithTransparency().
+ bool shouldUseTransparencyLayerForBlendMode = !m_renderLayer.renderer()->isDocumentElement() && m_renderLayer.stackingNode()->isStackingContext() && m_renderLayer.hasNonIsolatedDescendantWithBlendMode();
+ if (shouldUseTransparencyLayerForBlendMode || m_renderLayer.paintsWithTransparency(paintingInfo.paintBehavior)) {
+ transparencyRecorder = adoptPtr(new TransparencyRecorder(context, m_renderLayer.renderer(), DisplayItem::BeginTransparency, m_renderLayer.paintingExtent(paintingInfo.rootLayer, paintingInfo.paintDirtyRect,
+ paintingInfo.subPixelAccumulation, paintingInfo.paintBehavior), m_renderLayer.renderer()->style()->blendMode(), m_renderLayer.renderer()->opacity()));
+ }
LayerPaintingInfo localPaintingInfo(paintingInfo);

Powered by Google App Engine
This is Rietveld 408576698