| 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 | 8 |
| 9 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
| 10 #include "base/containers/hash_tables.h" | 10 #include "base/containers/hash_tables.h" |
| (...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 247 TRACE_EVENT0("cc", "LayerTreeHostImpl::CommitComplete"); | 247 TRACE_EVENT0("cc", "LayerTreeHostImpl::CommitComplete"); |
| 248 | 248 |
| 249 if (settings_.impl_side_painting) { | 249 if (settings_.impl_side_painting) { |
| 250 // Impl-side painting needs an update immediately post-commit to have the | 250 // Impl-side painting needs an update immediately post-commit to have the |
| 251 // opportunity to create tilings. Other paths can call UpdateDrawProperties | 251 // opportunity to create tilings. Other paths can call UpdateDrawProperties |
| 252 // more lazily when needed prior to drawing. | 252 // more lazily when needed prior to drawing. |
| 253 pending_tree()->ApplyScrollDeltasSinceBeginFrame(); | 253 pending_tree()->ApplyScrollDeltasSinceBeginFrame(); |
| 254 pending_tree_->set_needs_update_draw_properties(); | 254 pending_tree_->set_needs_update_draw_properties(); |
| 255 pending_tree_->UpdateDrawProperties(); | 255 pending_tree_->UpdateDrawProperties(); |
| 256 // Start working on newly created tiles immediately if needed. | 256 // Start working on newly created tiles immediately if needed. |
| 257 ManageTiles(); | 257 if (!manage_tiles_needed_) |
| 258 client_->NotifyReadyToActivate(); |
| 259 else |
| 260 ManageTiles(); |
| 258 } else { | 261 } else { |
| 259 active_tree_->set_needs_update_draw_properties(); | 262 active_tree_->set_needs_update_draw_properties(); |
| 260 } | 263 } |
| 261 | 264 |
| 262 client_->SendManagedMemoryStats(); | 265 client_->SendManagedMemoryStats(); |
| 263 } | 266 } |
| 264 | 267 |
| 265 bool LayerTreeHostImpl::CanDraw() const { | 268 bool LayerTreeHostImpl::CanDraw() const { |
| 266 // Note: If you are changing this function or any other function that might | 269 // Note: If you are changing this function or any other function that might |
| 267 // affect the result of CanDraw, make sure to call | 270 // affect the result of CanDraw, make sure to call |
| (...skipping 810 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1078 | 1081 |
| 1079 void LayerTreeHostImpl::DidInitializeVisibleTile() { | 1082 void LayerTreeHostImpl::DidInitializeVisibleTile() { |
| 1080 // TODO(reveman): Determine tiles that changed and only damage | 1083 // TODO(reveman): Determine tiles that changed and only damage |
| 1081 // what's necessary. | 1084 // what's necessary. |
| 1082 SetFullRootLayerDamage(); | 1085 SetFullRootLayerDamage(); |
| 1083 if (client_) | 1086 if (client_) |
| 1084 client_->DidInitializeVisibleTileOnImplThread(); | 1087 client_->DidInitializeVisibleTileOnImplThread(); |
| 1085 } | 1088 } |
| 1086 | 1089 |
| 1087 void LayerTreeHostImpl::NotifyReadyToActivate() { | 1090 void LayerTreeHostImpl::NotifyReadyToActivate() { |
| 1088 if (pending_tree_) { | 1091 client_->NotifyReadyToActivate(); |
| 1089 need_to_update_visible_tiles_before_draw_ = true; | |
| 1090 ActivatePendingTree(); | |
| 1091 } | |
| 1092 } | 1092 } |
| 1093 | 1093 |
| 1094 bool LayerTreeHostImpl::ShouldClearRootRenderPass() const { | 1094 bool LayerTreeHostImpl::ShouldClearRootRenderPass() const { |
| 1095 return settings_.should_clear_root_render_pass; | 1095 return settings_.should_clear_root_render_pass; |
| 1096 } | 1096 } |
| 1097 | 1097 |
| 1098 void LayerTreeHostImpl::SetMemoryPolicy(const ManagedMemoryPolicy& policy) { | 1098 void LayerTreeHostImpl::SetMemoryPolicy(const ManagedMemoryPolicy& policy) { |
| 1099 SetManagedMemoryPolicy(policy, zero_budget_); | 1099 SetManagedMemoryPolicy(policy, zero_budget_); |
| 1100 } | 1100 } |
| 1101 | 1101 |
| (...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1469 TRACE_EVENT_ASYNC_STEP1( | 1469 TRACE_EVENT_ASYNC_STEP1( |
| 1470 "cc", | 1470 "cc", |
| 1471 "PendingTree", pending_tree_.get(), "activate", | 1471 "PendingTree", pending_tree_.get(), "activate", |
| 1472 "state", TracedValue::FromValue(ActivationStateAsValue().release())); | 1472 "state", TracedValue::FromValue(ActivationStateAsValue().release())); |
| 1473 } | 1473 } |
| 1474 | 1474 |
| 1475 void LayerTreeHostImpl::ActivatePendingTree() { | 1475 void LayerTreeHostImpl::ActivatePendingTree() { |
| 1476 CHECK(pending_tree_); | 1476 CHECK(pending_tree_); |
| 1477 TRACE_EVENT_ASYNC_END0("cc", "PendingTree", pending_tree_.get()); | 1477 TRACE_EVENT_ASYNC_END0("cc", "PendingTree", pending_tree_.get()); |
| 1478 | 1478 |
| 1479 need_to_update_visible_tiles_before_draw_ = true; |
| 1480 |
| 1479 active_tree_->SetRootLayerScrollOffsetDelegate(NULL); | 1481 active_tree_->SetRootLayerScrollOffsetDelegate(NULL); |
| 1480 active_tree_->PushPersistedState(pending_tree_.get()); | 1482 active_tree_->PushPersistedState(pending_tree_.get()); |
| 1481 if (pending_tree_->needs_full_tree_sync()) { | 1483 if (pending_tree_->needs_full_tree_sync()) { |
| 1482 active_tree_->SetRootLayer( | 1484 active_tree_->SetRootLayer( |
| 1483 TreeSynchronizer::SynchronizeTrees(pending_tree_->root_layer(), | 1485 TreeSynchronizer::SynchronizeTrees(pending_tree_->root_layer(), |
| 1484 active_tree_->DetachLayerTree(), | 1486 active_tree_->DetachLayerTree(), |
| 1485 active_tree_.get())); | 1487 active_tree_.get())); |
| 1486 } | 1488 } |
| 1487 TreeSynchronizer::PushProperties(pending_tree_->root_layer(), | 1489 TreeSynchronizer::PushProperties(pending_tree_->root_layer(), |
| 1488 active_tree_->root_layer()); | 1490 active_tree_->root_layer()); |
| 1489 DCHECK(!recycle_tree_); | 1491 DCHECK(!recycle_tree_); |
| 1490 | 1492 |
| 1491 // Process any requests in the UI resource queue. The request queue is given | 1493 // Process any requests in the UI resource queue. The request queue is given |
| 1492 // in LayerTreeHost::FinishCommitOnImplThread. This must take place before | 1494 // in LayerTreeHost::FinishCommitOnImplThread. This must take place before |
| 1493 // the swap. | 1495 // the swap. |
| 1494 pending_tree_->ProcessUIResourceRequestQueue(); | 1496 pending_tree_->ProcessUIResourceRequestQueue(); |
| 1495 | 1497 |
| 1496 pending_tree_->PushPropertiesTo(active_tree_.get()); | 1498 pending_tree_->PushPropertiesTo(active_tree_.get()); |
| 1497 | 1499 |
| 1498 // Now that we've synced everything from the pending tree to the active | 1500 // Now that we've synced everything from the pending tree to the active |
| 1499 // tree, rename the pending tree the recycle tree so we can reuse it on the | 1501 // tree, rename the pending tree the recycle tree so we can reuse it on the |
| 1500 // next sync. | 1502 // next sync. |
| 1501 pending_tree_.swap(recycle_tree_); | 1503 pending_tree_.swap(recycle_tree_); |
| 1502 | 1504 |
| 1503 active_tree_->SetRootLayerScrollOffsetDelegate( | 1505 active_tree_->SetRootLayerScrollOffsetDelegate( |
| 1504 root_layer_scroll_offset_delegate_); | 1506 root_layer_scroll_offset_delegate_); |
| 1505 active_tree_->DidBecomeActive(); | 1507 active_tree_->DidBecomeActive(); |
| 1506 | 1508 |
| 1509 client_->DidActivatePendingTree(); |
| 1510 if (!tree_activation_callback_.is_null()) |
| 1511 tree_activation_callback_.Run(); |
| 1512 |
| 1507 // Reduce wasted memory now that unlinked resources are guaranteed not | 1513 // Reduce wasted memory now that unlinked resources are guaranteed not |
| 1508 // to be used. | 1514 // to be used. |
| 1509 client_->ReduceWastedContentsTextureMemoryOnImplThread(); | 1515 client_->ReduceWastedContentsTextureMemoryOnImplThread(); |
| 1510 | 1516 |
| 1511 client_->OnCanDrawStateChanged(CanDraw()); | 1517 client_->OnCanDrawStateChanged(CanDraw()); |
| 1512 client_->OnHasPendingTreeStateChanged(pending_tree_); | 1518 client_->OnHasPendingTreeStateChanged(pending_tree_); |
| 1513 client_->SetNeedsRedrawOnImplThread(); | 1519 client_->SetNeedsRedrawOnImplThread(); |
| 1514 client_->RenewTreePriority(); | 1520 client_->RenewTreePriority(); |
| 1515 | 1521 |
| 1516 if (debug_state_.continuous_painting) { | 1522 if (debug_state_.continuous_painting) { |
| 1517 const RenderingStats& stats = | 1523 const RenderingStats& stats = |
| 1518 rendering_stats_instrumentation_->GetRenderingStats(); | 1524 rendering_stats_instrumentation_->GetRenderingStats(); |
| 1519 paint_time_counter_->SavePaintTime( | 1525 paint_time_counter_->SavePaintTime( |
| 1520 stats.main_stats.paint_time + stats.main_stats.record_time + | 1526 stats.main_stats.paint_time + stats.main_stats.record_time + |
| 1521 stats.impl_stats.rasterize_time_for_now_bins_on_pending_tree); | 1527 stats.impl_stats.rasterize_time_for_now_bins_on_pending_tree); |
| 1522 } | 1528 } |
| 1523 | |
| 1524 client_->DidActivatePendingTree(); | |
| 1525 if (!tree_activation_callback_.is_null()) | |
| 1526 tree_activation_callback_.Run(); | |
| 1527 } | 1529 } |
| 1528 | 1530 |
| 1529 void LayerTreeHostImpl::SetVisible(bool visible) { | 1531 void LayerTreeHostImpl::SetVisible(bool visible) { |
| 1530 DCHECK(proxy_->IsImplThread()); | 1532 DCHECK(proxy_->IsImplThread()); |
| 1531 | 1533 |
| 1532 if (visible_ == visible) | 1534 if (visible_ == visible) |
| 1533 return; | 1535 return; |
| 1534 visible_ = visible; | 1536 visible_ = visible; |
| 1535 DidVisibilityChange(this, visible_); | 1537 DidVisibilityChange(this, visible_); |
| 1536 EnforceManagedMemoryPolicy(ActualManagedMemoryPolicy()); | 1538 EnforceManagedMemoryPolicy(ActualManagedMemoryPolicy()); |
| (...skipping 998 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2535 | 2537 |
| 2536 ResourceProvider::ResourceId LayerTreeHostImpl::ResourceIdForUIResource( | 2538 ResourceProvider::ResourceId LayerTreeHostImpl::ResourceIdForUIResource( |
| 2537 UIResourceId uid) const { | 2539 UIResourceId uid) const { |
| 2538 UIResourceMap::const_iterator iter = ui_resource_map_.find(uid); | 2540 UIResourceMap::const_iterator iter = ui_resource_map_.find(uid); |
| 2539 if (iter != ui_resource_map_.end()) | 2541 if (iter != ui_resource_map_.end()) |
| 2540 return iter->second; | 2542 return iter->second; |
| 2541 return 0; | 2543 return 0; |
| 2542 } | 2544 } |
| 2543 | 2545 |
| 2544 } // namespace cc | 2546 } // namespace cc |
| OLD | NEW |