@@ -138,6 +138,16 @@ class PagePopupChromeClient : public EmptyChromeClient {
138
138
m_popup->widgetClient ()->hasTouchEventHandlers (needsTouchEvents);
139
139
}
140
140
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
+
141
151
WebPagePopupImpl* m_popup;
142
152
};
143
153
@@ -157,6 +167,10 @@ bool PagePopupFeaturesClient::isEnabled(Document*, ContextFeatures::FeatureType
157
167
WebPagePopupImpl::WebPagePopupImpl (WebWidgetClient* client)
158
168
: m_widgetClient(client)
159
169
, m_closing(false )
170
+ , m_layerTreeView(0 )
171
+ , m_rootLayer(0 )
172
+ , m_rootGraphicsLayer(0 )
173
+ , m_isAcceleratedCompositingActive(false )
160
174
{
161
175
ASSERT (client);
162
176
}
@@ -224,6 +238,49 @@ void WebPagePopupImpl::destroyPage()
224
238
m_page.clear ();
225
239
}
226
240
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
+
227
284
WebSize WebPagePopupImpl::size ()
228
285
{
229
286
return m_popupClient->contentSize ();
@@ -234,6 +291,36 @@ void WebPagePopupImpl::animate(double)
234
291
PageWidgetDelegate::animate (m_page.get (), monotonicallyIncreasingTime ());
235
292
}
236
293
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
+
237
324
void WebPagePopupImpl::layout ()
238
325
{
239
326
PageWidgetDelegate::layout (m_page.get ());
0 commit comments