diff options
author | mmocny@chromium.org <mmocny@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-06-12 20:57:36 +0000 |
---|---|---|
committer | mmocny@chromium.org <mmocny@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-06-12 20:57:36 +0000 |
commit | 690e4f99937396b94f03f8ab77231c2c463658d2 (patch) | |
tree | 7dcda520481378fbbb05bbcbc7f084bceb15a6e8 /content | |
parent | 097c1d406ecb29084a4d5bc333c83e8e194df7dd (diff) | |
download | chromium_src-690e4f99937396b94f03f8ab77231c2c463658d2.zip chromium_src-690e4f99937396b94f03f8ab77231c2c463658d2.tar.gz chromium_src-690e4f99937396b94f03f8ab77231c2c463658d2.tar.bz2 |
Smooth Tab Switching on aura.
If there is no available front surface to display when switching to a tab, delay compositing until the next swap which gives us something
to display, or some timeout is reached instead.
BUG=126526
TEST=Manual
Review URL: https://chromiumcodereview.appspot.com/10543010
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@141733 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content')
-rw-r--r-- | content/browser/renderer_host/render_widget_host_view_aura.cc | 6 | ||||
-rw-r--r-- | content/browser/renderer_host/render_widget_host_view_aura.h | 7 |
2 files changed, 13 insertions, 0 deletions
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 02d13ee..4e5bbe8 100644 --- a/content/browser/renderer_host/render_widget_host_view_aura.cc +++ b/content/browser/renderer_host/render_widget_host_view_aura.cc @@ -287,10 +287,14 @@ RenderWidgetHost* RenderWidgetHostViewAura::GetRenderWidgetHost() const { void RenderWidgetHostViewAura::DidBecomeSelected() { host_->WasRestored(); + if (!current_surface_ && host_->is_accelerated_compositing_active() && + !released_front_lock_.get()) + released_front_lock_ = window_->GetRootWindow()->GetCompositorLock(); } void RenderWidgetHostViewAura::WasHidden() { host_->WasHidden(); + released_front_lock_ = NULL; } void RenderWidgetHostViewAura::SetSize(const gfx::Size& size) { @@ -506,6 +510,8 @@ void RenderWidgetHostViewAura::UpdateExternalTexture() { container->Update(); window_->SetExternalTexture(container); + released_front_lock_ = NULL; + if (!container) { resize_locks_.clear(); } else { 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 0cb5326..2253801 100644 --- a/content/browser/renderer_host/render_widget_host_view_aura.h +++ b/content/browser/renderer_host/render_widget_host_view_aura.h @@ -22,6 +22,10 @@ #include "ui/gfx/rect.h" #include "webkit/glue/webcursor.h" +namespace aura { +class CompositorLock; +} + namespace content { class RenderWidgetHostImpl; class RenderWidgetHostView; @@ -308,6 +312,9 @@ class RenderWidgetHostViewAura // These locks are the ones waiting for a frame to be drawn. std::vector<linked_ptr<ResizeLock> > locks_pending_draw_; + // This lock is for waiting for a front surface to become available to draw. + scoped_refptr<aura::CompositorLock> released_front_lock_; + DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostViewAura); }; |