Index: content/browser/renderer_host/render_widget_host_view_aura.cc |
diff --git a/content/browser/renderer_host/render_widget_host_view_aura.cc b/content/browser/renderer_host/render_widget_host_view_aura.cc |
index 1de892f23ce5486e06b23ac18665b9dcaff90a5e..62aa2d248b8f74ad73a85f9c6708538d6335da56 100644 |
--- a/content/browser/renderer_host/render_widget_host_view_aura.cc |
+++ b/content/browser/renderer_host/render_widget_host_view_aura.cc |
@@ -15,6 +15,7 @@ |
#include "base/message_loop/message_loop.h" |
#include "base/strings/string_number_conversions.h" |
#include "base/trace_event/trace_event.h" |
+#include "cc/base/switches.h" |
#include "cc/layers/layer.h" |
#include "cc/output/copy_output_request.h" |
#include "cc/output/copy_output_result.h" |
@@ -473,9 +474,13 @@ RenderWidgetHostViewAura::RenderWidgetHostViewAura(RenderWidgetHost* host, |
#endif |
has_snapped_to_boundary_(false), |
is_guest_view_hack_(is_guest_view_hack), |
- begin_frame_observer_proxy_(this), |
set_focus_on_mouse_down_(false), |
weak_ptr_factory_(this) { |
+ if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
+ cc::switches::kEnableBeginFrameScheduling)) { |
+ begin_frame_observer_proxy_.reset(new BeginFrameObserverProxy(this)); |
+ } |
+ |
if (!is_guest_view_hack_) |
host_->SetView(this); |
@@ -742,10 +747,12 @@ ui::TextInputClient* RenderWidgetHostViewAura::GetTextInputClient() { |
} |
void RenderWidgetHostViewAura::OnSetNeedsBeginFrames(bool needs_begin_frames) { |
- begin_frame_observer_proxy_.SetNeedsBeginFrames(needs_begin_frames); |
+ DCHECK(begin_frame_observer_proxy_); |
+ begin_frame_observer_proxy_->SetNeedsBeginFrames(needs_begin_frames); |
} |
void RenderWidgetHostViewAura::SendBeginFrame(const cc::BeginFrameArgs& args) { |
+ host_->FlushInput(args.frame_time); |
delegated_frame_host_->SetVSyncParameters(args.frame_time, args.interval); |
host_->Send(new ViewMsg_BeginFrame(host_->GetRoutingID(), args)); |
} |
@@ -1368,6 +1375,14 @@ InputEventAckState RenderWidgetHostViewAura::FilterInputEvent( |
: INPUT_EVENT_ACK_STATE_NOT_CONSUMED; |
} |
+void RenderWidgetHostViewAura::OnSetNeedsFlushInput() { |
+ if (begin_frame_observer_proxy_) { |
+ begin_frame_observer_proxy_->SetNeedsOneBeginFrame(); |
+ return; |
+ } |
+ RenderWidgetHostViewBase::OnSetNeedsFlushInput(); |
+} |
+ |
BrowserAccessibilityManager* |
RenderWidgetHostViewAura::CreateBrowserAccessibilityManager( |
BrowserAccessibilityDelegate* delegate) { |
@@ -2699,8 +2714,10 @@ void RenderWidgetHostViewAura::AddedToRootWindow() { |
#endif |
delegated_frame_host_->SetCompositor(window_->GetHost()->compositor()); |
- if (window_->GetHost()->compositor()) |
- begin_frame_observer_proxy_.SetCompositor(window_->GetHost()->compositor()); |
+ if (window_->GetHost()->compositor() && begin_frame_observer_proxy_) { |
+ begin_frame_observer_proxy_->SetCompositor( |
+ window_->GetHost()->compositor()); |
+ } |
} |
void RenderWidgetHostViewAura::RemovingFromRootWindow() { |
@@ -2713,7 +2730,8 @@ void RenderWidgetHostViewAura::RemovingFromRootWindow() { |
window_->GetHost()->RemoveObserver(this); |
delegated_frame_host_->ResetCompositor(); |
- begin_frame_observer_proxy_.ResetCompositor(); |
+ if (begin_frame_observer_proxy_) |
+ begin_frame_observer_proxy_->ResetCompositor(); |
#if defined(OS_WIN) |
// Update the legacy window's parent temporarily to the desktop window. It |