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 01cd4179a8cacf9677b8b17327df70e07395314a..9c8c88d25e9974d69f89e5c296f7d43f14341567 100644 |
--- a/content/browser/renderer_host/render_widget_host_view_mac.mm |
+++ b/content/browser/renderer_host/render_widget_host_view_mac.mm |
@@ -418,10 +418,8 @@ RenderWidgetHostViewMac::RenderWidgetHostViewMac(RenderWidgetHost* widget) |
is_loading_(false), |
weak_factory_(this), |
fullscreen_parent_host_view_(NULL), |
- pending_swap_buffers_acks_weak_factory_(this), |
underlay_view_has_drawn_(false), |
overlay_view_weak_factory_(this), |
- next_swap_ack_time_(base::Time::Now()), |
software_frame_weak_ptr_factory_(this) { |
software_frame_manager_.reset(new SoftwareFrameManager( |
software_frame_weak_ptr_factory_.GetWeakPtr())); |
@@ -443,7 +441,6 @@ RenderWidgetHostViewMac::~RenderWidgetHostViewMac() { |
// pointer. |
cocoa_view_ = nil; |
- AckPendingSwapBuffers(); |
UnlockMouse(); |
// Make sure that the layer doesn't reach into the now-invalid object. |
@@ -739,10 +736,6 @@ void RenderWidgetHostViewMac::WasHidden() { |
if (render_widget_host_->is_hidden()) |
return; |
- // Send ACKs for any pending SwapBuffers (if any) since we won't be displaying |
- // them and the GPU process is waiting. |
- AckPendingSwapBuffers(); |
- |
// If we have a renderer, then inform it that we are being hidden so it can |
// reduce its resource utilization. |
render_widget_host_->WasHidden(); |
@@ -988,8 +981,6 @@ void RenderWidgetHostViewMac::RenderProcessGone(base::TerminationStatus status, |
} |
void RenderWidgetHostViewMac::Destroy() { |
- AckPendingSwapBuffers(); |
- |
[[NSNotificationCenter defaultCenter] |
removeObserver:cocoa_view_ |
name:NSWindowWillCloseNotification |
@@ -1384,63 +1375,6 @@ void RenderWidgetHostViewMac::CompositorSwapBuffers( |
} |
} |
-void RenderWidgetHostViewMac::AckPendingSwapBuffers() { |
- TRACE_EVENT0("browser", "RenderWidgetHostViewMac::AckPendingSwapBuffers"); |
- |
- // Cancel any outstanding delayed calls to this function. |
- pending_swap_buffers_acks_weak_factory_.InvalidateWeakPtrs(); |
- |
- while (!pending_swap_buffers_acks_.empty()) { |
- if (pending_swap_buffers_acks_.front().first != 0) { |
- AcceleratedSurfaceMsg_BufferPresented_Params ack_params; |
- ack_params.sync_point = 0; |
- if (compositing_iosurface_) |
- ack_params.renderer_id = compositing_iosurface_->GetRendererID(); |
- RenderWidgetHostImpl::AcknowledgeBufferPresent( |
- pending_swap_buffers_acks_.front().first, |
- pending_swap_buffers_acks_.front().second, |
- ack_params); |
- if (render_widget_host_) { |
- render_widget_host_->AcknowledgeSwapBuffersToRenderer(); |
- } |
- } |
- pending_swap_buffers_acks_.erase(pending_swap_buffers_acks_.begin()); |
- } |
-} |
- |
-void RenderWidgetHostViewMac::ThrottledAckPendingSwapBuffers() { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
- |
- // Send VSync parameters to the renderer's compositor thread. |
- base::TimeTicks vsync_timebase; |
- base::TimeDelta vsync_interval; |
- GetVSyncParameters(&vsync_timebase, &vsync_interval); |
- if (render_widget_host_ && compositing_iosurface_) |
- render_widget_host_->UpdateVSyncParameters(vsync_timebase, vsync_interval); |
- |
- // If the render widget host is responsible for throttling swaps to vsync rate |
- // then don't ack the swapbuffers until a full vsync has passed since the last |
- // ack was sent. |
- bool throttle_swap_ack = |
- render_widget_host_ && |
- !render_widget_host_->is_threaded_compositing_enabled() && |
- compositing_iosurface_context_ && |
- !compositing_iosurface_context_->is_vsync_disabled(); |
- base::Time now = base::Time::Now(); |
- if (throttle_swap_ack && next_swap_ack_time_ > now) { |
- base::TimeDelta next_swap_ack_delay = next_swap_ack_time_ - now; |
- next_swap_ack_time_ += vsync_interval; |
- base::MessageLoop::current()->PostDelayedTask( |
- FROM_HERE, |
- base::Bind(&RenderWidgetHostViewMac::AckPendingSwapBuffers, |
- pending_swap_buffers_acks_weak_factory_.GetWeakPtr()), |
- next_swap_ack_delay); |
- } else { |
- next_swap_ack_time_ = now + vsync_interval; |
- AckPendingSwapBuffers(); |
- } |
-} |
- |
bool RenderWidgetHostViewMac::DrawIOSurfaceWithoutCoreAnimation() { |
CHECK(!use_core_animation_); |
CHECK(compositing_iosurface_); |
@@ -1504,7 +1438,6 @@ bool RenderWidgetHostViewMac::DrawIOSurfaceWithoutCoreAnimation() { |
} |
void RenderWidgetHostViewMac::GotAcceleratedCompositingError() { |
- AckPendingSwapBuffers(); |
DestroyCompositedIOSurfaceAndLayer(kDestroyContext); |
// The existing GL contexts may be in a bad state, so don't re-use any of the |
// existing ones anymore, rather, allocate new ones. |
@@ -1540,29 +1473,6 @@ void RenderWidgetHostViewMac::RemoveOverlayView() { |
[[cocoa_view_ window] disableScreenUpdatesUntilFlush]; |
} |
-void RenderWidgetHostViewMac::GetVSyncParameters( |
- base::TimeTicks* timebase, base::TimeDelta* interval) { |
- if (compositing_iosurface_) { |
- uint32 numerator = 0; |
- uint32 denominator = 0; |
- compositing_iosurface_->GetVSyncParameters( |
- timebase, &numerator, &denominator); |
- if (numerator > 0 && denominator > 0) { |
- int64 interval_micros = |
- 1000000 * static_cast<int64>(numerator) / denominator; |
- *interval = base::TimeDelta::FromMicroseconds(interval_micros); |
- return; |
- } |
- } |
- |
- // Pass reasonable default values if unable to get the actual ones |
- // (e.g. CVDisplayLink failed to return them because the display is |
- // in sleep mode). |
- static const int64 kOneOverSixtyMicroseconds = 16669; |
- *timebase = base::TimeTicks::Now(), |
- *interval = base::TimeDelta::FromMicroseconds(kOneOverSixtyMicroseconds); |
-} |
- |
bool RenderWidgetHostViewMac::GetLineBreakIndex( |
const std::vector<gfx::Rect>& bounds, |
const gfx::Range& range, |
@@ -1695,15 +1605,19 @@ void RenderWidgetHostViewMac::AcceleratedSurfaceBuffersSwapped( |
"RenderWidgetHostViewMac::AcceleratedSurfaceBuffersSwapped"); |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
- pending_swap_buffers_acks_.push_back(std::make_pair(params.route_id, |
- gpu_host_id)); |
- |
CompositorSwapBuffers(params.surface_handle, |
params.size, |
params.scale_factor, |
params.latency_info); |
- ThrottledAckPendingSwapBuffers(); |
+ AcceleratedSurfaceMsg_BufferPresented_Params ack_params; |
+ ack_params.sync_point = 0; |
+ ack_params.renderer_id = compositing_iosurface_ ? |
+ compositing_iosurface_->GetRendererID() : 0; |
+ RenderWidgetHostImpl::AcknowledgeBufferPresent(params.route_id, |
+ gpu_host_id, |
+ ack_params); |
+ render_widget_host_->AcknowledgeSwapBuffersToRenderer(); |
} |
void RenderWidgetHostViewMac::AcceleratedSurfacePostSubBuffer( |
@@ -1713,15 +1627,19 @@ void RenderWidgetHostViewMac::AcceleratedSurfacePostSubBuffer( |
"RenderWidgetHostViewMac::AcceleratedSurfacePostSubBuffer"); |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
- pending_swap_buffers_acks_.push_back(std::make_pair(params.route_id, |
- gpu_host_id)); |
- |
CompositorSwapBuffers(params.surface_handle, |
params.surface_size, |
params.surface_scale_factor, |
params.latency_info); |
- ThrottledAckPendingSwapBuffers(); |
+ AcceleratedSurfaceMsg_BufferPresented_Params ack_params; |
+ ack_params.sync_point = 0; |
+ ack_params.renderer_id = compositing_iosurface_ ? |
+ compositing_iosurface_->GetRendererID() : 0; |
+ RenderWidgetHostImpl::AcknowledgeBufferPresent(params.route_id, |
+ gpu_host_id, |
+ ack_params); |
+ render_widget_host_->AcknowledgeSwapBuffersToRenderer(); |
} |
void RenderWidgetHostViewMac::AcceleratedSurfaceSuspend() { |
@@ -1749,10 +1667,6 @@ bool RenderWidgetHostViewMac::HasAcceleratedSurface( |
return false; |
} |
-void RenderWidgetHostViewMac::AboutToWaitForBackingStoreMsg() { |
- AckPendingSwapBuffers(); |
-} |
- |
void RenderWidgetHostViewMac::OnSwapCompositorFrame( |
uint32 output_surface_id, scoped_ptr<cc::CompositorFrame> frame) { |
// Only software compositor frames are accepted. |
@@ -1919,8 +1833,6 @@ void RenderWidgetHostViewMac::GotSoftwareFrame() { |
if (last_frame_was_accelerated_) { |
last_frame_was_accelerated_ = false; |
- AckPendingSwapBuffers(); |
- |
// If overlapping views are allowed, then don't unbind the context |
// from the view (that is, don't call clearDrawble -- just delete the |
// texture and IOSurface). Rather, let it sit behind the software frame |