Commit 760e6b55 authored by bokan@chromium.org's avatar bokan@chromium.org

Made root translation layer the root when using pinch virtual viewport.

The "root" translation layer was previously below the overlap controls
host layer. This meant it was actually below the pinch viewport's scale
layer. We really want the root translation layer to be at the root so that
DevTools' screen emulation feature can scale and offset the entire tree.

BUG=370035

Review URL: https://codereview.chromium.org/308183002

git-svn-id: svn://svn.chromium.org/blink/trunk@175496 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent 2e741109
......@@ -195,11 +195,11 @@ void PinchViewport::setScale(float scale)
// the inner/outer viewport fixed-position model for pinch zoom. When finished,
// the tree will look like this (with * denoting added layers):
//
// *innerViewportContainerLayer (fixed pos container)
// *rootTransformLayer
// +- *innerViewportContainerLayer (fixed pos container)
// +- *pageScaleLayer
// | +- *innerViewportScrollLayer
// | +-- overflowControlsHostLayer (root layer)
// | +-- rootTransformLayer (optional)
// | +-- outerViewportContainerLayer (fixed pos container) [frame container layer in RenderLayerCompositor]
// | | +-- outerViewportScrollLayer [frame scroll layer in RenderLayerCompositor]
// | | +-- content layers ...
......@@ -226,6 +226,8 @@ void PinchViewport::attachToLayerTree(GraphicsLayer* currentLayerTreeRoot, Graph
&& !m_pageScaleLayer
&& !m_innerViewportContainerLayer);
// FIXME: The root transform layer should only be created on demand.
m_rootTransformLayer = GraphicsLayer::create(graphicsLayerFactory, this);
m_innerViewportContainerLayer = GraphicsLayer::create(graphicsLayerFactory, this);
m_pageScaleLayer = GraphicsLayer::create(graphicsLayerFactory, this);
m_innerViewportScrollLayer = GraphicsLayer::create(graphicsLayerFactory, this);
......@@ -245,6 +247,7 @@ void PinchViewport::attachToLayerTree(GraphicsLayer* currentLayerTreeRoot, Graph
m_innerViewportContainerLayer->platformLayer());
m_innerViewportScrollLayer->platformLayer()->setUserScrollable(true, true);
m_rootTransformLayer->addChild(m_innerViewportContainerLayer.get());
m_innerViewportContainerLayer->addChild(m_pageScaleLayer.get());
m_pageScaleLayer->addChild(m_innerViewportScrollLayer.get());
m_innerViewportContainerLayer->addChild(m_overlayScrollbarHorizontal.get());
......
......@@ -68,6 +68,10 @@ public:
void attachToLayerTree(GraphicsLayer*, GraphicsLayerFactory*);
GraphicsLayer* rootGraphicsLayer()
{
return m_rootTransformLayer.get();
}
GraphicsLayer* containerLayer()
{
return m_innerViewportContainerLayer.get();
}
......@@ -141,6 +145,7 @@ private:
LocalFrame* mainFrame() const;
FrameHost& m_frameHost;
OwnPtr<GraphicsLayer> m_rootTransformLayer;
OwnPtr<GraphicsLayer> m_innerViewportContainerLayer;
OwnPtr<GraphicsLayer> m_pageScaleLayer;
OwnPtr<GraphicsLayer> m_innerViewportScrollLayer;
......
......@@ -889,6 +889,14 @@ void RenderLayerCompositor::updateDirectCompositingReasons(RenderLayer* layer)
layer->setCompositingReasons(reasons, CompositingReasonComboAllDirectReasons);
}
void RenderLayerCompositor::setOverlayLayer(GraphicsLayer* layer)
{
ASSERT(rootGraphicsLayer());
if (layer->parent() != m_overflowControlsHostLayer.get())
m_overflowControlsHostLayer->addChild(layer);
}
bool RenderLayerCompositor::canBeComposited(const RenderLayer* layer) const
{
// FIXME: We disable accelerated compositing for elements in a RenderFlowThread as it doesn't work properly.
......
......@@ -192,6 +192,8 @@ public:
void updateDirectCompositingReasons(RenderLayer*);
void setOverlayLayer(GraphicsLayer*);
private:
class OverlapMap;
......
......@@ -3642,6 +3642,12 @@ void WebViewImpl::setOverlayLayer(WebCore::GraphicsLayer* layer)
if (!m_rootGraphicsLayer)
return;
if (pinchVirtualViewportEnabled()) {
m_page->mainFrame()->view()->renderView()->compositor()->setOverlayLayer(layer);
return;
}
// FIXME(bokan): This path goes away after virtual viewport pinch is enabled everywhere.
if (!m_rootTransformLayer)
m_rootTransformLayer = m_page->mainFrame()->view()->renderView()->compositor()->ensureRootTransformLayer();
......@@ -3696,7 +3702,7 @@ void WebViewImpl::setRootGraphicsLayer(GraphicsLayer* layer)
if (layer) {
m_rootGraphicsLayer = pinchViewport.rootGraphicsLayer();
m_rootLayer = pinchViewport.rootGraphicsLayer()->platformLayer();
m_rootTransformLayer = 0;
m_rootTransformLayer = pinchViewport.rootGraphicsLayer();
} else {
m_rootGraphicsLayer = 0;
m_rootLayer = 0;
......@@ -3950,6 +3956,8 @@ void WebViewImpl::updateRootLayerTransform()
if (!m_rootGraphicsLayer)
return;
// FIXME(bokan): m_rootTransformLayer is always set here in pinch virtual viewport. This can go away once
// that's default everywhere.
if (!m_rootTransformLayer)
m_rootTransformLayer = m_page->mainFrame()->view()->renderView()->compositor()->ensureRootTransformLayer();
......
......@@ -216,7 +216,7 @@ TEST_F(PinchViewportTest, TestWebViewResizedBeforeAttachment)
webViewImpl()->layout();
PinchViewport& pinchViewport = frame()->page()->frameHost().pinchViewport();
EXPECT_FLOAT_SIZE_EQ(FloatSize(320, 240), pinchViewport.rootGraphicsLayer()->size());
EXPECT_FLOAT_SIZE_EQ(FloatSize(320, 240), pinchViewport.containerLayer()->size());
}
// Make sure that the visibleRect method acurately reflects the scale and scroll location
// of the viewport.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment