summaryrefslogtreecommitdiffstats
path: root/content/browser/compositor
diff options
context:
space:
mode:
authorjbauman <jbauman@chromium.org>2014-09-22 18:51:29 -0700
committerCommit bot <commit-bot@chromium.org>2014-09-23 01:51:56 +0000
commitc6bf8b941a80b88202c4a6d90ad2047bee6f8885 (patch)
tree7d4be4a44bc3e1ab5e2f2921af77ff29f797d896 /content/browser/compositor
parenteaae121b61b3b89786061383919122e669bf4deb (diff)
downloadchromium_src-c6bf8b941a80b88202c4a6d90ad2047bee6f8885.zip
chromium_src-c6bf8b941a80b88202c4a6d90ad2047bee6f8885.tar.gz
chromium_src-c6bf8b941a80b88202c4a6d90ad2047bee6f8885.tar.bz2
Support distributing vsync info with surfaces.
For now the vsync signal can be sent to the browser compositor, which will handle distributing it like before. BUG= Review URL: https://codereview.chromium.org/568763004 Cr-Commit-Position: refs/heads/master@{#296126}
Diffstat (limited to 'content/browser/compositor')
-rw-r--r--content/browser/compositor/gpu_process_transport_factory.cc1
-rw-r--r--content/browser/compositor/onscreen_display_client.cc6
-rw-r--r--content/browser/compositor/onscreen_display_client.h7
-rw-r--r--content/browser/compositor/surface_display_output_surface.cc6
-rw-r--r--content/browser/compositor/surface_display_output_surface.h2
5 files changed, 22 insertions, 0 deletions
diff --git a/content/browser/compositor/gpu_process_transport_factory.cc b/content/browser/compositor/gpu_process_transport_factory.cc
index 766bb3e..478b0cb 100644
--- a/content/browser/compositor/gpu_process_transport_factory.cc
+++ b/content/browser/compositor/gpu_process_transport_factory.cc
@@ -210,6 +210,7 @@ scoped_ptr<cc::OutputSurface> GpuProcessTransportFactory::CreateOutputSurface(
new SurfaceDisplayOutputSurface(manager,
next_surface_id_namespace_++,
offscreen_context_provider));
+ display_client->set_surface_output_surface(output_surface.get());
output_surface->set_display(display_client->display());
data->display_client = display_client.Pass();
return output_surface.PassAs<cc::OutputSurface>();
diff --git a/content/browser/compositor/onscreen_display_client.cc b/content/browser/compositor/onscreen_display_client.cc
index 2ca7a75..f7b6fcd 100644
--- a/content/browser/compositor/onscreen_display_client.cc
+++ b/content/browser/compositor/onscreen_display_client.cc
@@ -8,6 +8,7 @@
#include "cc/output/output_surface.h"
#include "cc/surfaces/surface_factory.h"
#include "cc/surfaces/surface_manager.h"
+#include "content/browser/compositor/surface_display_output_surface.h"
#include "content/common/host_shared_bitmap_manager.h"
namespace content {
@@ -34,6 +35,11 @@ scoped_ptr<cc::OutputSurface> OnscreenDisplayClient::CreateOutputSurface() {
return output_surface_.Pass();
}
+void OnscreenDisplayClient::CommitVSyncParameters(base::TimeTicks timebase,
+ base::TimeDelta interval) {
+ surface_display_output_surface_->ReceivedVSyncParameters(timebase, interval);
+}
+
void OnscreenDisplayClient::DisplayDamaged() {
if (scheduled_draw_ || deferred_draw_)
return;
diff --git a/content/browser/compositor/onscreen_display_client.h b/content/browser/compositor/onscreen_display_client.h
index 12fac97..be6b052 100644
--- a/content/browser/compositor/onscreen_display_client.h
+++ b/content/browser/compositor/onscreen_display_client.h
@@ -18,6 +18,7 @@ class SurfaceManager;
}
namespace content {
+class SurfaceDisplayOutputSurface;
// This class provides a DisplayClient implementation for drawing directly to an
// onscreen context.
@@ -30,12 +31,17 @@ class OnscreenDisplayClient : cc::DisplayClient {
virtual ~OnscreenDisplayClient();
cc::Display* display() { return display_.get(); }
+ void set_surface_output_surface(SurfaceDisplayOutputSurface* surface) {
+ surface_display_output_surface_ = surface;
+ }
// cc::DisplayClient implementation.
virtual scoped_ptr<cc::OutputSurface> CreateOutputSurface() OVERRIDE;
virtual void DisplayDamaged() OVERRIDE;
virtual void DidSwapBuffers() OVERRIDE;
virtual void DidSwapBuffersComplete() OVERRIDE;
+ virtual void CommitVSyncParameters(base::TimeTicks timebase,
+ base::TimeDelta interval) OVERRIDE;
private:
void ScheduleDraw();
@@ -44,6 +50,7 @@ class OnscreenDisplayClient : cc::DisplayClient {
scoped_ptr<cc::OutputSurface> output_surface_;
scoped_ptr<cc::Display> display_;
scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
+ SurfaceDisplayOutputSurface* surface_display_output_surface_;
bool scheduled_draw_;
// True if a draw should be scheduled, but it's hit the limit on max frames
// pending.
diff --git a/content/browser/compositor/surface_display_output_surface.cc b/content/browser/compositor/surface_display_output_surface.cc
index 527b621..bde972a 100644
--- a/content/browser/compositor/surface_display_output_surface.cc
+++ b/content/browser/compositor/surface_display_output_surface.cc
@@ -33,6 +33,12 @@ SurfaceDisplayOutputSurface::~SurfaceDisplayOutputSurface() {
}
}
+void SurfaceDisplayOutputSurface::ReceivedVSyncParameters(
+ base::TimeTicks timebase,
+ base::TimeDelta interval) {
+ CommitVSyncParameters(timebase, interval);
+}
+
void SurfaceDisplayOutputSurface::SwapBuffers(cc::CompositorFrame* frame) {
gfx::Size frame_size =
frame->delegated_frame_data->render_pass_list.back()->output_rect.size();
diff --git a/content/browser/compositor/surface_display_output_surface.h b/content/browser/compositor/surface_display_output_surface.h
index 57406cc..69f5ca5 100644
--- a/content/browser/compositor/surface_display_output_surface.h
+++ b/content/browser/compositor/surface_display_output_surface.h
@@ -32,6 +32,8 @@ class SurfaceDisplayOutputSurface : public cc::OutputSurface,
void set_display(cc::Display* display) { display_ = display; }
cc::SurfaceFactory* factory() { return &factory_; }
+ void ReceivedVSyncParameters(base::TimeTicks timebase,
+ base::TimeDelta interval);
// cc::OutputSurface implementation.
virtual void SwapBuffers(cc::CompositorFrame* frame) OVERRIDE;