diff options
Diffstat (limited to 'Source/WebCore/rendering/RenderLayerCompositor.cpp')
-rw-r--r-- | Source/WebCore/rendering/RenderLayerCompositor.cpp | 47 |
1 files changed, 45 insertions, 2 deletions
diff --git a/Source/WebCore/rendering/RenderLayerCompositor.cpp b/Source/WebCore/rendering/RenderLayerCompositor.cpp index 960aa37..15bb8ec 100644 --- a/Source/WebCore/rendering/RenderLayerCompositor.cpp +++ b/Source/WebCore/rendering/RenderLayerCompositor.cpp @@ -176,7 +176,7 @@ void RenderLayerCompositor::setCompositingLayersNeedRebuild(bool needRebuild) m_compositingLayersNeedRebuild = needRebuild; } -void RenderLayerCompositor::scheduleSync() +void RenderLayerCompositor::scheduleLayerFlush() { Frame* frame = m_renderView->frameView()->frame(); Page* page = frame ? frame->page() : 0; @@ -186,6 +186,16 @@ void RenderLayerCompositor::scheduleSync() page->chrome()->client()->scheduleCompositingLayerSync(); } +void RenderLayerCompositor::flushPendingLayerChanges() +{ + // FIXME: FrameView::syncCompositingStateRecursive() calls this for each + // frame, so when compositing layers are connected between frames, we'll + // end up syncing subframe's layers multiple times. + // https://bugs.webkit.org/show_bug.cgi?id=52489 + if (GraphicsLayer* rootLayer = rootPlatformLayer()) + rootLayer->syncCompositingState(); +} + void RenderLayerCompositor::scheduleCompositingLayerUpdate() { if (!m_updateCompositingLayersTimer.isActive()) @@ -1171,7 +1181,12 @@ bool RenderLayerCompositor::shouldPropagateCompositingToEnclosingIFrame() const return true; // On Mac, only propagate compositing if the iframe is overlapped in the parent - // document, or the parent is already compositing. + // document, or the parent is already compositing, or the main frame is scaled. + Frame* frame = m_renderView->frameView()->frame(); + Page* page = frame ? frame->page() : 0; + if (page->mainFrame()->pageScaleFactor() != 1) + return true; + RenderIFrame* iframeRenderer = toRenderIFrame(renderer); if (iframeRenderer->widget()) { ASSERT(iframeRenderer->widget()->isFrameView()); @@ -1663,6 +1678,34 @@ bool RenderLayerCompositor::layerHas3DContent(const RenderLayer* layer) const return false; } +void RenderLayerCompositor::updateContentsScale(float scale, RenderLayer* layer) +{ + if (!layer) + layer = rootRenderLayer(); + + layer->updateContentsScale(scale); + + if (layer->isStackingContext()) { + if (Vector<RenderLayer*>* negZOrderList = layer->negZOrderList()) { + size_t listSize = negZOrderList->size(); + for (size_t i = 0; i < listSize; ++i) + updateContentsScale(scale, negZOrderList->at(i)); + } + + if (Vector<RenderLayer*>* posZOrderList = layer->posZOrderList()) { + size_t listSize = posZOrderList->size(); + for (size_t i = 0; i < listSize; ++i) + updateContentsScale(scale, posZOrderList->at(i)); + } + } + + if (Vector<RenderLayer*>* normalFlowList = layer->normalFlowList()) { + size_t listSize = normalFlowList->size(); + for (size_t i = 0; i < listSize; ++i) + updateContentsScale(scale, normalFlowList->at(i)); + } +} + } // namespace WebCore #endif // USE(ACCELERATED_COMPOSITING) |