summaryrefslogtreecommitdiffstats
path: root/content/browser
diff options
context:
space:
mode:
Diffstat (limited to 'content/browser')
-rw-r--r--content/browser/compositor/browser_compositor_output_surface.cc30
-rw-r--r--content/browser/compositor/browser_compositor_output_surface.h24
-rw-r--r--content/browser/compositor/browser_compositor_output_surface_proxy.cc2
-rw-r--r--content/browser/compositor/gpu_browser_compositor_output_surface.cc6
-rw-r--r--content/browser/compositor/gpu_browser_compositor_output_surface.h7
-rw-r--r--content/browser/compositor/gpu_process_transport_factory.cc6
-rw-r--r--content/browser/compositor/software_browser_compositor_output_surface.cc6
-rw-r--r--content/browser/compositor/software_browser_compositor_output_surface.h12
-rw-r--r--content/browser/compositor/software_browser_compositor_output_surface_unittest.cc6
-rw-r--r--content/browser/renderer_host/media/desktop_capture_device_aura.cc3
-rw-r--r--content/browser/renderer_host/render_widget_host_view_aura.cc13
-rw-r--r--content/browser/renderer_host/render_widget_host_view_aura.h7
12 files changed, 62 insertions, 60 deletions
diff --git a/content/browser/compositor/browser_compositor_output_surface.cc b/content/browser/compositor/browser_compositor_output_surface.cc
index 30ff485..ff09ab7 100644
--- a/content/browser/compositor/browser_compositor_output_surface.cc
+++ b/content/browser/compositor/browser_compositor_output_surface.cc
@@ -7,11 +7,9 @@
#include "base/bind.h"
#include "base/command_line.h"
#include "base/location.h"
-#include "base/message_loop/message_loop_proxy.h"
#include "base/strings/string_number_conversions.h"
#include "content/browser/compositor/reflector_impl.h"
#include "content/common/gpu/client/context_provider_command_buffer.h"
-#include "ui/compositor/compositor.h"
#include "ui/compositor/compositor_switches.h"
namespace content {
@@ -20,13 +18,11 @@ BrowserCompositorOutputSurface::BrowserCompositorOutputSurface(
const scoped_refptr<ContextProviderCommandBuffer>& context_provider,
int surface_id,
IDMap<BrowserCompositorOutputSurface>* output_surface_map,
- base::MessageLoopProxy* compositor_message_loop,
- base::WeakPtr<ui::Compositor> compositor)
+ const scoped_refptr<ui::CompositorVSyncManager>& vsync_manager)
: OutputSurface(context_provider),
surface_id_(surface_id),
output_surface_map_(output_surface_map),
- compositor_message_loop_(compositor_message_loop),
- compositor_(compositor) {
+ vsync_manager_(vsync_manager) {
Initialize();
}
@@ -34,13 +30,11 @@ BrowserCompositorOutputSurface::BrowserCompositorOutputSurface(
scoped_ptr<cc::SoftwareOutputDevice> software_device,
int surface_id,
IDMap<BrowserCompositorOutputSurface>* output_surface_map,
- base::MessageLoopProxy* compositor_message_loop,
- base::WeakPtr<ui::Compositor> compositor)
+ const scoped_refptr<ui::CompositorVSyncManager>& vsync_manager)
: OutputSurface(software_device.Pass()),
surface_id_(surface_id),
output_surface_map_(output_surface_map),
- compositor_message_loop_(compositor_message_loop),
- compositor_(compositor) {
+ vsync_manager_(vsync_manager) {
Initialize();
}
@@ -49,6 +43,7 @@ BrowserCompositorOutputSurface::~BrowserCompositorOutputSurface() {
if (!HasClient())
return;
output_surface_map_->Remove(surface_id_);
+ vsync_manager_->RemoveObserver(this);
}
void BrowserCompositorOutputSurface::Initialize() {
@@ -77,6 +72,7 @@ bool BrowserCompositorOutputSurface::BindToClient(
output_surface_map_->AddWithID(this, surface_id_);
if (reflector_)
reflector_->OnSourceSurfaceReady(surface_id_);
+ vsync_manager_->AddObserver(this);
return true;
}
@@ -92,11 +88,15 @@ void BrowserCompositorOutputSurface::OnUpdateVSyncParameters(
base::TimeDelta interval) {
DCHECK(CalledOnValidThread());
DCHECK(HasClient());
- OnVSyncParametersChanged(timebase, interval);
- compositor_message_loop_->PostTask(
- FROM_HERE,
- base::Bind(&ui::Compositor::OnUpdateVSyncParameters,
- compositor_, timebase, interval));
+ CommitVSyncParameters(timebase, interval);
+}
+
+void BrowserCompositorOutputSurface::OnUpdateVSyncParametersFromGpu(
+ base::TimeTicks timebase,
+ base::TimeDelta interval) {
+ DCHECK(CalledOnValidThread());
+ DCHECK(HasClient());
+ vsync_manager_->UpdateVSyncParameters(timebase, interval);
}
void BrowserCompositorOutputSurface::SetReflector(ReflectorImpl* reflector) {
diff --git a/content/browser/compositor/browser_compositor_output_surface.h b/content/browser/compositor/browser_compositor_output_surface.h
index bf0e366..7c26b083 100644
--- a/content/browser/compositor/browser_compositor_output_surface.h
+++ b/content/browser/compositor/browser_compositor_output_surface.h
@@ -6,19 +6,15 @@
#define CONTENT_BROWSER_COMPOSITOR_BROWSER_COMPOSITOR_OUTPUT_SURFACE_H_
#include "base/id_map.h"
-#include "base/memory/weak_ptr.h"
#include "base/threading/non_thread_safe.h"
#include "cc/output/output_surface.h"
#include "content/common/content_export.h"
-
-namespace base { class MessageLoopProxy; }
+#include "ui/compositor/compositor_vsync_manager.h"
namespace cc {
class SoftwareOutputDevice;
}
-namespace ui { class Compositor; }
-
namespace content {
class ContextProviderCommandBuffer;
class ReflectorImpl;
@@ -26,6 +22,7 @@ class WebGraphicsContext3DCommandBufferImpl;
class CONTENT_EXPORT BrowserCompositorOutputSurface
: public cc::OutputSurface,
+ public ui::CompositorVSyncManager::Observer,
public base::NonThreadSafe {
public:
virtual ~BrowserCompositorOutputSurface();
@@ -34,8 +31,12 @@ class CONTENT_EXPORT BrowserCompositorOutputSurface
virtual bool BindToClient(cc::OutputSurfaceClient* client) OVERRIDE;
virtual void Reshape(const gfx::Size& size, float scale_factor) OVERRIDE;
- void OnUpdateVSyncParameters(base::TimeTicks timebase,
- base::TimeDelta interval);
+ // ui::CompositorOutputSurface::Observer implementation.
+ virtual void OnUpdateVSyncParameters(base::TimeTicks timebase,
+ base::TimeDelta interval) OVERRIDE;
+
+ void OnUpdateVSyncParametersFromGpu(base::TimeTicks tiembase,
+ base::TimeDelta interval);
void SetReflector(ReflectorImpl* reflector);
@@ -45,22 +46,19 @@ class CONTENT_EXPORT BrowserCompositorOutputSurface
const scoped_refptr<ContextProviderCommandBuffer>& context,
int surface_id,
IDMap<BrowserCompositorOutputSurface>* output_surface_map,
- base::MessageLoopProxy* compositor_message_loop,
- base::WeakPtr<ui::Compositor> compositor);
+ const scoped_refptr<ui::CompositorVSyncManager>& vsync_manager);
// Constructor used by the software implementation.
BrowserCompositorOutputSurface(
scoped_ptr<cc::SoftwareOutputDevice> software_device,
int surface_id,
IDMap<BrowserCompositorOutputSurface>* output_surface_map,
- base::MessageLoopProxy* compositor_message_loop,
- base::WeakPtr<ui::Compositor> compositor);
+ const scoped_refptr<ui::CompositorVSyncManager>& vsync_manager);
int surface_id_;
IDMap<BrowserCompositorOutputSurface>* output_surface_map_;
- scoped_refptr<base::MessageLoopProxy> compositor_message_loop_;
- base::WeakPtr<ui::Compositor> compositor_;
+ scoped_refptr<ui::CompositorVSyncManager> vsync_manager_;
scoped_refptr<ReflectorImpl> reflector_;
private:
diff --git a/content/browser/compositor/browser_compositor_output_surface_proxy.cc b/content/browser/compositor/browser_compositor_output_surface_proxy.cc
index d95c9b0..27fe55a 100644
--- a/content/browser/compositor/browser_compositor_output_surface_proxy.cc
+++ b/content/browser/compositor/browser_compositor_output_surface_proxy.cc
@@ -53,6 +53,6 @@ BrowserCompositorOutputSurfaceProxy::OnUpdateVSyncParametersOnCompositorThread(
base::TimeDelta interval) {
BrowserCompositorOutputSurface* surface = surface_map_->Lookup(surface_id);
if (surface)
- surface->OnUpdateVSyncParameters(timebase, interval);
+ surface->OnUpdateVSyncParametersFromGpu(timebase, interval);
}
} // namespace content
diff --git a/content/browser/compositor/gpu_browser_compositor_output_surface.cc b/content/browser/compositor/gpu_browser_compositor_output_surface.cc
index 17c4780..32a43fd 100644
--- a/content/browser/compositor/gpu_browser_compositor_output_surface.cc
+++ b/content/browser/compositor/gpu_browser_compositor_output_surface.cc
@@ -15,13 +15,11 @@ GpuBrowserCompositorOutputSurface::GpuBrowserCompositorOutputSurface(
const scoped_refptr<ContextProviderCommandBuffer>& context,
int surface_id,
IDMap<BrowserCompositorOutputSurface>* output_surface_map,
- base::MessageLoopProxy* compositor_message_loop,
- base::WeakPtr<ui::Compositor> compositor)
+ const scoped_refptr<ui::CompositorVSyncManager>& vsync_manager)
: BrowserCompositorOutputSurface(context,
surface_id,
output_surface_map,
- compositor_message_loop,
- compositor) {}
+ vsync_manager) {}
GpuBrowserCompositorOutputSurface::~GpuBrowserCompositorOutputSurface() {}
diff --git a/content/browser/compositor/gpu_browser_compositor_output_surface.h b/content/browser/compositor/gpu_browser_compositor_output_surface.h
index c677839..a773ad5 100644
--- a/content/browser/compositor/gpu_browser_compositor_output_surface.h
+++ b/content/browser/compositor/gpu_browser_compositor_output_surface.h
@@ -7,6 +7,10 @@
#include "content/browser/compositor/browser_compositor_output_surface.h"
+namespace ui {
+class CompositorVSyncManager;
+}
+
namespace content {
// Adapts a WebGraphicsContext3DCommandBufferImpl into a
@@ -19,8 +23,7 @@ class GpuBrowserCompositorOutputSurface
const scoped_refptr<ContextProviderCommandBuffer>& context,
int surface_id,
IDMap<BrowserCompositorOutputSurface>* output_surface_map,
- base::MessageLoopProxy* compositor_message_loop,
- base::WeakPtr<ui::Compositor> compositor);
+ const scoped_refptr<ui::CompositorVSyncManager>& vsync_manager);
virtual ~GpuBrowserCompositorOutputSurface();
diff --git a/content/browser/compositor/gpu_process_transport_factory.cc b/content/browser/compositor/gpu_process_transport_factory.cc
index d97fdc1..d72958b 100644
--- a/content/browser/compositor/gpu_process_transport_factory.cc
+++ b/content/browser/compositor/gpu_process_transport_factory.cc
@@ -217,8 +217,7 @@ scoped_ptr<cc::OutputSurface> GpuProcessTransportFactory::CreateOutputSurface(
CreateSoftwareOutputDevice(compositor),
per_compositor_data_[compositor]->surface_id,
&output_surface_map_,
- base::MessageLoopProxy::current().get(),
- compositor->AsWeakPtr()));
+ compositor->vsync_manager()));
return surface.PassAs<cc::OutputSurface>();
}
@@ -237,8 +236,7 @@ scoped_ptr<cc::OutputSurface> GpuProcessTransportFactory::CreateOutputSurface(
context_provider,
per_compositor_data_[compositor]->surface_id,
&output_surface_map_,
- base::MessageLoopProxy::current().get(),
- compositor->AsWeakPtr()));
+ compositor->vsync_manager()));
if (data->reflector.get()) {
data->reflector->CreateSharedTexture();
data->reflector->AttachToOutputSurface(surface.get());
diff --git a/content/browser/compositor/software_browser_compositor_output_surface.cc b/content/browser/compositor/software_browser_compositor_output_surface.cc
index 4767e22..369fe93 100644
--- a/content/browser/compositor/software_browser_compositor_output_surface.cc
+++ b/content/browser/compositor/software_browser_compositor_output_surface.cc
@@ -21,13 +21,11 @@ SoftwareBrowserCompositorOutputSurface::SoftwareBrowserCompositorOutputSurface(
scoped_ptr<cc::SoftwareOutputDevice> software_device,
int surface_id,
IDMap<BrowserCompositorOutputSurface>* output_surface_map,
- base::MessageLoopProxy* compositor_message_loop,
- base::WeakPtr<ui::Compositor> compositor)
+ const scoped_refptr<ui::CompositorVSyncManager>& vsync_manager)
: BrowserCompositorOutputSurface(software_device.Pass(),
surface_id,
output_surface_map,
- compositor_message_loop,
- compositor),
+ vsync_manager),
output_surface_proxy_(surface_proxy) {}
SoftwareBrowserCompositorOutputSurface::
diff --git a/content/browser/compositor/software_browser_compositor_output_surface.h b/content/browser/compositor/software_browser_compositor_output_surface.h
index 88bf9a9..788d9da 100644
--- a/content/browser/compositor/software_browser_compositor_output_surface.h
+++ b/content/browser/compositor/software_browser_compositor_output_surface.h
@@ -8,16 +8,15 @@
#include "base/memory/weak_ptr.h"
#include "content/browser/compositor/browser_compositor_output_surface.h"
#include "content/common/content_export.h"
-#include "ui/compositor/compositor.h"
-
-namespace base {
-class MessageLoopProxy;
-}
namespace cc {
class SoftwareOutputDevice;
}
+namespace ui {
+class CompositorVSyncManager;
+}
+
namespace content {
class BrowserCompositorOutputSurfaceProxy;
@@ -30,8 +29,7 @@ class CONTENT_EXPORT SoftwareBrowserCompositorOutputSurface
scoped_ptr<cc::SoftwareOutputDevice> software_device,
int surface_id,
IDMap<BrowserCompositorOutputSurface>* output_surface_map,
- base::MessageLoopProxy* compositor_message_loop,
- base::WeakPtr<ui::Compositor> compositor);
+ const scoped_refptr<ui::CompositorVSyncManager>& vsync_manager);
virtual ~SoftwareBrowserCompositorOutputSurface();
diff --git a/content/browser/compositor/software_browser_compositor_output_surface_unittest.cc b/content/browser/compositor/software_browser_compositor_output_surface_unittest.cc
index 047346f..3f48d21 100644
--- a/content/browser/compositor/software_browser_compositor_output_surface_unittest.cc
+++ b/content/browser/compositor/software_browser_compositor_output_surface_unittest.cc
@@ -7,6 +7,7 @@
#include "content/browser/compositor/browser_compositor_output_surface_proxy.h"
#include "content/browser/compositor/software_browser_compositor_output_surface.h"
#include "testing/gtest/include/gtest/gtest.h"
+#include "ui/compositor/compositor.h"
#include "ui/compositor/test/context_factories_for_test.h"
#include "ui/gfx/vsync_provider.h"
@@ -79,6 +80,8 @@ class SoftwareBrowserCompositorOutputSurfaceTest : public testing::Test {
SoftwareBrowserCompositorOutputSurfaceTest::
SoftwareBrowserCompositorOutputSurfaceTest() {
+ // |message_loop_| is not used, but the main thread still has to exist for the
+ // compositor to use.
message_loop_.reset(new base::MessageLoopForUI);
}
@@ -114,8 +117,7 @@ SoftwareBrowserCompositorOutputSurfaceTest::CreateSurface(
device.Pass(),
1,
&surface_map_,
- compositor_->GetCompositorMessageLoop(),
- compositor_->AsWeakPtr()));
+ compositor_->vsync_manager()));
}
TEST_F(SoftwareBrowserCompositorOutputSurfaceTest, NoVSyncProvider) {
diff --git a/content/browser/renderer_host/media/desktop_capture_device_aura.cc b/content/browser/renderer_host/media/desktop_capture_device_aura.cc
index 877ce82..5669bce 100644
--- a/content/browser/renderer_host/media/desktop_capture_device_aura.cc
+++ b/content/browser/renderer_host/media/desktop_capture_device_aura.cc
@@ -113,9 +113,6 @@ class DesktopVideoCaptureMachine
virtual void OnCompositingAborted(ui::Compositor* compositor) OVERRIDE {}
virtual void OnCompositingLockStateChanged(
ui::Compositor* compositor) OVERRIDE {}
- virtual void OnUpdateVSyncParameters(ui::Compositor* compositor,
- base::TimeTicks timebase,
- base::TimeDelta interval) OVERRIDE {}
private:
// Captures a frame.
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 38bae4a..1c66023 100644
--- a/content/browser/renderer_host/render_widget_host_view_aura.cc
+++ b/content/browser/renderer_host/render_widget_host_view_aura.cc
@@ -3229,7 +3229,6 @@ void RenderWidgetHostViewAura::OnCompositingLockStateChanged(
}
void RenderWidgetHostViewAura::OnUpdateVSyncParameters(
- ui::Compositor* compositor,
base::TimeTicks timebase,
base::TimeDelta interval) {
if (IsShowing()) {
@@ -3530,6 +3529,10 @@ void RenderWidgetHostViewAura::AddedToRootWindow() {
legacy_render_widget_host_HWND_->UpdateParent(
reinterpret_cast<HWND>(GetNativeViewId()));
#endif
+
+ ui::Compositor* compositor = GetCompositor();
+ if (compositor)
+ compositor->vsync_manager()->AddObserver(this);
}
void RenderWidgetHostViewAura::RemovingFromRootWindow() {
@@ -3553,8 +3556,12 @@ void RenderWidgetHostViewAura::RemovingFromRootWindow() {
RunOnCommitCallbacks();
resize_lock_.reset();
host_->WasResized();
- if (compositor && compositor->HasObserver(this))
- compositor->RemoveObserver(this);
+
+ if (compositor) {
+ if (compositor->HasObserver(this))
+ compositor->RemoveObserver(this);
+ compositor->vsync_manager()->RemoveObserver(this);
+ }
#if defined(OS_WIN)
// Update the legacy window's parent temporarily to the desktop window. It
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 995aaf6..7c6605c 100644
--- a/content/browser/renderer_host/render_widget_host_view_aura.h
+++ b/content/browser/renderer_host/render_widget_host_view_aura.h
@@ -37,6 +37,7 @@
#include "ui/base/ime/text_input_client.h"
#include "ui/compositor/compositor.h"
#include "ui/compositor/compositor_observer.h"
+#include "ui/compositor/compositor_vsync_manager.h"
#include "ui/gfx/display_observer.h"
#include "ui/gfx/rect.h"
#include "webkit/common/cursors/webcursor.h"
@@ -79,6 +80,7 @@ class ResizeLock;
class CONTENT_EXPORT RenderWidgetHostViewAura
: public RenderWidgetHostViewBase,
public ui::CompositorObserver,
+ public ui::CompositorVSyncManager::Observer,
public ui::TextInputClient,
public gfx::DisplayObserver,
public aura::RootWindowObserver,
@@ -372,8 +374,9 @@ class CONTENT_EXPORT RenderWidgetHostViewAura
virtual void OnCompositingAborted(ui::Compositor* compositor) OVERRIDE;
virtual void OnCompositingLockStateChanged(
ui::Compositor* compositor) OVERRIDE;
- virtual void OnUpdateVSyncParameters(ui::Compositor* compositor,
- base::TimeTicks timebase,
+
+ // Overridden from ui::CompositorVSyncManager::Observer
+ virtual void OnUpdateVSyncParameters(base::TimeTicks timebase,
base::TimeDelta interval) OVERRIDE;
private: