diff options
Diffstat (limited to 'cc')
-rw-r--r-- | cc/layers/picture_layer_impl.cc | 1 | ||||
-rw-r--r-- | cc/resources/tile_manager.cc | 6 | ||||
-rw-r--r-- | cc/resources/tile_manager.h | 13 | ||||
-rw-r--r-- | cc/test/fake_layer_tree_host_impl_client.h | 1 | ||||
-rw-r--r-- | cc/test/fake_tile_manager_client.h | 1 | ||||
-rw-r--r-- | cc/trees/layer_tree_host_impl.cc | 19 | ||||
-rw-r--r-- | cc/trees/layer_tree_host_impl.h | 6 | ||||
-rw-r--r-- | cc/trees/layer_tree_host_impl_unittest.cc | 1 | ||||
-rw-r--r-- | cc/trees/layer_tree_impl.cc | 2 | ||||
-rw-r--r-- | cc/trees/single_thread_proxy.cc | 4 | ||||
-rw-r--r-- | cc/trees/single_thread_proxy.h | 1 | ||||
-rw-r--r-- | cc/trees/thread_proxy.cc | 21 | ||||
-rw-r--r-- | cc/trees/thread_proxy.h | 2 |
13 files changed, 25 insertions, 53 deletions
diff --git a/cc/layers/picture_layer_impl.cc b/cc/layers/picture_layer_impl.cc index c130588..bc57bd7 100644 --- a/cc/layers/picture_layer_impl.cc +++ b/cc/layers/picture_layer_impl.cc @@ -362,6 +362,7 @@ void PictureLayerImpl::UpdateTilePriorities() { void PictureLayerImpl::DidBecomeActive() { LayerImpl::DidBecomeActive(); tilings_->DidBecomeActive(); + layer_tree_impl()->WillModifyTilePriorities(); } void PictureLayerImpl::DidBeginTracing() { diff --git a/cc/resources/tile_manager.cc b/cc/resources/tile_manager.cc index c5c07a5..2f81bec 100644 --- a/cc/resources/tile_manager.cc +++ b/cc/resources/tile_manager.cc @@ -126,7 +126,6 @@ TileManager::TileManager( : client_(client), resource_pool_(ResourcePool::Create(resource_provider)), raster_worker_pool_(raster_worker_pool.Pass()), - manage_tiles_pending_(false), ever_exceeded_memory_budget_(false), rendering_stats_instrumentation_(rendering_stats_instrumentation), use_color_estimator_(use_color_estimator), @@ -151,14 +150,12 @@ void TileManager::SetGlobalState( resource_pool_->SetMaxMemoryUsageBytes( global_state_.memory_limit_in_bytes, global_state_.unused_memory_limit_in_bytes); - ScheduleManageTiles(); } void TileManager::RegisterTile(Tile* tile) { DCHECK(std::find(tiles_.begin(), tiles_.end(), tile) == tiles_.end()); DCHECK(!tile->required_for_activation()); tiles_.push_back(tile); - ScheduleManageTiles(); } void TileManager::UnregisterTile(Tile* tile) { @@ -292,9 +289,6 @@ void TileManager::SortTiles() { void TileManager::ManageTiles() { TRACE_EVENT0("cc", "TileManager::ManageTiles"); - - manage_tiles_pending_ = false; - AssignBinsToTiles(); SortTiles(); AssignGpuMemoryToTiles(); diff --git a/cc/resources/tile_manager.h b/cc/resources/tile_manager.h index 8623820..03cc8308 100644 --- a/cc/resources/tile_manager.h +++ b/cc/resources/tile_manager.h @@ -37,7 +37,6 @@ enum TileRasterMode { class CC_EXPORT TileManagerClient { public: - virtual void ScheduleManageTiles() = 0; virtual void DidInitializeVisibleTile() = 0; virtual bool ShouldForceTileUploadsRequiredForActivationToComplete() const = 0; @@ -102,10 +101,6 @@ class CC_EXPORT TileManager { return memory_stats_from_last_assign_; } - void WillModifyTilePriorities() { - ScheduleManageTiles(); - } - bool AreTilesRequiredForActivationReady() const { return tiles_that_need_to_be_initialized_for_activation_.empty(); } @@ -145,12 +140,6 @@ class CC_EXPORT TileManager { void FreeResourceForTile(Tile* tile, TileRasterMode mode); void FreeResourcesForTile(Tile* tile); void FreeUnusedResourcesForTile(Tile* tile); - void ScheduleManageTiles() { - if (manage_tiles_pending_) - return; - client_->ScheduleManageTiles(); - manage_tiles_pending_ = true; - } RasterWorkerPool::Task CreateImageDecodeTask( Tile* tile, skia::LazyPixelRef* pixel_ref); void OnImageDecodeTaskCompleted( @@ -202,8 +191,6 @@ class CC_EXPORT TileManager { TileManagerClient* client_; scoped_ptr<ResourcePool> resource_pool_; scoped_ptr<RasterWorkerPool> raster_worker_pool_; - bool manage_tiles_pending_; - GlobalStateThatImpactsTilePriority global_state_; typedef std::vector<Tile*> TileVector; diff --git a/cc/test/fake_layer_tree_host_impl_client.h b/cc/test/fake_layer_tree_host_impl_client.h index 184bacc..dad4014 100644 --- a/cc/test/fake_layer_tree_host_impl_client.h +++ b/cc/test/fake_layer_tree_host_impl_client.h @@ -28,7 +28,6 @@ class FakeLayerTreeHostImplClient : public LayerTreeHostImplClient { virtual void SetNeedsRedrawRectOnImplThread(gfx::Rect damage_rect) OVERRIDE {} virtual void DidInitializeVisibleTileOnImplThread() OVERRIDE {} virtual void SetNeedsCommitOnImplThread() OVERRIDE {} - virtual void SetNeedsManageTilesOnImplThread() OVERRIDE {} virtual void PostAnimationEventsToMainThreadOnImplThread( scoped_ptr<AnimationEventsVector> events, base::Time wall_clock_time) OVERRIDE {} diff --git a/cc/test/fake_tile_manager_client.h b/cc/test/fake_tile_manager_client.h index faa444b..a031d8f 100644 --- a/cc/test/fake_tile_manager_client.h +++ b/cc/test/fake_tile_manager_client.h @@ -14,7 +14,6 @@ class FakeTileManagerClient : public TileManagerClient { virtual ~FakeTileManagerClient() {} // TileManagerClient implementation. - virtual void ScheduleManageTiles() OVERRIDE {} virtual void DidInitializeVisibleTile() OVERRIDE {} virtual bool ShouldForceTileUploadsRequiredForActivationToComplete() const OVERRIDE; diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc index d384ea7..ccd69d2 100644 --- a/cc/trees/layer_tree_host_impl.cc +++ b/cc/trees/layer_tree_host_impl.cc @@ -163,6 +163,7 @@ LayerTreeHostImpl::LayerTreeHostImpl( did_lock_scrolling_layer_(false), should_bubble_scrolls_(false), wheel_scrolling_(false), + manage_tiles_needed_(false), root_layer_scroll_offset_delegate_(NULL), settings_(settings), visible_(true), @@ -238,6 +239,8 @@ void LayerTreeHostImpl::CommitComplete() { if (settings_.impl_side_painting) { pending_tree_->set_needs_update_draw_properties(); pending_tree_->UpdateDrawProperties(); + // Start working on newly created tiles immediately if needed. + ManageTiles(); } else { active_tree_->set_needs_update_draw_properties(); } @@ -292,7 +295,11 @@ void LayerTreeHostImpl::Animate(base::TimeTicks monotonic_time, } void LayerTreeHostImpl::ManageTiles() { - DCHECK(tile_manager_); + if (!tile_manager_) + return; + if (!manage_tiles_needed_) + return; + manage_tiles_needed_ = false; tile_manager_->ManageTiles(); size_t memory_required_bytes; @@ -970,17 +977,13 @@ void LayerTreeHostImpl::UpdateTileManagerMemoryPolicy( policy.priority_cutoff_when_visible : policy.priority_cutoff_when_not_visible); tile_manager_->SetGlobalState(new_state); + manage_tiles_needed_ = true; } bool LayerTreeHostImpl::HasImplThread() const { return proxy_->HasImplThread(); } -void LayerTreeHostImpl::ScheduleManageTiles() { - if (client_) - client_->SetNeedsManageTilesOnImplThread(); -} - void LayerTreeHostImpl::DidInitializeVisibleTile() { // TODO(reveman): Determine tiles that changed and only damage // what's necessary. @@ -1338,6 +1341,9 @@ bool LayerTreeHostImpl::ActivatePendingTreeIfNeeded() { // TODO(enne): This needs to be moved somewhere else (post-animate?) pending_tree_->UpdateDrawProperties(); + // Note: This will likely cause ManageTiles to be needed. However, + // it is only out of date as far as the last commit or the last draw. + // For performance reasons, don't call ManageTiles again here. TRACE_EVENT_ASYNC_STEP1( "cc", @@ -2231,6 +2237,7 @@ void LayerTreeHostImpl::SetTreePriority(TreePriority priority) { new_state.tree_priority = priority; tile_manager_->SetGlobalState(new_state); + manage_tiles_needed_ = true; } void LayerTreeHostImpl::ResetCurrentFrameTimeForNextFrame() { diff --git a/cc/trees/layer_tree_host_impl.h b/cc/trees/layer_tree_host_impl.h index fee3f46..9c5ae5b 100644 --- a/cc/trees/layer_tree_host_impl.h +++ b/cc/trees/layer_tree_host_impl.h @@ -64,7 +64,6 @@ class LayerTreeHostImplClient { virtual void SetNeedsRedrawRectOnImplThread(gfx::Rect damage_rect) = 0; virtual void DidInitializeVisibleTileOnImplThread() = 0; virtual void SetNeedsCommitOnImplThread() = 0; - virtual void SetNeedsManageTilesOnImplThread() = 0; virtual void PostAnimationEventsToMainThreadOnImplThread( scoped_ptr<AnimationEventsVector> events, base::Time wall_clock_time) = 0; @@ -197,7 +196,6 @@ class CC_EXPORT LayerTreeHostImpl virtual bool AllowPartialSwap() const OVERRIDE; // TileManagerClient implementation. - virtual void ScheduleManageTiles() OVERRIDE; virtual void DidInitializeVisibleTile() OVERRIDE; virtual bool ShouldForceTileUploadsRequiredForActivationToComplete() const OVERRIDE; @@ -236,6 +234,7 @@ class CC_EXPORT LayerTreeHostImpl virtual bool SwapBuffers(const FrameData& frame); void SetNeedsBeginFrame(bool enable); + void SetNeedsManageTiles() { manage_tiles_needed_ = true; } void Readback(void* pixels, gfx::Rect rect_in_device_viewport); @@ -466,6 +465,9 @@ class CC_EXPORT LayerTreeHostImpl bool did_lock_scrolling_layer_; bool should_bubble_scrolls_; bool wheel_scrolling_; + + bool manage_tiles_needed_; + // The optional delegate for the root layer scroll offset. LayerScrollOffsetDelegate* root_layer_scroll_offset_delegate_; LayerTreeSettings settings_; diff --git a/cc/trees/layer_tree_host_impl_unittest.cc b/cc/trees/layer_tree_host_impl_unittest.cc index 9bb674a..2518fa3 100644 --- a/cc/trees/layer_tree_host_impl_unittest.cc +++ b/cc/trees/layer_tree_host_impl_unittest.cc @@ -120,7 +120,6 @@ class LayerTreeHostImplTest : public testing::Test, virtual void SetNeedsCommitOnImplThread() OVERRIDE { did_request_commit_ = true; } - virtual void SetNeedsManageTilesOnImplThread() OVERRIDE {} virtual void PostAnimationEventsToMainThreadOnImplThread( scoped_ptr<AnimationEventsVector> events, base::Time wall_clock_time) OVERRIDE {} diff --git a/cc/trees/layer_tree_impl.cc b/cc/trees/layer_tree_impl.cc index d36e841..432af98 100644 --- a/cc/trees/layer_tree_impl.cc +++ b/cc/trees/layer_tree_impl.cc @@ -564,7 +564,7 @@ void LayerTreeImpl::ClearLatencyInfo() { } void LayerTreeImpl::WillModifyTilePriorities() { - layer_tree_host_impl_->tile_manager()->WillModifyTilePriorities(); + layer_tree_host_impl_->SetNeedsManageTiles(); } } // namespace cc diff --git a/cc/trees/single_thread_proxy.cc b/cc/trees/single_thread_proxy.cc index e8d3e76..4bafe1c 100644 --- a/cc/trees/single_thread_proxy.cc +++ b/cc/trees/single_thread_proxy.cc @@ -282,10 +282,6 @@ void SingleThreadProxy::SetNeedsCommitOnImplThread() { layer_tree_host_->ScheduleComposite(); } -void SingleThreadProxy::SetNeedsManageTilesOnImplThread() { - layer_tree_host_->ScheduleComposite(); -} - void SingleThreadProxy::PostAnimationEventsToMainThreadOnImplThread( scoped_ptr<AnimationEventsVector> events, base::Time wall_clock_time) { diff --git a/cc/trees/single_thread_proxy.h b/cc/trees/single_thread_proxy.h index 6a963e80..0c3946b 100644 --- a/cc/trees/single_thread_proxy.h +++ b/cc/trees/single_thread_proxy.h @@ -61,7 +61,6 @@ class SingleThreadProxy : public Proxy, LayerTreeHostImplClient { virtual void SetNeedsRedrawRectOnImplThread(gfx::Rect dirty_rect) OVERRIDE; virtual void DidInitializeVisibleTileOnImplThread() OVERRIDE; virtual void SetNeedsCommitOnImplThread() OVERRIDE; - virtual void SetNeedsManageTilesOnImplThread() OVERRIDE; virtual void PostAnimationEventsToMainThreadOnImplThread( scoped_ptr<AnimationEventsVector> events, base::Time wall_clock_time) OVERRIDE; diff --git a/cc/trees/thread_proxy.cc b/cc/trees/thread_proxy.cc index d1c4471..5f92c61 100644 --- a/cc/trees/thread_proxy.cc +++ b/cc/trees/thread_proxy.cc @@ -384,21 +384,6 @@ void ThreadProxy::SetNeedsCommitOnImplThread() { scheduler_on_impl_thread_->SetNeedsCommit(); } -void ThreadProxy::SetNeedsManageTilesOnImplThread() { - if (manage_tiles_pending_) - return; - Proxy::ImplThread()->PostTask( - base::Bind(&ThreadProxy::ManageTilesOnImplThread, impl_thread_weak_ptr_)); - manage_tiles_pending_ = true; -} - -void ThreadProxy::ManageTilesOnImplThread() { - // TODO(nduca): If needed, move this into CCSchedulerStateMachine. - manage_tiles_pending_ = false; - if (layer_tree_host_impl_) - layer_tree_host_impl_->ManageTiles(); -} - void ThreadProxy::PostAnimationEventsToMainThreadOnImplThread( scoped_ptr<AnimationEventsVector> events, base::Time wall_clock_time) { @@ -986,6 +971,12 @@ ThreadProxy::ScheduledActionDrawAndSwapInternal(bool forced_draw) { if (draw_frame) CheckOutputSurfaceStatusOnImplThread(); + // Update the tile state after drawing. This prevents manage tiles from + // being in the critical path for getting things on screen, but still + // makes sure that tile state is updated on a semi-regular basis. + if (layer_tree_host_impl_->settings().impl_side_painting) + layer_tree_host_impl_->ManageTiles(); + return result; } diff --git a/cc/trees/thread_proxy.h b/cc/trees/thread_proxy.h index 8d62dd1..3cc905d 100644 --- a/cc/trees/thread_proxy.h +++ b/cc/trees/thread_proxy.h @@ -76,7 +76,6 @@ class ThreadProxy : public Proxy, virtual void SetNeedsRedrawRectOnImplThread(gfx::Rect dirty_rect) OVERRIDE; virtual void DidInitializeVisibleTileOnImplThread() OVERRIDE; virtual void SetNeedsCommitOnImplThread() OVERRIDE; - virtual void SetNeedsManageTilesOnImplThread() OVERRIDE; virtual void PostAnimationEventsToMainThreadOnImplThread( scoped_ptr<AnimationEventsVector> queue, base::Time wall_clock_time) OVERRIDE; @@ -176,7 +175,6 @@ class ThreadProxy : public Proxy, RendererCapabilities* capabilities); void FinishGLOnImplThread(CompletionEvent* completion); void LayerTreeHostClosedOnImplThread(CompletionEvent* completion); - void ManageTilesOnImplThread(); void AcquireLayerTexturesForMainThreadOnImplThread( CompletionEvent* completion); ScheduledActionDrawAndSwapResult ScheduledActionDrawAndSwapInternal( |