From 94b54507c5d1222e694dee592e64a4906d3c4b1b Mon Sep 17 00:00:00 2001 From: "jbauman@chromium.org" Date: Fri, 4 Apr 2014 04:12:06 +0000 Subject: Remove support for software swaps in Aura. All software rendering should now be handled using the delegated renderer. BUG= Review URL: https://codereview.chromium.org/220163003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@261664 0039d316-1c4b-4281-b951-d872f2087c98 --- .../renderer_host/render_widget_host_view_aura.cc | 173 +-------------------- .../renderer_host/render_widget_host_view_aura.h | 27 +--- .../render_widget_host_view_aura_unittest.cc | 11 -- 3 files changed, 5 insertions(+), 206 deletions(-) (limited to 'content') 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 e7e086d..b423473 100644 --- a/content/browser/renderer_host/render_widget_host_view_aura.cc +++ b/content/browser/renderer_host/render_widget_host_view_aura.cc @@ -110,12 +110,6 @@ namespace content { namespace { -void MailboxReleaseCallback(scoped_ptr shared_memory, - uint32 sync_point, - bool lost_resource) { - // NOTE: shared_memory will get released when we go out of scope. -} - // In mouse lock mode, we need to prevent the (invisible) cursor from hitting // the border of the view, in order to get valid movement information. However, // forcing the cursor back to the center of the view after each mouse move @@ -507,8 +501,6 @@ RenderWidgetHostViewAura::RenderWidgetHostViewAura(RenderWidgetHost* host) aura::client::SetFocusChangeObserver(window_, this); window_->set_layer_owner_delegate(this); gfx::Screen::GetScreenFor(window_)->AddObserver(this); - software_frame_manager_.reset(new SoftwareFrameManager( - weak_ptr_factory_.GetWeakPtr())); ImageTransportFactory::GetInstance()->AddObserver(this); } @@ -619,7 +611,6 @@ void RenderWidgetHostViewAura::WasShown() { if (!host_->is_hidden()) return; host_->WasShown(); - software_frame_manager_->SetVisibility(true); delegated_frame_evictor_->SetVisible(true); aura::Window* root = window_->GetRootWindow(); @@ -657,7 +648,6 @@ void RenderWidgetHostViewAura::WasHidden() { if (!host_ || host_->is_hidden()) return; host_->WasHidden(); - software_frame_manager_->SetVisibility(false); delegated_frame_evictor_->SetVisible(false); released_front_lock_ = NULL; @@ -1318,23 +1308,10 @@ void RenderWidgetHostViewAura::UpdateExternalTexture() { current_frame_size_ = ConvertSizeToDIP( current_surface_->device_scale_factor(), current_surface_->size()); CheckResizeLock(); - software_frame_manager_->DiscardCurrentFrame(); - } else if (is_compositing_active && - software_frame_manager_->HasCurrentFrame()) { - cc::TextureMailbox mailbox; - scoped_ptr callback; - software_frame_manager_->GetCurrentFrameMailbox(&mailbox, &callback); - window_->layer()->SetTextureMailbox(mailbox, - callback.Pass(), - last_swapped_surface_scale_factor_); - current_frame_size_ = ConvertSizeToDIP(last_swapped_surface_scale_factor_, - mailbox.shared_memory_size()); - CheckResizeLock(); } else { window_->layer()->SetShowPaintedContent(); resize_lock_.reset(); host_->WasResized(); - software_frame_manager_->DiscardCurrentFrame(); } } @@ -1471,8 +1448,6 @@ void RenderWidgetHostViewAura::SwapDelegatedFrame( gfx::Rect damage_rect_in_dip = ConvertRectToDIP(frame_device_scale_factor, damage_rect); - software_frame_manager_->DiscardCurrentFrame(); - if (ShouldSkipFrame(frame_size_in_dip)) { cc::CompositorFrameAck ack; cc::TransferableResource::ReturnResources(frame_data->resource_list, @@ -1604,106 +1579,6 @@ void RenderWidgetHostViewAura::EvictDelegatedFrame() { delegated_frame_evictor_->DiscardedFrame(); } -void RenderWidgetHostViewAura::SwapSoftwareFrame( - uint32 output_surface_id, - scoped_ptr frame_data, - float frame_device_scale_factor, - const std::vector& latency_info) { - const gfx::Size& frame_size = frame_data->size; - const gfx::Rect& damage_rect = frame_data->damage_rect; - gfx::Size frame_size_in_dip = - ConvertSizeToDIP(frame_device_scale_factor, frame_size); - if (ShouldSkipFrame(frame_size_in_dip)) { - ReleaseSoftwareFrame(output_surface_id, frame_data->id); - SendSoftwareFrameAck(output_surface_id); - return; - } - - if (!software_frame_manager_->SwapToNewFrame( - output_surface_id, - frame_data.get(), - frame_device_scale_factor, - host_->GetProcess()->GetHandle())) { - ReleaseSoftwareFrame(output_surface_id, frame_data->id); - SendSoftwareFrameAck(output_surface_id); - return; - } - - if (last_swapped_surface_size_ != frame_size) { - DLOG_IF(ERROR, damage_rect != gfx::Rect(frame_size)) - << "Expected full damage rect"; - } - last_swapped_surface_size_ = frame_size; - last_swapped_surface_scale_factor_ = frame_device_scale_factor; - - cc::TextureMailbox mailbox; - scoped_ptr callback; - software_frame_manager_->GetCurrentFrameMailbox(&mailbox, &callback); - DCHECK(mailbox.IsSharedMemory()); - current_frame_size_ = frame_size_in_dip; - - released_front_lock_ = NULL; - CheckResizeLock(); - window_->layer()->SetTextureMailbox(mailbox, - callback.Pass(), - frame_device_scale_factor); - window_->SchedulePaintInRect( - ConvertRectToDIP(frame_device_scale_factor, damage_rect)); - - ui::Compositor* compositor = GetCompositor(); - if (compositor) { - for (size_t i = 0; i < latency_info.size(); i++) - compositor->SetLatencyInfo(latency_info[i]); - AddOnCommitCallbackAndDisableLocks( - base::Bind(&RenderWidgetHostViewAura::SendSoftwareFrameAck, - AsWeakPtr(), - output_surface_id)); - } else { - SendSoftwareFrameAck(output_surface_id); - } - DidReceiveFrameFromRenderer(); - - software_frame_manager_->SwapToNewFrameComplete(!host_->is_hidden()); -} - -void RenderWidgetHostViewAura::SendSoftwareFrameAck(uint32 output_surface_id) { - unsigned software_frame_id = 0; - if (released_software_frame_ && - released_software_frame_->output_surface_id == output_surface_id) { - software_frame_id = released_software_frame_->frame_id; - released_software_frame_.reset(); - } - - cc::CompositorFrameAck ack; - ack.last_software_frame_id = software_frame_id; - RenderWidgetHostImpl::SendSwapCompositorFrameAck( - host_->GetRoutingID(), output_surface_id, - host_->GetProcess()->GetID(), ack); - SendReclaimSoftwareFrames(); -} - -void RenderWidgetHostViewAura::SendReclaimSoftwareFrames() { - if (!released_software_frame_) - return; - cc::CompositorFrameAck ack; - ack.last_software_frame_id = released_software_frame_->frame_id; - RenderWidgetHostImpl::SendReclaimCompositorResources( - host_->GetRoutingID(), - released_software_frame_->output_surface_id, - host_->GetProcess()->GetID(), - ack); - released_software_frame_.reset(); -} - -void RenderWidgetHostViewAura::ReleaseSoftwareFrame( - uint32 output_surface_id, - unsigned software_frame_id) { - SendReclaimSoftwareFrames(); - DCHECK(!released_software_frame_); - released_software_frame_.reset(new ReleasedFrameInfo( - output_surface_id, software_frame_id)); -} - void RenderWidgetHostViewAura::OnSwapCompositorFrame( uint32 output_surface_id, scoped_ptr frame) { @@ -1717,10 +1592,10 @@ void RenderWidgetHostViewAura::OnSwapCompositorFrame( } if (frame->software_frame_data) { - SwapSoftwareFrame(output_surface_id, - frame->software_frame_data.Pass(), - frame->metadata.device_scale_factor, - frame->metadata.latency_info); + DLOG(ERROR) << "Unable to use software frame in aura"; + RecordAction( + base::UserMetricsAction("BadMessageTerminate_SharedMemoryAura")); + host_->GetProcess()->ReceivedBadMessage(); return; } @@ -1777,7 +1652,6 @@ void RenderWidgetHostViewAura::BuffersSwapped( const BufferPresentedCallback& ack_callback) { scoped_refptr previous_texture(current_surface_); const gfx::Rect surface_rect = gfx::Rect(surface_size); - software_frame_manager_->DiscardCurrentFrame(); if (!SwapBuffersPrepare(surface_rect, surface_scale_factor, @@ -3172,23 +3046,6 @@ void RenderWidgetHostViewAura::OnHostMoved(const aura::WindowTreeHost* host, } //////////////////////////////////////////////////////////////////////////////// -// RenderWidgetHostViewAura, SoftwareFrameManagerClient implementation: - -void RenderWidgetHostViewAura::SoftwareFrameWasFreed( - uint32 output_surface_id, unsigned frame_id) { - ReleaseSoftwareFrame(output_surface_id, frame_id); -} - -void RenderWidgetHostViewAura::ReleaseReferencesToSoftwareFrame() { - ui::Compositor* compositor = GetCompositor(); - if (compositor) { - AddOnCommitCallbackAndDisableLocks(base::Bind( - &RenderWidgetHostViewAura::SendReclaimSoftwareFrames, AsWeakPtr())); - } - UpdateExternalTexture(); -} - -//////////////////////////////////////////////////////////////////////////////// // RenderWidgetHostViewAura, ui::CompositorObserver implementation: void RenderWidgetHostViewAura::OnCompositingDidCommit( @@ -3631,9 +3488,6 @@ SkBitmap::Config RenderWidgetHostViewAura::PreferredReadbackFormat() { void RenderWidgetHostViewAura::OnLayerRecreated(ui::Layer* old_layer, ui::Layer* new_layer) { - float mailbox_scale_factor; - cc::TextureMailbox old_mailbox = - old_layer->GetTextureMailbox(&mailbox_scale_factor); scoped_refptr old_texture = old_layer->external_texture(); // The new_layer is the one that will be used by our Window, so that's the one // that should keep our texture. old_layer will be returned to the @@ -3658,25 +3512,6 @@ void RenderWidgetHostViewAura::OnLayerRecreated(ui::Layer* old_layer, else old_layer->SetShowPaintedContent(); new_layer->SetExternalTexture(old_texture.get()); - } else if (old_mailbox.IsSharedMemory()) { - base::SharedMemory* old_buffer = old_mailbox.shared_memory(); - const size_t size = old_mailbox.SharedMemorySizeInBytes(); - - scoped_ptr new_buffer(new base::SharedMemory); - new_buffer->CreateAndMapAnonymous(size); - - if (old_buffer->memory() && new_buffer->memory()) { - memcpy(new_buffer->memory(), old_buffer->memory(), size); - base::SharedMemory* new_buffer_raw_ptr = new_buffer.get(); - scoped_ptr callback = - cc::SingleReleaseCallback::Create(base::Bind(MailboxReleaseCallback, - Passed(&new_buffer))); - cc::TextureMailbox new_mailbox(new_buffer_raw_ptr, - old_mailbox.shared_memory_size()); - new_layer->SetTextureMailbox(new_mailbox, - callback.Pass(), - mailbox_scale_factor); - } } else if (frame_provider_.get()) { new_layer->SetShowDelegatedContent(frame_provider_.get(), current_frame_size_); diff --git a/content/browser/renderer_host/render_widget_host_view_aura.h b/content/browser/renderer_host/render_widget_host_view_aura.h index 002cc22..399d2af 100644 --- a/content/browser/renderer_host/render_widget_host_view_aura.h +++ b/content/browser/renderer_host/render_widget_host_view_aura.h @@ -18,13 +18,13 @@ #include "base/memory/weak_ptr.h" #include "cc/layers/delegated_frame_provider.h" #include "cc/layers/delegated_frame_resource_collection.h" +#include "cc/resources/single_release_callback.h" #include "cc/resources/texture_mailbox.h" #include "content/browser/accessibility/browser_accessibility_manager.h" #include "content/browser/compositor/image_transport_factory.h" #include "content/browser/compositor/owned_mailbox.h" #include "content/browser/renderer_host/delegated_frame_evictor.h" #include "content/browser/renderer_host/render_widget_host_view_base.h" -#include "content/browser/renderer_host/software_frame_manager.h" #include "content/common/content_export.h" #include "content/common/cursors/webcursor.h" #include "content/common/gpu/client/gl_helper.h" @@ -99,7 +99,6 @@ class CONTENT_EXPORT RenderWidgetHostViewAura public aura::client::CursorClientObserver, public ImageTransportFactoryObserver, public BrowserAccessibilityDelegate, - public SoftwareFrameManagerClient, public DelegatedFrameEvictorClient, public base::SupportsWeakPtr, public cc::DelegatedFrameResourceCollectionClient { @@ -329,11 +328,6 @@ class CONTENT_EXPORT RenderWidgetHostViewAura virtual void OnHostMoved(const aura::WindowTreeHost* host, const gfx::Point& new_origin) OVERRIDE; - // SoftwareFrameManagerClient implementation: - virtual void SoftwareFrameWasFreed( - uint32 output_surface_id, unsigned frame_id) OVERRIDE; - virtual void ReleaseReferencesToSoftwareFrame() OVERRIDE; - bool CanCopyToBitmap() const; void OnTextInputStateChanged(const ViewHostMsg_TextInputState_Params& params); @@ -576,15 +570,6 @@ class CONTENT_EXPORT RenderWidgetHostViewAura // cc::DelegatedFrameProviderClient implementation. virtual void UnusedResourcesAreAvailable() OVERRIDE; - void SwapSoftwareFrame(uint32 output_surface_id, - scoped_ptr frame_data, - float frame_device_scale_factor, - const std::vector& latency_info); - void SendSoftwareFrameAck(uint32 output_surface_id); - void SendReclaimSoftwareFrames(); - void ReleaseSoftwareFrame(uint32 output_surface_id, - unsigned software_frame_id); - void DidReceiveFrameFromRenderer(); // Helper function to set keyboard focus to the main window. @@ -658,9 +643,6 @@ class CONTENT_EXPORT RenderWidgetHostViewAura // The current frontbuffer texture. scoped_refptr current_surface_; - // This holds the current software framebuffer, if any. - scoped_ptr software_frame_manager_; - // The vsync manager we are observing for changes, if any. scoped_refptr vsync_manager_; @@ -786,13 +768,6 @@ class CONTENT_EXPORT RenderWidgetHostViewAura std::vector software_latency_info_; - struct ReleasedFrameInfo { - ReleasedFrameInfo(uint32 output_id, unsigned software_frame_id) - : output_surface_id(output_id), frame_id(software_frame_id) {} - uint32 output_surface_id; - unsigned frame_id; - }; - scoped_ptr released_software_frame_; scoped_ptr delegated_frame_evictor_; scoped_ptr tooltip_disabler_; diff --git a/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc b/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc index 0e8f92b..eeea3a1 100644 --- a/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc +++ b/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc @@ -1028,17 +1028,6 @@ TEST_F(RenderWidgetHostViewAuraTest, SwapNotifiesWindow) { MakeGLFrame(1.f, view_size, gfx::Rect(5, 5, 5, 5), owned_mailbox.get())); testing::Mock::VerifyAndClearExpectations(&observer); - // Software path - EXPECT_CALL(observer, OnWindowPaintScheduled(view_->window_, view_rect)); - view_->OnSwapCompositorFrame(0, MakeSoftwareFrame(1.f, view_size, view_rect)); - testing::Mock::VerifyAndClearExpectations(&observer); - - EXPECT_CALL(observer, OnWindowPaintScheduled(view_->window_, - gfx::Rect(5, 5, 5, 5))); - view_->OnSwapCompositorFrame( - 0, MakeSoftwareFrame(1.f, view_size, gfx::Rect(5, 5, 5, 5))); - testing::Mock::VerifyAndClearExpectations(&observer); - // Delegated renderer path EXPECT_CALL(observer, OnWindowPaintScheduled(view_->window_, view_rect)); view_->OnSwapCompositorFrame( -- cgit v1.1