| 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 7f41ab77b82cf14650f0c8acfa834b9aa64b72a0..82bbc97e7a9a2ed4dc973d58da1d6f677059bc3e 100644
|
| --- a/content/browser/renderer_host/render_widget_host_view_aura.cc
|
| +++ b/content/browser/renderer_host/render_widget_host_view_aura.cc
|
| @@ -575,6 +575,7 @@ RenderWidgetHostViewAura::RenderWidgetHostViewAura(RenderWidgetHost* host)
|
| cursor_visibility_state_in_renderer_(UNKNOWN),
|
| paint_observer_(NULL),
|
| touch_editing_client_(NULL),
|
| + delegated_frame_evictor_(new DelegatedFrameEvictor(this)),
|
| weak_ptr_factory_(this) {
|
| host_->SetView(this);
|
| window_observer_.reset(new WindowObserver(this));
|
| @@ -673,6 +674,7 @@ void RenderWidgetHostViewAura::WasShown() {
|
| return;
|
| host_->WasShown();
|
| software_frame_manager_->SetVisibility(true);
|
| + delegated_frame_evictor_->SetVisible(true);
|
|
|
| aura::Window* root = window_->GetRootWindow();
|
| if (root) {
|
| @@ -701,6 +703,7 @@ void RenderWidgetHostViewAura::WasHidden() {
|
| return;
|
| host_->WasHidden();
|
| software_frame_manager_->SetVisibility(false);
|
| + delegated_frame_evictor_->SetVisible(false);
|
| released_front_lock_ = NULL;
|
|
|
| #if defined(OS_WIN)
|
| @@ -1441,8 +1444,7 @@ void RenderWidgetHostViewAura::SwapDelegatedFrame(
|
| // resources from the old one with resources from the new one which would
|
| // have the same id. Changing the layer to showing painted content destroys
|
| // the DelegatedRendererLayer.
|
| - window_->layer()->SetShowPaintedContent();
|
| - frame_provider_ = NULL;
|
| + EvictDelegatedFrame();
|
|
|
| // Drop the cc::DelegatedFrameResourceCollection so that we will not return
|
| // any resources from the old output surface with the new output surface id.
|
| @@ -1458,8 +1460,7 @@ void RenderWidgetHostViewAura::SwapDelegatedFrame(
|
| }
|
| if (frame_size.IsEmpty()) {
|
| DCHECK_EQ(0u, frame_data->resource_list.size());
|
| - window_->layer()->SetShowPaintedContent();
|
| - frame_provider_ = NULL;
|
| + EvictDelegatedFrame();
|
| } else {
|
| if (!resource_collection_) {
|
| resource_collection_ = new cc::DelegatedFrameResourceCollection;
|
| @@ -1495,6 +1496,9 @@ void RenderWidgetHostViewAura::SwapDelegatedFrame(
|
| output_surface_id));
|
| }
|
| DidReceiveFrameFromRenderer();
|
| + if (frame_provider_.get())
|
| + delegated_frame_evictor_->SwappedFrame(!host_->is_hidden());
|
| + // Note: the frame may have been evicted immediately.
|
| }
|
|
|
| void RenderWidgetHostViewAura::SendDelegatedFrameAck(uint32 output_surface_id) {
|
| @@ -1529,6 +1533,12 @@ void RenderWidgetHostViewAura::SendReturnedDelegatedResources(
|
| ack);
|
| }
|
|
|
| +void RenderWidgetHostViewAura::EvictDelegatedFrame() {
|
| + window_->layer()->SetShowPaintedContent();
|
| + frame_provider_ = NULL;
|
| + delegated_frame_evictor_->DiscardedFrame();
|
| +}
|
| +
|
| void RenderWidgetHostViewAura::SwapSoftwareFrame(
|
| uint32 output_surface_id,
|
| scoped_ptr<cc::SoftwareFrameData> frame_data,
|
| @@ -1788,8 +1798,7 @@ void RenderWidgetHostViewAura::AcceleratedSurfaceRelease() {
|
| // We need to wait for a commit to clear to guarantee that all we
|
| // will not issue any more GL referencing the previous surface.
|
| AddOnCommitCallbackAndDisableLocks(
|
| - base::Bind(&RenderWidgetHostViewAura::
|
| - SetSurfaceNotInUseByCompositor,
|
| + base::Bind(&RenderWidgetHostViewAura::SetSurfaceNotInUseByCompositor,
|
| AsWeakPtr(),
|
| current_surface_)); // Hold a ref so the texture will not
|
| // get deleted until after commit.
|
|
|