Index: content/browser/renderer_host/render_widget_host_view_mac.mm |
diff --git a/content/browser/renderer_host/render_widget_host_view_mac.mm b/content/browser/renderer_host/render_widget_host_view_mac.mm |
index ddb1a16ae6f3a926d02cbb523666db9e6b7f6802..1c9ce1e430de8821450808b9dd533f7c5999f680 100644 |
--- a/content/browser/renderer_host/render_widget_host_view_mac.mm |
+++ b/content/browser/renderer_host/render_widget_host_view_mac.mm |
@@ -482,6 +482,44 @@ void RenderWidgetHostViewMac::DelegatedFrameHostUpdateVSyncParameters( |
render_widget_host_->UpdateVSyncParameters(timebase, interval); |
} |
+void RenderWidgetHostViewMac::SetBeginFrameSource( |
+ cc::BeginFrameSource* source) { |
+ if (begin_frame_source_ && needs_begin_frames_) |
+ begin_frame_source_->RemoveObserver(this); |
+ begin_frame_source_ = source; |
+ if (begin_frame_source_ && needs_begin_frames_) |
+ begin_frame_source_->AddObserver(this); |
+} |
+ |
+//////////////////////////////////////////////////////////////////////////////// |
+// cc::BeginFrameSourceBase, public: |
+ |
+void RenderWidgetHostViewMac::OnSetNeedsBeginFrames(bool needs_begin_frames) { |
+ if (needs_begin_frames_ == needs_begin_frames) |
+ return; |
+ |
+ needs_begin_frames_ = needs_begin_frames; |
+ if (begin_frame_source_) { |
+ if (needs_begin_frames_) |
+ begin_frame_source_->AddObserver(this); |
+ else |
+ begin_frame_source_->RemoveObserver(this); |
+ } |
+} |
+ |
+bool RenderWidgetHostViewMac::OnBeginFrameDerivedImpl( |
+ const cc::BeginFrameArgs& args) { |
+ delegated_frame_host_->SetVSyncParameters(args.frame_time, args.interval); |
+ render_widget_host_->Send( |
+ new ViewMsg_BeginFrame(render_widget_host_->GetRoutingID(), args)); |
+ return true; |
+} |
+ |
+void RenderWidgetHostViewMac::OnBeginFrameSourcePausedChanged( |
+ bool paused) { |
+ // Nothing to do here. |
+} |
+ |
//////////////////////////////////////////////////////////////////////////////// |
// AcceleratedWidgetMacNSView, public: |
@@ -527,7 +565,9 @@ RenderWidgetHostViewMac::RenderWidgetHostViewMac(RenderWidgetHost* widget, |
allow_pause_for_resize_or_repaint_(true), |
is_guest_view_hack_(is_guest_view_hack), |
wheel_gestures_enabled_(UseGestureBasedWheelScrolling()), |
- fullscreen_parent_host_view_(NULL), |
+ fullscreen_parent_host_view_(nullptr), |
+ begin_frame_source_(nullptr), |
+ needs_begin_frames_(false), |
weak_factory_(this) { |
// |cocoa_view_| owns us and we will be deleted when |cocoa_view_| |
// goes away. Since we autorelease it, our caller must put |
@@ -687,6 +727,8 @@ bool RenderWidgetHostViewMac::OnMessageReceived(const IPC::Message& message) { |
IPC_BEGIN_MESSAGE_MAP(RenderWidgetHostViewMac, message) |
IPC_MESSAGE_HANDLER(ViewMsg_GetRenderedTextCompleted, |
OnGetRenderedTextCompleted) |
+ IPC_MESSAGE_HANDLER(ViewHostMsg_SetNeedsBeginFrames, |
+ OnSetNeedsBeginFrames) |
IPC_MESSAGE_UNHANDLED(handled = false) |
IPC_END_MESSAGE_MAP() |
return handled; |