| 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 1064 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1075 // change. So, capture the iterator position from the end of the | 1075 // change. So, capture the iterator position from the end of the |
| 1076 // list, and restore it after the change. | 1076 // list, and restore it after the change. |
| 1077 size_t position_from_end = frame->render_passes.size() - it; | 1077 size_t position_from_end = frame->render_passes.size() - it; |
| 1078 RemoveRenderPassesRecursive(render_pass_quad->render_pass_id, frame); | 1078 RemoveRenderPassesRecursive(render_pass_quad->render_pass_id, frame); |
| 1079 it = frame->render_passes.size() - position_from_end; | 1079 it = frame->render_passes.size() - position_from_end; |
| 1080 DCHECK_GE(frame->render_passes.size(), position_from_end); | 1080 DCHECK_GE(frame->render_passes.size(), position_from_end); |
| 1081 } | 1081 } |
| 1082 } | 1082 } |
| 1083 } | 1083 } |
| 1084 | 1084 |
| 1085 DrawResult LayerTreeHostImpl::PrepareToDraw(FrameData* frame, | 1085 DrawResult LayerTreeHostImpl::PrepareToDraw(FrameData* frame) { |
| 1086 const gfx::Rect& damage_rect) { | |
| 1087 TRACE_EVENT1("cc", | 1086 TRACE_EVENT1("cc", |
| 1088 "LayerTreeHostImpl::PrepareToDraw", | 1087 "LayerTreeHostImpl::PrepareToDraw", |
| 1089 "SourceFrameNumber", | 1088 "SourceFrameNumber", |
| 1090 active_tree_->source_frame_number()); | 1089 active_tree_->source_frame_number()); |
| 1091 | 1090 |
| 1092 if (need_to_update_visible_tiles_before_draw_ && | 1091 if (need_to_update_visible_tiles_before_draw_ && |
| 1093 tile_manager_ && tile_manager_->UpdateVisibleTiles()) { | 1092 tile_manager_ && tile_manager_->UpdateVisibleTiles()) { |
| 1094 DidInitializeVisibleTile(); | 1093 DidInitializeVisibleTile(); |
| 1095 } | 1094 } |
| 1096 need_to_update_visible_tiles_before_draw_ = true; | 1095 need_to_update_visible_tiles_before_draw_ = true; |
| 1097 | 1096 |
| 1098 active_tree_->UpdateDrawProperties(); | 1097 active_tree_->UpdateDrawProperties(); |
| 1099 | 1098 |
| 1100 frame->render_surface_layer_list = &active_tree_->RenderSurfaceLayerList(); | 1099 frame->render_surface_layer_list = &active_tree_->RenderSurfaceLayerList(); |
| 1101 frame->render_passes.clear(); | 1100 frame->render_passes.clear(); |
| 1102 frame->render_passes_by_id.clear(); | 1101 frame->render_passes_by_id.clear(); |
| 1103 frame->will_draw_layers.clear(); | 1102 frame->will_draw_layers.clear(); |
| 1104 frame->contains_incomplete_tile = false; | 1103 frame->contains_incomplete_tile = false; |
| 1105 frame->has_no_damage = false; | 1104 frame->has_no_damage = false; |
| 1106 | 1105 |
| 1107 gfx::Rect device_viewport_damage_rect(damage_rect); | |
| 1108 if (active_tree_->root_layer()) { | 1106 if (active_tree_->root_layer()) { |
| 1109 device_viewport_damage_rect.Union(viewport_damage_rect_); | 1107 gfx::Rect device_viewport_damage_rect = viewport_damage_rect_; |
| 1110 viewport_damage_rect_ = gfx::Rect(); | 1108 viewport_damage_rect_ = gfx::Rect(); |
| 1111 | 1109 |
| 1112 active_tree_->root_layer()->render_surface()->damage_tracker()-> | 1110 active_tree_->root_layer()->render_surface()->damage_tracker()-> |
| 1113 AddDamageNextUpdate(device_viewport_damage_rect); | 1111 AddDamageNextUpdate(device_viewport_damage_rect); |
| 1114 } | 1112 } |
| 1115 | 1113 |
| 1116 DrawResult draw_result = CalculateRenderPasses(frame); | 1114 DrawResult draw_result = CalculateRenderPasses(frame); |
| 1117 if (draw_result != DRAW_SUCCESS) { | 1115 if (draw_result != DRAW_SUCCESS) { |
| 1118 DCHECK(!output_surface_->capabilities() | 1116 DCHECK(!output_surface_->capabilities() |
| 1119 .draw_and_swap_full_viewport_every_frame); | 1117 .draw_and_swap_full_viewport_every_frame); |
| (...skipping 475 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1595 // TODO(jamesr): The renderer_ check is needed to make some of the | 1593 // TODO(jamesr): The renderer_ check is needed to make some of the |
| 1596 // LayerTreeHostContextTest tests pass, but shouldn't be necessary (or | 1594 // LayerTreeHostContextTest tests pass, but shouldn't be necessary (or |
| 1597 // important) in production. We should adjust the test to not need this. | 1595 // important) in production. We should adjust the test to not need this. |
| 1598 if (renderer_) | 1596 if (renderer_) |
| 1599 client_->DidLoseOutputSurfaceOnImplThread(); | 1597 client_->DidLoseOutputSurfaceOnImplThread(); |
| 1600 #if DCHECK_IS_ON | 1598 #if DCHECK_IS_ON |
| 1601 did_lose_called_ = true; | 1599 did_lose_called_ = true; |
| 1602 #endif | 1600 #endif |
| 1603 } | 1601 } |
| 1604 | 1602 |
| 1605 void LayerTreeHostImpl::Readback(void* pixels, | |
| 1606 const gfx::Rect& rect_in_device_viewport) { | |
| 1607 DCHECK(renderer_); | |
| 1608 renderer_->GetFramebufferPixels(pixels, rect_in_device_viewport); | |
| 1609 } | |
| 1610 | |
| 1611 bool LayerTreeHostImpl::HaveRootScrollLayer() const { | 1603 bool LayerTreeHostImpl::HaveRootScrollLayer() const { |
| 1612 return !!InnerViewportScrollLayer(); | 1604 return !!InnerViewportScrollLayer(); |
| 1613 } | 1605 } |
| 1614 | 1606 |
| 1615 LayerImpl* LayerTreeHostImpl::RootLayer() const { | 1607 LayerImpl* LayerTreeHostImpl::RootLayer() const { |
| 1616 return active_tree_->root_layer(); | 1608 return active_tree_->root_layer(); |
| 1617 } | 1609 } |
| 1618 | 1610 |
| 1619 LayerImpl* LayerTreeHostImpl::InnerViewportScrollLayer() const { | 1611 LayerImpl* LayerTreeHostImpl::InnerViewportScrollLayer() const { |
| 1620 return active_tree_->InnerViewportScrollLayer(); | 1612 return active_tree_->InnerViewportScrollLayer(); |
| (...skipping 1499 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3120 swap_promise_monitor_.erase(monitor); | 3112 swap_promise_monitor_.erase(monitor); |
| 3121 } | 3113 } |
| 3122 | 3114 |
| 3123 void LayerTreeHostImpl::NotifySwapPromiseMonitorsOfSetNeedsRedraw() { | 3115 void LayerTreeHostImpl::NotifySwapPromiseMonitorsOfSetNeedsRedraw() { |
| 3124 std::set<SwapPromiseMonitor*>::iterator it = swap_promise_monitor_.begin(); | 3116 std::set<SwapPromiseMonitor*>::iterator it = swap_promise_monitor_.begin(); |
| 3125 for (; it != swap_promise_monitor_.end(); it++) | 3117 for (; it != swap_promise_monitor_.end(); it++) |
| 3126 (*it)->OnSetNeedsRedrawOnImpl(); | 3118 (*it)->OnSetNeedsRedrawOnImpl(); |
| 3127 } | 3119 } |
| 3128 | 3120 |
| 3129 } // namespace cc | 3121 } // namespace cc |
| OLD | NEW |