Index: content/browser/renderer_host/render_widget_host_view_android.cc |
diff --git a/content/browser/renderer_host/render_widget_host_view_android.cc b/content/browser/renderer_host/render_widget_host_view_android.cc |
index ac5f241e481befdaa3c6dd15a16c782a591cdb2b..694345e5f7568ea88d69a7dbd06d18349ccabb93 100644 |
--- a/content/browser/renderer_host/render_widget_host_view_android.cc |
+++ b/content/browser/renderer_host/render_widget_host_view_android.cc |
@@ -112,7 +112,8 @@ RenderWidgetHostViewAndroid::RenderWidgetHostViewAndroid( |
texture_id_in_layer_(0), |
current_mailbox_output_surface_id_(kUndefinedOutputSurfaceId), |
weak_ptr_factory_(this), |
- overscroll_effect_enabled_(true) { |
+ overscroll_effect_enabled_(true), |
+ flush_input_requested_(false) { |
if (CompositorImpl::UsesDirectGL()) { |
surface_texture_transport_.reset(new SurfaceTextureTransportClient()); |
layer_ = surface_texture_transport_->Initialize(); |
@@ -454,8 +455,16 @@ void RenderWidgetHostViewAndroid::OnDidChangeBodyBackgroundColor( |
void RenderWidgetHostViewAndroid::SendBeginFrame( |
const cc::BeginFrameArgs& args) { |
TRACE_EVENT0("cc", "RenderWidgetHostViewAndroid::SendBeginFrame"); |
- if (host_) |
- host_->Send(new ViewMsg_BeginFrame(host_->GetRoutingID(), args)); |
+ if (!host_) |
+ return; |
+ |
+ if (flush_input_requested_) { |
+ flush_input_requested_ = false; |
+ host_->FlushInput(); |
+ RemoveBeginFrameSubscriber(); |
+ } |
+ |
+ host_->Send(new ViewMsg_BeginFrame(host_->GetRoutingID(), args)); |
} |
void RenderWidgetHostViewAndroid::OnSetNeedsBeginFrame( |
@@ -466,7 +475,10 @@ void RenderWidgetHostViewAndroid::OnSetNeedsBeginFrame( |
// we have to make sure calls to ContentViewCoreImpl's SetNeedsBeginFrame |
// are balanced, even if RenderWidgetHostViewAndroid's may not be. |
if (content_view_core_ && needs_begin_frame_ != enabled) { |
- content_view_core_->SetNeedsBeginFrame(enabled); |
+ if (enabled) |
+ AddBeginFrameSubscriber(); |
+ else |
+ RemoveBeginFrameSubscriber(); |
needs_begin_frame_ = enabled; |
} |
} |
@@ -819,6 +831,14 @@ void RenderWidgetHostViewAndroid::RemoveLayers() { |
content_view_core_->RemoveLayer(layer_); |
} |
+void RenderWidgetHostViewAndroid::AddBeginFrameSubscriber() { |
+ content_view_core_->SetNeedsBeginFrame(true); |
+} |
+ |
+void RenderWidgetHostViewAndroid::RemoveBeginFrameSubscriber() { |
+ content_view_core_->SetNeedsBeginFrame(false); |
+} |
+ |
bool RenderWidgetHostViewAndroid::Animate(base::TimeTicks frame_time) { |
if (!overscroll_effect_) |
return false; |
@@ -951,6 +971,17 @@ InputEventAckState RenderWidgetHostViewAndroid::FilterInputEvent( |
return INPUT_EVENT_ACK_STATE_NOT_CONSUMED; |
} |
+void RenderWidgetHostViewAndroid::OnSetNeedsFlushInput() { |
+ if (flush_input_requested_) |
+ return; |
+ flush_input_requested_ = true; |
+ AddBeginFrameSubscriber(); |
+} |
+ |
+void RenderWidgetHostViewAndroid::OnDidFlushInput() { |
+ // TODO(jdduke): Send blocked BeginFrame? |
+} |
+ |
void RenderWidgetHostViewAndroid::OnAccessibilityEvents( |
const std::vector<AccessibilityHostMsg_EventParams>& params) { |
if (!host_ || |