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 #include <map> | 9 #include <map> |
10 #include <set> | 10 #include <set> |
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
213 scroll_affects_scroll_handler_(false), | 213 scroll_affects_scroll_handler_(false), |
214 scroll_layer_id_when_mouse_over_scrollbar_(0), | 214 scroll_layer_id_when_mouse_over_scrollbar_(0), |
215 tile_priorities_dirty_(false), | 215 tile_priorities_dirty_(false), |
216 root_layer_scroll_offset_delegate_(NULL), | 216 root_layer_scroll_offset_delegate_(NULL), |
217 settings_(settings), | 217 settings_(settings), |
218 visible_(true), | 218 visible_(true), |
219 cached_managed_memory_policy_( | 219 cached_managed_memory_policy_( |
220 GetDefaultMemoryAllocationLimit(), | 220 GetDefaultMemoryAllocationLimit(), |
221 gpu::MemoryAllocation::CUTOFF_ALLOW_EVERYTHING, | 221 gpu::MemoryAllocation::CUTOFF_ALLOW_EVERYTHING, |
222 ManagedMemoryPolicy::kDefaultNumResourcesLimit), | 222 ManagedMemoryPolicy::kDefaultNumResourcesLimit), |
| 223 // Must be initialized after settings_ and proxy_. |
| 224 tile_manager_( |
| 225 TileManager::Create(this, |
| 226 GetTaskRunner(), |
| 227 IsSynchronousSingleThreaded() |
| 228 ? std::numeric_limits<size_t>::max() |
| 229 : settings.scheduled_raster_task_limit)), |
223 pinch_gesture_active_(false), | 230 pinch_gesture_active_(false), |
224 pinch_gesture_end_should_clear_scrolling_layer_(false), | 231 pinch_gesture_end_should_clear_scrolling_layer_(false), |
225 fps_counter_(FrameRateCounter::Create(proxy_->HasImplThread())), | 232 fps_counter_(FrameRateCounter::Create(proxy_->HasImplThread())), |
226 paint_time_counter_(PaintTimeCounter::Create()), | 233 paint_time_counter_(PaintTimeCounter::Create()), |
227 memory_history_(MemoryHistory::Create()), | 234 memory_history_(MemoryHistory::Create()), |
228 debug_rect_history_(DebugRectHistory::Create()), | 235 debug_rect_history_(DebugRectHistory::Create()), |
229 texture_mailbox_deleter_(new TextureMailboxDeleter(GetTaskRunner())), | 236 texture_mailbox_deleter_(new TextureMailboxDeleter(GetTaskRunner())), |
230 max_memory_needed_bytes_(0), | 237 max_memory_needed_bytes_(0), |
231 device_scale_factor_(1.f), | 238 device_scale_factor_(1.f), |
232 resourceless_software_draw_(false), | 239 resourceless_software_draw_(false), |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
299 active_tree_->Shutdown(); | 306 active_tree_->Shutdown(); |
300 recycle_tree_ = nullptr; | 307 recycle_tree_ = nullptr; |
301 pending_tree_ = nullptr; | 308 pending_tree_ = nullptr; |
302 active_tree_ = nullptr; | 309 active_tree_ = nullptr; |
303 | 310 |
304 if (animation_host_) { | 311 if (animation_host_) { |
305 animation_host_->ClearTimelines(); | 312 animation_host_->ClearTimelines(); |
306 animation_host_->SetMutatorHostClient(nullptr); | 313 animation_host_->SetMutatorHostClient(nullptr); |
307 } | 314 } |
308 | 315 |
309 DestroyTileManager(); | 316 CleanUpTileManager(); |
310 } | 317 } |
311 | 318 |
312 void LayerTreeHostImpl::BeginMainFrameAborted(CommitEarlyOutReason reason) { | 319 void LayerTreeHostImpl::BeginMainFrameAborted(CommitEarlyOutReason reason) { |
313 // If the begin frame data was handled, then scroll and scale set was applied | 320 // If the begin frame data was handled, then scroll and scale set was applied |
314 // by the main thread, so the active tree needs to be updated as if these sent | 321 // by the main thread, so the active tree needs to be updated as if these sent |
315 // values were applied and committed. | 322 // values were applied and committed. |
316 if (CommitEarlyOutHandledCommit(reason)) | 323 if (CommitEarlyOutHandledCommit(reason)) |
317 active_tree_->ApplySentScrollAndScaleDeltasFromAbortedCommit(); | 324 active_tree_->ApplySentScrollAndScaleDeltasFromAbortedCommit(); |
318 } | 325 } |
319 | 326 |
(...skipping 21 matching lines...) Expand all Loading... |
341 UpdateTreeResourcesForGpuRasterizationIfNeeded(); | 348 UpdateTreeResourcesForGpuRasterizationIfNeeded(); |
342 sync_tree()->set_needs_update_draw_properties(); | 349 sync_tree()->set_needs_update_draw_properties(); |
343 | 350 |
344 // We need an update immediately post-commit to have the opportunity to create | 351 // We need an update immediately post-commit to have the opportunity to create |
345 // tilings. Because invalidations may be coming from the main thread, it's | 352 // tilings. Because invalidations may be coming from the main thread, it's |
346 // safe to do an update for lcd text at this point and see if lcd text needs | 353 // safe to do an update for lcd text at this point and see if lcd text needs |
347 // to be disabled on any layers. | 354 // to be disabled on any layers. |
348 bool update_lcd_text = true; | 355 bool update_lcd_text = true; |
349 sync_tree()->UpdateDrawProperties(update_lcd_text); | 356 sync_tree()->UpdateDrawProperties(update_lcd_text); |
350 // Start working on newly created tiles immediately if needed. | 357 // Start working on newly created tiles immediately if needed. |
351 if (tile_manager_ && tile_priorities_dirty_) { | 358 // TODO(vmpstr): Investigate always having PrepareTiles issue |
352 PrepareTiles(); | 359 // NotifyReadyToActivate, instead of handling it here. |
353 } else { | 360 bool did_prepare_tiles = PrepareTiles(); |
| 361 if (!did_prepare_tiles) { |
354 NotifyReadyToActivate(); | 362 NotifyReadyToActivate(); |
355 | 363 |
356 // Ensure we get ReadyToDraw signal even when PrepareTiles not run. This | 364 // Ensure we get ReadyToDraw signal even when PrepareTiles not run. This |
357 // is important for SingleThreadProxy and impl-side painting case. For | 365 // is important for SingleThreadProxy and impl-side painting case. For |
358 // STP, we commit to active tree and RequiresHighResToDraw, and set | 366 // STP, we commit to active tree and RequiresHighResToDraw, and set |
359 // Scheduler to wait for ReadyToDraw signal to avoid Checkerboard. | 367 // Scheduler to wait for ReadyToDraw signal to avoid Checkerboard. |
360 if (proxy_->CommitToActiveTree()) | 368 if (proxy_->CommitToActiveTree()) |
361 NotifyReadyToDraw(); | 369 NotifyReadyToDraw(); |
362 } | 370 } |
363 | 371 |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
419 (CurrentlyScrollingLayer() != InnerViewportScrollLayer() && | 427 (CurrentlyScrollingLayer() != InnerViewportScrollLayer() && |
420 CurrentlyScrollingLayer() != OuterViewportScrollLayer())) { | 428 CurrentlyScrollingLayer() != OuterViewportScrollLayer())) { |
421 AnimateInput(monotonic_time); | 429 AnimateInput(monotonic_time); |
422 } | 430 } |
423 AnimatePageScale(monotonic_time); | 431 AnimatePageScale(monotonic_time); |
424 AnimateLayers(monotonic_time); | 432 AnimateLayers(monotonic_time); |
425 AnimateScrollbars(monotonic_time); | 433 AnimateScrollbars(monotonic_time); |
426 AnimateTopControls(monotonic_time); | 434 AnimateTopControls(monotonic_time); |
427 } | 435 } |
428 | 436 |
429 void LayerTreeHostImpl::PrepareTiles() { | 437 bool LayerTreeHostImpl::PrepareTiles() { |
430 if (!tile_manager_) | |
431 return; | |
432 if (!tile_priorities_dirty_) | 438 if (!tile_priorities_dirty_) |
433 return; | 439 return false; |
434 | 440 |
435 client_->WillPrepareTiles(); | 441 client_->WillPrepareTiles(); |
436 tile_priorities_dirty_ = false; | 442 bool did_prepare_tiles = tile_manager_->PrepareTiles(global_tile_state_); |
437 tile_manager_->PrepareTiles(global_tile_state_); | 443 if (did_prepare_tiles) |
| 444 tile_priorities_dirty_ = false; |
438 client_->DidPrepareTiles(); | 445 client_->DidPrepareTiles(); |
| 446 return did_prepare_tiles; |
439 } | 447 } |
440 | 448 |
441 void LayerTreeHostImpl::StartPageScaleAnimation( | 449 void LayerTreeHostImpl::StartPageScaleAnimation( |
442 const gfx::Vector2d& target_offset, | 450 const gfx::Vector2d& target_offset, |
443 bool anchor_point, | 451 bool anchor_point, |
444 float page_scale, | 452 float page_scale, |
445 base::TimeDelta duration) { | 453 base::TimeDelta duration) { |
446 if (!InnerViewportScrollLayer()) | 454 if (!InnerViewportScrollLayer()) |
447 return; | 455 return; |
448 | 456 |
(...skipping 729 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1178 recycle_tree_->DetachLayerTree(); | 1186 recycle_tree_->DetachLayerTree(); |
1179 recycle_tree_ = nullptr; | 1187 recycle_tree_ = nullptr; |
1180 } | 1188 } |
1181 | 1189 |
1182 size_t LayerTreeHostImpl::SourceAnimationFrameNumberForTesting() const { | 1190 size_t LayerTreeHostImpl::SourceAnimationFrameNumberForTesting() const { |
1183 return fps_counter_->current_frame_number(); | 1191 return fps_counter_->current_frame_number(); |
1184 } | 1192 } |
1185 | 1193 |
1186 void LayerTreeHostImpl::UpdateTileManagerMemoryPolicy( | 1194 void LayerTreeHostImpl::UpdateTileManagerMemoryPolicy( |
1187 const ManagedMemoryPolicy& policy) { | 1195 const ManagedMemoryPolicy& policy) { |
1188 if (!tile_manager_) | 1196 if (!resource_pool_) |
1189 return; | 1197 return; |
1190 | 1198 |
1191 global_tile_state_.hard_memory_limit_in_bytes = 0; | 1199 global_tile_state_.hard_memory_limit_in_bytes = 0; |
1192 global_tile_state_.soft_memory_limit_in_bytes = 0; | 1200 global_tile_state_.soft_memory_limit_in_bytes = 0; |
1193 if (visible_ && policy.bytes_limit_when_visible > 0) { | 1201 if (visible_ && policy.bytes_limit_when_visible > 0) { |
1194 global_tile_state_.hard_memory_limit_in_bytes = | 1202 global_tile_state_.hard_memory_limit_in_bytes = |
1195 policy.bytes_limit_when_visible; | 1203 policy.bytes_limit_when_visible; |
1196 global_tile_state_.soft_memory_limit_in_bytes = | 1204 global_tile_state_.soft_memory_limit_in_bytes = |
1197 (static_cast<int64>(global_tile_state_.hard_memory_limit_in_bytes) * | 1205 (static_cast<int64>(global_tile_state_.hard_memory_limit_in_bytes) * |
1198 settings_.max_memory_for_prepaint_percentage) / | 1206 settings_.max_memory_for_prepaint_percentage) / |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1330 SetNeedsRedraw(); | 1338 SetNeedsRedraw(); |
1331 } | 1339 } |
1332 } | 1340 } |
1333 | 1341 |
1334 void LayerTreeHostImpl::SetMemoryPolicy(const ManagedMemoryPolicy& policy) { | 1342 void LayerTreeHostImpl::SetMemoryPolicy(const ManagedMemoryPolicy& policy) { |
1335 SetManagedMemoryPolicy(policy); | 1343 SetManagedMemoryPolicy(policy); |
1336 | 1344 |
1337 // This is short term solution to synchronously drop tile resources when | 1345 // This is short term solution to synchronously drop tile resources when |
1338 // using synchronous compositing to avoid memory usage regression. | 1346 // using synchronous compositing to avoid memory usage regression. |
1339 // TODO(boliu): crbug.com/499004 to track removing this. | 1347 // TODO(boliu): crbug.com/499004 to track removing this. |
1340 if (!policy.bytes_limit_when_visible && tile_manager_ && | 1348 if (!policy.bytes_limit_when_visible && resource_pool_ && |
1341 settings_.using_synchronous_renderer_compositor) { | 1349 settings_.using_synchronous_renderer_compositor) { |
1342 ReleaseTreeResources(); | 1350 ReleaseTreeResources(); |
1343 // TileManager destruction will synchronoulsy wait for all tile workers to | 1351 CleanUpTileManager(); |
1344 // be cancelled or completed. This allows all resources to be freed | 1352 CreateTileManagerResources(); |
1345 // synchronously. | |
1346 DestroyTileManager(); | |
1347 CreateAndSetTileManager(); | |
1348 RecreateTreeResources(); | 1353 RecreateTreeResources(); |
1349 } | 1354 } |
1350 } | 1355 } |
1351 | 1356 |
1352 void LayerTreeHostImpl::SetTreeActivationCallback( | 1357 void LayerTreeHostImpl::SetTreeActivationCallback( |
1353 const base::Closure& callback) { | 1358 const base::Closure& callback) { |
1354 DCHECK(proxy_->IsImplThread()); | 1359 DCHECK(proxy_->IsImplThread()); |
1355 tree_activation_callback_ = callback; | 1360 tree_activation_callback_ = callback; |
1356 } | 1361 } |
1357 | 1362 |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1444 } | 1449 } |
1445 | 1450 |
1446 void LayerTreeHostImpl::ReclaimResources(const CompositorFrameAck* ack) { | 1451 void LayerTreeHostImpl::ReclaimResources(const CompositorFrameAck* ack) { |
1447 // TODO(piman): We may need to do some validation on this ack before | 1452 // TODO(piman): We may need to do some validation on this ack before |
1448 // processing it. | 1453 // processing it. |
1449 if (renderer_) | 1454 if (renderer_) |
1450 renderer_->ReceiveSwapBuffersAck(*ack); | 1455 renderer_->ReceiveSwapBuffersAck(*ack); |
1451 | 1456 |
1452 // In OOM, we now might be able to release more resources that were held | 1457 // In OOM, we now might be able to release more resources that were held |
1453 // because they were exported. | 1458 // because they were exported. |
1454 if (tile_manager_) { | 1459 if (resource_pool_) { |
1455 DCHECK(resource_pool_); | |
1456 | |
1457 resource_pool_->CheckBusyResources(false); | 1460 resource_pool_->CheckBusyResources(false); |
1458 resource_pool_->ReduceResourceUsage(); | 1461 resource_pool_->ReduceResourceUsage(); |
1459 } | 1462 } |
1460 // If we're not visible, we likely released resources, so we want to | 1463 // If we're not visible, we likely released resources, so we want to |
1461 // aggressively flush here to make sure those DeleteTextures make it to the | 1464 // aggressively flush here to make sure those DeleteTextures make it to the |
1462 // GPU process to free up the memory. | 1465 // GPU process to free up the memory. |
1463 if (output_surface_->context_provider() && !visible_) { | 1466 if (output_surface_->context_provider() && !visible_) { |
1464 output_surface_->context_provider()->ContextGL()->ShallowFlushCHROMIUM(); | 1467 output_surface_->context_provider()->ContextGL()->ShallowFlushCHROMIUM(); |
1465 } | 1468 } |
1466 } | 1469 } |
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1691 use_msaa_ = use_msaa; | 1694 use_msaa_ = use_msaa; |
1692 | 1695 |
1693 tree_resources_for_gpu_rasterization_dirty_ = true; | 1696 tree_resources_for_gpu_rasterization_dirty_ = true; |
1694 } | 1697 } |
1695 | 1698 |
1696 void LayerTreeHostImpl::UpdateTreeResourcesForGpuRasterizationIfNeeded() { | 1699 void LayerTreeHostImpl::UpdateTreeResourcesForGpuRasterizationIfNeeded() { |
1697 if (!tree_resources_for_gpu_rasterization_dirty_) | 1700 if (!tree_resources_for_gpu_rasterization_dirty_) |
1698 return; | 1701 return; |
1699 | 1702 |
1700 // Clean up and replace existing tile manager with another one that uses | 1703 // Clean up and replace existing tile manager with another one that uses |
1701 // appropriate rasterizer. | 1704 // appropriate rasterizer. Only do this however if we already have a |
| 1705 // resource pool, since otherwise we might not be able to create a new |
| 1706 // one. |
1702 ReleaseTreeResources(); | 1707 ReleaseTreeResources(); |
1703 if (tile_manager_) { | 1708 if (resource_pool_) { |
1704 DestroyTileManager(); | 1709 CleanUpTileManager(); |
1705 CreateAndSetTileManager(); | 1710 CreateTileManagerResources(); |
1706 } | 1711 } |
1707 RecreateTreeResources(); | 1712 RecreateTreeResources(); |
1708 | 1713 |
1709 // We have released tilings for both active and pending tree. | 1714 // We have released tilings for both active and pending tree. |
1710 // We would not have any content to draw until the pending tree is activated. | 1715 // We would not have any content to draw until the pending tree is activated. |
1711 // Prevent the active tree from drawing until activation. | 1716 // Prevent the active tree from drawing until activation. |
1712 SetRequiresHighResToDraw(); | 1717 SetRequiresHighResToDraw(); |
1713 | 1718 |
1714 tree_resources_for_gpu_rasterization_dirty_ = false; | 1719 tree_resources_for_gpu_rasterization_dirty_ = false; |
1715 } | 1720 } |
(...skipping 343 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2059 | 2064 |
2060 // See note in LayerTreeImpl::UpdateDrawProperties. Renderer needs to be | 2065 // See note in LayerTreeImpl::UpdateDrawProperties. Renderer needs to be |
2061 // initialized to get max texture size. Also, after releasing resources, | 2066 // initialized to get max texture size. Also, after releasing resources, |
2062 // trees need another update to generate new ones. | 2067 // trees need another update to generate new ones. |
2063 active_tree_->set_needs_update_draw_properties(); | 2068 active_tree_->set_needs_update_draw_properties(); |
2064 if (pending_tree_) | 2069 if (pending_tree_) |
2065 pending_tree_->set_needs_update_draw_properties(); | 2070 pending_tree_->set_needs_update_draw_properties(); |
2066 client_->UpdateRendererCapabilitiesOnImplThread(); | 2071 client_->UpdateRendererCapabilitiesOnImplThread(); |
2067 } | 2072 } |
2068 | 2073 |
2069 void LayerTreeHostImpl::CreateAndSetTileManager() { | 2074 void LayerTreeHostImpl::CreateTileManagerResources() { |
2070 DCHECK(!tile_manager_); | |
2071 DCHECK(output_surface_); | |
2072 DCHECK(resource_provider_); | |
2073 | |
2074 CreateResourceAndTileTaskWorkerPool(&tile_task_worker_pool_, &resource_pool_, | 2075 CreateResourceAndTileTaskWorkerPool(&tile_task_worker_pool_, &resource_pool_, |
2075 &staging_resource_pool_); | 2076 &staging_resource_pool_); |
2076 DCHECK(tile_task_worker_pool_); | 2077 tile_manager_->SetResources( |
2077 DCHECK(resource_pool_); | 2078 resource_pool_.get(), tile_task_worker_pool_->AsTileTaskRunner(), |
2078 | |
2079 DCHECK(GetTaskRunner()); | |
2080 size_t scheduled_raster_task_limit = | |
2081 IsSynchronousSingleThreaded() ? std::numeric_limits<size_t>::max() | 2079 IsSynchronousSingleThreaded() ? std::numeric_limits<size_t>::max() |
2082 : settings_.scheduled_raster_task_limit; | 2080 : settings_.scheduled_raster_task_limit); |
2083 tile_manager_ = TileManager::Create( | |
2084 this, GetTaskRunner(), resource_pool_.get(), | |
2085 tile_task_worker_pool_->AsTileTaskRunner(), scheduled_raster_task_limit); | |
2086 | |
2087 UpdateTileManagerMemoryPolicy(ActualManagedMemoryPolicy()); | 2081 UpdateTileManagerMemoryPolicy(ActualManagedMemoryPolicy()); |
2088 } | 2082 } |
2089 | 2083 |
2090 void LayerTreeHostImpl::CreateResourceAndTileTaskWorkerPool( | 2084 void LayerTreeHostImpl::CreateResourceAndTileTaskWorkerPool( |
2091 scoped_ptr<TileTaskWorkerPool>* tile_task_worker_pool, | 2085 scoped_ptr<TileTaskWorkerPool>* tile_task_worker_pool, |
2092 scoped_ptr<ResourcePool>* resource_pool, | 2086 scoped_ptr<ResourcePool>* resource_pool, |
2093 scoped_ptr<ResourcePool>* staging_resource_pool) { | 2087 scoped_ptr<ResourcePool>* staging_resource_pool) { |
2094 DCHECK(GetTaskRunner()); | 2088 DCHECK(GetTaskRunner()); |
2095 | 2089 |
2096 // Pass the single-threaded synchronous task graph runner to the worker pool | 2090 // Pass the single-threaded synchronous task graph runner to the worker pool |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2196 request_ids, start_time, end_time, active_tree_->source_frame_number()); | 2190 request_ids, start_time, end_time, active_tree_->source_frame_number()); |
2197 } | 2191 } |
2198 | 2192 |
2199 void LayerTreeHostImpl::PostFrameTimingEvents( | 2193 void LayerTreeHostImpl::PostFrameTimingEvents( |
2200 scoped_ptr<FrameTimingTracker::CompositeTimingSet> composite_events, | 2194 scoped_ptr<FrameTimingTracker::CompositeTimingSet> composite_events, |
2201 scoped_ptr<FrameTimingTracker::MainFrameTimingSet> main_frame_events) { | 2195 scoped_ptr<FrameTimingTracker::MainFrameTimingSet> main_frame_events) { |
2202 client_->PostFrameTimingEventsOnImplThread(composite_events.Pass(), | 2196 client_->PostFrameTimingEventsOnImplThread(composite_events.Pass(), |
2203 main_frame_events.Pass()); | 2197 main_frame_events.Pass()); |
2204 } | 2198 } |
2205 | 2199 |
2206 void LayerTreeHostImpl::DestroyTileManager() { | 2200 void LayerTreeHostImpl::CleanUpTileManager() { |
2207 tile_manager_ = nullptr; | 2201 tile_manager_->FinishTasksAndCleanUp(); |
2208 resource_pool_ = nullptr; | 2202 resource_pool_ = nullptr; |
2209 staging_resource_pool_ = nullptr; | 2203 staging_resource_pool_ = nullptr; |
2210 tile_task_worker_pool_ = nullptr; | 2204 tile_task_worker_pool_ = nullptr; |
2211 single_thread_synchronous_task_graph_runner_ = nullptr; | 2205 single_thread_synchronous_task_graph_runner_ = nullptr; |
2212 } | 2206 } |
2213 | 2207 |
2214 bool LayerTreeHostImpl::IsSynchronousSingleThreaded() const { | 2208 bool LayerTreeHostImpl::IsSynchronousSingleThreaded() const { |
2215 return !proxy_->HasImplThread() && !settings_.single_thread_proxy_scheduler; | 2209 return !proxy_->HasImplThread() && !settings_.single_thread_proxy_scheduler; |
2216 } | 2210 } |
2217 | 2211 |
2218 bool LayerTreeHostImpl::InitializeRenderer( | 2212 bool LayerTreeHostImpl::InitializeRenderer( |
2219 scoped_ptr<OutputSurface> output_surface) { | 2213 scoped_ptr<OutputSurface> output_surface) { |
2220 TRACE_EVENT0("cc", "LayerTreeHostImpl::InitializeRenderer"); | 2214 TRACE_EVENT0("cc", "LayerTreeHostImpl::InitializeRenderer"); |
2221 | 2215 |
2222 // Since we will create a new resource provider, we cannot continue to use | 2216 // Since we will create a new resource provider, we cannot continue to use |
2223 // the old resources (i.e. render_surfaces and texture IDs). Clear them | 2217 // the old resources (i.e. render_surfaces and texture IDs). Clear them |
2224 // before we destroy the old resource provider. | 2218 // before we destroy the old resource provider. |
2225 ReleaseTreeResources(); | 2219 ReleaseTreeResources(); |
2226 | 2220 |
2227 // Note: order is important here. | 2221 // Note: order is important here. |
2228 renderer_ = nullptr; | 2222 renderer_ = nullptr; |
2229 DestroyTileManager(); | 2223 CleanUpTileManager(); |
2230 resource_provider_ = nullptr; | 2224 resource_provider_ = nullptr; |
2231 output_surface_ = nullptr; | 2225 output_surface_ = nullptr; |
2232 | 2226 |
2233 if (!output_surface->BindToClient(this)) { | 2227 if (!output_surface->BindToClient(this)) { |
2234 // Avoid recreating tree resources because we might not have enough | 2228 // Avoid recreating tree resources because we might not have enough |
2235 // information to do this yet (eg. we don't have a TileManager at this | 2229 // information to do this yet (eg. we don't have a TileManager at this |
2236 // point). | 2230 // point). |
2237 return false; | 2231 return false; |
2238 } | 2232 } |
2239 | 2233 |
2240 output_surface_ = output_surface.Pass(); | 2234 output_surface_ = output_surface.Pass(); |
2241 resource_provider_ = ResourceProvider::Create( | 2235 resource_provider_ = ResourceProvider::Create( |
2242 output_surface_.get(), shared_bitmap_manager_, gpu_memory_buffer_manager_, | 2236 output_surface_.get(), shared_bitmap_manager_, gpu_memory_buffer_manager_, |
2243 proxy_->blocking_main_thread_task_runner(), | 2237 proxy_->blocking_main_thread_task_runner(), |
2244 settings_.renderer_settings.highp_threshold_min, | 2238 settings_.renderer_settings.highp_threshold_min, |
2245 settings_.renderer_settings.use_rgba_4444_textures, | 2239 settings_.renderer_settings.use_rgba_4444_textures, |
2246 settings_.renderer_settings.texture_id_allocation_chunk_size, | 2240 settings_.renderer_settings.texture_id_allocation_chunk_size, |
2247 settings_.use_persistent_map_for_gpu_memory_buffers); | 2241 settings_.use_persistent_map_for_gpu_memory_buffers); |
2248 | 2242 |
2249 CreateAndSetRenderer(); | 2243 CreateAndSetRenderer(); |
2250 | 2244 |
2251 // Since the new renderer may be capable of MSAA, update status here. | 2245 // Since the new renderer may be capable of MSAA, update status here. |
2252 UpdateGpuRasterizationStatus(); | 2246 UpdateGpuRasterizationStatus(); |
2253 | 2247 |
2254 CreateAndSetTileManager(); | 2248 CreateTileManagerResources(); |
2255 RecreateTreeResources(); | 2249 RecreateTreeResources(); |
2256 | 2250 |
2257 // Initialize vsync parameters to sane values. | 2251 // Initialize vsync parameters to sane values. |
2258 const base::TimeDelta display_refresh_interval = | 2252 const base::TimeDelta display_refresh_interval = |
2259 base::TimeDelta::FromMicroseconds( | 2253 base::TimeDelta::FromMicroseconds( |
2260 base::Time::kMicrosecondsPerSecond / | 2254 base::Time::kMicrosecondsPerSecond / |
2261 settings_.renderer_settings.refresh_rate); | 2255 settings_.renderer_settings.refresh_rate); |
2262 CommitVSyncParameters(base::TimeTicks(), display_refresh_interval); | 2256 CommitVSyncParameters(base::TimeTicks(), display_refresh_interval); |
2263 | 2257 |
2264 // TODO(brianderson): Don't use a hard-coded parent draw time. | 2258 // TODO(brianderson): Don't use a hard-coded parent draw time. |
(...skipping 1348 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3613 if (active_tree()) { | 3607 if (active_tree()) { |
3614 LayerAnimationValueProvider* layer = active_tree()->LayerById(layer_id); | 3608 LayerAnimationValueProvider* layer = active_tree()->LayerById(layer_id); |
3615 if (layer) | 3609 if (layer) |
3616 return layer->ScrollOffsetForAnimation(); | 3610 return layer->ScrollOffsetForAnimation(); |
3617 } | 3611 } |
3618 | 3612 |
3619 return gfx::ScrollOffset(); | 3613 return gfx::ScrollOffset(); |
3620 } | 3614 } |
3621 | 3615 |
3622 } // namespace cc | 3616 } // namespace cc |
OLD | NEW |