Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(368)

Unified Diff: components/mus/surfaces/direct_output_surface.cc

Issue 1821863002: Hook up ui::Compositor to Display's BeginFrameSource (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase; refactor mus output surface Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);

Powered by Google App Engine
This is Rietveld 408576698