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) { |
312 DCHECK(proxy_->IsImplThread()); | 311 DCHECK(proxy_->IsImplThread()); |
313 DidVisibilityChange(this, visible_); | 312 DidVisibilityChange(this, visible_); |
314 animation_registrar_->set_supports_scroll_animations( | 313 animation_registrar_->set_supports_scroll_animations( |
315 proxy_->SupportsImplScrolling()); | 314 proxy_->SupportsImplScrolling()); |
316 | 315 |
317 SetDebugState(settings.initial_debug_state); | 316 SetDebugState(settings.initial_debug_state); |
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
539 render_surface_layer->id(), | 538 render_surface_layer->id(), |
540 render_surface->SurfacePropertyChangedOnlyFromDescendant(), | 539 render_surface->SurfacePropertyChangedOnlyFromDescendant(), |
541 render_surface->content_rect(), | 540 render_surface->content_rect(), |
542 render_surface_layer->mask_layer(), | 541 render_surface_layer->mask_layer(), |
543 render_surface_layer->filters()); | 542 render_surface_layer->filters()); |
544 } | 543 } |
545 } | 544 } |
546 | 545 |
547 void LayerTreeHostImpl::FrameData::AsValueInto( | 546 void LayerTreeHostImpl::FrameData::AsValueInto( |
548 base::debug::TracedValue* value) const { | 547 base::debug::TracedValue* value) const { |
549 value->SetBoolean("contains_incomplete_tile", contains_incomplete_tile); | |
550 value->SetBoolean("has_no_damage", has_no_damage); | 548 value->SetBoolean("has_no_damage", has_no_damage); |
551 | 549 |
552 // Quad data can be quite large, so only dump render passes if we select | 550 // Quad data can be quite large, so only dump render passes if we select |
553 // cc.debug.quads. | 551 // cc.debug.quads. |
554 bool quads_enabled; | 552 bool quads_enabled; |
555 TRACE_EVENT_CATEGORY_GROUP_ENABLED( | 553 TRACE_EVENT_CATEGORY_GROUP_ENABLED( |
556 TRACE_DISABLED_BY_DEFAULT("cc.debug.quads"), &quads_enabled); | 554 TRACE_DISABLED_BY_DEFAULT("cc.debug.quads"), &quads_enabled); |
557 if (quads_enabled) { | 555 if (quads_enabled) { |
558 value->BeginArray("render_passes"); | 556 value->BeginArray("render_passes"); |
559 for (size_t i = 0; i < render_passes.size(); ++i) { | 557 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) { | 887 if (append_quads_data.num_missing_tiles) { |
890 bool layer_has_animating_transform = | 888 bool layer_has_animating_transform = |
891 it->screen_space_transform_is_animating() || | 889 it->screen_space_transform_is_animating() || |
892 it->draw_transform_is_animating(); | 890 it->draw_transform_is_animating(); |
893 if (layer_has_animating_transform) | 891 if (layer_has_animating_transform) |
894 draw_result = DRAW_ABORTED_CHECKERBOARD_ANIMATIONS; | 892 draw_result = DRAW_ABORTED_CHECKERBOARD_ANIMATIONS; |
895 } | 893 } |
896 | 894 |
897 if (append_quads_data.num_incomplete_tiles || | 895 if (append_quads_data.num_incomplete_tiles || |
898 append_quads_data.num_missing_tiles) { | 896 append_quads_data.num_missing_tiles) { |
899 frame->contains_incomplete_tile = true; | |
900 if (RequiresHighResToDraw()) | 897 if (RequiresHighResToDraw()) |
901 draw_result = DRAW_ABORTED_MISSING_HIGH_RES_CONTENT; | 898 draw_result = DRAW_ABORTED_MISSING_HIGH_RES_CONTENT; |
902 } | 899 } |
903 | 900 |
904 occlusion_tracker.LeaveLayer(it); | 901 occlusion_tracker.LeaveLayer(it); |
905 } | 902 } |
906 | 903 |
907 if (have_copy_request || | 904 if (have_copy_request || |
908 output_surface_->capabilities().draw_and_swap_full_viewport_every_frame) | 905 output_surface_->capabilities().draw_and_swap_full_viewport_every_frame) |
909 draw_result = DRAW_SUCCESS; | 906 draw_result = DRAW_SUCCESS; |
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1107 } | 1104 } |
1108 } | 1105 } |
1109 } | 1106 } |
1110 | 1107 |
1111 DrawResult LayerTreeHostImpl::PrepareToDraw(FrameData* frame) { | 1108 DrawResult LayerTreeHostImpl::PrepareToDraw(FrameData* frame) { |
1112 TRACE_EVENT1("cc", | 1109 TRACE_EVENT1("cc", |
1113 "LayerTreeHostImpl::PrepareToDraw", | 1110 "LayerTreeHostImpl::PrepareToDraw", |
1114 "SourceFrameNumber", | 1111 "SourceFrameNumber", |
1115 active_tree_->source_frame_number()); | 1112 active_tree_->source_frame_number()); |
1116 | 1113 |
1117 if (need_to_update_visible_tiles_before_draw_ && | 1114 if (settings().impl_side_painting) |
1118 tile_manager_ && tile_manager_->UpdateVisibleTiles()) { | 1115 tile_manager_->UpdateVisibleTiles(); |
1119 DidInitializeVisibleTile(); | |
1120 } | |
1121 need_to_update_visible_tiles_before_draw_ = true; | |
1122 | 1116 |
1123 UMA_HISTOGRAM_CUSTOM_COUNTS( | 1117 UMA_HISTOGRAM_CUSTOM_COUNTS( |
1124 "Compositing.NumActiveLayers", active_tree_->NumLayers(), 1, 400, 20); | 1118 "Compositing.NumActiveLayers", active_tree_->NumLayers(), 1, 400, 20); |
1125 | 1119 |
1126 bool ok = active_tree_->UpdateDrawProperties(); | 1120 bool ok = active_tree_->UpdateDrawProperties(); |
1127 DCHECK(ok) << "UpdateDrawProperties failed during draw"; | 1121 DCHECK(ok) << "UpdateDrawProperties failed during draw"; |
1128 | 1122 |
1129 frame->render_surface_layer_list = &active_tree_->RenderSurfaceLayerList(); | 1123 frame->render_surface_layer_list = &active_tree_->RenderSurfaceLayerList(); |
1130 frame->render_passes.clear(); | 1124 frame->render_passes.clear(); |
1131 frame->render_passes_by_id.clear(); | 1125 frame->render_passes_by_id.clear(); |
1132 frame->will_draw_layers.clear(); | 1126 frame->will_draw_layers.clear(); |
1133 frame->contains_incomplete_tile = false; | |
1134 frame->has_no_damage = false; | 1127 frame->has_no_damage = false; |
1135 | 1128 |
1136 if (active_tree_->root_layer()) { | 1129 if (active_tree_->root_layer()) { |
1137 gfx::Rect device_viewport_damage_rect = viewport_damage_rect_; | 1130 gfx::Rect device_viewport_damage_rect = viewport_damage_rect_; |
1138 viewport_damage_rect_ = gfx::Rect(); | 1131 viewport_damage_rect_ = gfx::Rect(); |
1139 | 1132 |
1140 active_tree_->root_layer()->render_surface()->damage_tracker()-> | 1133 active_tree_->root_layer()->render_surface()->damage_tracker()-> |
1141 AddDamageNextUpdate(device_viewport_damage_rect); | 1134 AddDamageNextUpdate(device_viewport_damage_rect); |
1142 } | 1135 } |
1143 | 1136 |
(...skipping 10 matching lines...) Expand all Loading... |
1154 } | 1147 } |
1155 | 1148 |
1156 void LayerTreeHostImpl::EvictTexturesForTesting() { | 1149 void LayerTreeHostImpl::EvictTexturesForTesting() { |
1157 EnforceManagedMemoryPolicy(ManagedMemoryPolicy(0)); | 1150 EnforceManagedMemoryPolicy(ManagedMemoryPolicy(0)); |
1158 } | 1151 } |
1159 | 1152 |
1160 void LayerTreeHostImpl::BlockNotifyReadyToActivateForTesting(bool block) { | 1153 void LayerTreeHostImpl::BlockNotifyReadyToActivateForTesting(bool block) { |
1161 NOTREACHED(); | 1154 NOTREACHED(); |
1162 } | 1155 } |
1163 | 1156 |
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() { | 1157 void LayerTreeHostImpl::ResetTreesForTesting() { |
1172 if (active_tree_) | 1158 if (active_tree_) |
1173 active_tree_->DetachLayerTree(); | 1159 active_tree_->DetachLayerTree(); |
1174 active_tree_ = LayerTreeImpl::create(this); | 1160 active_tree_ = LayerTreeImpl::create(this); |
1175 if (pending_tree_) | 1161 if (pending_tree_) |
1176 pending_tree_->DetachLayerTree(); | 1162 pending_tree_->DetachLayerTree(); |
1177 pending_tree_ = nullptr; | 1163 pending_tree_ = nullptr; |
1178 if (recycle_tree_) | 1164 if (recycle_tree_) |
1179 recycle_tree_->DetachLayerTree(); | 1165 recycle_tree_->DetachLayerTree(); |
1180 recycle_tree_ = nullptr; | 1166 recycle_tree_ = nullptr; |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1252 DidModifyTilePriorities(); | 1238 DidModifyTilePriorities(); |
1253 } | 1239 } |
1254 | 1240 |
1255 void LayerTreeHostImpl::DidModifyTilePriorities() { | 1241 void LayerTreeHostImpl::DidModifyTilePriorities() { |
1256 DCHECK(settings_.impl_side_painting); | 1242 DCHECK(settings_.impl_side_painting); |
1257 // Mark priorities as dirty and schedule a ManageTiles(). | 1243 // Mark priorities as dirty and schedule a ManageTiles(). |
1258 tile_priorities_dirty_ = true; | 1244 tile_priorities_dirty_ = true; |
1259 client_->SetNeedsManageTilesOnImplThread(); | 1245 client_->SetNeedsManageTilesOnImplThread(); |
1260 } | 1246 } |
1261 | 1247 |
1262 void LayerTreeHostImpl::DidInitializeVisibleTile() { | |
1263 if (client_ && !client_->IsInsideDraw()) | |
1264 client_->DidInitializeVisibleTileOnImplThread(); | |
1265 } | |
1266 | |
1267 void LayerTreeHostImpl::GetPictureLayerImplPairs( | 1248 void LayerTreeHostImpl::GetPictureLayerImplPairs( |
1268 std::vector<PictureLayerImpl::Pair>* layer_pairs) const { | 1249 std::vector<PictureLayerImpl::Pair>* layer_pairs) const { |
1269 DCHECK(layer_pairs->empty()); | 1250 DCHECK(layer_pairs->empty()); |
1270 for (std::vector<PictureLayerImpl*>::const_iterator it = | 1251 for (std::vector<PictureLayerImpl*>::const_iterator it = |
1271 picture_layers_.begin(); | 1252 picture_layers_.begin(); |
1272 it != picture_layers_.end(); | 1253 it != picture_layers_.end(); |
1273 ++it) { | 1254 ++it) { |
1274 PictureLayerImpl* layer = *it; | 1255 PictureLayerImpl* layer = *it; |
1275 | 1256 |
1276 // TODO(vmpstr): Iterators and should handle this instead. crbug.com/381704 | 1257 // TODO(vmpstr): Iterators and should handle this instead. crbug.com/381704 |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1330 if (layer_impl) | 1311 if (layer_impl) |
1331 layer_impl->NotifyTileStateChanged(tile); | 1312 layer_impl->NotifyTileStateChanged(tile); |
1332 } | 1313 } |
1333 | 1314 |
1334 if (pending_tree_) { | 1315 if (pending_tree_) { |
1335 LayerImpl* layer_impl = | 1316 LayerImpl* layer_impl = |
1336 pending_tree_->FindPendingTreeLayerById(tile->layer_id()); | 1317 pending_tree_->FindPendingTreeLayerById(tile->layer_id()); |
1337 if (layer_impl) | 1318 if (layer_impl) |
1338 layer_impl->NotifyTileStateChanged(tile); | 1319 layer_impl->NotifyTileStateChanged(tile); |
1339 } | 1320 } |
| 1321 |
| 1322 // Check for a non-null active tree to avoid doing this during shutdown. |
| 1323 if (active_tree_ && !client_->IsInsideDraw() && |
| 1324 tile->is_active_and_visible_priority()) { |
| 1325 // The LayerImpl::NotifyTileStateChanged() should damage the layer, so this |
| 1326 // redraw will make those tiles be displayed. |
| 1327 SetNeedsRedraw(); |
| 1328 } |
1340 } | 1329 } |
1341 | 1330 |
1342 void LayerTreeHostImpl::SetMemoryPolicy(const ManagedMemoryPolicy& policy) { | 1331 void LayerTreeHostImpl::SetMemoryPolicy(const ManagedMemoryPolicy& policy) { |
1343 SetManagedMemoryPolicy(policy, zero_budget_); | 1332 SetManagedMemoryPolicy(policy, zero_budget_); |
1344 } | 1333 } |
1345 | 1334 |
1346 void LayerTreeHostImpl::SetTreeActivationCallback( | 1335 void LayerTreeHostImpl::SetTreeActivationCallback( |
1347 const base::Closure& callback) { | 1336 const base::Closure& callback) { |
1348 DCHECK(proxy_->IsImplThread()); | 1337 DCHECK(proxy_->IsImplThread()); |
1349 DCHECK(settings_.impl_side_painting || callback.is_null()); | 1338 DCHECK(settings_.impl_side_painting || callback.is_null()); |
(...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1678 else | 1667 else |
1679 DCHECK(!enable); | 1668 DCHECK(!enable); |
1680 } | 1669 } |
1681 | 1670 |
1682 void LayerTreeHostImpl::WillBeginImplFrame(const BeginFrameArgs& args) { | 1671 void LayerTreeHostImpl::WillBeginImplFrame(const BeginFrameArgs& args) { |
1683 // Sample the frame time now. This time will be used for updating animations | 1672 // Sample the frame time now. This time will be used for updating animations |
1684 // when we draw. | 1673 // when we draw. |
1685 UpdateCurrentBeginFrameArgs(args); | 1674 UpdateCurrentBeginFrameArgs(args); |
1686 // Cache the begin impl frame interval | 1675 // Cache the begin impl frame interval |
1687 begin_impl_frame_interval_ = args.interval; | 1676 begin_impl_frame_interval_ = args.interval; |
| 1677 |
| 1678 if (settings().impl_side_painting && |
| 1679 tile_manager_->is_top_priority_uninitialized_tile_visible_and_active()) { |
| 1680 // Pre-emptively schedule a draw now if any visible tile is being created, |
| 1681 // so that we will expect it with our decisions for choosing a deadline for |
| 1682 // the impl frame we are beginning now. |
| 1683 SetNeedsRedraw(); |
| 1684 } |
1688 } | 1685 } |
1689 | 1686 |
1690 void LayerTreeHostImpl::UpdateViewportContainerSizes() { | 1687 void LayerTreeHostImpl::UpdateViewportContainerSizes() { |
1691 LayerImpl* inner_container = active_tree_->InnerViewportContainerLayer(); | 1688 LayerImpl* inner_container = active_tree_->InnerViewportContainerLayer(); |
1692 LayerImpl* outer_container = active_tree_->OuterViewportContainerLayer(); | 1689 LayerImpl* outer_container = active_tree_->OuterViewportContainerLayer(); |
1693 | 1690 |
1694 if (!inner_container || !top_controls_manager_) | 1691 if (!inner_container || !top_controls_manager_) |
1695 return; | 1692 return; |
1696 | 1693 |
1697 ViewportAnchor anchor(InnerViewportScrollLayer(), | 1694 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() / | 1802 pending_tree_->SetPageScaleDelta(active_tree_->page_scale_delta() / |
1806 active_tree_->sent_page_scale_delta()); | 1803 active_tree_->sent_page_scale_delta()); |
1807 pending_tree_->set_top_controls_delta( | 1804 pending_tree_->set_top_controls_delta( |
1808 active_tree_->top_controls_delta() - | 1805 active_tree_->top_controls_delta() - |
1809 active_tree_->sent_top_controls_delta()); | 1806 active_tree_->sent_top_controls_delta()); |
1810 | 1807 |
1811 client_->OnCanDrawStateChanged(CanDraw()); | 1808 client_->OnCanDrawStateChanged(CanDraw()); |
1812 TRACE_EVENT_ASYNC_BEGIN0("cc", "PendingTree:waiting", pending_tree_.get()); | 1809 TRACE_EVENT_ASYNC_BEGIN0("cc", "PendingTree:waiting", pending_tree_.get()); |
1813 } | 1810 } |
1814 | 1811 |
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() { | 1812 void LayerTreeHostImpl::ActivateSyncTree() { |
1822 need_to_update_visible_tiles_before_draw_ = true; | |
1823 | |
1824 if (pending_tree_) { | 1813 if (pending_tree_) { |
1825 TRACE_EVENT_ASYNC_END0("cc", "PendingTree:waiting", pending_tree_.get()); | 1814 TRACE_EVENT_ASYNC_END0("cc", "PendingTree:waiting", pending_tree_.get()); |
1826 | 1815 |
1827 active_tree_->SetRootLayerScrollOffsetDelegate(NULL); | 1816 active_tree_->SetRootLayerScrollOffsetDelegate(NULL); |
1828 active_tree_->PushPersistedState(pending_tree_.get()); | 1817 active_tree_->PushPersistedState(pending_tree_.get()); |
1829 // Process any requests in the UI resource queue. The request queue is | 1818 // Process any requests in the UI resource queue. The request queue is |
1830 // given in LayerTreeHost::FinishCommitOnImplThread. This must take place | 1819 // given in LayerTreeHost::FinishCommitOnImplThread. This must take place |
1831 // before the swap. | 1820 // before the swap. |
1832 pending_tree_->ProcessUIResourceRequestQueue(); | 1821 pending_tree_->ProcessUIResourceRequestQueue(); |
1833 | 1822 |
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2017 IsSynchronousSingleThreaded() ? std::numeric_limits<size_t>::max() | 2006 IsSynchronousSingleThreaded() ? std::numeric_limits<size_t>::max() |
2018 : settings_.scheduled_raster_task_limit; | 2007 : settings_.scheduled_raster_task_limit; |
2019 tile_manager_ = TileManager::Create(this, | 2008 tile_manager_ = TileManager::Create(this, |
2020 task_runner, | 2009 task_runner, |
2021 resource_pool_.get(), | 2010 resource_pool_.get(), |
2022 raster_worker_pool_->AsRasterizer(), | 2011 raster_worker_pool_->AsRasterizer(), |
2023 rendering_stats_instrumentation_, | 2012 rendering_stats_instrumentation_, |
2024 scheduled_raster_task_limit); | 2013 scheduled_raster_task_limit); |
2025 | 2014 |
2026 UpdateTileManagerMemoryPolicy(ActualManagedMemoryPolicy()); | 2015 UpdateTileManagerMemoryPolicy(ActualManagedMemoryPolicy()); |
2027 need_to_update_visible_tiles_before_draw_ = false; | |
2028 } | 2016 } |
2029 | 2017 |
2030 void LayerTreeHostImpl::CreateResourceAndRasterWorkerPool( | 2018 void LayerTreeHostImpl::CreateResourceAndRasterWorkerPool( |
2031 scoped_ptr<RasterWorkerPool>* raster_worker_pool, | 2019 scoped_ptr<RasterWorkerPool>* raster_worker_pool, |
2032 scoped_ptr<ResourcePool>* resource_pool, | 2020 scoped_ptr<ResourcePool>* resource_pool, |
2033 scoped_ptr<ResourcePool>* staging_resource_pool) { | 2021 scoped_ptr<ResourcePool>* staging_resource_pool) { |
2034 base::SingleThreadTaskRunner* task_runner = | 2022 base::SingleThreadTaskRunner* task_runner = |
2035 proxy_->HasImplThread() ? proxy_->ImplThreadTaskRunner() | 2023 proxy_->HasImplThread() ? proxy_->ImplThreadTaskRunner() |
2036 : proxy_->MainThreadTaskRunner(); | 2024 : proxy_->MainThreadTaskRunner(); |
2037 DCHECK(task_runner); | 2025 DCHECK(task_runner); |
(...skipping 981 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3019 ClearCurrentlyScrollingLayer(); | 3007 ClearCurrentlyScrollingLayer(); |
3020 } | 3008 } |
3021 if (top_controls_manager_) | 3009 if (top_controls_manager_) |
3022 top_controls_manager_->PinchEnd(); | 3010 top_controls_manager_->PinchEnd(); |
3023 client_->SetNeedsCommitOnImplThread(); | 3011 client_->SetNeedsCommitOnImplThread(); |
3024 // When a pinch ends, we may be displaying content cached at incorrect scales, | 3012 // 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 | 3013 // 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. | 3014 // scales that we want when we're not inside a pinch. |
3027 active_tree_->set_needs_update_draw_properties(); | 3015 active_tree_->set_needs_update_draw_properties(); |
3028 SetNeedsRedraw(); | 3016 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 } | 3017 } |
3033 | 3018 |
3034 static void CollectScrollDeltas(ScrollAndScaleSet* scroll_info, | 3019 static void CollectScrollDeltas(ScrollAndScaleSet* scroll_info, |
3035 LayerImpl* layer_impl) { | 3020 LayerImpl* layer_impl) { |
3036 if (!layer_impl) | 3021 if (!layer_impl) |
3037 return; | 3022 return; |
3038 | 3023 |
3039 gfx::Vector2d scroll_delta = | 3024 gfx::Vector2d scroll_delta = |
3040 gfx::ToFlooredVector2d(layer_impl->ScrollDelta()); | 3025 gfx::ToFlooredVector2d(layer_impl->ScrollDelta()); |
3041 if (!scroll_delta.IsZero()) { | 3026 if (!scroll_delta.IsZero()) { |
(...skipping 472 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3514 } | 3499 } |
3515 | 3500 |
3516 void LayerTreeHostImpl::UnregisterPictureLayerImpl(PictureLayerImpl* layer) { | 3501 void LayerTreeHostImpl::UnregisterPictureLayerImpl(PictureLayerImpl* layer) { |
3517 std::vector<PictureLayerImpl*>::iterator it = | 3502 std::vector<PictureLayerImpl*>::iterator it = |
3518 std::find(picture_layers_.begin(), picture_layers_.end(), layer); | 3503 std::find(picture_layers_.begin(), picture_layers_.end(), layer); |
3519 DCHECK(it != picture_layers_.end()); | 3504 DCHECK(it != picture_layers_.end()); |
3520 picture_layers_.erase(it); | 3505 picture_layers_.erase(it); |
3521 } | 3506 } |
3522 | 3507 |
3523 } // namespace cc | 3508 } // namespace cc |
OLD | NEW |