Chromium Code Reviews| Index: ui/compositor/compositor.cc |
| diff --git a/ui/compositor/compositor.cc b/ui/compositor/compositor.cc |
| index a30c2ded5f974873d7cc2ec527cad68c31f04aec..f2d08cde512820fb5ea9af028f7e25811b276e4d 100644 |
| --- a/ui/compositor/compositor.cc |
| +++ b/ui/compositor/compositor.cc |
| @@ -72,8 +72,10 @@ void CompositorLock::CancelLock() { |
| } |
| Compositor::Compositor(ui::ContextFactory* context_factory, |
| + ui::ContextFactoryPrivate* context_factory_private, |
| scoped_refptr<base::SingleThreadTaskRunner> task_runner) |
| : context_factory_(context_factory), |
| + context_factory_private_(context_factory_private), |
| root_layer_(NULL), |
| widget_(gfx::kNullAcceleratedWidget), |
| #if defined(USE_AURA) |
| @@ -81,7 +83,9 @@ Compositor::Compositor(ui::ContextFactory* context_factory, |
| #endif |
| widget_valid_(false), |
| compositor_frame_sink_requested_(false), |
| - frame_sink_id_(context_factory->AllocateFrameSinkId()), |
| + frame_sink_id_(context_factory_private |
| + ? context_factory_private->AllocateFrameSinkId() |
| + : cc::FrameSinkId()), |
| task_runner_(task_runner), |
| vsync_manager_(new CompositorVSyncManager()), |
| device_scale_factor_(0.0f), |
| @@ -89,7 +93,10 @@ Compositor::Compositor(ui::ContextFactory* context_factory, |
| compositor_lock_(NULL), |
| layer_animator_collection_(this), |
| weak_ptr_factory_(this) { |
| - context_factory->GetSurfaceManager()->RegisterFrameSinkId(frame_sink_id_); |
| + if (context_factory_private) { |
| + context_factory_private->GetSurfaceManager()->RegisterFrameSinkId( |
| + frame_sink_id_); |
| + } |
| root_web_layer_ = cc::Layer::Create(); |
| base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); |
| @@ -230,25 +237,31 @@ Compositor::~Compositor() { |
| host_.reset(); |
| context_factory_->RemoveCompositor(this); |
| - auto* manager = context_factory_->GetSurfaceManager(); |
| - for (auto& client : child_frame_sinks_) { |
| - DCHECK(client.is_valid()); |
| - manager->UnregisterFrameSinkHierarchy(frame_sink_id_, client); |
| + if (context_factory_private_) { |
| + auto* manager = context_factory_private_->GetSurfaceManager(); |
| + for (auto& client : child_frame_sinks_) { |
| + DCHECK(client.is_valid()); |
| + manager->UnregisterFrameSinkHierarchy(frame_sink_id_, client); |
| + } |
| + manager->InvalidateFrameSinkId(frame_sink_id_); |
| } |
| - manager->InvalidateFrameSinkId(frame_sink_id_); |
| } |
| void Compositor::AddFrameSink(const cc::FrameSinkId& frame_sink_id) { |
| - context_factory_->GetSurfaceManager()->RegisterFrameSinkHierarchy( |
| + if (!context_factory_private_) |
|
sadrul
2016/12/09 00:11:03
Probably should be DCHECK()?
Fady Samuel
2016/12/13 19:13:59
I cannot unfortunately because Chrome still uses C
|
| + return; |
| + context_factory_private_->GetSurfaceManager()->RegisterFrameSinkHierarchy( |
| frame_sink_id_, frame_sink_id); |
| child_frame_sinks_.insert(frame_sink_id); |
| } |
| void Compositor::RemoveFrameSink(const cc::FrameSinkId& frame_sink_id) { |
| + if (!context_factory_private_) |
| + return; |
| auto it = child_frame_sinks_.find(frame_sink_id); |
| DCHECK(it != child_frame_sinks_.end()); |
| DCHECK(it->is_valid()); |
| - context_factory_->GetSurfaceManager()->UnregisterFrameSinkHierarchy( |
| + context_factory_private_->GetSurfaceManager()->UnregisterFrameSinkHierarchy( |
| frame_sink_id_, *it); |
| child_frame_sinks_.erase(it); |
| } |
| @@ -259,8 +272,10 @@ void Compositor::SetCompositorFrameSink( |
| host_->SetCompositorFrameSink(std::move(compositor_frame_sink)); |
| // Display properties are reset when the output surface is lost, so update it |
| // to match the Compositor's. |
| - context_factory_->SetDisplayVisible(this, host_->IsVisible()); |
| - context_factory_->SetDisplayColorSpace(this, color_space_); |
| + if (context_factory_private_) { |
| + context_factory_private_->SetDisplayVisible(this, host_->IsVisible()); |
| + context_factory_private_->SetDisplayColorSpace(this, color_space_); |
| + } |
| } |
| void Compositor::ScheduleDraw() { |
| @@ -305,7 +320,7 @@ void Compositor::ScheduleRedrawRect(const gfx::Rect& damage_rect) { |
| } |
| void Compositor::DisableSwapUntilResize() { |
| - context_factory_->ResizeDisplay(this, gfx::Size()); |
| + context_factory_private_->ResizeDisplay(this, gfx::Size()); |
| } |
| void Compositor::SetLatencyInfo(const ui::LatencyInfo& latency_info) { |
| @@ -320,7 +335,9 @@ void Compositor::SetScaleAndSize(float scale, const gfx::Size& size_in_pixel) { |
| size_ = size_in_pixel; |
| host_->GetLayerTree()->SetViewportSize(size_in_pixel); |
| root_web_layer_->SetBounds(size_in_pixel); |
| - context_factory_->ResizeDisplay(this, size_in_pixel); |
| + // TODO(fsamuel): Get rid of ContextFactoryPrivate. |
| + if (context_factory_private_) |
| + context_factory_private_->ResizeDisplay(this, size_in_pixel); |
| } |
| if (device_scale_factor_ != scale) { |
| device_scale_factor_ = scale; |
| @@ -335,7 +352,9 @@ void Compositor::SetDisplayColorSpace(const gfx::ColorSpace& color_space) { |
| color_space_ = color_space; |
| // Color space is reset when the output surface is lost, so this must also be |
| // updated then. |
| - context_factory_->SetDisplayColorSpace(this, color_space_); |
| + // TODO(fsamuel): Get rid of this. |
| + if (context_factory_private_) |
| + context_factory_private_->SetDisplayColorSpace(this, color_space_); |
| } |
| void Compositor::SetBackgroundColor(SkColor color) { |
| @@ -347,7 +366,9 @@ void Compositor::SetVisible(bool visible) { |
| host_->SetVisible(visible); |
| // Visibility is reset when the output surface is lost, so this must also be |
| // updated then. |
| - context_factory_->SetDisplayVisible(this, visible); |
| + // TODO(fsamuel): Eliminate this call. |
| + if (context_factory_private_) |
| + context_factory_private_->SetDisplayVisible(this, visible); |
| } |
| bool Compositor::IsVisible() { |
| @@ -365,7 +386,8 @@ bool Compositor::GetScrollOffsetForLayer(int layer_id, |
| void Compositor::SetAuthoritativeVSyncInterval( |
| const base::TimeDelta& interval) { |
| - context_factory_->SetAuthoritativeVSyncInterval(this, interval); |
| + if (context_factory_private_) |
| + context_factory_private_->SetAuthoritativeVSyncInterval(this, interval); |
| vsync_manager_->SetAuthoritativeVSyncInterval(interval); |
| } |
| @@ -376,7 +398,10 @@ void Compositor::SetDisplayVSyncParameters(base::TimeTicks timebase, |
| interval = cc::BeginFrameArgs::DefaultInterval(); |
| } |
| - context_factory_->SetDisplayVSyncParameters(this, timebase, interval); |
| + if (context_factory_private_) { |
| + context_factory_private_->SetDisplayVSyncParameters(this, timebase, |
| + interval); |
| + } |
| vsync_manager_->UpdateVSyncParameters(timebase, interval); |
| } |
| @@ -499,7 +524,8 @@ void Compositor::DidSubmitCompositorFrame() { |
| } |
| void Compositor::SetOutputIsSecure(bool output_is_secure) { |
| - context_factory_->SetOutputIsSecure(this, output_is_secure); |
| + if (context_factory_private_) |
| + context_factory_private_->SetOutputIsSecure(this, output_is_secure); |
| } |
| const cc::LayerTreeDebugState& Compositor::GetLayerTreeDebugState() const { |