Index: components/viz/frame_sinks/mojo_frame_sink_manager.cc |
diff --git a/components/viz/frame_sinks/mojo_frame_sink_manager.cc b/components/viz/frame_sinks/mojo_frame_sink_manager.cc |
index 673bd473420af0f1582f4d8710aa1c7deafcdf69..a41c1a4c6b5f898b69dae81e9b76c6a0390d4f7b 100644 |
--- a/components/viz/frame_sinks/mojo_frame_sink_manager.cc |
+++ b/components/viz/frame_sinks/mojo_frame_sink_manager.cc |
@@ -26,15 +26,10 @@ |
display_provider_(display_provider), |
binding_(this) { |
manager_.AddObserver(this); |
- dependency_tracker_ = base::MakeUnique<cc::SurfaceDependencyTracker>( |
- &manager_, manager_.GetPrimaryBeginFrameSource()); |
- manager_.SetDependencyTracker(dependency_tracker_.get()); |
} |
MojoFrameSinkManager::~MojoFrameSinkManager() { |
DCHECK(thread_checker_.CalledOnValidThread()); |
- manager_.SetDependencyTracker(nullptr); |
- dependency_tracker_.reset(); |
manager_.RemoveObserver(this); |
} |
@@ -61,6 +56,16 @@ |
std::unique_ptr<cc::BeginFrameSource> begin_frame_source; |
std::unique_ptr<cc::Display> display = display_provider_->CreateDisplay( |
frame_sink_id, surface_handle, &begin_frame_source); |
+ |
+ // Lazily inject a SurfaceDependencyTracker into SurfaceManager if surface |
+ // synchronization is enabled. |
+ if (!manager_.dependency_tracker() && |
+ base::CommandLine::ForCurrentProcess()->HasSwitch( |
+ cc::switches::kEnableSurfaceSynchronization)) { |
+ std::unique_ptr<cc::SurfaceDependencyTracker> dependency_tracker( |
+ new cc::SurfaceDependencyTracker(&manager_, begin_frame_source.get())); |
+ manager_.SetDependencyTracker(std::move(dependency_tracker)); |
+ } |
compositor_frame_sinks_[frame_sink_id] = |
base::MakeUnique<GpuRootCompositorFrameSink>( |