| 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_impl.h" | 5 #include "cc/trees/layer_tree_impl.h" |
| 6 | 6 |
| 7 #include "base/debug/trace_event.h" | 7 #include "base/debug/trace_event.h" |
| 8 #include "cc/animation/keyframed_animation_curve.h" | 8 #include "cc/animation/keyframed_animation_curve.h" |
| 9 #include "cc/animation/scrollbar_animation_controller.h" | 9 #include "cc/animation/scrollbar_animation_controller.h" |
| 10 #include "cc/debug/traced_value.h" | 10 #include "cc/debug/traced_value.h" |
| 11 #include "cc/layers/heads_up_display_layer_impl.h" | 11 #include "cc/layers/heads_up_display_layer_impl.h" |
| 12 #include "cc/layers/layer.h" | |
| 13 #include "cc/layers/render_surface_impl.h" | 12 #include "cc/layers/render_surface_impl.h" |
| 14 #include "cc/layers/scrollbar_layer_impl_base.h" | 13 #include "cc/layers/scrollbar_layer_impl_base.h" |
| 15 #include "cc/trees/layer_tree_host_common.h" | 14 #include "cc/trees/layer_tree_host_common.h" |
| 16 #include "cc/trees/layer_tree_host_impl.h" | 15 #include "cc/trees/layer_tree_host_impl.h" |
| 17 #include "ui/gfx/size_conversions.h" | 16 #include "ui/gfx/size_conversions.h" |
| 18 #include "ui/gfx/vector2d_conversions.h" | 17 #include "ui/gfx/vector2d_conversions.h" |
| 19 | 18 |
| 20 namespace cc { | 19 namespace cc { |
| 21 | 20 |
| 22 LayerTreeImpl::LayerTreeImpl(LayerTreeHostImpl* layer_tree_host_impl) | 21 LayerTreeImpl::LayerTreeImpl(LayerTreeHostImpl* layer_tree_host_impl) |
| 23 : layer_tree_host_impl_(layer_tree_host_impl), | 22 : layer_tree_host_impl_(layer_tree_host_impl), |
| 24 source_frame_number_(-1), | 23 source_frame_number_(-1), |
| 25 hud_layer_(0), | 24 hud_layer_(0), |
| 26 root_scroll_layer_(NULL), | 25 root_scroll_layer_(NULL), |
| 27 currently_scrolling_layer_(NULL), | 26 currently_scrolling_layer_(NULL), |
| 28 root_layer_scroll_offset_delegate_(NULL), | 27 root_layer_scroll_offset_delegate_(NULL), |
| 29 background_color_(0), | 28 background_color_(0), |
| 30 has_transparent_background_(false), | 29 has_transparent_background_(false), |
| 31 page_scale_layer_(NULL), | |
| 32 inner_viewport_scroll_layer_(NULL), | |
| 33 outer_viewport_scroll_layer_(NULL), | |
| 34 page_scale_factor_(1), | 30 page_scale_factor_(1), |
| 35 page_scale_delta_(1), | 31 page_scale_delta_(1), |
| 36 sent_page_scale_delta_(1), | 32 sent_page_scale_delta_(1), |
| 37 min_page_scale_factor_(0), | 33 min_page_scale_factor_(0), |
| 38 max_page_scale_factor_(0), | 34 max_page_scale_factor_(0), |
| 39 scrolling_layer_id_from_previous_tree_(0), | 35 scrolling_layer_id_from_previous_tree_(0), |
| 40 contents_textures_purged_(false), | 36 contents_textures_purged_(false), |
| 41 viewport_size_invalid_(false), | 37 viewport_size_invalid_(false), |
| 42 needs_update_draw_properties_(true), | 38 needs_update_draw_properties_(true), |
| 43 needs_full_tree_sync_(true) { | 39 needs_full_tree_sync_(true) { |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 112 DCHECK_EQ(ui_resource_request_queue_.size(), 0u); | 108 DCHECK_EQ(ui_resource_request_queue_.size(), 0u); |
| 113 | 109 |
| 114 target_tree->SetLatencyInfo(latency_info_); | 110 target_tree->SetLatencyInfo(latency_info_); |
| 115 latency_info_.Clear(); | 111 latency_info_.Clear(); |
| 116 target_tree->SetPageScaleFactorAndLimits( | 112 target_tree->SetPageScaleFactorAndLimits( |
| 117 page_scale_factor(), min_page_scale_factor(), max_page_scale_factor()); | 113 page_scale_factor(), min_page_scale_factor(), max_page_scale_factor()); |
| 118 target_tree->SetPageScaleDelta( | 114 target_tree->SetPageScaleDelta( |
| 119 target_tree->page_scale_delta() / target_tree->sent_page_scale_delta()); | 115 target_tree->page_scale_delta() / target_tree->sent_page_scale_delta()); |
| 120 target_tree->set_sent_page_scale_delta(1); | 116 target_tree->set_sent_page_scale_delta(1); |
| 121 | 117 |
| 122 if (settings().use_pinch_virtual_viewport) { | |
| 123 target_tree->SetViewportLayersFromIds( | |
| 124 page_scale_layer_->id(), | |
| 125 inner_viewport_scroll_layer_->id(), | |
| 126 outer_viewport_scroll_layer_ ? outer_viewport_scroll_layer_->id() | |
| 127 : Layer::INVALID_ID); | |
| 128 } | |
| 129 // This should match the property synchronization in | 118 // This should match the property synchronization in |
| 130 // LayerTreeHost::finishCommitOnImplThread(). | 119 // LayerTreeHost::finishCommitOnImplThread(). |
| 131 target_tree->set_source_frame_number(source_frame_number()); | 120 target_tree->set_source_frame_number(source_frame_number()); |
| 132 target_tree->set_background_color(background_color()); | 121 target_tree->set_background_color(background_color()); |
| 133 target_tree->set_has_transparent_background(has_transparent_background()); | 122 target_tree->set_has_transparent_background(has_transparent_background()); |
| 134 | 123 |
| 135 if (ContentsTexturesPurged()) | 124 if (ContentsTexturesPurged()) |
| 136 target_tree->SetContentsTexturesPurged(); | 125 target_tree->SetContentsTexturesPurged(); |
| 137 else | 126 else |
| 138 target_tree->ResetContentsTexturesPurged(); | 127 target_tree->ResetContentsTexturesPurged(); |
| (...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 261 | 250 |
| 262 void LayerTreeImpl::ApplyScrollDeltasSinceBeginFrame() { | 251 void LayerTreeImpl::ApplyScrollDeltasSinceBeginFrame() { |
| 263 DCHECK(IsPendingTree()); | 252 DCHECK(IsPendingTree()); |
| 264 if (!root_layer()) | 253 if (!root_layer()) |
| 265 return; | 254 return; |
| 266 | 255 |
| 267 LayerTreeHostCommon::CallFunctionForSubtree( | 256 LayerTreeHostCommon::CallFunctionForSubtree( |
| 268 root_layer(), base::Bind(&ApplyScrollDeltasSinceBeginFrameTo)); | 257 root_layer(), base::Bind(&ApplyScrollDeltasSinceBeginFrameTo)); |
| 269 } | 258 } |
| 270 | 259 |
| 271 void LayerTreeImpl::SetViewportLayersFromIds( | |
| 272 int page_scale_layer_id, | |
| 273 int inner_viewport_scroll_layer_id, | |
| 274 int outer_viewport_scroll_layer_id) { | |
| 275 page_scale_layer_ = LayerById(page_scale_layer_id); | |
| 276 DCHECK(page_scale_layer_); | |
| 277 | |
| 278 inner_viewport_scroll_layer_ = | |
| 279 LayerById(inner_viewport_scroll_layer_id); | |
| 280 DCHECK(inner_viewport_scroll_layer_); | |
| 281 | |
| 282 outer_viewport_scroll_layer_ = | |
| 283 LayerById(outer_viewport_scroll_layer_id); | |
| 284 DCHECK(outer_viewport_scroll_layer_ || | |
| 285 outer_viewport_scroll_layer_id == Layer::INVALID_ID); | |
| 286 } | |
| 287 | |
| 288 void LayerTreeImpl::ClearViewportLayers() { | |
| 289 page_scale_layer_ = NULL; | |
| 290 inner_viewport_scroll_layer_ = NULL; | |
| 291 outer_viewport_scroll_layer_ = NULL; | |
| 292 } | |
| 293 | |
| 294 // TODO(wjmaclean) This needs to go away, and be replaced with a single core | 260 // TODO(wjmaclean) This needs to go away, and be replaced with a single core |
| 295 // of login that works for both scrollbar layer types. This is already planned | 261 // of login that works for both scrollbar layer types. This is already planned |
| 296 // as part of the larger pinch-zoom re-factoring viewport. | 262 // as part of the larger pinch-zoom re-factoring viewport. |
| 297 void LayerTreeImpl::UpdateSolidColorScrollbars() { | 263 void LayerTreeImpl::UpdateSolidColorScrollbars() { |
| 298 DCHECK(settings().solid_color_scrollbars); | 264 DCHECK(settings().solid_color_scrollbars); |
| 299 | 265 |
| 300 LayerImpl* root_scroll = RootScrollLayer(); | 266 LayerImpl* root_scroll = RootScrollLayer(); |
| 301 DCHECK(root_scroll); | 267 DCHECK(root_scroll); |
| 302 DCHECK(IsActiveTree()); | 268 DCHECK(IsActiveTree()); |
| 303 | 269 |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 343 if (!root_layer()) | 309 if (!root_layer()) |
| 344 return; | 310 return; |
| 345 | 311 |
| 346 { | 312 { |
| 347 TRACE_EVENT2("cc", | 313 TRACE_EVENT2("cc", |
| 348 "LayerTreeImpl::UpdateDrawProperties", | 314 "LayerTreeImpl::UpdateDrawProperties", |
| 349 "IsActive", | 315 "IsActive", |
| 350 IsActiveTree(), | 316 IsActiveTree(), |
| 351 "SourceFrameNumber", | 317 "SourceFrameNumber", |
| 352 source_frame_number_); | 318 source_frame_number_); |
| 353 LayerImpl* page_scale_layer = | |
| 354 page_scale_layer_ ? page_scale_layer_ : RootContainerLayer(); | |
| 355 LayerTreeHostCommon::CalcDrawPropsImplInputs inputs( | 319 LayerTreeHostCommon::CalcDrawPropsImplInputs inputs( |
| 356 root_layer(), | 320 root_layer(), |
| 357 DrawViewportSize(), | 321 DrawViewportSize(), |
| 358 layer_tree_host_impl_->DrawTransform(), | 322 layer_tree_host_impl_->DrawTransform(), |
| 359 device_scale_factor(), | 323 device_scale_factor(), |
| 360 total_page_scale_factor(), | 324 total_page_scale_factor(), |
| 361 page_scale_layer, | 325 root_scroll_layer_ ? root_scroll_layer_->parent() : NULL, |
| 362 MaxTextureSize(), | 326 MaxTextureSize(), |
| 363 settings().can_use_lcd_text, | 327 settings().can_use_lcd_text, |
| 364 settings().layer_transforms_should_scale_layer_contents, | 328 settings().layer_transforms_should_scale_layer_contents, |
| 365 &render_surface_layer_list_); | 329 &render_surface_layer_list_); |
| 366 LayerTreeHostCommon::CalculateDrawProperties(&inputs); | 330 LayerTreeHostCommon::CalculateDrawProperties(&inputs); |
| 367 } | 331 } |
| 368 | 332 |
| 369 DCHECK(!needs_update_draw_properties_) << | 333 DCHECK(!needs_update_draw_properties_) << |
| 370 "CalcDrawProperties should not set_needs_update_draw_properties()"; | 334 "CalcDrawProperties should not set_needs_update_draw_properties()"; |
| 371 } | 335 } |
| (...skipping 331 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 703 const std::vector<LayerImpl*> LayerTreeImpl::LayersWithCopyOutputRequest() | 667 const std::vector<LayerImpl*> LayerTreeImpl::LayersWithCopyOutputRequest() |
| 704 const { | 668 const { |
| 705 // Only the active tree needs to know about layers with copy requests, as | 669 // Only the active tree needs to know about layers with copy requests, as |
| 706 // they are aborted if not serviced during draw. | 670 // they are aborted if not serviced during draw. |
| 707 DCHECK(IsActiveTree()); | 671 DCHECK(IsActiveTree()); |
| 708 | 672 |
| 709 return layers_with_copy_output_request_; | 673 return layers_with_copy_output_request_; |
| 710 } | 674 } |
| 711 | 675 |
| 712 } // namespace cc | 676 } // namespace cc |
| OLD | NEW |