OLD | NEW |
1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 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 "cc/trees/layer_tree_host_impl.h" | 5 #include "cc/trees/layer_tree_host_impl.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <limits> | 8 #include <limits> |
9 | 9 |
10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
243 paint_time_counter_(PaintTimeCounter::Create()), | 243 paint_time_counter_(PaintTimeCounter::Create()), |
244 memory_history_(MemoryHistory::Create()), | 244 memory_history_(MemoryHistory::Create()), |
245 debug_rect_history_(DebugRectHistory::Create()), | 245 debug_rect_history_(DebugRectHistory::Create()), |
246 texture_mailbox_deleter_(new TextureMailboxDeleter( | 246 texture_mailbox_deleter_(new TextureMailboxDeleter( |
247 proxy_->HasImplThread() ? proxy_->ImplThreadTaskRunner() | 247 proxy_->HasImplThread() ? proxy_->ImplThreadTaskRunner() |
248 : proxy_->MainThreadTaskRunner())), | 248 : proxy_->MainThreadTaskRunner())), |
249 max_memory_needed_bytes_(0), | 249 max_memory_needed_bytes_(0), |
250 zero_budget_(false), | 250 zero_budget_(false), |
251 device_scale_factor_(1.f), | 251 device_scale_factor_(1.f), |
252 overhang_ui_resource_id_(0), | 252 overhang_ui_resource_id_(0), |
253 overdraw_bottom_height_(0.f), | 253 top_controls_layout_height_(0.f), |
254 resourceless_software_draw_(false), | 254 resourceless_software_draw_(false), |
255 begin_impl_frame_interval_(BeginFrameArgs::DefaultInterval()), | 255 begin_impl_frame_interval_(BeginFrameArgs::DefaultInterval()), |
256 animation_registrar_(AnimationRegistrar::Create()), | 256 animation_registrar_(AnimationRegistrar::Create()), |
257 rendering_stats_instrumentation_(rendering_stats_instrumentation), | 257 rendering_stats_instrumentation_(rendering_stats_instrumentation), |
258 micro_benchmark_controller_(this), | 258 micro_benchmark_controller_(this), |
259 need_to_update_visible_tiles_before_draw_(false), | 259 need_to_update_visible_tiles_before_draw_(false), |
260 have_valid_output_surface_(false), | 260 have_valid_output_surface_(false), |
261 shared_bitmap_manager_(manager), | 261 shared_bitmap_manager_(manager), |
262 id_(id), | 262 id_(id), |
263 transfer_buffer_memory_limit_(0u) { | 263 transfer_buffer_memory_limit_(0u) { |
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
428 void LayerTreeHostImpl::StartPageScaleAnimation( | 428 void LayerTreeHostImpl::StartPageScaleAnimation( |
429 const gfx::Vector2d& target_offset, | 429 const gfx::Vector2d& target_offset, |
430 bool anchor_point, | 430 bool anchor_point, |
431 float page_scale, | 431 float page_scale, |
432 base::TimeDelta duration) { | 432 base::TimeDelta duration) { |
433 if (!InnerViewportScrollLayer()) | 433 if (!InnerViewportScrollLayer()) |
434 return; | 434 return; |
435 | 435 |
436 gfx::Vector2dF scroll_total = active_tree_->TotalScrollOffset(); | 436 gfx::Vector2dF scroll_total = active_tree_->TotalScrollOffset(); |
437 gfx::SizeF scaled_scrollable_size = active_tree_->ScrollableSize(); | 437 gfx::SizeF scaled_scrollable_size = active_tree_->ScrollableSize(); |
438 gfx::SizeF viewport_size = UnscaledScrollableViewportSize(); | 438 gfx::SizeF viewport_size = |
| 439 active_tree_->InnerViewportContainerLayer()->bounds(); |
439 | 440 |
440 // Easing constants experimentally determined. | 441 // Easing constants experimentally determined. |
441 scoped_ptr<TimingFunction> timing_function = | 442 scoped_ptr<TimingFunction> timing_function = |
442 CubicBezierTimingFunction::Create(.8, 0, .3, .9).PassAs<TimingFunction>(); | 443 CubicBezierTimingFunction::Create(.8, 0, .3, .9).PassAs<TimingFunction>(); |
443 | 444 |
444 page_scale_animation_ = | 445 page_scale_animation_ = |
445 PageScaleAnimation::Create(scroll_total, | 446 PageScaleAnimation::Create(scroll_total, |
446 active_tree_->total_page_scale_factor(), | 447 active_tree_->total_page_scale_factor(), |
447 viewport_size, | 448 viewport_size, |
448 scaled_scrollable_size, | 449 scaled_scrollable_size, |
(...skipping 1013 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1462 metadata.page_scale_factor = active_tree_->total_page_scale_factor(); | 1463 metadata.page_scale_factor = active_tree_->total_page_scale_factor(); |
1463 metadata.scrollable_viewport_size = active_tree_->ScrollableViewportSize(); | 1464 metadata.scrollable_viewport_size = active_tree_->ScrollableViewportSize(); |
1464 metadata.root_layer_size = active_tree_->ScrollableSize(); | 1465 metadata.root_layer_size = active_tree_->ScrollableSize(); |
1465 metadata.min_page_scale_factor = active_tree_->min_page_scale_factor(); | 1466 metadata.min_page_scale_factor = active_tree_->min_page_scale_factor(); |
1466 metadata.max_page_scale_factor = active_tree_->max_page_scale_factor(); | 1467 metadata.max_page_scale_factor = active_tree_->max_page_scale_factor(); |
1467 if (top_controls_manager_) { | 1468 if (top_controls_manager_) { |
1468 metadata.location_bar_offset = | 1469 metadata.location_bar_offset = |
1469 gfx::Vector2dF(0.f, top_controls_manager_->controls_top_offset()); | 1470 gfx::Vector2dF(0.f, top_controls_manager_->controls_top_offset()); |
1470 metadata.location_bar_content_translation = | 1471 metadata.location_bar_content_translation = |
1471 gfx::Vector2dF(0.f, top_controls_manager_->content_top_offset()); | 1472 gfx::Vector2dF(0.f, top_controls_manager_->content_top_offset()); |
1472 metadata.overdraw_bottom_height = overdraw_bottom_height_; | |
1473 } | 1473 } |
1474 | 1474 |
1475 active_tree_->GetViewportSelection(&metadata.selection_start, | 1475 active_tree_->GetViewportSelection(&metadata.selection_start, |
1476 &metadata.selection_end); | 1476 &metadata.selection_end); |
1477 | 1477 |
1478 if (!InnerViewportScrollLayer()) | 1478 if (!InnerViewportScrollLayer()) |
1479 return metadata; | 1479 return metadata; |
1480 | 1480 |
1481 metadata.root_scroll_offset = active_tree_->TotalScrollOffset(); | 1481 metadata.root_scroll_offset = active_tree_->TotalScrollOffset(); |
1482 | 1482 |
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1675 } | 1675 } |
1676 | 1676 |
1677 void LayerTreeHostImpl::WillBeginImplFrame(const BeginFrameArgs& args) { | 1677 void LayerTreeHostImpl::WillBeginImplFrame(const BeginFrameArgs& args) { |
1678 // Sample the frame time now. This time will be used for updating animations | 1678 // Sample the frame time now. This time will be used for updating animations |
1679 // when we draw. | 1679 // when we draw. |
1680 UpdateCurrentBeginFrameArgs(args); | 1680 UpdateCurrentBeginFrameArgs(args); |
1681 // Cache the begin impl frame interval | 1681 // Cache the begin impl frame interval |
1682 begin_impl_frame_interval_ = args.interval; | 1682 begin_impl_frame_interval_ = args.interval; |
1683 } | 1683 } |
1684 | 1684 |
1685 gfx::SizeF LayerTreeHostImpl::ComputeInnerViewportContainerSize() const { | |
1686 gfx::SizeF dip_size = | |
1687 gfx::ScaleSize(device_viewport_size_, 1.f / device_scale_factor()); | |
1688 | |
1689 float top_offset = | |
1690 top_controls_manager_ ? top_controls_manager_->content_top_offset() : 0.f; | |
1691 | |
1692 return gfx::SizeF(dip_size.width(), | |
1693 dip_size.height() - top_offset - overdraw_bottom_height_); | |
1694 } | |
1695 | |
1696 void LayerTreeHostImpl::UpdateInnerViewportContainerSize() { | 1685 void LayerTreeHostImpl::UpdateInnerViewportContainerSize() { |
1697 LayerImpl* container_layer = active_tree_->InnerViewportContainerLayer(); | 1686 LayerImpl* container_layer = active_tree_->InnerViewportContainerLayer(); |
1698 if (!container_layer) | 1687 if (!container_layer) |
1699 return; | 1688 return; |
1700 | 1689 |
1701 // We pass the value returned from UnscaledScrollableViewportSize() here as | 1690 if (top_controls_manager_) |
1702 // it accounts for scrollbar dimensions when | 1691 container_layer->SetBoundsDelta( |
1703 // container_layer->masks_to_bounds() is set. | 1692 gfx::Vector2dF(0, |
1704 container_layer->SetTemporaryImplBounds(UnscaledScrollableViewportSize()); | 1693 top_controls_layout_height_ - |
1705 } | 1694 top_controls_manager_->content_top_offset())); |
1706 | |
1707 gfx::SizeF LayerTreeHostImpl::UnscaledScrollableViewportSize() const { | |
1708 // Use the root container layer bounds if it clips to them, otherwise, the | |
1709 // true viewport size should be used. | |
1710 LayerImpl* container_layer = active_tree_->InnerViewportContainerLayer(); | |
1711 if (container_layer && container_layer->masks_to_bounds()) { | |
1712 DCHECK(!top_controls_manager_); | |
1713 DCHECK_EQ(0, overdraw_bottom_height_); | |
1714 return container_layer->bounds(); | |
1715 } | |
1716 | |
1717 return ComputeInnerViewportContainerSize(); | |
1718 } | |
1719 | |
1720 float LayerTreeHostImpl::VerticalAdjust() const { | |
1721 if (!active_tree_->InnerViewportContainerLayer()) | |
1722 return 0; | |
1723 | |
1724 return active_tree_->InnerViewportContainerLayer()->BoundsDelta().y(); | |
1725 } | 1695 } |
1726 | 1696 |
1727 void LayerTreeHostImpl::DidLoseOutputSurface() { | 1697 void LayerTreeHostImpl::DidLoseOutputSurface() { |
1728 if (!have_valid_output_surface_) | 1698 if (!have_valid_output_surface_) |
1729 return; | 1699 return; |
1730 have_valid_output_surface_ = false; | 1700 have_valid_output_surface_ = false; |
1731 if (resource_provider_) | 1701 if (resource_provider_) |
1732 resource_provider_->DidLoseOutputSurface(); | 1702 resource_provider_->DidLoseOutputSurface(); |
1733 // TODO(jamesr): The renderer_ check is needed to make some of the | 1703 // TODO(jamesr): The renderer_ check is needed to make some of the |
1734 // LayerTreeHostContextTest tests pass, but shouldn't be necessary (or | 1704 // LayerTreeHostContextTest tests pass, but shouldn't be necessary (or |
(...skipping 456 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2191 active_tree_->SetViewportSizeInvalid(); | 2161 active_tree_->SetViewportSizeInvalid(); |
2192 | 2162 |
2193 device_viewport_size_ = device_viewport_size; | 2163 device_viewport_size_ = device_viewport_size; |
2194 | 2164 |
2195 UpdateInnerViewportContainerSize(); | 2165 UpdateInnerViewportContainerSize(); |
2196 client_->OnCanDrawStateChanged(CanDraw()); | 2166 client_->OnCanDrawStateChanged(CanDraw()); |
2197 SetFullRootLayerDamage(); | 2167 SetFullRootLayerDamage(); |
2198 active_tree_->set_needs_update_draw_properties(); | 2168 active_tree_->set_needs_update_draw_properties(); |
2199 } | 2169 } |
2200 | 2170 |
2201 void LayerTreeHostImpl::SetOverdrawBottomHeight(float overdraw_bottom_height) { | 2171 void LayerTreeHostImpl::SetTopControlsLayoutHeight( |
2202 if (overdraw_bottom_height == overdraw_bottom_height_) | 2172 float top_controls_layout_height) { |
| 2173 if (top_controls_layout_height_ == top_controls_layout_height) |
2203 return; | 2174 return; |
2204 overdraw_bottom_height_ = overdraw_bottom_height; | 2175 top_controls_layout_height_ = top_controls_layout_height; |
2205 | 2176 |
2206 UpdateInnerViewportContainerSize(); | 2177 UpdateInnerViewportContainerSize(); |
2207 SetFullRootLayerDamage(); | 2178 SetFullRootLayerDamage(); |
2208 } | 2179 } |
2209 | 2180 |
2210 void LayerTreeHostImpl::SetOverhangUIResource( | 2181 void LayerTreeHostImpl::SetOverhangUIResource( |
2211 UIResourceId overhang_ui_resource_id, | 2182 UIResourceId overhang_ui_resource_id, |
2212 const gfx::Size& overhang_ui_resource_size) { | 2183 const gfx::Size& overhang_ui_resource_size) { |
2213 overhang_ui_resource_id_ = overhang_ui_resource_id; | 2184 overhang_ui_resource_id_ = overhang_ui_resource_id; |
2214 overhang_ui_resource_size_ = overhang_ui_resource_size; | 2185 overhang_ui_resource_size_ = overhang_ui_resource_size; |
2215 } | 2186 } |
2216 | 2187 |
2217 void LayerTreeHostImpl::SetDeviceScaleFactor(float device_scale_factor) { | 2188 void LayerTreeHostImpl::SetDeviceScaleFactor(float device_scale_factor) { |
2218 if (device_scale_factor == device_scale_factor_) | 2189 if (device_scale_factor == device_scale_factor_) |
2219 return; | 2190 return; |
2220 device_scale_factor_ = device_scale_factor; | 2191 device_scale_factor_ = device_scale_factor; |
2221 | 2192 |
2222 UpdateInnerViewportContainerSize(); | |
2223 SetFullRootLayerDamage(); | 2193 SetFullRootLayerDamage(); |
2224 } | 2194 } |
2225 | 2195 |
2226 const gfx::Rect LayerTreeHostImpl::ViewportRectForTilePriority() const { | 2196 const gfx::Rect LayerTreeHostImpl::ViewportRectForTilePriority() const { |
2227 if (viewport_rect_for_tile_priority_.IsEmpty()) | 2197 if (viewport_rect_for_tile_priority_.IsEmpty()) |
2228 return DeviceViewport(); | 2198 return DeviceViewport(); |
2229 | 2199 |
2230 return viewport_rect_for_tile_priority_; | 2200 return viewport_rect_for_tile_priority_; |
2231 } | 2201 } |
2232 | 2202 |
(...skipping 1179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3412 } | 3382 } |
3413 | 3383 |
3414 void LayerTreeHostImpl::UnregisterPictureLayerImpl(PictureLayerImpl* layer) { | 3384 void LayerTreeHostImpl::UnregisterPictureLayerImpl(PictureLayerImpl* layer) { |
3415 std::vector<PictureLayerImpl*>::iterator it = | 3385 std::vector<PictureLayerImpl*>::iterator it = |
3416 std::find(picture_layers_.begin(), picture_layers_.end(), layer); | 3386 std::find(picture_layers_.begin(), picture_layers_.end(), layer); |
3417 DCHECK(it != picture_layers_.end()); | 3387 DCHECK(it != picture_layers_.end()); |
3418 picture_layers_.erase(it); | 3388 picture_layers_.erase(it); |
3419 } | 3389 } |
3420 | 3390 |
3421 } // namespace cc | 3391 } // namespace cc |
OLD | NEW |