Chromium Code Reviews| Index: content/browser/renderer_host/compositor_impl_android.cc |
| diff --git a/content/browser/renderer_host/compositor_impl_android.cc b/content/browser/renderer_host/compositor_impl_android.cc |
| index f4ae15040b2285108164a1c5076ed356efc13906..0b557092ad422db9c9f399396cebce3644f2c975 100644 |
| --- a/content/browser/renderer_host/compositor_impl_android.cc |
| +++ b/content/browser/renderer_host/compositor_impl_android.cc |
| @@ -230,7 +230,6 @@ scoped_ptr<cc::SurfaceIdAllocator> CompositorImpl::CreateSurfaceIdAllocator() { |
| CompositorImpl::CompositorImpl(CompositorClient* client, |
|
danakj
2015/09/28 22:45:43
Style-guidey comment: This class should probably h
no sievers
2015/09/30 02:32:40
ui/compositor/compositor.cc is even heavier though
|
| gfx::NativeWindow root_window) |
| : root_layer_(cc::Layer::Create(Compositor::LayerSettings())), |
| - resource_manager_(&ui_resource_provider_), |
| surface_id_allocator_(GetSurfaceManager() ? CreateSurfaceIdAllocator() |
| : nullptr), |
| has_transparent_background_(false), |
| @@ -252,6 +251,10 @@ CompositorImpl::CompositorImpl(CompositorClient* client, |
| DCHECK(client); |
| DCHECK(root_window); |
| root_window->AttachCompositor(this); |
| + CreateLayerTreeHost(); |
| + ui_resource_provider_.reset(new ui::UIResourceProvider(host_.get())); |
|
danakj
2015/09/28 22:45:43
I'm wondering if this class had an Init, and maybe
no sievers
2015/09/30 02:32:40
Done.
|
| + resource_manager_.reset( |
| + new ui::ResourceManagerImpl(ui_resource_provider_.get())); |
| } |
| CompositorImpl::~CompositorImpl() { |
| @@ -369,11 +372,11 @@ void CompositorImpl::Composite(CompositingTrigger trigger) { |
| } |
| ui::UIResourceProvider& CompositorImpl::GetUIResourceProvider() { |
| - return ui_resource_provider_; |
| + return *ui_resource_provider_; |
| } |
| ui::ResourceManager& CompositorImpl::GetResourceManager() { |
| - return resource_manager_; |
| + return *resource_manager_; |
| } |
| void CompositorImpl::SetRootLayer(scoped_refptr<cc::Layer> root_layer) { |
| @@ -440,8 +443,6 @@ void CompositorImpl::SetSurface(jobject surface) { |
| void CompositorImpl::CreateLayerTreeHost() { |
| DCHECK(!host_); |
| DCHECK(!WillCompositeThisFrame()); |
| - needs_composite_ = false; |
| - pending_swapbuffers_ = 0; |
| cc::LayerTreeSettings settings; |
| settings.renderer_settings.refresh_rate = 60.0; |
| settings.renderer_settings.allow_antialiasing = false; |
| @@ -469,8 +470,7 @@ void CompositorImpl::CreateLayerTreeHost() { |
| params.settings = &settings; |
| host_ = cc::LayerTreeHost::CreateSingleThreaded(this, ¶ms); |
| host_->SetRootLayer(root_layer_); |
| - |
| - host_->SetVisible(true); |
| + host_->SetVisible(false); |
| host_->SetLayerTreeHostClientReady(); |
| host_->SetViewportSize(size_); |
| host_->set_has_transparent_background(has_transparent_background_); |
| @@ -500,8 +500,11 @@ void CompositorImpl::SetVisible(bool visible) { |
| } |
| if (WillComposite()) |
| CancelComposite(); |
| - ui_resource_provider_.SetLayerTreeHost(NULL); |
| - host_.reset(); |
| + host_->SetVisible(false); |
| + host_->ReleaseOutputSurface(); |
| + pending_swapbuffers_ = 0; |
|
danakj
2015/09/28 22:45:43
I don't really know what these are about, but thes
no sievers
2015/09/30 02:32:40
We just have to make sure the accounting doesn't b
|
| + needs_composite_ = false; |
| + ui_resource_provider_->OnUIResourcesEvicted(); |
| establish_gpu_channel_timeout_.Stop(); |
| output_surface_request_pending_ = false; |
| display_client_.reset(); |
| @@ -509,9 +512,9 @@ void CompositorImpl::SetVisible(bool visible) { |
| current_composite_task_->Cancel(); |
| current_composite_task_.reset(); |
| } |
| - } else if (!host_) { |
| - CreateLayerTreeHost(); |
| - ui_resource_provider_.SetLayerTreeHost(host_.get()); |
| + } else { |
| + host_->SetVisible(true); |
| + SetNeedsComposite(); |
| } |
| } |
| @@ -540,7 +543,7 @@ void CompositorImpl::SetHasTransparentBackground(bool flag) { |
| } |
| void CompositorImpl::SetNeedsComposite() { |
| - if (!host_.get()) |
| + if (!host_->visible()) |
| return; |
| DCHECK(!needs_composite_ || WillComposite()); |
| @@ -686,7 +689,7 @@ void CompositorImpl::CreateOutputSurface() { |
| void CompositorImpl::PopulateGpuCapabilities( |
| gpu::Capabilities gpu_capabilities) { |
| - ui_resource_provider_.SetSupportsETC1NonPowerOfTwo( |
| + ui_resource_provider_->SetSupportsETC1NonPowerOfTwo( |
| gpu_capabilities.texture_format_etc1_npot); |
| } |
| @@ -699,10 +702,10 @@ void CompositorImpl::RemoveObserver(VSyncObserver* observer) { |
| } |
| void CompositorImpl::ScheduleComposite() { |
| - DCHECK(!needs_composite_ || WillComposite()); |
| - if (ignore_schedule_composite_) |
| + if (ignore_schedule_composite_ || !host_->visible()) |
| return; |
| + DCHECK_IMPLIES(needs_composite_, WillComposite()); |
| needs_composite_ = true; |
| // We currently expect layer tree invalidations at most once per frame |
| // during normal operation and therefore try to composite immediately |
| @@ -711,7 +714,7 @@ void CompositorImpl::ScheduleComposite() { |
| } |
| void CompositorImpl::ScheduleAnimation() { |
| - DCHECK(!needs_composite_ || WillComposite()); |
| + DCHECK_IMPLIES(needs_composite_, WillComposite()); |
| needs_animate_ = true; |
| if (needs_composite_) |
| @@ -785,7 +788,7 @@ void CompositorImpl::OnVSync(base::TimeTicks frame_time, |
| void CompositorImpl::SetNeedsAnimate() { |
| needs_animate_ = true; |
| - if (!host_) |
| + if (!host_->visible()) |
| return; |
| host_->SetNeedsAnimate(); |