Skip to content

Commit fc564eb

Browse files
jbauman2bbandix
authored andcommitted
<third_party/WebKit> Use compositor for page popups.
This is essentially the last user of the legacy 2d path. BUG=271140 Review URL: https://codereview.chromium.org/171343003 git-svn-id: svn://svn.chromium.org/blink/trunk@167552 bbb929c8-8fbe-4397-9dbb-9b2b20218538 Reviewed-by: Jocelyn Turcotte <[email protected]> Change-Id: I131a9b5ea7487d093c716b9d50933d1ff609c1a9 Reviewed-by: Zeno Albisser <[email protected]>
1 parent 1d794e3 commit fc564eb

File tree

2 files changed

+100
-0
lines changed

2 files changed

+100
-0
lines changed

chromium/third_party/WebKit/Source/web/WebPagePopupImpl.cpp

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,16 @@ class PagePopupChromeClient : public EmptyChromeClient {
138138
m_popup->widgetClient()->hasTouchEventHandlers(needsTouchEvents);
139139
}
140140

141+
virtual GraphicsLayerFactory* graphicsLayerFactory() const OVERRIDE
142+
{
143+
return m_popup->m_webView->graphicsLayerFactory();
144+
}
145+
146+
virtual void attachRootGraphicsLayer(Frame*, GraphicsLayer* graphicsLayer) OVERRIDE
147+
{
148+
m_popup->setRootGraphicsLayer(graphicsLayer);
149+
}
150+
141151
WebPagePopupImpl* m_popup;
142152
};
143153

@@ -157,6 +167,10 @@ bool PagePopupFeaturesClient::isEnabled(Document*, ContextFeatures::FeatureType
157167
WebPagePopupImpl::WebPagePopupImpl(WebWidgetClient* client)
158168
: m_widgetClient(client)
159169
, m_closing(false)
170+
, m_layerTreeView(0)
171+
, m_rootLayer(0)
172+
, m_rootGraphicsLayer(0)
173+
, m_isAcceleratedCompositingActive(false)
160174
{
161175
ASSERT(client);
162176
}
@@ -224,6 +238,49 @@ void WebPagePopupImpl::destroyPage()
224238
m_page.clear();
225239
}
226240

241+
void WebPagePopupImpl::setRootGraphicsLayer(GraphicsLayer* layer)
242+
{
243+
m_rootGraphicsLayer = layer;
244+
m_rootLayer = layer ? layer->platformLayer() : 0;
245+
246+
setIsAcceleratedCompositingActive(layer);
247+
if (m_layerTreeView) {
248+
if (m_rootLayer) {
249+
m_layerTreeView->setRootLayer(*m_rootLayer);
250+
} else {
251+
m_layerTreeView->clearRootLayer();
252+
}
253+
}
254+
}
255+
256+
void WebPagePopupImpl::setIsAcceleratedCompositingActive(bool enter)
257+
{
258+
if (m_isAcceleratedCompositingActive == enter)
259+
return;
260+
261+
if (!enter) {
262+
m_isAcceleratedCompositingActive = false;
263+
m_widgetClient->didDeactivateCompositor();
264+
} else if (m_layerTreeView) {
265+
m_isAcceleratedCompositingActive = true;
266+
m_widgetClient->didActivateCompositor(0);
267+
} else {
268+
TRACE_EVENT0("webkit", "WebPagePopupImpl::setIsAcceleratedCompositingActive(true)");
269+
270+
m_widgetClient->initializeLayerTreeView();
271+
m_layerTreeView = m_widgetClient->layerTreeView();
272+
if (m_layerTreeView) {
273+
m_layerTreeView->setVisible(true);
274+
m_widgetClient->didActivateCompositor(0);
275+
m_isAcceleratedCompositingActive = true;
276+
m_layerTreeView->setDeviceScaleFactor(m_widgetClient->deviceScaleFactor());
277+
} else {
278+
m_isAcceleratedCompositingActive = false;
279+
m_widgetClient->didDeactivateCompositor();
280+
}
281+
}
282+
}
283+
227284
WebSize WebPagePopupImpl::size()
228285
{
229286
return m_popupClient->contentSize();
@@ -234,6 +291,36 @@ void WebPagePopupImpl::animate(double)
234291
PageWidgetDelegate::animate(m_page.get(), monotonicallyIncreasingTime());
235292
}
236293

294+
void WebPagePopupImpl::enterForceCompositingMode(bool enter)
295+
{
296+
if (m_page->settings().forceCompositingMode() == enter)
297+
return;
298+
299+
TRACE_EVENT1("webkit", "WebPagePopupImpl::enterForceCompositingMode", "enter", enter);
300+
m_page->settings().setForceCompositingMode(enter);
301+
if (enter) {
302+
if (!m_page)
303+
return;
304+
Frame* mainFrame = m_page->mainFrame();
305+
if (!mainFrame)
306+
return;
307+
mainFrame->view()->updateCompositingLayersAfterStyleChange();
308+
}
309+
}
310+
311+
void WebPagePopupImpl::didExitCompositingMode()
312+
{
313+
setIsAcceleratedCompositingActive(false);
314+
m_widgetClient->didInvalidateRect(IntRect(0, 0, size().width, size().height));
315+
m_page->mainFrame()->document()->setNeedsStyleRecalc(SubtreeStyleChange);
316+
}
317+
318+
void WebPagePopupImpl::willCloseLayerTreeView()
319+
{
320+
setIsAcceleratedCompositingActive(false);
321+
m_layerTreeView = 0;
322+
}
323+
237324
void WebPagePopupImpl::layout()
238325
{
239326
PageWidgetDelegate::layout(m_page.get());

chromium/third_party/WebKit/Source/web/WebPagePopupImpl.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
#include "wtf/RefCounted.h"
3939

4040
namespace WebCore {
41+
class GraphicsLayer;
4142
class Page;
4243
class PagePopupClient;
4344
class PlatformKeyboardEvent;
@@ -46,6 +47,8 @@ class PlatformKeyboardEvent;
4647
namespace blink {
4748

4849
class PagePopupChromeClient;
50+
class WebLayerTreeView;
51+
class WebLayer;
4952
class WebViewImpl;
5053

5154
class WebPagePopupImpl : public WebPagePopup,
@@ -68,6 +71,9 @@ class WebPagePopupImpl : public WebPagePopup,
6871
virtual WebSize size() OVERRIDE;
6972
virtual void animate(double) OVERRIDE;
7073
virtual void layout() OVERRIDE;
74+
virtual void enterForceCompositingMode(bool enter) OVERRIDE;
75+
virtual void didExitCompositingMode() OVERRIDE;
76+
virtual void willCloseLayerTreeView() OVERRIDE;
7177
virtual void paint(WebCanvas*, const WebRect&, PaintOptions = ReadbackFromCompositorIfAvailable) OVERRIDE;
7278
virtual void resize(const WebSize&) OVERRIDE;
7379
virtual void close() OVERRIDE;
@@ -83,6 +89,8 @@ class WebPagePopupImpl : public WebPagePopup,
8389
explicit WebPagePopupImpl(WebWidgetClient*);
8490
bool initializePage();
8591
void destroyPage();
92+
void setRootGraphicsLayer(WebCore::GraphicsLayer*);
93+
void setIsAcceleratedCompositingActive(bool enter);
8694

8795
WebWidgetClient* m_widgetClient;
8896
WebRect m_windowRectInScreen;
@@ -92,6 +100,11 @@ class WebPagePopupImpl : public WebPagePopup,
92100
WebCore::PagePopupClient* m_popupClient;
93101
bool m_closing;
94102

103+
WebLayerTreeView* m_layerTreeView;
104+
WebLayer* m_rootLayer;
105+
WebCore::GraphicsLayer* m_rootGraphicsLayer;
106+
bool m_isAcceleratedCompositingActive;
107+
95108
friend class WebPagePopup;
96109
friend class PagePopupChromeClient;
97110
};

0 commit comments

Comments
 (0)