| 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 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 107 } | 107 } |
| 108 | 108 |
| 109 ManagedTileState::~ManagedTileState() { | 109 ManagedTileState::~ManagedTileState() { |
| 110 DCHECK(!resource); | 110 DCHECK(!resource); |
| 111 DCHECK(!resource_is_being_initialized); | 111 DCHECK(!resource_is_being_initialized); |
| 112 } | 112 } |
| 113 | 113 |
| 114 TileManager::TileManager( | 114 TileManager::TileManager( |
| 115 TileManagerClient* client, | 115 TileManagerClient* client, |
| 116 ResourceProvider* resource_provider, | 116 ResourceProvider* resource_provider, |
| 117 size_t num_raster_threads) | 117 size_t num_raster_threads, |
| 118 bool record_rendering_stats) |
| 118 : client_(client), | 119 : client_(client), |
| 119 resource_pool_(ResourcePool::Create(resource_provider)), | 120 resource_pool_(ResourcePool::Create(resource_provider)), |
| 120 raster_worker_pool_(RasterWorkerPool::Create(num_raster_threads)), | 121 raster_worker_pool_(RasterWorkerPool::Create(num_raster_threads, record_re
ndering_stats)), |
| 121 manage_tiles_pending_(false), | 122 manage_tiles_pending_(false), |
| 122 manage_tiles_call_count_(0), | 123 manage_tiles_call_count_(0), |
| 123 bytes_pending_set_pixels_(0), | 124 bytes_pending_set_pixels_(0), |
| 124 ever_exceeded_memory_budget_(false) { | 125 ever_exceeded_memory_budget_(false), |
| 126 record_rendering_stats_(record_rendering_stats) { |
| 125 for (int i = 0; i < NUM_STATES; ++i) { | 127 for (int i = 0; i < NUM_STATES; ++i) { |
| 126 for (int j = 0; j < NUM_TREES; ++j) { | 128 for (int j = 0; j < NUM_TREES; ++j) { |
| 127 for (int k = 0; k < NUM_BINS; ++k) | 129 for (int k = 0; k < NUM_BINS; ++k) |
| 128 raster_state_count_[i][j][k] = 0; | 130 raster_state_count_[i][j][k] = 0; |
| 129 } | 131 } |
| 130 } | 132 } |
| 131 } | 133 } |
| 132 | 134 |
| 133 TileManager::~TileManager() { | 135 TileManager::~TileManager() { |
| 134 // Reset global state and manage. This should cause | 136 // Reset global state and manage. This should cause |
| (...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 391 GetMemoryStats(&memoryRequiredBytes, | 393 GetMemoryStats(&memoryRequiredBytes, |
| 392 &memoryNiceToHaveBytes, | 394 &memoryNiceToHaveBytes, |
| 393 &memoryUsedBytes); | 395 &memoryUsedBytes); |
| 394 requirements->SetInteger("memory_required_bytes", memoryRequiredBytes); | 396 requirements->SetInteger("memory_required_bytes", memoryRequiredBytes); |
| 395 requirements->SetInteger("memory_nice_to_have_bytes", memoryNiceToHaveBytes); | 397 requirements->SetInteger("memory_nice_to_have_bytes", memoryNiceToHaveBytes); |
| 396 requirements->SetInteger("memory_used_bytes", memoryUsedBytes); | 398 requirements->SetInteger("memory_used_bytes", memoryUsedBytes); |
| 397 return requirements.PassAs<base::Value>(); | 399 return requirements.PassAs<base::Value>(); |
| 398 } | 400 } |
| 399 | 401 |
| 400 void TileManager::GetRenderingStats(RenderingStats* stats) { | 402 void TileManager::GetRenderingStats(RenderingStats* stats) { |
| 403 CHECK(record_rendering_stats_); |
| 401 raster_worker_pool_->GetRenderingStats(stats); | 404 raster_worker_pool_->GetRenderingStats(stats); |
| 402 stats->totalDeferredImageCacheHitCount = | 405 stats->totalDeferredImageCacheHitCount = |
| 403 rendering_stats_.totalDeferredImageCacheHitCount; | 406 rendering_stats_.totalDeferredImageCacheHitCount; |
| 404 stats->totalImageGatheringCount = rendering_stats_.totalImageGatheringCount; | 407 stats->totalImageGatheringCount = rendering_stats_.totalImageGatheringCount; |
| 405 stats->totalImageGatheringTime = | 408 stats->totalImageGatheringTime = |
| 406 rendering_stats_.totalImageGatheringTime; | 409 rendering_stats_.totalImageGatheringTime; |
| 407 } | 410 } |
| 408 | 411 |
| 409 bool TileManager::HasPendingWorkScheduled(WhichTree tree) const { | 412 bool TileManager::HasPendingWorkScheduled(WhichTree tree) const { |
| 410 // Always true when ManageTiles() call is pending. | 413 // Always true when ManageTiles() call is pending. |
| (...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 555 DispatchOneRasterTask(tile); | 558 DispatchOneRasterTask(tile); |
| 556 } | 559 } |
| 557 tiles_that_need_to_be_rasterized_.pop_back(); | 560 tiles_that_need_to_be_rasterized_.pop_back(); |
| 558 } | 561 } |
| 559 } | 562 } |
| 560 | 563 |
| 561 void TileManager::GatherPixelRefsForTile(Tile* tile) { | 564 void TileManager::GatherPixelRefsForTile(Tile* tile) { |
| 562 TRACE_EVENT0("cc", "TileManager::GatherPixelRefsForTile"); | 565 TRACE_EVENT0("cc", "TileManager::GatherPixelRefsForTile"); |
| 563 ManagedTileState& managed_state = tile->managed_state(); | 566 ManagedTileState& managed_state = tile->managed_state(); |
| 564 if (managed_state.need_to_gather_pixel_refs) { | 567 if (managed_state.need_to_gather_pixel_refs) { |
| 565 base::TimeTicks gather_begin_time = base::TimeTicks::Now(); | 568 base::TimeTicks gather_begin_time; |
| 569 if (record_rendering_stats_) |
| 570 gather_begin_time = base::TimeTicks::Now(); |
| 566 tile->picture_pile()->GatherPixelRefs( | 571 tile->picture_pile()->GatherPixelRefs( |
| 567 tile->content_rect_, | 572 tile->content_rect_, |
| 568 tile->contents_scale_, | 573 tile->contents_scale_, |
| 569 managed_state.pending_pixel_refs); | 574 managed_state.pending_pixel_refs); |
| 570 rendering_stats_.totalImageGatheringCount++; | |
| 571 rendering_stats_.totalImageGatheringTime += | |
| 572 base::TimeTicks::Now() - gather_begin_time; | |
| 573 managed_state.need_to_gather_pixel_refs = false; | 575 managed_state.need_to_gather_pixel_refs = false; |
| 576 if (record_rendering_stats_) { |
| 577 rendering_stats_.totalImageGatheringCount++; |
| 578 rendering_stats_.totalImageGatheringTime += |
| 579 base::TimeTicks::Now() - gather_begin_time; |
| 580 } |
| 574 } | 581 } |
| 575 } | 582 } |
| 576 | 583 |
| 577 void TileManager::DispatchImageDecodeTasksForTile(Tile* tile) { | 584 void TileManager::DispatchImageDecodeTasksForTile(Tile* tile) { |
| 578 GatherPixelRefsForTile(tile); | 585 GatherPixelRefsForTile(tile); |
| 579 std::list<skia::LazyPixelRef*>& pending_pixel_refs = | 586 std::list<skia::LazyPixelRef*>& pending_pixel_refs = |
| 580 tile->managed_state().pending_pixel_refs; | 587 tile->managed_state().pending_pixel_refs; |
| 581 std::list<skia::LazyPixelRef*>::iterator it = pending_pixel_refs.begin(); | 588 std::list<skia::LazyPixelRef*>::iterator it = pending_pixel_refs.begin(); |
| 582 while (it != pending_pixel_refs.end()) { | 589 while (it != pending_pixel_refs.end()) { |
| 583 if (pending_decode_tasks_.end() != pending_decode_tasks_.find( | 590 if (pending_decode_tasks_.end() != pending_decode_tasks_.find( |
| (...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 765 bitmap.setPixels(buffer); | 772 bitmap.setPixels(buffer); |
| 766 SkDevice device(bitmap); | 773 SkDevice device(bitmap); |
| 767 SkCanvas canvas(&device); | 774 SkCanvas canvas(&device); |
| 768 picture_pile->Raster(&canvas, rect, contents_scale, stats); | 775 picture_pile->Raster(&canvas, rect, contents_scale, stats); |
| 769 } | 776 } |
| 770 | 777 |
| 771 // static | 778 // static |
| 772 void TileManager::RunImageDecodeTask(skia::LazyPixelRef* pixel_ref, | 779 void TileManager::RunImageDecodeTask(skia::LazyPixelRef* pixel_ref, |
| 773 RenderingStats* stats) { | 780 RenderingStats* stats) { |
| 774 TRACE_EVENT0("cc", "TileManager::RunImageDecodeTask"); | 781 TRACE_EVENT0("cc", "TileManager::RunImageDecodeTask"); |
| 775 base::TimeTicks decode_begin_time = base::TimeTicks::Now(); | 782 base::TimeTicks decode_begin_time; |
| 783 if (stats) |
| 784 decode_begin_time = base::TimeTicks::Now(); |
| 776 pixel_ref->Decode(); | 785 pixel_ref->Decode(); |
| 777 stats->totalDeferredImageDecodeCount++; | 786 if (stats) { |
| 778 stats->totalDeferredImageDecodeTime += | 787 stats->totalDeferredImageDecodeCount++; |
| 779 base::TimeTicks::Now() - decode_begin_time; | 788 stats->totalDeferredImageDecodeTime += |
| 789 base::TimeTicks::Now() - decode_begin_time; |
| 790 } |
| 780 } | 791 } |
| 781 | 792 |
| 782 } // namespace cc | 793 } // namespace cc |
| OLD | NEW |