| 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 220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 231 time_source_(time_source) { | 231 time_source_(time_source) { |
| 232 time_source_->SetClient(this); | 232 time_source_->SetClient(this); |
| 233 } | 233 } |
| 234 | 234 |
| 235 LayerTreeHostImpl* layer_tree_host_impl_; | 235 LayerTreeHostImpl* layer_tree_host_impl_; |
| 236 scoped_refptr<DelayBasedTimeSource> time_source_; | 236 scoped_refptr<DelayBasedTimeSource> time_source_; |
| 237 | 237 |
| 238 DISALLOW_COPY_AND_ASSIGN(LayerTreeHostImplTimeSourceAdapter); | 238 DISALLOW_COPY_AND_ASSIGN(LayerTreeHostImplTimeSourceAdapter); |
| 239 }; | 239 }; |
| 240 | 240 |
| 241 LayerTreeHostImpl::FrameData::FrameData() | 241 LayerTreeHostImpl::FrameData::FrameData() : has_no_damage(false) { |
| 242 : contains_incomplete_tile(false), has_no_damage(false) {} | 242 } |
| 243 | 243 |
| 244 LayerTreeHostImpl::FrameData::~FrameData() {} | 244 LayerTreeHostImpl::FrameData::~FrameData() {} |
| 245 | 245 |
| 246 scoped_ptr<LayerTreeHostImpl> LayerTreeHostImpl::Create( | 246 scoped_ptr<LayerTreeHostImpl> LayerTreeHostImpl::Create( |
| 247 const LayerTreeSettings& settings, | 247 const LayerTreeSettings& settings, |
| 248 LayerTreeHostImplClient* client, | 248 LayerTreeHostImplClient* client, |
| 249 Proxy* proxy, | 249 Proxy* proxy, |
| 250 RenderingStatsInstrumentation* rendering_stats_instrumentation, | 250 RenderingStatsInstrumentation* rendering_stats_instrumentation, |
| 251 SharedBitmapManager* shared_bitmap_manager, | 251 SharedBitmapManager* shared_bitmap_manager, |
| 252 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager, | 252 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager, |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 297 : proxy_->MainThreadTaskRunner())), | 297 : proxy_->MainThreadTaskRunner())), |
| 298 max_memory_needed_bytes_(0), | 298 max_memory_needed_bytes_(0), |
| 299 zero_budget_(false), | 299 zero_budget_(false), |
| 300 device_scale_factor_(1.f), | 300 device_scale_factor_(1.f), |
| 301 overhang_ui_resource_id_(0), | 301 overhang_ui_resource_id_(0), |
| 302 resourceless_software_draw_(false), | 302 resourceless_software_draw_(false), |
| 303 begin_impl_frame_interval_(BeginFrameArgs::DefaultInterval()), | 303 begin_impl_frame_interval_(BeginFrameArgs::DefaultInterval()), |
| 304 animation_registrar_(AnimationRegistrar::Create()), | 304 animation_registrar_(AnimationRegistrar::Create()), |
| 305 rendering_stats_instrumentation_(rendering_stats_instrumentation), | 305 rendering_stats_instrumentation_(rendering_stats_instrumentation), |
| 306 micro_benchmark_controller_(this), | 306 micro_benchmark_controller_(this), |
| 307 need_to_update_visible_tiles_before_draw_(false), | |
| 308 shared_bitmap_manager_(shared_bitmap_manager), | 307 shared_bitmap_manager_(shared_bitmap_manager), |
| 309 gpu_memory_buffer_manager_(gpu_memory_buffer_manager), | 308 gpu_memory_buffer_manager_(gpu_memory_buffer_manager), |
| 310 id_(id), | 309 id_(id), |
| 311 requires_high_res_to_draw_(false) { | 310 requires_high_res_to_draw_(false), |
| 311 active_visible_tile_is_top_of_raster_queue_(false) { |
| 312 DCHECK(proxy_->IsImplThread()); | 312 DCHECK(proxy_->IsImplThread()); |
| 313 DidVisibilityChange(this, visible_); | 313 DidVisibilityChange(this, visible_); |
| 314 animation_registrar_->set_supports_scroll_animations( | 314 animation_registrar_->set_supports_scroll_animations( |
| 315 proxy_->SupportsImplScrolling()); | 315 proxy_->SupportsImplScrolling()); |
| 316 | 316 |
| 317 SetDebugState(settings.initial_debug_state); | 317 SetDebugState(settings.initial_debug_state); |
| 318 | 318 |
| 319 // LTHI always has an active tree. | 319 // LTHI always has an active tree. |
| 320 active_tree_ = LayerTreeImpl::create(this); | 320 active_tree_ = LayerTreeImpl::create(this); |
| 321 TRACE_EVENT_OBJECT_CREATED_WITH_ID( | 321 TRACE_EVENT_OBJECT_CREATED_WITH_ID( |
| (...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 539 render_surface_layer->id(), | 539 render_surface_layer->id(), |
| 540 render_surface->SurfacePropertyChangedOnlyFromDescendant(), | 540 render_surface->SurfacePropertyChangedOnlyFromDescendant(), |
| 541 render_surface->content_rect(), | 541 render_surface->content_rect(), |
| 542 render_surface_layer->mask_layer(), | 542 render_surface_layer->mask_layer(), |
| 543 render_surface_layer->filters()); | 543 render_surface_layer->filters()); |
| 544 } | 544 } |
| 545 } | 545 } |
| 546 | 546 |
| 547 void LayerTreeHostImpl::FrameData::AsValueInto( | 547 void LayerTreeHostImpl::FrameData::AsValueInto( |
| 548 base::debug::TracedValue* value) const { | 548 base::debug::TracedValue* value) const { |
| 549 value->SetBoolean("contains_incomplete_tile", contains_incomplete_tile); | |
| 550 value->SetBoolean("has_no_damage", has_no_damage); | 549 value->SetBoolean("has_no_damage", has_no_damage); |
| 551 | 550 |
| 552 // Quad data can be quite large, so only dump render passes if we select | 551 // Quad data can be quite large, so only dump render passes if we select |
| 553 // cc.debug.quads. | 552 // cc.debug.quads. |
| 554 bool quads_enabled; | 553 bool quads_enabled; |
| 555 TRACE_EVENT_CATEGORY_GROUP_ENABLED( | 554 TRACE_EVENT_CATEGORY_GROUP_ENABLED( |
| 556 TRACE_DISABLED_BY_DEFAULT("cc.debug.quads"), &quads_enabled); | 555 TRACE_DISABLED_BY_DEFAULT("cc.debug.quads"), &quads_enabled); |
| 557 if (quads_enabled) { | 556 if (quads_enabled) { |
| 558 value->BeginArray("render_passes"); | 557 value->BeginArray("render_passes"); |
| 559 for (size_t i = 0; i < render_passes.size(); ++i) { | 558 for (size_t i = 0; i < render_passes.size(); ++i) { |
| (...skipping 329 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 889 if (append_quads_data.num_missing_tiles) { | 888 if (append_quads_data.num_missing_tiles) { |
| 890 bool layer_has_animating_transform = | 889 bool layer_has_animating_transform = |
| 891 it->screen_space_transform_is_animating() || | 890 it->screen_space_transform_is_animating() || |
| 892 it->draw_transform_is_animating(); | 891 it->draw_transform_is_animating(); |
| 893 if (layer_has_animating_transform) | 892 if (layer_has_animating_transform) |
| 894 draw_result = DRAW_ABORTED_CHECKERBOARD_ANIMATIONS; | 893 draw_result = DRAW_ABORTED_CHECKERBOARD_ANIMATIONS; |
| 895 } | 894 } |
| 896 | 895 |
| 897 if (append_quads_data.num_incomplete_tiles || | 896 if (append_quads_data.num_incomplete_tiles || |
| 898 append_quads_data.num_missing_tiles) { | 897 append_quads_data.num_missing_tiles) { |
| 899 frame->contains_incomplete_tile = true; | |
| 900 if (RequiresHighResToDraw()) | 898 if (RequiresHighResToDraw()) |
| 901 draw_result = DRAW_ABORTED_MISSING_HIGH_RES_CONTENT; | 899 draw_result = DRAW_ABORTED_MISSING_HIGH_RES_CONTENT; |
| 902 } | 900 } |
| 903 | 901 |
| 904 occlusion_tracker.LeaveLayer(it); | 902 occlusion_tracker.LeaveLayer(it); |
| 905 } | 903 } |
| 906 | 904 |
| 907 if (have_copy_request || | 905 if (have_copy_request || |
| 908 output_surface_->capabilities().draw_and_swap_full_viewport_every_frame) | 906 output_surface_->capabilities().draw_and_swap_full_viewport_every_frame) |
| 909 draw_result = DRAW_SUCCESS; | 907 draw_result = DRAW_SUCCESS; |
| (...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1107 } | 1105 } |
| 1108 } | 1106 } |
| 1109 } | 1107 } |
| 1110 | 1108 |
| 1111 DrawResult LayerTreeHostImpl::PrepareToDraw(FrameData* frame) { | 1109 DrawResult LayerTreeHostImpl::PrepareToDraw(FrameData* frame) { |
| 1112 TRACE_EVENT1("cc", | 1110 TRACE_EVENT1("cc", |
| 1113 "LayerTreeHostImpl::PrepareToDraw", | 1111 "LayerTreeHostImpl::PrepareToDraw", |
| 1114 "SourceFrameNumber", | 1112 "SourceFrameNumber", |
| 1115 active_tree_->source_frame_number()); | 1113 active_tree_->source_frame_number()); |
| 1116 | 1114 |
| 1117 if (need_to_update_visible_tiles_before_draw_ && | 1115 if (settings().impl_side_painting) |
| 1118 tile_manager_ && tile_manager_->UpdateVisibleTiles()) { | 1116 tile_manager_->UpdateVisibleTiles(); |
| 1119 DidInitializeVisibleTile(); | |
| 1120 } | |
| 1121 need_to_update_visible_tiles_before_draw_ = true; | |
| 1122 | 1117 |
| 1123 UMA_HISTOGRAM_CUSTOM_COUNTS( | 1118 UMA_HISTOGRAM_CUSTOM_COUNTS( |
| 1124 "Compositing.NumActiveLayers", active_tree_->NumLayers(), 1, 400, 20); | 1119 "Compositing.NumActiveLayers", active_tree_->NumLayers(), 1, 400, 20); |
| 1125 | 1120 |
| 1126 bool ok = active_tree_->UpdateDrawProperties(); | 1121 bool ok = active_tree_->UpdateDrawProperties(); |
| 1127 DCHECK(ok) << "UpdateDrawProperties failed during draw"; | 1122 DCHECK(ok) << "UpdateDrawProperties failed during draw"; |
| 1128 | 1123 |
| 1129 frame->render_surface_layer_list = &active_tree_->RenderSurfaceLayerList(); | 1124 frame->render_surface_layer_list = &active_tree_->RenderSurfaceLayerList(); |
| 1130 frame->render_passes.clear(); | 1125 frame->render_passes.clear(); |
| 1131 frame->render_passes_by_id.clear(); | 1126 frame->render_passes_by_id.clear(); |
| 1132 frame->will_draw_layers.clear(); | 1127 frame->will_draw_layers.clear(); |
| 1133 frame->contains_incomplete_tile = false; | |
| 1134 frame->has_no_damage = false; | 1128 frame->has_no_damage = false; |
| 1135 | 1129 |
| 1136 if (active_tree_->root_layer()) { | 1130 if (active_tree_->root_layer()) { |
| 1137 gfx::Rect device_viewport_damage_rect = viewport_damage_rect_; | 1131 gfx::Rect device_viewport_damage_rect = viewport_damage_rect_; |
| 1138 viewport_damage_rect_ = gfx::Rect(); | 1132 viewport_damage_rect_ = gfx::Rect(); |
| 1139 | 1133 |
| 1140 active_tree_->root_layer()->render_surface()->damage_tracker()-> | 1134 active_tree_->root_layer()->render_surface()->damage_tracker()-> |
| 1141 AddDamageNextUpdate(device_viewport_damage_rect); | 1135 AddDamageNextUpdate(device_viewport_damage_rect); |
| 1142 } | 1136 } |
| 1143 | 1137 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 1154 } | 1148 } |
| 1155 | 1149 |
| 1156 void LayerTreeHostImpl::EvictTexturesForTesting() { | 1150 void LayerTreeHostImpl::EvictTexturesForTesting() { |
| 1157 EnforceManagedMemoryPolicy(ManagedMemoryPolicy(0)); | 1151 EnforceManagedMemoryPolicy(ManagedMemoryPolicy(0)); |
| 1158 } | 1152 } |
| 1159 | 1153 |
| 1160 void LayerTreeHostImpl::BlockNotifyReadyToActivateForTesting(bool block) { | 1154 void LayerTreeHostImpl::BlockNotifyReadyToActivateForTesting(bool block) { |
| 1161 NOTREACHED(); | 1155 NOTREACHED(); |
| 1162 } | 1156 } |
| 1163 | 1157 |
| 1164 void LayerTreeHostImpl::DidInitializeVisibleTileForTesting() { | |
| 1165 // Add arbitrary damage, to trigger prepare-to-draws. | |
| 1166 // Here, setting damage as viewport size, used only for testing. | |
| 1167 SetFullRootLayerDamage(); | |
| 1168 DidInitializeVisibleTile(); | |
| 1169 } | |
| 1170 | |
| 1171 void LayerTreeHostImpl::ResetTreesForTesting() { | 1158 void LayerTreeHostImpl::ResetTreesForTesting() { |
| 1172 if (active_tree_) | 1159 if (active_tree_) |
| 1173 active_tree_->DetachLayerTree(); | 1160 active_tree_->DetachLayerTree(); |
| 1174 active_tree_ = LayerTreeImpl::create(this); | 1161 active_tree_ = LayerTreeImpl::create(this); |
| 1175 if (pending_tree_) | 1162 if (pending_tree_) |
| 1176 pending_tree_->DetachLayerTree(); | 1163 pending_tree_->DetachLayerTree(); |
| 1177 pending_tree_ = nullptr; | 1164 pending_tree_ = nullptr; |
| 1178 if (recycle_tree_) | 1165 if (recycle_tree_) |
| 1179 recycle_tree_->DetachLayerTree(); | 1166 recycle_tree_->DetachLayerTree(); |
| 1180 recycle_tree_ = nullptr; | 1167 recycle_tree_ = nullptr; |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1253 } | 1240 } |
| 1254 | 1241 |
| 1255 void LayerTreeHostImpl::DidModifyTilePriorities() { | 1242 void LayerTreeHostImpl::DidModifyTilePriorities() { |
| 1256 DCHECK(settings_.impl_side_painting); | 1243 DCHECK(settings_.impl_side_painting); |
| 1257 // Mark priorities as dirty and schedule a ManageTiles(). | 1244 // Mark priorities as dirty and schedule a ManageTiles(). |
| 1258 tile_priorities_dirty_ = true; | 1245 tile_priorities_dirty_ = true; |
| 1259 client_->SetNeedsManageTilesOnImplThread(); | 1246 client_->SetNeedsManageTilesOnImplThread(); |
| 1260 } | 1247 } |
| 1261 | 1248 |
| 1262 void LayerTreeHostImpl::DidInitializeVisibleTile() { | 1249 void LayerTreeHostImpl::DidInitializeVisibleTile() { |
| 1263 if (client_ && !client_->IsInsideDraw()) | 1250 // Check for a non-null active tree to avoid doing this during shutdown. |
| 1264 client_->DidInitializeVisibleTileOnImplThread(); | 1251 if (active_tree_ && !client_->IsInsideDraw()) |
| 1252 SetNeedsRedraw(); |
| 1265 } | 1253 } |
| 1266 | 1254 |
| 1267 void LayerTreeHostImpl::GetPictureLayerImplPairs( | 1255 void LayerTreeHostImpl::GetPictureLayerImplPairs( |
| 1268 std::vector<PictureLayerImpl::Pair>* layer_pairs) const { | 1256 std::vector<PictureLayerImpl::Pair>* layer_pairs) const { |
| 1269 DCHECK(layer_pairs->empty()); | 1257 DCHECK(layer_pairs->empty()); |
| 1270 for (std::vector<PictureLayerImpl*>::const_iterator it = | 1258 for (std::vector<PictureLayerImpl*>::const_iterator it = |
| 1271 picture_layers_.begin(); | 1259 picture_layers_.begin(); |
| 1272 it != picture_layers_.end(); | 1260 it != picture_layers_.end(); |
| 1273 ++it) { | 1261 ++it) { |
| 1274 PictureLayerImpl* layer = *it; | 1262 PictureLayerImpl* layer = *it; |
| (...skipping 20 matching lines...) Expand all Loading... |
| 1295 } | 1283 } |
| 1296 } | 1284 } |
| 1297 } | 1285 } |
| 1298 | 1286 |
| 1299 void LayerTreeHostImpl::BuildRasterQueue(RasterTilePriorityQueue* queue, | 1287 void LayerTreeHostImpl::BuildRasterQueue(RasterTilePriorityQueue* queue, |
| 1300 TreePriority tree_priority) { | 1288 TreePriority tree_priority) { |
| 1301 TRACE_EVENT0("cc", "LayerTreeHostImpl::BuildRasterQueue"); | 1289 TRACE_EVENT0("cc", "LayerTreeHostImpl::BuildRasterQueue"); |
| 1302 picture_layer_pairs_.clear(); | 1290 picture_layer_pairs_.clear(); |
| 1303 GetPictureLayerImplPairs(&picture_layer_pairs_); | 1291 GetPictureLayerImplPairs(&picture_layer_pairs_); |
| 1304 queue->Build(picture_layer_pairs_, tree_priority); | 1292 queue->Build(picture_layer_pairs_, tree_priority); |
| 1293 |
| 1294 if (!queue->IsEmpty()) { |
| 1295 active_visible_tile_is_top_of_raster_queue_ = |
| 1296 queue->Top()->is_active_and_visible_priority(); |
| 1297 } else { |
| 1298 active_visible_tile_is_top_of_raster_queue_ = false; |
| 1299 } |
| 1300 } |
| 1301 |
| 1302 void LayerTreeHostImpl::FinishedRasterQueue() { |
| 1303 if (active_visible_tile_is_top_of_raster_queue_) |
| 1304 DidInitializeVisibleTile(); |
| 1305 active_visible_tile_is_top_of_raster_queue_ = false; |
| 1305 } | 1306 } |
| 1306 | 1307 |
| 1307 void LayerTreeHostImpl::BuildEvictionQueue(EvictionTilePriorityQueue* queue, | 1308 void LayerTreeHostImpl::BuildEvictionQueue(EvictionTilePriorityQueue* queue, |
| 1308 TreePriority tree_priority) { | 1309 TreePriority tree_priority) { |
| 1309 TRACE_EVENT0("cc", "LayerTreeHostImpl::BuildEvictionQueue"); | 1310 TRACE_EVENT0("cc", "LayerTreeHostImpl::BuildEvictionQueue"); |
| 1310 picture_layer_pairs_.clear(); | 1311 picture_layer_pairs_.clear(); |
| 1311 GetPictureLayerImplPairs(&picture_layer_pairs_); | 1312 GetPictureLayerImplPairs(&picture_layer_pairs_); |
| 1312 queue->Build(picture_layer_pairs_, tree_priority); | 1313 queue->Build(picture_layer_pairs_, tree_priority); |
| 1313 } | 1314 } |
| 1314 | 1315 |
| (...skipping 15 matching lines...) Expand all Loading... |
| 1330 if (layer_impl) | 1331 if (layer_impl) |
| 1331 layer_impl->NotifyTileStateChanged(tile); | 1332 layer_impl->NotifyTileStateChanged(tile); |
| 1332 } | 1333 } |
| 1333 | 1334 |
| 1334 if (pending_tree_) { | 1335 if (pending_tree_) { |
| 1335 LayerImpl* layer_impl = | 1336 LayerImpl* layer_impl = |
| 1336 pending_tree_->FindPendingTreeLayerById(tile->layer_id()); | 1337 pending_tree_->FindPendingTreeLayerById(tile->layer_id()); |
| 1337 if (layer_impl) | 1338 if (layer_impl) |
| 1338 layer_impl->NotifyTileStateChanged(tile); | 1339 layer_impl->NotifyTileStateChanged(tile); |
| 1339 } | 1340 } |
| 1341 |
| 1342 if (tile->is_active_and_visible_priority()) { |
| 1343 // The LayerImpl::NotifyTileStateChanged() should damage the layer, so this |
| 1344 // redraw will make those tiles be displayed. |
| 1345 DidInitializeVisibleTile(); |
| 1346 } |
| 1340 } | 1347 } |
| 1341 | 1348 |
| 1342 void LayerTreeHostImpl::SetMemoryPolicy(const ManagedMemoryPolicy& policy) { | 1349 void LayerTreeHostImpl::SetMemoryPolicy(const ManagedMemoryPolicy& policy) { |
| 1343 SetManagedMemoryPolicy(policy, zero_budget_); | 1350 SetManagedMemoryPolicy(policy, zero_budget_); |
| 1344 } | 1351 } |
| 1345 | 1352 |
| 1346 void LayerTreeHostImpl::SetTreeActivationCallback( | 1353 void LayerTreeHostImpl::SetTreeActivationCallback( |
| 1347 const base::Closure& callback) { | 1354 const base::Closure& callback) { |
| 1348 DCHECK(proxy_->IsImplThread()); | 1355 DCHECK(proxy_->IsImplThread()); |
| 1349 DCHECK(settings_.impl_side_painting || callback.is_null()); | 1356 DCHECK(settings_.impl_side_painting || callback.is_null()); |
| (...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1678 else | 1685 else |
| 1679 DCHECK(!enable); | 1686 DCHECK(!enable); |
| 1680 } | 1687 } |
| 1681 | 1688 |
| 1682 void LayerTreeHostImpl::WillBeginImplFrame(const BeginFrameArgs& args) { | 1689 void LayerTreeHostImpl::WillBeginImplFrame(const BeginFrameArgs& args) { |
| 1683 // Sample the frame time now. This time will be used for updating animations | 1690 // Sample the frame time now. This time will be used for updating animations |
| 1684 // when we draw. | 1691 // when we draw. |
| 1685 UpdateCurrentBeginFrameArgs(args); | 1692 UpdateCurrentBeginFrameArgs(args); |
| 1686 // Cache the begin impl frame interval | 1693 // Cache the begin impl frame interval |
| 1687 begin_impl_frame_interval_ = args.interval; | 1694 begin_impl_frame_interval_ = args.interval; |
| 1695 |
| 1696 if (settings().impl_side_painting && |
| 1697 active_visible_tile_is_top_of_raster_queue_) { |
| 1698 // Pre-emptively schedule a draw now visible tiles are at the top of the |
| 1699 // current raster queue, so that we will expect it with our decisions around |
| 1700 // choosing a deadline for the impl frame we are beginning now. |
| 1701 SetNeedsRedraw(); |
| 1702 } |
| 1688 } | 1703 } |
| 1689 | 1704 |
| 1690 void LayerTreeHostImpl::UpdateViewportContainerSizes() { | 1705 void LayerTreeHostImpl::UpdateViewportContainerSizes() { |
| 1691 LayerImpl* inner_container = active_tree_->InnerViewportContainerLayer(); | 1706 LayerImpl* inner_container = active_tree_->InnerViewportContainerLayer(); |
| 1692 LayerImpl* outer_container = active_tree_->OuterViewportContainerLayer(); | 1707 LayerImpl* outer_container = active_tree_->OuterViewportContainerLayer(); |
| 1693 | 1708 |
| 1694 if (!inner_container || !top_controls_manager_) | 1709 if (!inner_container || !top_controls_manager_) |
| 1695 return; | 1710 return; |
| 1696 | 1711 |
| 1697 ViewportAnchor anchor(InnerViewportScrollLayer(), | 1712 ViewportAnchor anchor(InnerViewportScrollLayer(), |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1805 pending_tree_->SetPageScaleDelta(active_tree_->page_scale_delta() / | 1820 pending_tree_->SetPageScaleDelta(active_tree_->page_scale_delta() / |
| 1806 active_tree_->sent_page_scale_delta()); | 1821 active_tree_->sent_page_scale_delta()); |
| 1807 pending_tree_->set_top_controls_delta( | 1822 pending_tree_->set_top_controls_delta( |
| 1808 active_tree_->top_controls_delta() - | 1823 active_tree_->top_controls_delta() - |
| 1809 active_tree_->sent_top_controls_delta()); | 1824 active_tree_->sent_top_controls_delta()); |
| 1810 | 1825 |
| 1811 client_->OnCanDrawStateChanged(CanDraw()); | 1826 client_->OnCanDrawStateChanged(CanDraw()); |
| 1812 TRACE_EVENT_ASYNC_BEGIN0("cc", "PendingTree:waiting", pending_tree_.get()); | 1827 TRACE_EVENT_ASYNC_BEGIN0("cc", "PendingTree:waiting", pending_tree_.get()); |
| 1813 } | 1828 } |
| 1814 | 1829 |
| 1815 void LayerTreeHostImpl::UpdateVisibleTiles() { | |
| 1816 if (tile_manager_ && tile_manager_->UpdateVisibleTiles()) | |
| 1817 DidInitializeVisibleTile(); | |
| 1818 need_to_update_visible_tiles_before_draw_ = false; | |
| 1819 } | |
| 1820 | |
| 1821 void LayerTreeHostImpl::ActivateSyncTree() { | 1830 void LayerTreeHostImpl::ActivateSyncTree() { |
| 1822 need_to_update_visible_tiles_before_draw_ = true; | |
| 1823 | |
| 1824 if (pending_tree_) { | 1831 if (pending_tree_) { |
| 1825 TRACE_EVENT_ASYNC_END0("cc", "PendingTree:waiting", pending_tree_.get()); | 1832 TRACE_EVENT_ASYNC_END0("cc", "PendingTree:waiting", pending_tree_.get()); |
| 1826 | 1833 |
| 1827 active_tree_->SetRootLayerScrollOffsetDelegate(NULL); | 1834 active_tree_->SetRootLayerScrollOffsetDelegate(NULL); |
| 1828 active_tree_->PushPersistedState(pending_tree_.get()); | 1835 active_tree_->PushPersistedState(pending_tree_.get()); |
| 1829 // Process any requests in the UI resource queue. The request queue is | 1836 // Process any requests in the UI resource queue. The request queue is |
| 1830 // given in LayerTreeHost::FinishCommitOnImplThread. This must take place | 1837 // given in LayerTreeHost::FinishCommitOnImplThread. This must take place |
| 1831 // before the swap. | 1838 // before the swap. |
| 1832 pending_tree_->ProcessUIResourceRequestQueue(); | 1839 pending_tree_->ProcessUIResourceRequestQueue(); |
| 1833 | 1840 |
| (...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2017 IsSynchronousSingleThreaded() ? std::numeric_limits<size_t>::max() | 2024 IsSynchronousSingleThreaded() ? std::numeric_limits<size_t>::max() |
| 2018 : settings_.scheduled_raster_task_limit; | 2025 : settings_.scheduled_raster_task_limit; |
| 2019 tile_manager_ = TileManager::Create(this, | 2026 tile_manager_ = TileManager::Create(this, |
| 2020 task_runner, | 2027 task_runner, |
| 2021 resource_pool_.get(), | 2028 resource_pool_.get(), |
| 2022 raster_worker_pool_->AsRasterizer(), | 2029 raster_worker_pool_->AsRasterizer(), |
| 2023 rendering_stats_instrumentation_, | 2030 rendering_stats_instrumentation_, |
| 2024 scheduled_raster_task_limit); | 2031 scheduled_raster_task_limit); |
| 2025 | 2032 |
| 2026 UpdateTileManagerMemoryPolicy(ActualManagedMemoryPolicy()); | 2033 UpdateTileManagerMemoryPolicy(ActualManagedMemoryPolicy()); |
| 2027 need_to_update_visible_tiles_before_draw_ = false; | |
| 2028 } | 2034 } |
| 2029 | 2035 |
| 2030 void LayerTreeHostImpl::CreateResourceAndRasterWorkerPool( | 2036 void LayerTreeHostImpl::CreateResourceAndRasterWorkerPool( |
| 2031 scoped_ptr<RasterWorkerPool>* raster_worker_pool, | 2037 scoped_ptr<RasterWorkerPool>* raster_worker_pool, |
| 2032 scoped_ptr<ResourcePool>* resource_pool, | 2038 scoped_ptr<ResourcePool>* resource_pool, |
| 2033 scoped_ptr<ResourcePool>* staging_resource_pool) { | 2039 scoped_ptr<ResourcePool>* staging_resource_pool) { |
| 2034 base::SingleThreadTaskRunner* task_runner = | 2040 base::SingleThreadTaskRunner* task_runner = |
| 2035 proxy_->HasImplThread() ? proxy_->ImplThreadTaskRunner() | 2041 proxy_->HasImplThread() ? proxy_->ImplThreadTaskRunner() |
| 2036 : proxy_->MainThreadTaskRunner(); | 2042 : proxy_->MainThreadTaskRunner(); |
| 2037 DCHECK(task_runner); | 2043 DCHECK(task_runner); |
| (...skipping 981 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3019 ClearCurrentlyScrollingLayer(); | 3025 ClearCurrentlyScrollingLayer(); |
| 3020 } | 3026 } |
| 3021 if (top_controls_manager_) | 3027 if (top_controls_manager_) |
| 3022 top_controls_manager_->PinchEnd(); | 3028 top_controls_manager_->PinchEnd(); |
| 3023 client_->SetNeedsCommitOnImplThread(); | 3029 client_->SetNeedsCommitOnImplThread(); |
| 3024 // When a pinch ends, we may be displaying content cached at incorrect scales, | 3030 // When a pinch ends, we may be displaying content cached at incorrect scales, |
| 3025 // so updating draw properties and drawing will ensure we are using the right | 3031 // so updating draw properties and drawing will ensure we are using the right |
| 3026 // scales that we want when we're not inside a pinch. | 3032 // scales that we want when we're not inside a pinch. |
| 3027 active_tree_->set_needs_update_draw_properties(); | 3033 active_tree_->set_needs_update_draw_properties(); |
| 3028 SetNeedsRedraw(); | 3034 SetNeedsRedraw(); |
| 3029 // TODO(danakj): Don't set root damage. Just updating draw properties and | |
| 3030 // getting new tiles rastered should be enough! crbug.com/427423 | |
| 3031 SetFullRootLayerDamage(); | |
| 3032 } | 3035 } |
| 3033 | 3036 |
| 3034 static void CollectScrollDeltas(ScrollAndScaleSet* scroll_info, | 3037 static void CollectScrollDeltas(ScrollAndScaleSet* scroll_info, |
| 3035 LayerImpl* layer_impl) { | 3038 LayerImpl* layer_impl) { |
| 3036 if (!layer_impl) | 3039 if (!layer_impl) |
| 3037 return; | 3040 return; |
| 3038 | 3041 |
| 3039 gfx::Vector2d scroll_delta = | 3042 gfx::Vector2d scroll_delta = |
| 3040 gfx::ToFlooredVector2d(layer_impl->ScrollDelta()); | 3043 gfx::ToFlooredVector2d(layer_impl->ScrollDelta()); |
| 3041 if (!scroll_delta.IsZero()) { | 3044 if (!scroll_delta.IsZero()) { |
| (...skipping 472 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3514 } | 3517 } |
| 3515 | 3518 |
| 3516 void LayerTreeHostImpl::UnregisterPictureLayerImpl(PictureLayerImpl* layer) { | 3519 void LayerTreeHostImpl::UnregisterPictureLayerImpl(PictureLayerImpl* layer) { |
| 3517 std::vector<PictureLayerImpl*>::iterator it = | 3520 std::vector<PictureLayerImpl*>::iterator it = |
| 3518 std::find(picture_layers_.begin(), picture_layers_.end(), layer); | 3521 std::find(picture_layers_.begin(), picture_layers_.end(), layer); |
| 3519 DCHECK(it != picture_layers_.end()); | 3522 DCHECK(it != picture_layers_.end()); |
| 3520 picture_layers_.erase(it); | 3523 picture_layers_.erase(it); |
| 3521 } | 3524 } |
| 3522 | 3525 |
| 3523 } // namespace cc | 3526 } // namespace cc |
| OLD | NEW |