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

Side by Side Diff: third_party/WebKit/Source/web/WebViewImpl.cpp

Issue 2342103002: Refactor the way PaintArtifactCompositor is attached and used. (Closed)
Patch Set: none Created 4 years, 3 months 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) 2011, 2012 Google Inc. All rights reserved. 2 * Copyright (C) 2011, 2012 Google 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 are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 2768 matching lines...) Expand 10 before | Expand all | Expand 10 after
2779 break; 2779 break;
2780 2780
2781 default: 2781 default:
2782 NOTIMPLEMENTED(); 2782 NOTIMPLEMENTED();
2783 break; 2783 break;
2784 } 2784 }
2785 } 2785 }
2786 2786
2787 bool WebViewImpl::isAcceleratedCompositingActive() const 2787 bool WebViewImpl::isAcceleratedCompositingActive() const
2788 { 2788 {
2789 // For SPv2, accelerated compositing is managed by the
2790 // PaintArtifactCompositor.
2791 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled())
2792 return m_paintArtifactCompositor.rootLayer();
2793
2794 return m_rootLayer; 2789 return m_rootLayer;
2795 } 2790 }
2796 2791
2797 void WebViewImpl::willCloseLayerTreeView() 2792 void WebViewImpl::willCloseLayerTreeView()
2798 { 2793 {
2799 if (m_linkHighlightsTimeline) { 2794 if (m_linkHighlightsTimeline) {
2800 m_linkHighlights.clear(); 2795 m_linkHighlights.clear();
2801 detachCompositorAnimationTimeline(m_linkHighlightsTimeline.get()); 2796 detachCompositorAnimationTimeline(m_linkHighlightsTimeline.get());
2802 m_linkHighlightsTimeline.reset(); 2797 m_linkHighlightsTimeline.reset();
2803 } 2798 }
2804 2799
2805 if (m_layerTreeView) 2800 if (m_layerTreeView)
2806 page()->willCloseLayerTreeView(*m_layerTreeView); 2801 page()->willCloseLayerTreeView(*m_layerTreeView);
2807 2802
2808 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) 2803 setRootLayer(nullptr);
2809 detachPaintArtifactCompositor();
2810 else
2811 setRootGraphicsLayer(nullptr);
2812 2804
2813 m_mutator = nullptr; 2805 m_mutator = nullptr;
2814 m_layerTreeView = nullptr; 2806 m_layerTreeView = nullptr;
2815 } 2807 }
2816 2808
2817 void WebViewImpl::didAcquirePointerLock() 2809 void WebViewImpl::didAcquirePointerLock()
2818 { 2810 {
2819 if (page()) 2811 if (page())
2820 page()->pointerLockController().didAcquirePointerLock(); 2812 page()->pointerLockController().didAcquirePointerLock();
2821 } 2813 }
(...skipping 1413 matching lines...) Expand 10 before | Expand all | Expand 10 after
4235 // the mehtod. 4227 // the mehtod.
4236 visualViewport.setScrollLayerOnScrollbars(layoutViewportWebLayer); 4228 visualViewport.setScrollLayerOnScrollbars(layoutViewportWebLayer);
4237 4229
4238 m_layerTreeView->registerViewportLayers( 4230 m_layerTreeView->registerViewportLayers(
4239 visualViewport.overscrollElasticityLayer()->platformLayer(), 4231 visualViewport.overscrollElasticityLayer()->platformLayer(),
4240 visualViewport.pageScaleLayer()->platformLayer(), 4232 visualViewport.pageScaleLayer()->platformLayer(),
4241 visualViewport.scrollLayer()->platformLayer(), 4233 visualViewport.scrollLayer()->platformLayer(),
4242 layoutViewportWebLayer); 4234 layoutViewportWebLayer);
4243 } 4235 }
4244 4236
4245 void WebViewImpl::setRootGraphicsLayer(GraphicsLayer* layer) 4237 void WebViewImpl::setRootGraphicsLayer(GraphicsLayer* graphicsLayer)
4246 { 4238 {
4247 if (!m_layerTreeView) 4239 if (!m_layerTreeView)
4248 return; 4240 return;
4249 4241
4250 // In SPv2, we attach layers via PaintArtifactCompositor, rather than 4242 // In SPv2, setRootLayer is used instead.
4251 // supplying a root GraphicsLayer from PaintLayerCompositor.
4252 DCHECK(!RuntimeEnabledFeatures::slimmingPaintV2Enabled()); 4243 DCHECK(!RuntimeEnabledFeatures::slimmingPaintV2Enabled());
4253 4244
4254 VisualViewport& visualViewport = page()->frameHost().visualViewport(); 4245 VisualViewport& visualViewport = page()->frameHost().visualViewport();
4255 visualViewport.attachToLayerTree(layer); 4246 visualViewport.attachToLayerTree(graphicsLayer);
4256 if (layer) { 4247 if (graphicsLayer) {
4257 m_rootGraphicsLayer = visualViewport.rootGraphicsLayer(); 4248 m_rootGraphicsLayer = visualViewport.rootGraphicsLayer();
4258 m_visualViewportContainerLayer = visualViewport.containerLayer(); 4249 m_visualViewportContainerLayer = visualViewport.containerLayer();
4259 m_rootLayer = m_rootGraphicsLayer->platformLayer(); 4250 m_rootLayer = m_rootGraphicsLayer->platformLayer();
4260 updateRootLayerTransform(); 4251 updateRootLayerTransform();
4261 m_layerTreeView->setRootLayer(*m_rootLayer); 4252 m_layerTreeView->setRootLayer(*m_rootLayer);
4262 // We register viewport layers here since there may not be a layer 4253 // We register viewport layers here since there may not be a layer
4263 // tree view prior to this point. 4254 // tree view prior to this point.
4264 registerViewportLayersWithCompositor(); 4255 registerViewportLayersWithCompositor();
4265 4256
4266 // TODO(enne): Work around page visibility changes not being 4257 // TODO(enne): Work around page visibility changes not being
4267 // propagated to the WebView in some circumstances. This needs to 4258 // propagated to the WebView in some circumstances. This needs to
4268 // be refreshed here when setting a new root layer to avoid being 4259 // be refreshed here when setting a new root layer to avoid being
4269 // stuck in a presumed incorrectly invisible state. 4260 // stuck in a presumed incorrectly invisible state.
4270 m_layerTreeView->setVisible(page()->isPageVisible()); 4261 m_layerTreeView->setVisible(page()->isPageVisible());
4271 } else { 4262 } else {
4272 m_rootGraphicsLayer = nullptr; 4263 m_rootGraphicsLayer = nullptr;
4273 m_visualViewportContainerLayer = nullptr; 4264 m_visualViewportContainerLayer = nullptr;
4274 m_rootLayer = nullptr; 4265 m_rootLayer = nullptr;
4275 // This means that we're transitioning to a new page. Suppress 4266 // This means that we're transitioning to a new page. Suppress
4276 // commits until Blink generates invalidations so we don't 4267 // commits until Blink generates invalidations so we don't
4277 // attempt to paint too early in the next page load. 4268 // attempt to paint too early in the next page load.
4278 m_layerTreeView->setDeferCommits(true); 4269 m_layerTreeView->setDeferCommits(true);
4279 m_layerTreeView->clearRootLayer(); 4270 m_layerTreeView->clearRootLayer();
4280 m_layerTreeView->clearViewportLayers(); 4271 m_layerTreeView->clearViewportLayers();
4281 if (WebDevToolsAgentImpl* devTools = mainFrameDevToolsAgentImpl()) 4272 if (WebDevToolsAgentImpl* devTools = mainFrameDevToolsAgentImpl())
4282 devTools->rootLayerCleared(); 4273 devTools->rootLayerCleared();
4283 } 4274 }
4284 } 4275 }
4285 4276
4277 void WebViewImpl::setRootLayer(WebLayer* layer)
4278 {
4279 if (!m_layerTreeView)
4280 return;
4281
4282 if (layer) {
4283 m_rootLayer = layer;
4284 m_layerTreeView->setRootLayer(*m_rootLayer);
4285 m_layerTreeView->setVisible(page()->isPageVisible());
4286 } else {
4287 m_rootLayer = nullptr;
4288 // This means that we're transitioning to a new page. Suppress
4289 // commits until Blink generates invalidations so we don't
4290 // attempt to paint too early in the next page load.
4291 m_layerTreeView->setDeferCommits(true);
4292 m_layerTreeView->clearRootLayer();
4293 m_layerTreeView->clearViewportLayers();
4294 if (WebDevToolsAgentImpl* devTools = mainFrameDevToolsAgentImpl())
4295 devTools->rootLayerCleared();
4296 }
4297 }
4298
4286 void WebViewImpl::invalidateRect(const IntRect& rect) 4299 void WebViewImpl::invalidateRect(const IntRect& rect)
4287 { 4300 {
4288 if (m_layerTreeView) { 4301 if (m_layerTreeView) {
4289 updateLayerTreeViewport(); 4302 updateLayerTreeViewport();
4290 } else if (m_client) { 4303 } else if (m_client) {
4291 // This is only for WebViewPlugin. 4304 // This is only for WebViewPlugin.
4292 m_client->widgetClient()->didInvalidateRect(rect); 4305 m_client->widgetClient()->didInvalidateRect(rect);
4293 } 4306 }
4294 } 4307 }
4295 4308
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
4348 m_page->layerTreeViewInitialized(*m_layerTreeView); 4361 m_page->layerTreeViewInitialized(*m_layerTreeView);
4349 4362
4350 // FIXME: only unittests, click to play, Android printing, and printing (for headers and footers) 4363 // FIXME: only unittests, click to play, Android printing, and printing (for headers and footers)
4351 // make this assert necessary. We should make them not hit this code and the n delete allowsBrokenNullLayerTreeView. 4364 // make this assert necessary. We should make them not hit this code and the n delete allowsBrokenNullLayerTreeView.
4352 DCHECK(m_layerTreeView || !m_client || m_client->widgetClient()->allowsBroke nNullLayerTreeView()); 4365 DCHECK(m_layerTreeView || !m_client || m_client->widgetClient()->allowsBroke nNullLayerTreeView());
4353 4366
4354 if (Platform::current()->isThreadedAnimationEnabled() && m_layerTreeView) { 4367 if (Platform::current()->isThreadedAnimationEnabled() && m_layerTreeView) {
4355 m_linkHighlightsTimeline = CompositorAnimationTimeline::create(); 4368 m_linkHighlightsTimeline = CompositorAnimationTimeline::create();
4356 attachCompositorAnimationTimeline(m_linkHighlightsTimeline.get()); 4369 attachCompositorAnimationTimeline(m_linkHighlightsTimeline.get());
4357 } 4370 }
4358
4359 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled())
4360 attachPaintArtifactCompositor();
4361 } 4371 }
4362 4372
4363 void WebViewImpl::applyViewportDeltas( 4373 void WebViewImpl::applyViewportDeltas(
4364 const WebFloatSize& visualViewportDelta, 4374 const WebFloatSize& visualViewportDelta,
4365 // TODO(bokan): This parameter is to be removed but requires adjusting many 4375 // TODO(bokan): This parameter is to be removed but requires adjusting many
4366 // callsites. 4376 // callsites.
4367 const WebFloatSize&, 4377 const WebFloatSize&,
4368 const WebFloatSize& elasticOverscrollDelta, 4378 const WebFloatSize& elasticOverscrollDelta,
4369 float pageScaleDelta, 4379 float pageScaleDelta,
4370 float topControlsShownRatioDelta) 4380 float topControlsShownRatioDelta)
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after
4548 { 4558 {
4549 if (m_pageColorOverlay) 4559 if (m_pageColorOverlay)
4550 m_pageColorOverlay->update(); 4560 m_pageColorOverlay->update();
4551 if (InspectorOverlay* overlay = inspectorOverlay()) { 4561 if (InspectorOverlay* overlay = inspectorOverlay()) {
4552 PageOverlay* inspectorPageOverlay = overlay->pageOverlay(); 4562 PageOverlay* inspectorPageOverlay = overlay->pageOverlay();
4553 if (inspectorPageOverlay) 4563 if (inspectorPageOverlay)
4554 inspectorPageOverlay->update(); 4564 inspectorPageOverlay->update();
4555 } 4565 }
4556 } 4566 }
4557 4567
4558 void WebViewImpl::attachPaintArtifactCompositor()
4559 {
4560 if (!m_layerTreeView)
4561 return;
4562
4563 // Otherwise, PaintLayerCompositor is expected to supply a root
4564 // GraphicsLayer via setRootGraphicsLayer.
4565 DCHECK(RuntimeEnabledFeatures::slimmingPaintV2Enabled());
4566
4567 // TODO(jbroman): This should probably have hookups for overlays, visual
4568 // viewport, etc.
4569
4570 WebLayer* rootLayer = m_paintArtifactCompositor.getWebLayer();
4571 DCHECK(rootLayer);
4572 m_layerTreeView->setRootLayer(*rootLayer);
4573
4574 // TODO(jbroman): This is cargo-culted from setRootGraphicsLayer. Is it
4575 // necessary?
4576 m_layerTreeView->setVisible(page()->isPageVisible());
4577 }
4578
4579 void WebViewImpl::detachPaintArtifactCompositor()
4580 {
4581 if (!m_layerTreeView)
4582 return;
4583
4584 m_layerTreeView->setDeferCommits(true);
4585 m_layerTreeView->clearRootLayer();
4586 }
4587
4588 float WebViewImpl::deviceScaleFactor() const 4568 float WebViewImpl::deviceScaleFactor() const
4589 { 4569 {
4590 // TODO(oshima): Investigate if this should return the ScreenInfo's scale fa ctor rather than 4570 // TODO(oshima): Investigate if this should return the ScreenInfo's scale fa ctor rather than
4591 // page's scale factor, which can be 1 in use-zoom-for-dsf mode. 4571 // page's scale factor, which can be 1 in use-zoom-for-dsf mode.
4592 if (!page()) 4572 if (!page())
4593 return 1; 4573 return 1;
4594 4574
4595 return page()->deviceScaleFactor(); 4575 return page()->deviceScaleFactor();
4596 } 4576 }
4597 4577
4598 LocalFrame* WebViewImpl::focusedLocalFrameInWidget() const 4578 LocalFrame* WebViewImpl::focusedLocalFrameInWidget() const
4599 { 4579 {
4600 if (!mainFrameImpl()) 4580 if (!mainFrameImpl())
4601 return nullptr; 4581 return nullptr;
4602 4582
4603 LocalFrame* focusedFrame = toLocalFrame(focusedCoreFrame()); 4583 LocalFrame* focusedFrame = toLocalFrame(focusedCoreFrame());
4604 if (focusedFrame->localFrameRoot() != mainFrameImpl()->frame()) 4584 if (focusedFrame->localFrameRoot() != mainFrameImpl()->frame())
4605 return nullptr; 4585 return nullptr;
4606 return focusedFrame; 4586 return focusedFrame;
4607 } 4587 }
4608 4588
4609 LocalFrame* WebViewImpl::focusedLocalFrameAvailableForIme() const 4589 LocalFrame* WebViewImpl::focusedLocalFrameAvailableForIme() const
4610 { 4590 {
4611 return m_imeAcceptEvents ? focusedLocalFrameInWidget() : nullptr; 4591 return m_imeAcceptEvents ? focusedLocalFrameInWidget() : nullptr;
4612 } 4592 }
4613 4593
4614 } // namespace blink 4594 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698