| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ui/android/delegated_frame_host_android.h" | 5 #include "ui/android/delegated_frame_host_android.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/logging.h" | 8 #include "base/logging.h" |
| 9 #include "cc/layers/solid_color_layer.h" | 9 #include "cc/layers/solid_color_layer.h" |
| 10 #include "cc/layers/surface_layer.h" | 10 #include "cc/layers/surface_layer.h" |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 66 readback_layer->RemoveFromParent(); | 66 readback_layer->RemoveFromParent(); |
| 67 result_callback.Run(std::move(copy_output_result)); | 67 result_callback.Run(std::move(copy_output_result)); |
| 68 } | 68 } |
| 69 | 69 |
| 70 } // namespace | 70 } // namespace |
| 71 | 71 |
| 72 DelegatedFrameHostAndroid::DelegatedFrameHostAndroid( | 72 DelegatedFrameHostAndroid::DelegatedFrameHostAndroid( |
| 73 ui::ViewAndroid* view, | 73 ui::ViewAndroid* view, |
| 74 SkColor background_color, | 74 SkColor background_color, |
| 75 ReturnResourcesCallback return_resources_callback) | 75 ReturnResourcesCallback return_resources_callback) |
| 76 : view_(view), | 76 : frame_sink_id_( |
| 77 ui::ContextProviderFactory::GetInstance()->AllocateFrameSinkId()), |
| 78 view_(view), |
| 77 return_resources_callback_(return_resources_callback), | 79 return_resources_callback_(return_resources_callback), |
| 78 background_layer_(cc::SolidColorLayer::Create()) { | 80 background_layer_(cc::SolidColorLayer::Create()) { |
| 79 DCHECK(view_); | 81 DCHECK(view_); |
| 80 DCHECK(!return_resources_callback_.is_null()); | 82 DCHECK(!return_resources_callback_.is_null()); |
| 81 | 83 |
| 82 surface_manager_ = | 84 surface_manager_ = |
| 83 ui::ContextProviderFactory::GetInstance()->GetSurfaceManager(); | 85 ui::ContextProviderFactory::GetInstance()->GetSurfaceManager(); |
| 84 surface_id_allocator_.reset(new cc::SurfaceIdAllocator( | 86 surface_id_allocator_.reset(new cc::SurfaceIdAllocator(frame_sink_id_)); |
| 85 ui::ContextProviderFactory::GetInstance()->AllocateFrameSinkId())); | 87 surface_manager_->RegisterFrameSinkId(frame_sink_id_); |
| 86 surface_manager_->RegisterFrameSinkId(surface_id_allocator_->frame_sink_id()); | |
| 87 | 88 |
| 88 background_layer_->SetBackgroundColor(background_color); | 89 background_layer_->SetBackgroundColor(background_color); |
| 89 view_->GetLayer()->AddChild(background_layer_); | 90 view_->GetLayer()->AddChild(background_layer_); |
| 90 UpdateBackgroundLayer(); | 91 UpdateBackgroundLayer(); |
| 91 } | 92 } |
| 92 | 93 |
| 93 DelegatedFrameHostAndroid::~DelegatedFrameHostAndroid() { | 94 DelegatedFrameHostAndroid::~DelegatedFrameHostAndroid() { |
| 94 DestroyDelegatedContent(); | 95 DestroyDelegatedContent(); |
| 95 surface_factory_.reset(); | 96 surface_factory_.reset(); |
| 96 UnregisterFrameSinkHierarchy(); | 97 UnregisterFrameSinkHierarchy(); |
| 97 surface_manager_->InvalidateFrameSinkId( | 98 surface_manager_->InvalidateFrameSinkId(frame_sink_id_); |
| 98 surface_id_allocator_->frame_sink_id()); | |
| 99 background_layer_->RemoveFromParent(); | 99 background_layer_->RemoveFromParent(); |
| 100 } | 100 } |
| 101 | 101 |
| 102 DelegatedFrameHostAndroid::FrameData::FrameData() = default; | 102 DelegatedFrameHostAndroid::FrameData::FrameData() = default; |
| 103 | 103 |
| 104 DelegatedFrameHostAndroid::FrameData::~FrameData() = default; | 104 DelegatedFrameHostAndroid::FrameData::~FrameData() = default; |
| 105 | 105 |
| 106 void DelegatedFrameHostAndroid::SubmitCompositorFrame( | 106 void DelegatedFrameHostAndroid::SubmitCompositorFrame( |
| 107 cc::CompositorFrame frame, | 107 cc::CompositorFrame frame, |
| 108 cc::SurfaceFactory::DrawCallback draw_callback) { | 108 cc::SurfaceFactory::DrawCallback draw_callback) { |
| 109 if (!surface_factory_) { | 109 if (!surface_factory_) { |
| 110 surface_factory_ = | 110 surface_factory_ = base::WrapUnique( |
| 111 base::WrapUnique(new cc::SurfaceFactory(surface_manager_, this)); | 111 new cc::SurfaceFactory(frame_sink_id_, surface_manager_, this)); |
| 112 } | 112 } |
| 113 | 113 |
| 114 cc::RenderPass* root_pass = | 114 cc::RenderPass* root_pass = |
| 115 frame.delegated_frame_data->render_pass_list.back().get(); | 115 frame.delegated_frame_data->render_pass_list.back().get(); |
| 116 gfx::Size surface_size = root_pass->output_rect.size(); | 116 gfx::Size surface_size = root_pass->output_rect.size(); |
| 117 | 117 |
| 118 if (!current_frame_ || surface_size != current_frame_->surface_size || | 118 if (!current_frame_ || surface_size != current_frame_->surface_size || |
| 119 current_frame_->top_controls_height != | 119 current_frame_->top_controls_height != |
| 120 frame.metadata.top_controls_height || | 120 frame.metadata.top_controls_height || |
| 121 current_frame_->top_controls_shown_ratio != | 121 current_frame_->top_controls_shown_ratio != |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 153 !current_frame_->has_transparent_background); | 153 !current_frame_->has_transparent_background); |
| 154 view_->GetLayer()->AddChild(content_layer_); | 154 view_->GetLayer()->AddChild(content_layer_); |
| 155 UpdateBackgroundLayer(); | 155 UpdateBackgroundLayer(); |
| 156 } | 156 } |
| 157 | 157 |
| 158 surface_factory_->SubmitCompositorFrame(current_frame_->surface_id, | 158 surface_factory_->SubmitCompositorFrame(current_frame_->surface_id, |
| 159 std::move(frame), draw_callback); | 159 std::move(frame), draw_callback); |
| 160 } | 160 } |
| 161 | 161 |
| 162 cc::FrameSinkId DelegatedFrameHostAndroid::GetFrameSinkId() const { | 162 cc::FrameSinkId DelegatedFrameHostAndroid::GetFrameSinkId() const { |
| 163 return surface_id_allocator_->frame_sink_id(); | 163 return frame_sink_id_; |
| 164 } | 164 } |
| 165 | 165 |
| 166 void DelegatedFrameHostAndroid::RequestCopyOfSurface( | 166 void DelegatedFrameHostAndroid::RequestCopyOfSurface( |
| 167 WindowAndroidCompositor* compositor, | 167 WindowAndroidCompositor* compositor, |
| 168 const gfx::Rect& src_subrect_in_pixel, | 168 const gfx::Rect& src_subrect_in_pixel, |
| 169 cc::CopyOutputRequest::CopyOutputRequestCallback result_callback) { | 169 cc::CopyOutputRequest::CopyOutputRequestCallback result_callback) { |
| 170 DCHECK(current_frame_); | 170 DCHECK(current_frame_); |
| 171 DCHECK(!result_callback.is_null()); | 171 DCHECK(!result_callback.is_null()); |
| 172 | 172 |
| 173 scoped_refptr<cc::Layer> readback_layer = | 173 scoped_refptr<cc::Layer> readback_layer = |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 220 background_layer_->SetBounds(gfx::ConvertSizeToPixel( | 220 background_layer_->SetBounds(gfx::ConvertSizeToPixel( |
| 221 gfx::DeviceDisplayInfo().GetDIPScale(), container_size_in_dip_)); | 221 gfx::DeviceDisplayInfo().GetDIPScale(), container_size_in_dip_)); |
| 222 UpdateBackgroundLayer(); | 222 UpdateBackgroundLayer(); |
| 223 } | 223 } |
| 224 | 224 |
| 225 void DelegatedFrameHostAndroid::RegisterFrameSinkHierarchy( | 225 void DelegatedFrameHostAndroid::RegisterFrameSinkHierarchy( |
| 226 const cc::FrameSinkId& parent_id) { | 226 const cc::FrameSinkId& parent_id) { |
| 227 if (!registered_parent_frame_sink_id_.is_null()) | 227 if (!registered_parent_frame_sink_id_.is_null()) |
| 228 UnregisterFrameSinkHierarchy(); | 228 UnregisterFrameSinkHierarchy(); |
| 229 registered_parent_frame_sink_id_ = parent_id; | 229 registered_parent_frame_sink_id_ = parent_id; |
| 230 surface_manager_->RegisterSurfaceFactoryClient( | 230 surface_manager_->RegisterSurfaceFactoryClient(frame_sink_id_, this); |
| 231 surface_id_allocator_->frame_sink_id(), this); | 231 surface_manager_->RegisterFrameSinkHierarchy(parent_id, frame_sink_id_); |
| 232 surface_manager_->RegisterFrameSinkHierarchy( | |
| 233 parent_id, surface_id_allocator_->frame_sink_id()); | |
| 234 } | 232 } |
| 235 | 233 |
| 236 void DelegatedFrameHostAndroid::UnregisterFrameSinkHierarchy() { | 234 void DelegatedFrameHostAndroid::UnregisterFrameSinkHierarchy() { |
| 237 if (registered_parent_frame_sink_id_.is_null()) | 235 if (registered_parent_frame_sink_id_.is_null()) |
| 238 return; | 236 return; |
| 239 surface_manager_->UnregisterSurfaceFactoryClient( | 237 surface_manager_->UnregisterSurfaceFactoryClient(frame_sink_id_); |
| 240 surface_id_allocator_->frame_sink_id()); | |
| 241 surface_manager_->UnregisterFrameSinkHierarchy( | 238 surface_manager_->UnregisterFrameSinkHierarchy( |
| 242 registered_parent_frame_sink_id_, surface_id_allocator_->frame_sink_id()); | 239 registered_parent_frame_sink_id_, frame_sink_id_); |
| 243 registered_parent_frame_sink_id_ = cc::FrameSinkId(); | 240 registered_parent_frame_sink_id_ = cc::FrameSinkId(); |
| 244 } | 241 } |
| 245 | 242 |
| 246 void DelegatedFrameHostAndroid::ReturnResources( | 243 void DelegatedFrameHostAndroid::ReturnResources( |
| 247 const cc::ReturnedResourceArray& resources) { | 244 const cc::ReturnedResourceArray& resources) { |
| 248 return_resources_callback_.Run(resources); | 245 return_resources_callback_.Run(resources); |
| 249 } | 246 } |
| 250 | 247 |
| 251 void DelegatedFrameHostAndroid::SetBeginFrameSource( | 248 void DelegatedFrameHostAndroid::SetBeginFrameSource( |
| 252 cc::BeginFrameSource* begin_frame_source) { | 249 cc::BeginFrameSource* begin_frame_source) { |
| (...skipping 16 matching lines...) Expand all Loading... |
| 269 content_size_in_dip.width() < container_size_in_dip_.width() || | 266 content_size_in_dip.width() < container_size_in_dip_.width() || |
| 270 content_size_in_dip.height() < container_size_in_dip_.height(); | 267 content_size_in_dip.height() < container_size_in_dip_.height(); |
| 271 } else { | 268 } else { |
| 272 background_is_drawable = true; | 269 background_is_drawable = true; |
| 273 } | 270 } |
| 274 | 271 |
| 275 background_layer_->SetIsDrawable(background_is_drawable); | 272 background_layer_->SetIsDrawable(background_is_drawable); |
| 276 } | 273 } |
| 277 | 274 |
| 278 } // namespace ui | 275 } // namespace ui |
| OLD | NEW |