| 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);
|
| + 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);
|
|
|