Chromium Code Reviews| Index: components/mus/surfaces/direct_output_surface.cc |
| diff --git a/components/mus/surfaces/direct_output_surface.cc b/components/mus/surfaces/direct_output_surface.cc |
| index 87009008ad87bd5d87ddb64a81a123c812671620..da6b35e4605d76b3aaee7b83ce7d42e141ea6255 100644 |
| --- a/components/mus/surfaces/direct_output_surface.cc |
| +++ b/components/mus/surfaces/direct_output_surface.cc |
| @@ -16,8 +16,15 @@ |
| namespace mus { |
| DirectOutputSurface::DirectOutputSurface( |
| - const scoped_refptr<cc::ContextProvider>& context_provider) |
| - : cc::OutputSurface(context_provider), weak_ptr_factory_(this) {} |
| + scoped_refptr<SurfacesContextProvider> context_provider, |
| + base::SingleThreadTaskRunner* task_runner) |
| + : cc::OutputSurface(context_provider), |
| + synthetic_begin_frame_source_(new cc::SyntheticBeginFrameSource( |
| + task_runner, |
| + cc::BeginFrameArgs::DefaultInterval())), |
| + weak_ptr_factory_(this) { |
| + context_provider->SetDelegate(this); |
| +} |
| DirectOutputSurface::~DirectOutputSurface() {} |
| @@ -25,6 +32,8 @@ bool DirectOutputSurface::BindToClient(cc::OutputSurfaceClient* client) { |
| if (!cc::OutputSurface::BindToClient(client)) |
| return false; |
| + client->SetBeginFrameSource(synthetic_begin_frame_source_.get()); |
| + |
| if (capabilities_.uses_default_gl_framebuffer) { |
| capabilities_.flipped_output_surface = |
| context_provider()->ContextCapabilities().gpu.flips_vertically; |
| @@ -32,6 +41,20 @@ bool DirectOutputSurface::BindToClient(cc::OutputSurfaceClient* client) { |
| return true; |
| } |
| +void DirectOutputSurface::OnVSyncParametersUpdated(int64_t timebase, |
| + int64_t interval) { |
| + auto timebase_time_ticks = base::TimeTicks::FromInternalValue(timebase); |
|
sunnyps
2016/04/01 22:35:25
nit: Don't really need the _time_ticks and _time_d
enne (OOO)
2016/04/02 00:18:38
This code was moved from TopLevelDisplayClient, an
sunnyps
2016/04/02 00:47:15
ah, ok nvm.
|
| + auto interval_time_delta = base::TimeDelta::FromInternalValue(interval); |
| + |
| + if (interval_time_delta.is_zero()) { |
| + // TODO(brianderson): We should not be receiving 0 intervals. |
| + interval_time_delta = cc::BeginFrameArgs::DefaultInterval(); |
| + } |
| + |
| + synthetic_begin_frame_source_->OnUpdateVSyncParameters(timebase_time_ticks, |
| + interval_time_delta); |
| +} |
| + |
| void DirectOutputSurface::SwapBuffers(cc::CompositorFrame* frame) { |
| DCHECK(context_provider_); |
| DCHECK(frame->gl_frame_data); |