diff options
-rw-r--r-- | AUTHORS | 1 | ||||
-rw-r--r-- | content/renderer/render_view_impl.cc | 19 | ||||
-rw-r--r-- | content/renderer/render_view_impl.h | 5 | ||||
-rw-r--r-- | content/renderer/render_widget.cc | 32 | ||||
-rw-r--r-- | content/renderer/render_widget.h | 5 | ||||
-rw-r--r-- | content/renderer/render_widget_fullscreen_pepper.cc | 2 |
6 files changed, 63 insertions, 1 deletions
@@ -318,6 +318,7 @@ Sungguk Lim <limasdf@gmail.com> Sungmann Cho <sungmann.cho@gmail.com> Sungmann Cho <sungmann.cho@navercorp.com> Suyash Sengar <suyash.s@samsung.com> +Sunil Ratnu <sunil.ratnu@samsung.com> Sylvain Zimmer <sylvinus@gmail.com> Szymon Piechowicz <szymonpiechowicz@o2.pl> Takeshi Kurosawa <taken.spc@gmail.com> diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc index 9ef9242..251d086 100644 --- a/content/renderer/render_view_impl.cc +++ b/content/renderer/render_view_impl.cc @@ -2288,6 +2288,10 @@ bool RenderViewImpl::isPointerLocked() { webwidget_mouse_lock_target_.get()); } +// FIXME: To be removed as soon as chromium and blink side changes land +// didActivateCompositor with parameters is still kept in order to land +// these changes s-chromium - https://codereview.chromium.org/137893025/. +// s-blink - https://codereview.chromium.org/138523003/ void RenderViewImpl::didActivateCompositor(int input_handler_identifier) { #if !defined(OS_MACOSX) // many events are unhandled - http://crbug.com/138003 InputHandlerManager* input_handler_manager = @@ -2303,6 +2307,21 @@ void RenderViewImpl::didActivateCompositor(int input_handler_identifier) { RenderWidget::didActivateCompositor(input_handler_identifier); } +void RenderViewImpl::didActivateCompositor() { +#if !defined(OS_MACOSX) // many events are unhandled - http://crbug.com/138003 + InputHandlerManager* input_handler_manager = + RenderThreadImpl::current()->input_handler_manager(); + if (input_handler_manager) { + input_handler_manager->AddInputHandler( + routing_id_, + compositor_->GetInputHandler(), + AsWeakPtr()); + } +#endif + + RenderWidget::didActivateCompositor(); +} + void RenderViewImpl::didHandleGestureEvent( const WebGestureEvent& event, bool event_cancelled) { diff --git a/content/renderer/render_view_impl.h b/content/renderer/render_view_impl.h index 10540b9..e75867a 100644 --- a/content/renderer/render_view_impl.h +++ b/content/renderer/render_view_impl.h @@ -374,7 +374,12 @@ class CONTENT_EXPORT RenderViewImpl virtual bool requestPointerLock(); virtual void requestPointerUnlock(); virtual bool isPointerLocked(); + // FIXME: To be removed as soon as chromium and blink side changes land + // didActivateCompositor with parameters is still kept in order to land + // these changes s-chromium - https://codereview.chromium.org/137893025/. + // s-blink - https://codereview.chromium.org/138523003/ virtual void didActivateCompositor(int input_handler_identifier); + virtual void didActivateCompositor() OVERRIDE; virtual void didHandleGestureEvent(const blink::WebGestureEvent& event, bool event_cancelled) OVERRIDE; virtual void initializeLayerTreeView() OVERRIDE; diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc index 198d7d4..a2673a6 100644 --- a/content/renderer/render_widget.cc +++ b/content/renderer/render_widget.cc @@ -1807,6 +1807,10 @@ void RenderWidget::AutoResizeCompositor() { compositor_->setViewportSize(size_, physical_backing_size_); } +// FIXME: To be removed as soon as chromium and blink side changes land +// didActivateCompositor with parameters is still kept in order to land +// these changes s-chromium - https://codereview.chromium.org/137893025/. +// s-blink - https://codereview.chromium.org/138523003/ void RenderWidget::didActivateCompositor(int input_handler_identifier) { TRACE_EVENT0("gpu", "RenderWidget::didActivateCompositor"); @@ -1835,6 +1839,34 @@ void RenderWidget::didActivateCompositor(int input_handler_identifier) { } } +void RenderWidget::didActivateCompositor() { + TRACE_EVENT0("gpu", "RenderWidget::didActivateCompositor"); + +#if !defined(OS_MACOSX) + if (!is_accelerated_compositing_active_) { + // When not in accelerated compositing mode, in certain cases (e.g. waiting + // for a resize or if no backing store) the RenderWidgetHost is blocking the + // browser's UI thread for some time, waiting for an UpdateRect. If we are + // going to switch to accelerated compositing, the GPU process may need + // round-trips to the browser's UI thread before finishing the frame, + // causing deadlocks if we delay the UpdateRect until we receive the + // OnSwapBuffersComplete. So send a dummy message that will unblock the + // browser's UI thread. This is not necessary on Mac, because SwapBuffers + // now unblocks GetBackingStore on Mac. + Send(new ViewHostMsg_UpdateIsDelayed(routing_id_)); + } +#endif + + is_accelerated_compositing_active_ = true; + Send(new ViewHostMsg_DidActivateAcceleratedCompositing( + routing_id_, is_accelerated_compositing_active_)); + + if (!was_accelerated_compositing_ever_active_) { + was_accelerated_compositing_ever_active_ = true; + webwidget_->enterForceCompositingMode(true); + } +} + void RenderWidget::didDeactivateCompositor() { TRACE_EVENT0("gpu", "RenderWidget::didDeactivateCompositor"); diff --git a/content/renderer/render_widget.h b/content/renderer/render_widget.h index fdd55c3..c84af63 100644 --- a/content/renderer/render_widget.h +++ b/content/renderer/render_widget.h @@ -130,7 +130,12 @@ class CONTENT_EXPORT RenderWidget virtual void didScrollRect(int dx, int dy, const blink::WebRect& clipRect); virtual void didAutoResize(const blink::WebSize& new_size); + // FIXME: To be removed as soon as chromium and blink side changes land + // didActivateCompositor with parameters is still kept in order to land + // these changes s-chromium - https://codereview.chromium.org/137893025/. + // s-blink - https://codereview.chromium.org/138523003/ virtual void didActivateCompositor(int input_handler_identifier); + virtual void didActivateCompositor() OVERRIDE; virtual void didDeactivateCompositor(); virtual void initializeLayerTreeView(); virtual blink::WebLayerTreeView* layerTreeView(); diff --git a/content/renderer/render_widget_fullscreen_pepper.cc b/content/renderer/render_widget_fullscreen_pepper.cc index dc22252..988b8ce 100644 --- a/content/renderer/render_widget_fullscreen_pepper.cc +++ b/content/renderer/render_widget_fullscreen_pepper.cc @@ -414,7 +414,7 @@ void RenderWidgetFullscreenPepper::SetLayer(blink::WebLayer* layer) { layer_->setDrawsContent(true); compositor_->setDeviceScaleFactor(device_scale_factor_); compositor_->setRootLayer(*layer_); - didActivateCompositor(-1); + didActivateCompositor(); } else { didDeactivateCompositor(); } |