| 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 <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <algorithm> | 10 #include <algorithm> |
| (...skipping 966 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 977 | 977 |
| 978 if (!active_tree_->has_transparent_background()) { | 978 if (!active_tree_->has_transparent_background()) { |
| 979 frame->render_passes.back()->has_transparent_background = false; | 979 frame->render_passes.back()->has_transparent_background = false; |
| 980 AppendQuadsToFillScreen( | 980 AppendQuadsToFillScreen( |
| 981 active_tree_->RootScrollLayerDeviceViewportBounds(), | 981 active_tree_->RootScrollLayerDeviceViewportBounds(), |
| 982 frame->render_passes.back().get(), active_tree_->RootRenderSurface(), | 982 frame->render_passes.back().get(), active_tree_->RootRenderSurface(), |
| 983 active_tree_->background_color(), unoccluded_screen_space_region); | 983 active_tree_->background_color(), unoccluded_screen_space_region); |
| 984 } | 984 } |
| 985 | 985 |
| 986 RemoveRenderPasses(frame); | 986 RemoveRenderPasses(frame); |
| 987 renderer_->DecideRenderPassAllocationsForFrame(frame->render_passes); | |
| 988 | 987 |
| 989 if (have_copy_request) { | 988 if (have_copy_request) { |
| 990 // Any copy requests left in the tree are not going to get serviced, and | 989 // Any copy requests left in the tree are not going to get serviced, and |
| 991 // should be aborted. | 990 // should be aborted. |
| 992 active_tree()->property_trees()->effect_tree.ClearCopyRequests(); | 991 active_tree()->property_trees()->effect_tree.ClearCopyRequests(); |
| 993 | 992 |
| 994 // Draw properties depend on copy requests. | 993 // Draw properties depend on copy requests. |
| 995 active_tree()->set_needs_update_draw_properties(); | 994 active_tree()->set_needs_update_draw_properties(); |
| 996 } | 995 } |
| 997 | 996 |
| (...skipping 407 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1405 | 1404 |
| 1406 ManagedMemoryPolicy old_policy = ActualManagedMemoryPolicy(); | 1405 ManagedMemoryPolicy old_policy = ActualManagedMemoryPolicy(); |
| 1407 | 1406 |
| 1408 cached_managed_memory_policy_ = policy; | 1407 cached_managed_memory_policy_ = policy; |
| 1409 ManagedMemoryPolicy actual_policy = ActualManagedMemoryPolicy(); | 1408 ManagedMemoryPolicy actual_policy = ActualManagedMemoryPolicy(); |
| 1410 | 1409 |
| 1411 if (old_policy == actual_policy) | 1410 if (old_policy == actual_policy) |
| 1412 return; | 1411 return; |
| 1413 | 1412 |
| 1414 if (!task_runner_provider_->HasImplThread()) { | 1413 if (!task_runner_provider_->HasImplThread()) { |
| 1415 // In single-thread mode, this can be called on the main thread by | 1414 // REMOVE ME ? DebugScopedSetImplThread impl_thread(task_runner_provider_); |
| 1416 // GLRenderer::OnMemoryAllocationChanged. | |
| 1417 DebugScopedSetImplThread impl_thread(task_runner_provider_); | |
| 1418 UpdateTileManagerMemoryPolicy(actual_policy); | 1415 UpdateTileManagerMemoryPolicy(actual_policy); |
| 1419 } else { | 1416 } else { |
| 1420 DCHECK(task_runner_provider_->IsImplThread()); | 1417 DCHECK(task_runner_provider_->IsImplThread()); |
| 1421 UpdateTileManagerMemoryPolicy(actual_policy); | 1418 UpdateTileManagerMemoryPolicy(actual_policy); |
| 1422 } | 1419 } |
| 1423 | 1420 |
| 1424 // If there is already enough memory to draw everything imaginable and the | 1421 // If there is already enough memory to draw everything imaginable and the |
| 1425 // new memory limit does not change this, then do not re-commit. Don't bother | 1422 // new memory limit does not change this, then do not re-commit. Don't bother |
| 1426 // skipping commits if this is not visible (commits don't happen when not | 1423 // skipping commits if this is not visible (commits don't happen when not |
| 1427 // visible, there will almost always be a commit when this becomes visible). | 1424 // visible, there will almost always be a commit when this becomes visible). |
| (...skipping 28 matching lines...) Expand all Loading... |
| 1456 viewport_rect_for_tile_priority_ = | 1453 viewport_rect_for_tile_priority_ = |
| 1457 viewport_rect_for_tile_priority_in_view_space; | 1454 viewport_rect_for_tile_priority_in_view_space; |
| 1458 | 1455 |
| 1459 if (tile_priority_params_changed) { | 1456 if (tile_priority_params_changed) { |
| 1460 active_tree_->set_needs_update_draw_properties(); | 1457 active_tree_->set_needs_update_draw_properties(); |
| 1461 if (pending_tree_) | 1458 if (pending_tree_) |
| 1462 pending_tree_->set_needs_update_draw_properties(); | 1459 pending_tree_->set_needs_update_draw_properties(); |
| 1463 | 1460 |
| 1464 // Compositor, not OutputSurface, is responsible for setting damage and | 1461 // Compositor, not OutputSurface, is responsible for setting damage and |
| 1465 // triggering redraw for constraint changes. | 1462 // triggering redraw for constraint changes. |
| 1466 SetFullRootLayerDamage(); | 1463 SetFullViewportDamage(); |
| 1467 SetNeedsRedraw(); | 1464 SetNeedsRedraw(); |
| 1468 } | 1465 } |
| 1469 } | 1466 } |
| 1470 | 1467 |
| 1471 void LayerTreeHostImpl::SetNeedsRedrawRect(const gfx::Rect& damage_rect) { | 1468 void LayerTreeHostImpl::SetNeedsRedrawRect(const gfx::Rect& damage_rect) { |
| 1472 if (damage_rect.IsEmpty()) | 1469 if (damage_rect.IsEmpty()) |
| 1473 return; | 1470 return; |
| 1474 NotifySwapPromiseMonitorsOfSetNeedsRedraw(); | 1471 NotifySwapPromiseMonitorsOfSetNeedsRedraw(); |
| 1475 client_->SetNeedsRedrawRectOnImplThread(damage_rect); | 1472 client_->SetNeedsRedrawRectOnImplThread(damage_rect); |
| 1476 } | 1473 } |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1528 external_viewport_ = viewport; | 1525 external_viewport_ = viewport; |
| 1529 | 1526 |
| 1530 { | 1527 { |
| 1531 base::AutoReset<bool> resourceless_software_draw_reset( | 1528 base::AutoReset<bool> resourceless_software_draw_reset( |
| 1532 &resourceless_software_draw_, resourceless_software_draw); | 1529 &resourceless_software_draw_, resourceless_software_draw); |
| 1533 | 1530 |
| 1534 // For resourceless software draw, always set full damage to ensure they | 1531 // For resourceless software draw, always set full damage to ensure they |
| 1535 // always swap. Otherwise, need to set redraw for any changes to draw | 1532 // always swap. Otherwise, need to set redraw for any changes to draw |
| 1536 // parameters. | 1533 // parameters. |
| 1537 if (transform_changed || viewport_changed || resourceless_software_draw_) { | 1534 if (transform_changed || viewport_changed || resourceless_software_draw_) { |
| 1538 SetFullRootLayerDamage(); | 1535 SetFullViewportDamage(); |
| 1539 SetNeedsRedraw(); | 1536 SetNeedsRedraw(); |
| 1540 active_tree_->set_needs_update_draw_properties(); | 1537 active_tree_->set_needs_update_draw_properties(); |
| 1541 } | 1538 } |
| 1542 | 1539 |
| 1543 if (resourceless_software_draw) { | 1540 if (resourceless_software_draw) { |
| 1544 client_->OnCanDrawStateChanged(CanDraw()); | 1541 client_->OnCanDrawStateChanged(CanDraw()); |
| 1545 } | 1542 } |
| 1546 | 1543 |
| 1547 client_->OnDrawForOutputSurface(resourceless_software_draw_); | 1544 client_->OnDrawForOutputSurface(resourceless_software_draw_); |
| 1548 } | 1545 } |
| 1549 | 1546 |
| 1550 if (resourceless_software_draw) { | 1547 if (resourceless_software_draw) { |
| 1551 active_tree_->set_needs_update_draw_properties(); | 1548 active_tree_->set_needs_update_draw_properties(); |
| 1552 client_->OnCanDrawStateChanged(CanDraw()); | 1549 client_->OnCanDrawStateChanged(CanDraw()); |
| 1553 // This draw may have reset all damage, which would lead to subsequent | 1550 // This draw may have reset all damage, which would lead to subsequent |
| 1554 // incorrect hardware draw, so explicitly set damage for next hardware | 1551 // incorrect hardware draw, so explicitly set damage for next hardware |
| 1555 // draw as well. | 1552 // draw as well. |
| 1556 SetFullRootLayerDamage(); | 1553 SetFullViewportDamage(); |
| 1557 } | 1554 } |
| 1558 } | 1555 } |
| 1559 | 1556 |
| 1560 void LayerTreeHostImpl::OnCanDrawStateChangedForTree() { | 1557 void LayerTreeHostImpl::OnCanDrawStateChangedForTree() { |
| 1561 client_->OnCanDrawStateChanged(CanDraw()); | 1558 client_->OnCanDrawStateChanged(CanDraw()); |
| 1562 } | 1559 } |
| 1563 | 1560 |
| 1564 CompositorFrameMetadata LayerTreeHostImpl::MakeCompositorFrameMetadata() const { | 1561 CompositorFrameMetadata LayerTreeHostImpl::MakeCompositorFrameMetadata() const { |
| 1565 CompositorFrameMetadata metadata; | 1562 CompositorFrameMetadata metadata; |
| 1566 metadata.device_scale_factor = active_tree_->painted_device_scale_factor() * | 1563 metadata.device_scale_factor = active_tree_->painted_device_scale_factor() * |
| (...skipping 538 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2105 if (recycle_tree_) | 2102 if (recycle_tree_) |
| 2106 recycle_tree_->RecreateResources(); | 2103 recycle_tree_->RecreateResources(); |
| 2107 } | 2104 } |
| 2108 | 2105 |
| 2109 void LayerTreeHostImpl::CreateAndSetRenderer() { | 2106 void LayerTreeHostImpl::CreateAndSetRenderer() { |
| 2110 DCHECK(!renderer_); | 2107 DCHECK(!renderer_); |
| 2111 DCHECK(output_surface_); | 2108 DCHECK(output_surface_); |
| 2112 DCHECK(resource_provider_); | 2109 DCHECK(resource_provider_); |
| 2113 | 2110 |
| 2114 DCHECK(output_surface_->capabilities().delegated_rendering); | 2111 DCHECK(output_surface_->capabilities().delegated_rendering); |
| 2115 renderer_ = | 2112 renderer_ = base::MakeUnique<DelegatingRenderer>(output_surface_, |
| 2116 DelegatingRenderer::Create(this, &settings_.renderer_settings, | 2113 resource_provider_.get()); |
| 2117 output_surface_, resource_provider_.get()); | |
| 2118 renderer_->SetVisible(visible_); | 2114 renderer_->SetVisible(visible_); |
| 2119 SetFullRootLayerDamage(); | 2115 SetFullViewportDamage(); |
| 2120 | 2116 |
| 2121 // See note in LayerTreeImpl::UpdateDrawProperties. Renderer needs to be | 2117 // See note in LayerTreeImpl::UpdateDrawProperties. Renderer needs to be |
| 2122 // initialized to get max texture size. Also, after releasing resources, | 2118 // initialized to get max texture size. Also, after releasing resources, |
| 2123 // trees need another update to generate new ones. | 2119 // trees need another update to generate new ones. |
| 2124 active_tree_->set_needs_update_draw_properties(); | 2120 active_tree_->set_needs_update_draw_properties(); |
| 2125 if (pending_tree_) | 2121 if (pending_tree_) |
| 2126 pending_tree_->set_needs_update_draw_properties(); | 2122 pending_tree_->set_needs_update_draw_properties(); |
| 2127 client_->UpdateRendererCapabilitiesOnImplThread(); | 2123 client_->UpdateRendererCapabilitiesOnImplThread(); |
| 2128 } | 2124 } |
| 2129 | 2125 |
| 2130 void LayerTreeHostImpl::CreateTileManagerResources() { | 2126 void LayerTreeHostImpl::CreateTileManagerResources() { |
| 2131 CreateResourceAndRasterBufferProvider(&raster_buffer_provider_, | 2127 CreateResourceAndRasterBufferProvider(&raster_buffer_provider_, |
| (...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2357 device_viewport_size.width(), "height", | 2353 device_viewport_size.width(), "height", |
| 2358 device_viewport_size.height()); | 2354 device_viewport_size.height()); |
| 2359 | 2355 |
| 2360 if (pending_tree_) | 2356 if (pending_tree_) |
| 2361 active_tree_->SetViewportSizeInvalid(); | 2357 active_tree_->SetViewportSizeInvalid(); |
| 2362 | 2358 |
| 2363 device_viewport_size_ = device_viewport_size; | 2359 device_viewport_size_ = device_viewport_size; |
| 2364 | 2360 |
| 2365 UpdateViewportContainerSizes(); | 2361 UpdateViewportContainerSizes(); |
| 2366 client_->OnCanDrawStateChanged(CanDraw()); | 2362 client_->OnCanDrawStateChanged(CanDraw()); |
| 2367 SetFullRootLayerDamage(); | 2363 SetFullViewportDamage(); |
| 2368 active_tree_->set_needs_update_draw_properties(); | 2364 active_tree_->set_needs_update_draw_properties(); |
| 2369 } | 2365 } |
| 2370 | 2366 |
| 2371 const gfx::Rect LayerTreeHostImpl::ViewportRectForTilePriority() const { | 2367 const gfx::Rect LayerTreeHostImpl::ViewportRectForTilePriority() const { |
| 2372 if (viewport_rect_for_tile_priority_.IsEmpty()) | 2368 if (viewport_rect_for_tile_priority_.IsEmpty()) |
| 2373 return DeviceViewport(); | 2369 return DeviceViewport(); |
| 2374 | 2370 |
| 2375 return viewport_rect_for_tile_priority_; | 2371 return viewport_rect_for_tile_priority_; |
| 2376 } | 2372 } |
| 2377 | 2373 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 2388 | 2384 |
| 2389 const gfx::Transform& LayerTreeHostImpl::DrawTransform() const { | 2385 const gfx::Transform& LayerTreeHostImpl::DrawTransform() const { |
| 2390 return external_transform_; | 2386 return external_transform_; |
| 2391 } | 2387 } |
| 2392 | 2388 |
| 2393 void LayerTreeHostImpl::DidChangeTopControlsPosition() { | 2389 void LayerTreeHostImpl::DidChangeTopControlsPosition() { |
| 2394 UpdateViewportContainerSizes(); | 2390 UpdateViewportContainerSizes(); |
| 2395 SetNeedsRedraw(); | 2391 SetNeedsRedraw(); |
| 2396 SetNeedsOneBeginImplFrame(); | 2392 SetNeedsOneBeginImplFrame(); |
| 2397 active_tree_->set_needs_update_draw_properties(); | 2393 active_tree_->set_needs_update_draw_properties(); |
| 2398 SetFullRootLayerDamage(); | 2394 SetFullViewportDamage(); |
| 2399 } | 2395 } |
| 2400 | 2396 |
| 2401 float LayerTreeHostImpl::TopControlsHeight() const { | 2397 float LayerTreeHostImpl::TopControlsHeight() const { |
| 2402 return active_tree_->top_controls_height(); | 2398 return active_tree_->top_controls_height(); |
| 2403 } | 2399 } |
| 2404 | 2400 |
| 2405 void LayerTreeHostImpl::SetCurrentTopControlsShownRatio(float ratio) { | 2401 void LayerTreeHostImpl::SetCurrentTopControlsShownRatio(float ratio) { |
| 2406 if (active_tree_->SetCurrentTopControlsShownRatio(ratio)) | 2402 if (active_tree_->SetCurrentTopControlsShownRatio(ratio)) |
| 2407 DidChangeTopControlsPosition(); | 2403 DidChangeTopControlsPosition(); |
| 2408 } | 2404 } |
| (...skipping 758 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3167 void LayerTreeHostImpl::SetSynchronousInputHandlerRootScrollOffset( | 3163 void LayerTreeHostImpl::SetSynchronousInputHandlerRootScrollOffset( |
| 3168 const gfx::ScrollOffset& root_offset) { | 3164 const gfx::ScrollOffset& root_offset) { |
| 3169 bool changed = active_tree_->DistributeRootScrollOffset(root_offset); | 3165 bool changed = active_tree_->DistributeRootScrollOffset(root_offset); |
| 3170 if (!changed) | 3166 if (!changed) |
| 3171 return; | 3167 return; |
| 3172 | 3168 |
| 3173 client_->SetNeedsCommitOnImplThread(); | 3169 client_->SetNeedsCommitOnImplThread(); |
| 3174 // After applying the synchronous input handler's scroll offset, tell it what | 3170 // After applying the synchronous input handler's scroll offset, tell it what |
| 3175 // we ended up with. | 3171 // we ended up with. |
| 3176 UpdateRootLayerStateForSynchronousInputHandler(); | 3172 UpdateRootLayerStateForSynchronousInputHandler(); |
| 3177 SetFullRootLayerDamage(); | 3173 SetFullViewportDamage(); |
| 3178 SetNeedsRedraw(); | 3174 SetNeedsRedraw(); |
| 3179 } | 3175 } |
| 3180 | 3176 |
| 3181 void LayerTreeHostImpl::ClearCurrentlyScrollingLayer() { | 3177 void LayerTreeHostImpl::ClearCurrentlyScrollingLayer() { |
| 3182 active_tree_->ClearCurrentlyScrollingLayer(); | 3178 active_tree_->ClearCurrentlyScrollingLayer(); |
| 3183 did_lock_scrolling_layer_ = false; | 3179 did_lock_scrolling_layer_ = false; |
| 3184 scroll_affects_scroll_handler_ = false; | 3180 scroll_affects_scroll_handler_ = false; |
| 3185 accumulated_root_overscroll_ = gfx::Vector2dF(); | 3181 accumulated_root_overscroll_ = gfx::Vector2dF(); |
| 3186 } | 3182 } |
| 3187 | 3183 |
| (...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3353 active_tree_->page_scale_factor()->PullDeltaForMainThread(); | 3349 active_tree_->page_scale_factor()->PullDeltaForMainThread(); |
| 3354 scroll_info->top_controls_delta = | 3350 scroll_info->top_controls_delta = |
| 3355 active_tree()->top_controls_shown_ratio()->PullDeltaForMainThread(); | 3351 active_tree()->top_controls_shown_ratio()->PullDeltaForMainThread(); |
| 3356 scroll_info->elastic_overscroll_delta = | 3352 scroll_info->elastic_overscroll_delta = |
| 3357 active_tree_->elastic_overscroll()->PullDeltaForMainThread(); | 3353 active_tree_->elastic_overscroll()->PullDeltaForMainThread(); |
| 3358 scroll_info->swap_promises.swap(swap_promises_for_main_thread_scroll_update_); | 3354 scroll_info->swap_promises.swap(swap_promises_for_main_thread_scroll_update_); |
| 3359 | 3355 |
| 3360 return scroll_info; | 3356 return scroll_info; |
| 3361 } | 3357 } |
| 3362 | 3358 |
| 3363 void LayerTreeHostImpl::SetFullRootLayerDamage() { | 3359 void LayerTreeHostImpl::SetFullViewportDamage() { |
| 3364 SetViewportDamage(gfx::Rect(DrawViewportSize())); | 3360 SetViewportDamage(gfx::Rect(DrawViewportSize())); |
| 3365 } | 3361 } |
| 3366 | 3362 |
| 3367 void LayerTreeHostImpl::ScrollViewportInnerFirst(gfx::Vector2dF scroll_delta) { | 3363 void LayerTreeHostImpl::ScrollViewportInnerFirst(gfx::Vector2dF scroll_delta) { |
| 3368 DCHECK(InnerViewportScrollLayer()); | 3364 DCHECK(InnerViewportScrollLayer()); |
| 3369 LayerImpl* scroll_layer = InnerViewportScrollLayer(); | 3365 LayerImpl* scroll_layer = InnerViewportScrollLayer(); |
| 3370 | 3366 |
| 3371 gfx::Vector2dF unused_delta = scroll_layer->ScrollBy(scroll_delta); | 3367 gfx::Vector2dF unused_delta = scroll_layer->ScrollBy(scroll_delta); |
| 3372 if (!unused_delta.IsZero() && OuterViewportScrollLayer()) | 3368 if (!unused_delta.IsZero() && OuterViewportScrollLayer()) |
| 3373 OuterViewportScrollLayer()->ScrollBy(unused_delta); | 3369 OuterViewportScrollLayer()->ScrollBy(unused_delta); |
| (...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3642 state->EndDictionary(); | 3638 state->EndDictionary(); |
| 3643 } | 3639 } |
| 3644 | 3640 |
| 3645 void LayerTreeHostImpl::SetDebugState( | 3641 void LayerTreeHostImpl::SetDebugState( |
| 3646 const LayerTreeDebugState& new_debug_state) { | 3642 const LayerTreeDebugState& new_debug_state) { |
| 3647 if (LayerTreeDebugState::Equal(debug_state_, new_debug_state)) | 3643 if (LayerTreeDebugState::Equal(debug_state_, new_debug_state)) |
| 3648 return; | 3644 return; |
| 3649 | 3645 |
| 3650 debug_state_ = new_debug_state; | 3646 debug_state_ = new_debug_state; |
| 3651 UpdateTileManagerMemoryPolicy(ActualManagedMemoryPolicy()); | 3647 UpdateTileManagerMemoryPolicy(ActualManagedMemoryPolicy()); |
| 3652 SetFullRootLayerDamage(); | 3648 SetFullViewportDamage(); |
| 3653 } | 3649 } |
| 3654 | 3650 |
| 3655 void LayerTreeHostImpl::CreateUIResource(UIResourceId uid, | 3651 void LayerTreeHostImpl::CreateUIResource(UIResourceId uid, |
| 3656 const UIResourceBitmap& bitmap) { | 3652 const UIResourceBitmap& bitmap) { |
| 3657 DCHECK_GT(uid, 0); | 3653 DCHECK_GT(uid, 0); |
| 3658 | 3654 |
| 3659 // Allow for multiple creation requests with the same UIResourceId. The | 3655 // Allow for multiple creation requests with the same UIResourceId. The |
| 3660 // previous resource is simply deleted. | 3656 // previous resource is simply deleted. |
| 3661 ResourceId id = ResourceIdForUIResource(uid); | 3657 ResourceId id = ResourceIdForUIResource(uid); |
| 3662 if (id) | 3658 if (id) |
| (...skipping 360 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4023 return task_runner_provider_->HasImplThread(); | 4019 return task_runner_provider_->HasImplThread(); |
| 4024 } | 4020 } |
| 4025 | 4021 |
| 4026 bool LayerTreeHostImpl::CommitToActiveTree() const { | 4022 bool LayerTreeHostImpl::CommitToActiveTree() const { |
| 4027 // In single threaded mode we skip the pending tree and commit directly to the | 4023 // In single threaded mode we skip the pending tree and commit directly to the |
| 4028 // active tree. | 4024 // active tree. |
| 4029 return !task_runner_provider_->HasImplThread(); | 4025 return !task_runner_provider_->HasImplThread(); |
| 4030 } | 4026 } |
| 4031 | 4027 |
| 4032 } // namespace cc | 4028 } // namespace cc |
| OLD | NEW |