| OLD | NEW |
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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/tile_manager.h" | 5 #include "cc/tile_manager.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/debug/trace_event.h" | 10 #include "base/debug/trace_event.h" |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 111 } | 111 } |
| 112 | 112 |
| 113 ManagedTileState::~ManagedTileState() { | 113 ManagedTileState::~ManagedTileState() { |
| 114 DCHECK(!resource); | 114 DCHECK(!resource); |
| 115 DCHECK(!resource_is_being_initialized); | 115 DCHECK(!resource_is_being_initialized); |
| 116 } | 116 } |
| 117 | 117 |
| 118 TileManager::TileManager( | 118 TileManager::TileManager( |
| 119 TileManagerClient* client, | 119 TileManagerClient* client, |
| 120 ResourceProvider* resource_provider, | 120 ResourceProvider* resource_provider, |
| 121 size_t num_raster_threads) | 121 size_t num_raster_threads, |
| 122 bool record_rendering_stats) |
| 122 : client_(client), | 123 : client_(client), |
| 123 resource_pool_(ResourcePool::Create(resource_provider)), | 124 resource_pool_(ResourcePool::Create(resource_provider)), |
| 124 raster_worker_pool_(RasterWorkerPool::Create(num_raster_threads)), | 125 raster_worker_pool_(RasterWorkerPool::Create( |
| 126 num_raster_threads, record_rendering_stats)), |
| 125 manage_tiles_pending_(false), | 127 manage_tiles_pending_(false), |
| 126 manage_tiles_call_count_(0), | 128 manage_tiles_call_count_(0), |
| 127 bytes_pending_set_pixels_(0), | 129 bytes_pending_set_pixels_(0), |
| 128 ever_exceeded_memory_budget_(false) { | 130 ever_exceeded_memory_budget_(false), |
| 131 record_rendering_stats_(record_rendering_stats) { |
| 129 bool worker_pool_is_running = raster_worker_pool_->Start(); | 132 bool worker_pool_is_running = raster_worker_pool_->Start(); |
| 130 CHECK(worker_pool_is_running); | 133 CHECK(worker_pool_is_running); |
| 131 | 134 |
| 132 for (int i = 0; i < NUM_STATES; ++i) { | 135 for (int i = 0; i < NUM_STATES; ++i) { |
| 133 for (int j = 0; j < NUM_TREES; ++j) { | 136 for (int j = 0; j < NUM_TREES; ++j) { |
| 134 for (int k = 0; k < NUM_BINS; ++k) | 137 for (int k = 0; k < NUM_BINS; ++k) |
| 135 raster_state_count_[i][j][k] = 0; | 138 raster_state_count_[i][j][k] = 0; |
| 136 } | 139 } |
| 137 } | 140 } |
| 138 } | 141 } |
| (...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 398 GetMemoryStats(&memoryRequiredBytes, | 401 GetMemoryStats(&memoryRequiredBytes, |
| 399 &memoryNiceToHaveBytes, | 402 &memoryNiceToHaveBytes, |
| 400 &memoryUsedBytes); | 403 &memoryUsedBytes); |
| 401 requirements->SetInteger("memory_required_bytes", memoryRequiredBytes); | 404 requirements->SetInteger("memory_required_bytes", memoryRequiredBytes); |
| 402 requirements->SetInteger("memory_nice_to_have_bytes", memoryNiceToHaveBytes); | 405 requirements->SetInteger("memory_nice_to_have_bytes", memoryNiceToHaveBytes); |
| 403 requirements->SetInteger("memory_used_bytes", memoryUsedBytes); | 406 requirements->SetInteger("memory_used_bytes", memoryUsedBytes); |
| 404 return requirements.PassAs<base::Value>(); | 407 return requirements.PassAs<base::Value>(); |
| 405 } | 408 } |
| 406 | 409 |
| 407 void TileManager::GetRenderingStats(RenderingStats* stats) { | 410 void TileManager::GetRenderingStats(RenderingStats* stats) { |
| 411 DCHECK(record_rendering_stats_); |
| 408 raster_worker_pool_->GetRenderingStats(stats); | 412 raster_worker_pool_->GetRenderingStats(stats); |
| 409 stats->totalDeferredImageCacheHitCount = | 413 stats->totalDeferredImageCacheHitCount = |
| 410 rendering_stats_.totalDeferredImageCacheHitCount; | 414 rendering_stats_.totalDeferredImageCacheHitCount; |
| 411 stats->totalImageGatheringCount = rendering_stats_.totalImageGatheringCount; | 415 stats->totalImageGatheringCount = rendering_stats_.totalImageGatheringCount; |
| 412 stats->totalImageGatheringTime = | 416 stats->totalImageGatheringTime = |
| 413 rendering_stats_.totalImageGatheringTime; | 417 rendering_stats_.totalImageGatheringTime; |
| 414 } | 418 } |
| 415 | 419 |
| 416 bool TileManager::HasPendingWorkScheduled(WhichTree tree) const { | 420 bool TileManager::HasPendingWorkScheduled(WhichTree tree) const { |
| 417 // Always true when ManageTiles() call is pending. | 421 // Always true when ManageTiles() call is pending. |
| (...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 562 DispatchOneRasterTask(tile); | 566 DispatchOneRasterTask(tile); |
| 563 } | 567 } |
| 564 tiles_that_need_to_be_rasterized_.pop_back(); | 568 tiles_that_need_to_be_rasterized_.pop_back(); |
| 565 } | 569 } |
| 566 } | 570 } |
| 567 | 571 |
| 568 void TileManager::GatherPixelRefsForTile(Tile* tile) { | 572 void TileManager::GatherPixelRefsForTile(Tile* tile) { |
| 569 TRACE_EVENT0("cc", "TileManager::GatherPixelRefsForTile"); | 573 TRACE_EVENT0("cc", "TileManager::GatherPixelRefsForTile"); |
| 570 ManagedTileState& managed_state = tile->managed_state(); | 574 ManagedTileState& managed_state = tile->managed_state(); |
| 571 if (managed_state.need_to_gather_pixel_refs) { | 575 if (managed_state.need_to_gather_pixel_refs) { |
| 572 base::TimeTicks gather_begin_time = base::TimeTicks::Now(); | 576 base::TimeTicks gather_begin_time; |
| 577 if (record_rendering_stats_) |
| 578 gather_begin_time = base::TimeTicks::Now(); |
| 573 tile->picture_pile()->GatherPixelRefs( | 579 tile->picture_pile()->GatherPixelRefs( |
| 574 tile->content_rect_, | 580 tile->content_rect_, |
| 575 tile->contents_scale_, | 581 tile->contents_scale_, |
| 576 managed_state.pending_pixel_refs); | 582 managed_state.pending_pixel_refs); |
| 577 rendering_stats_.totalImageGatheringCount++; | |
| 578 rendering_stats_.totalImageGatheringTime += | |
| 579 base::TimeTicks::Now() - gather_begin_time; | |
| 580 managed_state.need_to_gather_pixel_refs = false; | 583 managed_state.need_to_gather_pixel_refs = false; |
| 584 if (record_rendering_stats_) { |
| 585 rendering_stats_.totalImageGatheringCount++; |
| 586 rendering_stats_.totalImageGatheringTime += |
| 587 base::TimeTicks::Now() - gather_begin_time; |
| 588 } |
| 581 } | 589 } |
| 582 } | 590 } |
| 583 | 591 |
| 584 void TileManager::DispatchImageDecodeTasksForTile(Tile* tile) { | 592 void TileManager::DispatchImageDecodeTasksForTile(Tile* tile) { |
| 585 GatherPixelRefsForTile(tile); | 593 GatherPixelRefsForTile(tile); |
| 586 std::list<skia::LazyPixelRef*>& pending_pixel_refs = | 594 std::list<skia::LazyPixelRef*>& pending_pixel_refs = |
| 587 tile->managed_state().pending_pixel_refs; | 595 tile->managed_state().pending_pixel_refs; |
| 588 std::list<skia::LazyPixelRef*>::iterator it = pending_pixel_refs.begin(); | 596 std::list<skia::LazyPixelRef*>::iterator it = pending_pixel_refs.begin(); |
| 589 while (it != pending_pixel_refs.end()) { | 597 while (it != pending_pixel_refs.end()) { |
| 590 if (pending_decode_tasks_.end() != pending_decode_tasks_.find( | 598 if (pending_decode_tasks_.end() != pending_decode_tasks_.find( |
| (...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 750 --raster_state_count_[mts.raster_state][tree][mts.tree_bin[tree]]; | 758 --raster_state_count_[mts.raster_state][tree][mts.tree_bin[tree]]; |
| 751 DCHECK_GE(raster_state_count_[mts.raster_state][tree][mts.tree_bin[tree]], 0); | 759 DCHECK_GE(raster_state_count_[mts.raster_state][tree][mts.tree_bin[tree]], 0); |
| 752 | 760 |
| 753 // Increment count for new bin. | 761 // Increment count for new bin. |
| 754 ++raster_state_count_[mts.raster_state][tree][bin]; | 762 ++raster_state_count_[mts.raster_state][tree][bin]; |
| 755 | 763 |
| 756 mts.tree_bin[tree] = bin; | 764 mts.tree_bin[tree] = bin; |
| 757 } | 765 } |
| 758 | 766 |
| 759 } // namespace cc | 767 } // namespace cc |
| OLD | NEW |