summaryrefslogtreecommitdiffstats
path: root/content
diff options
context:
space:
mode:
authormmocny@chromium.org <mmocny@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-06-12 20:57:36 +0000
committermmocny@chromium.org <mmocny@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-06-12 20:57:36 +0000
commit690e4f99937396b94f03f8ab77231c2c463658d2 (patch)
tree7dcda520481378fbbb05bbcbc7f084bceb15a6e8 /content
parent097c1d406ecb29084a4d5bc333c83e8e194df7dd (diff)
downloadchromium_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.cc6
-rw-r--r--content/browser/renderer_host/render_widget_host_view_aura.h7
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);
};