Commit c6bf8b94 authored by jbauman's avatar jbauman Committed by Commit bot

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}
parent eaae121b
...@@ -140,6 +140,11 @@ void Display::DidSwapBuffersComplete() { ...@@ -140,6 +140,11 @@ void Display::DidSwapBuffersComplete() {
client_->DidSwapBuffersComplete(); client_->DidSwapBuffersComplete();
} }
void Display::CommitVSyncParameters(base::TimeTicks timebase,
base::TimeDelta interval) {
client_->CommitVSyncParameters(timebase, interval);
}
void Display::OnSurfaceDamaged(SurfaceId surface) { void Display::OnSurfaceDamaged(SurfaceId surface) {
if (aggregator_ && aggregator_->previous_contained_surfaces().count(surface)) if (aggregator_ && aggregator_->previous_contained_surfaces().count(surface))
client_->DisplayDamaged(); client_->DisplayDamaged();
......
...@@ -53,7 +53,7 @@ class CC_SURFACES_EXPORT Display : public OutputSurfaceClient, ...@@ -53,7 +53,7 @@ class CC_SURFACES_EXPORT Display : public OutputSurfaceClient,
virtual void DeferredInitialize() OVERRIDE {} virtual void DeferredInitialize() OVERRIDE {}
virtual void ReleaseGL() OVERRIDE {} virtual void ReleaseGL() OVERRIDE {}
virtual void CommitVSyncParameters(base::TimeTicks timebase, virtual void CommitVSyncParameters(base::TimeTicks timebase,
base::TimeDelta interval) OVERRIDE {} base::TimeDelta interval) OVERRIDE;
virtual void SetNeedsRedrawRect(const gfx::Rect& damage_rect) OVERRIDE {} virtual void SetNeedsRedrawRect(const gfx::Rect& damage_rect) OVERRIDE {}
virtual void BeginFrame(const BeginFrameArgs& args) OVERRIDE {} virtual void BeginFrame(const BeginFrameArgs& args) OVERRIDE {}
virtual void DidSwapBuffers() OVERRIDE; virtual void DidSwapBuffers() OVERRIDE;
......
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
#define CC_SURFACES_DISPLAY_CLIENT_H_ #define CC_SURFACES_DISPLAY_CLIENT_H_
#include "base/memory/scoped_ptr.h" #include "base/memory/scoped_ptr.h"
#include "base/time/time.h"
namespace cc { namespace cc {
...@@ -17,6 +18,8 @@ class DisplayClient { ...@@ -17,6 +18,8 @@ class DisplayClient {
virtual void DisplayDamaged() = 0; virtual void DisplayDamaged() = 0;
virtual void DidSwapBuffers() = 0; virtual void DidSwapBuffers() = 0;
virtual void DidSwapBuffersComplete() = 0; virtual void DidSwapBuffersComplete() = 0;
virtual void CommitVSyncParameters(base::TimeTicks timebase,
base::TimeDelta interval) = 0;
protected: protected:
virtual ~DisplayClient() {} virtual ~DisplayClient() {}
......
...@@ -210,6 +210,7 @@ scoped_ptr<cc::OutputSurface> GpuProcessTransportFactory::CreateOutputSurface( ...@@ -210,6 +210,7 @@ scoped_ptr<cc::OutputSurface> GpuProcessTransportFactory::CreateOutputSurface(
new SurfaceDisplayOutputSurface(manager, new SurfaceDisplayOutputSurface(manager,
next_surface_id_namespace_++, next_surface_id_namespace_++,
offscreen_context_provider)); offscreen_context_provider));
display_client->set_surface_output_surface(output_surface.get());
output_surface->set_display(display_client->display()); output_surface->set_display(display_client->display());
data->display_client = display_client.Pass(); data->display_client = display_client.Pass();
return output_surface.PassAs<cc::OutputSurface>(); return output_surface.PassAs<cc::OutputSurface>();
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#include "cc/output/output_surface.h" #include "cc/output/output_surface.h"
#include "cc/surfaces/surface_factory.h" #include "cc/surfaces/surface_factory.h"
#include "cc/surfaces/surface_manager.h" #include "cc/surfaces/surface_manager.h"
#include "content/browser/compositor/surface_display_output_surface.h"
#include "content/common/host_shared_bitmap_manager.h" #include "content/common/host_shared_bitmap_manager.h"
namespace content { namespace content {
...@@ -34,6 +35,11 @@ scoped_ptr<cc::OutputSurface> OnscreenDisplayClient::CreateOutputSurface() { ...@@ -34,6 +35,11 @@ scoped_ptr<cc::OutputSurface> OnscreenDisplayClient::CreateOutputSurface() {
return output_surface_.Pass(); return output_surface_.Pass();
} }
void OnscreenDisplayClient::CommitVSyncParameters(base::TimeTicks timebase,
base::TimeDelta interval) {
surface_display_output_surface_->ReceivedVSyncParameters(timebase, interval);
}
void OnscreenDisplayClient::DisplayDamaged() { void OnscreenDisplayClient::DisplayDamaged() {
if (scheduled_draw_ || deferred_draw_) if (scheduled_draw_ || deferred_draw_)
return; return;
......
...@@ -18,6 +18,7 @@ class SurfaceManager; ...@@ -18,6 +18,7 @@ class SurfaceManager;
} }
namespace content { namespace content {
class SurfaceDisplayOutputSurface;
// This class provides a DisplayClient implementation for drawing directly to an // This class provides a DisplayClient implementation for drawing directly to an
// onscreen context. // onscreen context.
...@@ -30,12 +31,17 @@ class OnscreenDisplayClient : cc::DisplayClient { ...@@ -30,12 +31,17 @@ class OnscreenDisplayClient : cc::DisplayClient {
virtual ~OnscreenDisplayClient(); virtual ~OnscreenDisplayClient();
cc::Display* display() { return display_.get(); } cc::Display* display() { return display_.get(); }
void set_surface_output_surface(SurfaceDisplayOutputSurface* surface) {
surface_display_output_surface_ = surface;
}
// cc::DisplayClient implementation. // cc::DisplayClient implementation.
virtual scoped_ptr<cc::OutputSurface> CreateOutputSurface() OVERRIDE; virtual scoped_ptr<cc::OutputSurface> CreateOutputSurface() OVERRIDE;
virtual void DisplayDamaged() OVERRIDE; virtual void DisplayDamaged() OVERRIDE;
virtual void DidSwapBuffers() OVERRIDE; virtual void DidSwapBuffers() OVERRIDE;
virtual void DidSwapBuffersComplete() OVERRIDE; virtual void DidSwapBuffersComplete() OVERRIDE;
virtual void CommitVSyncParameters(base::TimeTicks timebase,
base::TimeDelta interval) OVERRIDE;
private: private:
void ScheduleDraw(); void ScheduleDraw();
...@@ -44,6 +50,7 @@ class OnscreenDisplayClient : cc::DisplayClient { ...@@ -44,6 +50,7 @@ class OnscreenDisplayClient : cc::DisplayClient {
scoped_ptr<cc::OutputSurface> output_surface_; scoped_ptr<cc::OutputSurface> output_surface_;
scoped_ptr<cc::Display> display_; scoped_ptr<cc::Display> display_;
scoped_refptr<base::SingleThreadTaskRunner> task_runner_; scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
SurfaceDisplayOutputSurface* surface_display_output_surface_;
bool scheduled_draw_; bool scheduled_draw_;
// True if a draw should be scheduled, but it's hit the limit on max frames // True if a draw should be scheduled, but it's hit the limit on max frames
// pending. // pending.
......
...@@ -33,6 +33,12 @@ SurfaceDisplayOutputSurface::~SurfaceDisplayOutputSurface() { ...@@ -33,6 +33,12 @@ SurfaceDisplayOutputSurface::~SurfaceDisplayOutputSurface() {
} }
} }
void SurfaceDisplayOutputSurface::ReceivedVSyncParameters(
base::TimeTicks timebase,
base::TimeDelta interval) {
CommitVSyncParameters(timebase, interval);
}
void SurfaceDisplayOutputSurface::SwapBuffers(cc::CompositorFrame* frame) { void SurfaceDisplayOutputSurface::SwapBuffers(cc::CompositorFrame* frame) {
gfx::Size frame_size = gfx::Size frame_size =
frame->delegated_frame_data->render_pass_list.back()->output_rect.size(); frame->delegated_frame_data->render_pass_list.back()->output_rect.size();
......
...@@ -32,6 +32,8 @@ class SurfaceDisplayOutputSurface : public cc::OutputSurface, ...@@ -32,6 +32,8 @@ class SurfaceDisplayOutputSurface : public cc::OutputSurface,
void set_display(cc::Display* display) { display_ = display; } void set_display(cc::Display* display) { display_ = display; }
cc::SurfaceFactory* factory() { return &factory_; } cc::SurfaceFactory* factory() { return &factory_; }
void ReceivedVSyncParameters(base::TimeTicks timebase,
base::TimeDelta interval);
// cc::OutputSurface implementation. // cc::OutputSurface implementation.
virtual void SwapBuffers(cc::CompositorFrame* frame) OVERRIDE; virtual void SwapBuffers(cc::CompositorFrame* frame) OVERRIDE;
......
...@@ -104,4 +104,8 @@ void SurfacesImpl::DidSwapBuffers() { ...@@ -104,4 +104,8 @@ void SurfacesImpl::DidSwapBuffers() {
void SurfacesImpl::DidSwapBuffersComplete() { void SurfacesImpl::DidSwapBuffersComplete() {
} }
void SurfacesImpl::CommitVSyncParameters(base::TimeTicks timebase,
base::TimeDelta interval) {
}
} // namespace mojo } // namespace mojo
...@@ -54,6 +54,8 @@ class SurfacesImpl : public InterfaceImpl<Surface>, ...@@ -54,6 +54,8 @@ class SurfacesImpl : public InterfaceImpl<Surface>,
virtual void DisplayDamaged() OVERRIDE; virtual void DisplayDamaged() OVERRIDE;
virtual void DidSwapBuffers() OVERRIDE; virtual void DidSwapBuffers() OVERRIDE;
virtual void DidSwapBuffersComplete() OVERRIDE; virtual void DidSwapBuffersComplete() OVERRIDE;
virtual void CommitVSyncParameters(base::TimeTicks timebase,
base::TimeDelta interval) OVERRIDE;
cc::SurfaceFactory* factory() { return &factory_; } cc::SurfaceFactory* factory() { return &factory_; }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment