diff options
author | jbauman <jbauman@chromium.org> | 2014-09-22 18:51:29 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-09-23 01:51:56 +0000 |
commit | c6bf8b941a80b88202c4a6d90ad2047bee6f8885 (patch) | |
tree | 7d4be4a44bc3e1ab5e2f2921af77ff29f797d896 /content/browser/compositor | |
parent | eaae121b61b3b89786061383919122e669bf4deb (diff) | |
download | chromium_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')
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; |