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

Side by Side Diff: ui/android/delegated_frame_host_android.cc

Issue 2707403004: Unify background color gutters. (Closed)
Patch Set: Rebase Created 3 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 unified diff | Download patch
« no previous file with comments | « ui/android/delegated_frame_host_android.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "base/memory/ptr_util.h" 9 #include "base/memory/ptr_util.h"
10 #include "cc/layers/solid_color_layer.h" 10 #include "cc/layers/solid_color_layer.h"
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
46 cc::CopyOutputRequest::CopyOutputRequestCallback result_callback, 46 cc::CopyOutputRequest::CopyOutputRequestCallback result_callback,
47 std::unique_ptr<cc::CopyOutputResult> copy_output_result) { 47 std::unique_ptr<cc::CopyOutputResult> copy_output_result) {
48 readback_layer->RemoveFromParent(); 48 readback_layer->RemoveFromParent();
49 result_callback.Run(std::move(copy_output_result)); 49 result_callback.Run(std::move(copy_output_result));
50 } 50 }
51 51
52 } // namespace 52 } // namespace
53 53
54 DelegatedFrameHostAndroid::DelegatedFrameHostAndroid( 54 DelegatedFrameHostAndroid::DelegatedFrameHostAndroid(
55 ui::ViewAndroid* view, 55 ui::ViewAndroid* view,
56 SkColor background_color,
57 Client* client, 56 Client* client,
58 const cc::FrameSinkId& frame_sink_id) 57 const cc::FrameSinkId& frame_sink_id)
59 : frame_sink_id_(frame_sink_id), 58 : frame_sink_id_(frame_sink_id), view_(view), client_(client) {
60 view_(view),
61 client_(client),
62 background_layer_(cc::SolidColorLayer::Create()) {
63 DCHECK(view_); 59 DCHECK(view_);
64 DCHECK(client_); 60 DCHECK(client_);
65 61
66 surface_manager_ = 62 surface_manager_ =
67 ui::ContextProviderFactory::GetInstance()->GetSurfaceManager(); 63 ui::ContextProviderFactory::GetInstance()->GetSurfaceManager();
68 local_surface_id_allocator_.reset(new cc::LocalSurfaceIdAllocator()); 64 local_surface_id_allocator_.reset(new cc::LocalSurfaceIdAllocator());
69 surface_manager_->RegisterFrameSinkId(frame_sink_id_); 65 surface_manager_->RegisterFrameSinkId(frame_sink_id_);
70 surface_factory_ = base::WrapUnique( 66 surface_factory_ = base::WrapUnique(
71 new cc::SurfaceFactory(frame_sink_id_, surface_manager_, this)); 67 new cc::SurfaceFactory(frame_sink_id_, surface_manager_, this));
72
73 background_layer_->SetBackgroundColor(background_color);
74 view_->GetLayer()->AddChild(background_layer_);
75 UpdateBackgroundLayer();
76 } 68 }
77 69
78 DelegatedFrameHostAndroid::~DelegatedFrameHostAndroid() { 70 DelegatedFrameHostAndroid::~DelegatedFrameHostAndroid() {
79 DestroyDelegatedContent(); 71 DestroyDelegatedContent();
80 surface_factory_.reset(); 72 surface_factory_.reset();
81 DetachFromCompositor(); 73 DetachFromCompositor();
82 surface_manager_->InvalidateFrameSinkId(frame_sink_id_); 74 surface_manager_->InvalidateFrameSinkId(frame_sink_id_);
83 background_layer_->RemoveFromParent();
84 } 75 }
85 76
86 DelegatedFrameHostAndroid::FrameData::FrameData() = default; 77 DelegatedFrameHostAndroid::FrameData::FrameData() = default;
87 78
88 DelegatedFrameHostAndroid::FrameData::~FrameData() = default; 79 DelegatedFrameHostAndroid::FrameData::~FrameData() = default;
89 80
90 void DelegatedFrameHostAndroid::SubmitCompositorFrame( 81 void DelegatedFrameHostAndroid::SubmitCompositorFrame(
91 cc::CompositorFrame frame, 82 cc::CompositorFrame frame,
92 cc::SurfaceFactory::DrawCallback draw_callback) { 83 cc::SurfaceFactory::DrawCallback draw_callback) {
93 cc::RenderPass* root_pass = frame.render_pass_list.back().get(); 84 cc::RenderPass* root_pass = frame.render_pass_list.back().get();
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
125 current_frame_->viewport_selection = frame.metadata.selection; 116 current_frame_->viewport_selection = frame.metadata.selection;
126 surface_factory_->SubmitCompositorFrame(current_frame_->local_surface_id, 117 surface_factory_->SubmitCompositorFrame(current_frame_->local_surface_id,
127 std::move(frame), draw_callback); 118 std::move(frame), draw_callback);
128 119
129 content_layer_ = CreateSurfaceLayer( 120 content_layer_ = CreateSurfaceLayer(
130 surface_manager_, cc::SurfaceId(surface_factory_->frame_sink_id(), 121 surface_manager_, cc::SurfaceId(surface_factory_->frame_sink_id(),
131 current_frame_->local_surface_id), 122 current_frame_->local_surface_id),
132 current_frame_->surface_size, 123 current_frame_->surface_size,
133 !current_frame_->has_transparent_background); 124 !current_frame_->has_transparent_background);
134 view_->GetLayer()->AddChild(content_layer_); 125 view_->GetLayer()->AddChild(content_layer_);
135 UpdateBackgroundLayer();
136 } else { 126 } else {
137 surface_factory_->SubmitCompositorFrame(current_frame_->local_surface_id, 127 surface_factory_->SubmitCompositorFrame(current_frame_->local_surface_id,
138 std::move(frame), draw_callback); 128 std::move(frame), draw_callback);
139 } 129 }
140 } 130 }
141 131
142 cc::FrameSinkId DelegatedFrameHostAndroid::GetFrameSinkId() const { 132 cc::FrameSinkId DelegatedFrameHostAndroid::GetFrameSinkId() const {
143 return frame_sink_id_; 133 return frame_sink_id_;
144 } 134 }
145 135
(...skipping 24 matching lines...) Expand all
170 void DelegatedFrameHostAndroid::DestroyDelegatedContent() { 160 void DelegatedFrameHostAndroid::DestroyDelegatedContent() {
171 if (!current_frame_) 161 if (!current_frame_)
172 return; 162 return;
173 163
174 DCHECK(content_layer_); 164 DCHECK(content_layer_);
175 165
176 content_layer_->RemoveFromParent(); 166 content_layer_->RemoveFromParent();
177 content_layer_ = nullptr; 167 content_layer_ = nullptr;
178 surface_factory_->EvictSurface(); 168 surface_factory_->EvictSurface();
179 current_frame_.reset(); 169 current_frame_.reset();
180
181 UpdateBackgroundLayer();
182 } 170 }
183 171
184 bool DelegatedFrameHostAndroid::HasDelegatedContent() const { 172 bool DelegatedFrameHostAndroid::HasDelegatedContent() const {
185 return current_frame_.get() != nullptr; 173 return current_frame_.get() != nullptr;
186 } 174 }
187 175
188 void DelegatedFrameHostAndroid::CompositorFrameSinkChanged() { 176 void DelegatedFrameHostAndroid::CompositorFrameSinkChanged() {
189 DestroyDelegatedContent(); 177 DestroyDelegatedContent();
190 surface_factory_->Reset(); 178 surface_factory_->Reset();
191 } 179 }
192 180
193 void DelegatedFrameHostAndroid::UpdateBackgroundColor(SkColor color) {
194 background_layer_->SetBackgroundColor(color);
195 }
196
197 void DelegatedFrameHostAndroid::UpdateContainerSizeinDIP(
198 const gfx::Size& size_in_dip) {
199 container_size_in_dip_ = size_in_dip;
200 float device_scale_factor = display::Screen::GetScreen()
201 ->GetDisplayNearestWindow(view_).device_scale_factor();
202 background_layer_->SetBounds(
203 gfx::ConvertSizeToPixel(device_scale_factor, container_size_in_dip_));
204 UpdateBackgroundLayer();
205 }
206
207 void DelegatedFrameHostAndroid::AttachToCompositor( 181 void DelegatedFrameHostAndroid::AttachToCompositor(
208 WindowAndroidCompositor* compositor) { 182 WindowAndroidCompositor* compositor) {
209 if (registered_parent_compositor_) 183 if (registered_parent_compositor_)
210 DetachFromCompositor(); 184 DetachFromCompositor();
211 surface_manager_->RegisterSurfaceFactoryClient(frame_sink_id_, this); 185 surface_manager_->RegisterSurfaceFactoryClient(frame_sink_id_, this);
212 compositor->AddChildFrameSink(frame_sink_id_); 186 compositor->AddChildFrameSink(frame_sink_id_);
213 registered_parent_compositor_ = compositor; 187 registered_parent_compositor_ = compositor;
214 } 188 }
215 189
216 void DelegatedFrameHostAndroid::DetachFromCompositor() { 190 void DelegatedFrameHostAndroid::DetachFromCompositor() {
217 if (!registered_parent_compositor_) 191 if (!registered_parent_compositor_)
218 return; 192 return;
219 surface_manager_->UnregisterSurfaceFactoryClient(frame_sink_id_); 193 surface_manager_->UnregisterSurfaceFactoryClient(frame_sink_id_);
220 registered_parent_compositor_->RemoveChildFrameSink(frame_sink_id_); 194 registered_parent_compositor_->RemoveChildFrameSink(frame_sink_id_);
221 registered_parent_compositor_ = nullptr; 195 registered_parent_compositor_ = nullptr;
222 } 196 }
223 197
224 void DelegatedFrameHostAndroid::ReturnResources( 198 void DelegatedFrameHostAndroid::ReturnResources(
225 const cc::ReturnedResourceArray& resources) { 199 const cc::ReturnedResourceArray& resources) {
226 client_->ReturnResources(resources); 200 client_->ReturnResources(resources);
227 } 201 }
228 202
229 void DelegatedFrameHostAndroid::SetBeginFrameSource( 203 void DelegatedFrameHostAndroid::SetBeginFrameSource(
230 cc::BeginFrameSource* begin_frame_source) { 204 cc::BeginFrameSource* begin_frame_source) {
231 client_->SetBeginFrameSource(begin_frame_source); 205 client_->SetBeginFrameSource(begin_frame_source);
232 } 206 }
233 207
234 void DelegatedFrameHostAndroid::UpdateBackgroundLayer() {
235 // The background layer draws in 2 cases:
236 // 1) When we don't have any content from the renderer.
237 // 2) When the bounds of the content received from the renderer does not match
238 // the desired content bounds.
239 bool background_is_drawable = false;
240
241 if (current_frame_) {
242 float device_scale_factor = display::Screen::GetScreen()
243 ->GetDisplayNearestWindow(view_).device_scale_factor();
244 gfx::Size content_size_in_dip = gfx::ConvertSizeToDIP(
245 device_scale_factor, current_frame_->surface_size);
246 background_is_drawable =
247 content_size_in_dip.width() < container_size_in_dip_.width() ||
248 content_size_in_dip.height() < container_size_in_dip_.height();
249 } else {
250 background_is_drawable = true;
251 }
252
253 background_layer_->SetIsDrawable(background_is_drawable);
254 }
255
256 } // namespace ui 208 } // namespace ui
OLDNEW
« no previous file with comments | « ui/android/delegated_frame_host_android.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698