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

Unified Diff: Source/web/WebViewImpl.cpp

Issue 1094453004: Revert of Remove WebViewImpl::setIsAcceleratedCompositingActive (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 8 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/web/WebViewImpl.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/web/WebViewImpl.cpp
diff --git a/Source/web/WebViewImpl.cpp b/Source/web/WebViewImpl.cpp
index a026fe12d901b713238940b116dec3d146e18902..8cadf7fe2abd507641b75a6bb3f7d9d28e9c0a81 100644
--- a/Source/web/WebViewImpl.cpp
+++ b/Source/web/WebViewImpl.cpp
@@ -340,14 +340,10 @@
void WebViewImpl::setMainFrame(WebFrame* frame)
{
- if (frame->isWebLocalFrame()) {
- WebLocalFrameImpl* localFrame = toWebLocalFrameImpl(frame);
- localFrame->initializeCoreFrame(&page()->frameHost(), 0, nullAtom, nullAtom);
- // Composited WebViews want repaints outside the frame visible rect.
- localFrame->frame()->view()->setClipsRepaints(!m_layerTreeView);
- } else {
+ if (frame->isWebLocalFrame())
+ toWebLocalFrameImpl(frame)->initializeCoreFrame(&page()->frameHost(), 0, nullAtom, nullAtom);
+ else
toWebRemoteFrameImpl(frame)->initializeCoreFrame(&page()->frameHost(), 0, nullAtom);
- }
}
void WebViewImpl::setCredentialManagerClient(WebCredentialManagerClient* webCredentialManagerClient)
@@ -416,13 +412,19 @@
, m_rootGraphicsLayer(0)
, m_rootTransformLayer(0)
, m_graphicsLayerFactory(adoptPtr(new GraphicsLayerFactoryChromium(this)))
+ , m_isAcceleratedCompositingActive(false)
+ , m_layerTreeViewCommitsDeferred(false)
+ , m_layerTreeViewClosed(false)
, m_matchesHeuristicsForGpuRasterization(false)
, m_recreatingGraphicsContext(false)
, m_flingModifier(0)
, m_flingSourceDevice(false)
, m_fullscreenController(FullscreenController::create(this))
, m_showFPSCounter(false)
+ , m_showPaintRects(false)
+ , m_showDebugBorders(false)
, m_continuousPaintingEnabled(false)
+ , m_showScrollBottleneckRects(false)
, m_baseBackgroundColor(Color::white)
, m_backgroundColorOverride(Color::transparent)
, m_zoomFactorOverride(0)
@@ -965,6 +967,7 @@
TRACE_EVENT0("blink", "WebViewImpl::setShowPaintRects");
m_layerTreeView->setShowPaintRects(show);
}
+ m_showPaintRects = show;
setFirstPaintInvalidationTrackingEnabledForShowPaintRects(show);
}
@@ -972,6 +975,7 @@
{
if (m_layerTreeView)
m_layerTreeView->setShowDebugBorders(show);
+ m_showDebugBorders = show;
}
void WebViewImpl::setContinuousPaintingEnabled(bool enabled)
@@ -999,6 +1003,7 @@
{
if (m_layerTreeView)
m_layerTreeView->setShowScrollBottleneckRects(show);
+ m_showScrollBottleneckRects = show;
}
void WebViewImpl::acceptLanguagesChanged()
@@ -2727,12 +2732,14 @@
bool WebViewImpl::isAcceleratedCompositingActive() const
{
- return m_rootLayer;
+ return m_isAcceleratedCompositingActive;
}
void WebViewImpl::willCloseLayerTreeView()
{
+ setIsAcceleratedCompositingActive(false);
m_layerTreeView = 0;
+ m_layerTreeViewClosed = true;
}
void WebViewImpl::didAcquirePointerLock()
@@ -3699,7 +3706,7 @@
}
if (m_client) {
- if (m_layerTreeView) {
+ if (isAcceleratedCompositingActive()) {
updateLayerTreeViewport();
} else {
WebRect damagedRect(0, 0, m_size.width, m_size.height);
@@ -3847,9 +3854,6 @@
// Future frames check this to know whether to be transparent.
m_isTransparent = isTransparent;
-
- if (m_layerTreeView)
- m_layerTreeView->setHasTransparentBackground(this->isTransparent());
}
bool WebViewImpl::isTransparent() const
@@ -3950,8 +3954,11 @@
void WebViewImpl::resumeTreeViewCommits()
{
- if (m_layerTreeView)
- m_layerTreeView->setDeferCommits(false);
+ if (m_layerTreeViewCommitsDeferred) {
+ if (m_layerTreeView)
+ m_layerTreeView->setDeferCommits(false);
+ m_layerTreeViewCommitsDeferred = false;
+ }
}
void WebViewImpl::postLayoutResize(WebLocalFrameImpl* webframe)
@@ -4147,9 +4154,6 @@
void WebViewImpl::setRootGraphicsLayer(GraphicsLayer* layer)
{
- if (!m_layerTreeView)
- return;
-
suppressInvalidations(true);
PinchViewport& pinchViewport = page()->frameHost().pinchViewport();
@@ -4158,16 +4162,15 @@
m_rootGraphicsLayer = pinchViewport.rootGraphicsLayer();
m_rootLayer = pinchViewport.rootGraphicsLayer()->platformLayer();
m_rootTransformLayer = pinchViewport.rootGraphicsLayer();
- updateRootLayerTransform();
} else {
m_rootGraphicsLayer = nullptr;
m_rootLayer = nullptr;
m_rootTransformLayer = nullptr;
- // This means that we're transitioning to a new page. Suppress
- // commits until Blink generates invalidations so we don't
- // attempt to paint too early in the next page load.
- m_layerTreeView->setDeferCommits(true);
- }
+ }
+
+ setIsAcceleratedCompositingActive(layer != 0);
+
+ updateRootLayerTransform();
if (m_layerTreeView) {
if (m_rootLayer) {
@@ -4175,8 +4178,6 @@
// We register viewport layers here since there may not be a layer
// tree view prior to this point.
page()->frameHost().pinchViewport().registerLayersWithTreeView(m_layerTreeView);
- if (m_pageOverlays)
- m_pageOverlays->update();
} else {
m_layerTreeView->clearRootLayer();
page()->frameHost().pinchViewport().clearLayersForTreeView(m_layerTreeView);
@@ -4193,9 +4194,10 @@
void WebViewImpl::invalidateRect(const IntRect& rect)
{
- if (m_layerTreeView)
+ if (m_isAcceleratedCompositingActive) {
+ ASSERT(m_layerTreeView);
updateLayerTreeViewport();
- else if (m_client)
+ } else if (m_client)
m_client->didInvalidateRect(rect);
}
@@ -4260,6 +4262,58 @@
// FIXME: only unittests, click to play, Android priting, and printing (for headers and footers)
// make this assert necessary. We should make them not hit this code and then delete allowsBrokenNullLayerTreeView.
ASSERT(m_layerTreeView || !m_client || m_client->allowsBrokenNullLayerTreeView());
+}
+
+void WebViewImpl::setIsAcceleratedCompositingActive(bool active)
+{
+ // In the middle of shutting down; don't try to spin back up a compositor.
+ // FIXME: compositing startup/shutdown should be refactored so that it
+ // turns on explicitly rather than lazily, which causes this awkwardness.
+ if (m_layerTreeViewClosed)
+ return;
+
+ ASSERT(!active || m_layerTreeView);
+ Platform::current()->histogramEnumeration("GPU.setIsAcceleratedCompositingActive", active * 2 + m_isAcceleratedCompositingActive, 4);
+
+ if (m_isAcceleratedCompositingActive == active)
+ return;
+
+ if (!m_client)
+ return;
+
+ if (!active) {
+ m_isAcceleratedCompositingActive = false;
+ if (!m_layerTreeViewCommitsDeferred) {
+ ASSERT(m_layerTreeView);
+ // This means that we're transitioning to a new page. Suppress commits until WebKit generates invalidations so
+ // we don't attempt to paint too early in the next page load.
+ m_layerTreeView->setDeferCommits(true);
+ m_layerTreeViewCommitsDeferred = true;
+ }
+ } else {
+ TRACE_EVENT0("blink", "WebViewImpl::setIsAcceleratedCompositingActive(true)");
+ m_layerTreeView->setRootLayer(*m_rootLayer);
+
+ bool visible = page()->visibilityState() == PageVisibilityStateVisible;
+ m_layerTreeView->setVisible(visible);
+ updateLayerTreeDeviceScaleFactor();
+ m_layerTreeView->setPageScaleFactorAndLimits(pageScaleFactor(), minimumPageScaleFactor(), maximumPageScaleFactor());
+ updateLayerTreeBackgroundColor();
+ m_layerTreeView->setHasTransparentBackground(isTransparent());
+ updateLayerTreeViewport();
+ m_isAcceleratedCompositingActive = true;
+ if (m_pageOverlays)
+ m_pageOverlays->update();
+ // FIXME: allow emulation, fps counter and continuous painting at the same time: crbug.com/299837.
+ m_layerTreeView->setShowFPSCounter(m_showFPSCounter && !m_devToolsEmulator->deviceEmulationEnabled());
+ m_layerTreeView->setShowPaintRects(m_showPaintRects);
+ m_layerTreeView->setShowDebugBorders(m_showDebugBorders);
+ m_layerTreeView->setContinuousPaintingEnabled(m_continuousPaintingEnabled && !m_devToolsEmulator->deviceEmulationEnabled());
+ m_layerTreeView->setShowScrollBottleneckRects(m_showScrollBottleneckRects);
+ m_layerTreeView->heuristicsForGpuRasterizationUpdated(m_matchesHeuristicsForGpuRasterization);
+ }
+ if (page() && page()->mainFrame()->isLocalFrame())
+ page()->deprecatedLocalMainFrame()->view()->setClipsRepaints(!m_isAcceleratedCompositingActive);
}
void WebViewImpl::updateMainFrameScrollPosition(const DoublePoint& scrollPosition, bool programmaticScroll)
@@ -4383,10 +4437,11 @@
void WebViewImpl::setVisibilityState(WebPageVisibilityState visibilityState,
bool isInitialState) {
+ if (!page())
+ return;
+
ASSERT(visibilityState == WebPageVisibilityStateVisible || visibilityState == WebPageVisibilityStateHidden || visibilityState == WebPageVisibilityStatePrerender);
-
- if (page())
- m_page->setVisibilityState(static_cast<PageVisibilityState>(static_cast<int>(visibilityState)), isInitialState);
+ m_page->setVisibilityState(static_cast<PageVisibilityState>(static_cast<int>(visibilityState)), isInitialState);
if (m_layerTreeView) {
bool visible = visibilityState == WebPageVisibilityStateVisible;
« no previous file with comments | « Source/web/WebViewImpl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698