Chromium Code Reviews| 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 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 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 bool record_rendering_stats, |
| 119 bool use_cheapness_estimator) | |
| 119 : client_(client), | 120 : client_(client), |
| 120 resource_pool_(ResourcePool::Create(resource_provider)), | 121 resource_pool_(ResourcePool::Create(resource_provider)), |
| 121 raster_worker_pool_(RasterWorkerPool::Create(num_raster_threads, record_re ndering_stats)), | 122 raster_worker_pool_(RasterWorkerPool::Create(num_raster_threads, record_re ndering_stats)), |
| 122 manage_tiles_pending_(false), | 123 manage_tiles_pending_(false), |
| 123 manage_tiles_call_count_(0), | 124 manage_tiles_call_count_(0), |
| 124 bytes_pending_set_pixels_(0), | 125 bytes_pending_set_pixels_(0), |
| 125 ever_exceeded_memory_budget_(false), | 126 ever_exceeded_memory_budget_(false), |
| 126 record_rendering_stats_(record_rendering_stats) { | 127 record_rendering_stats_(record_rendering_stats), |
| 128 use_cheapness_estimator_(use_cheapness_estimator) { | |
| 127 for (int i = 0; i < NUM_STATES; ++i) { | 129 for (int i = 0; i < NUM_STATES; ++i) { |
| 128 for (int j = 0; j < NUM_TREES; ++j) { | 130 for (int j = 0; j < NUM_TREES; ++j) { |
| 129 for (int k = 0; k < NUM_BINS; ++k) | 131 for (int k = 0; k < NUM_BINS; ++k) |
| 130 raster_state_count_[i][j][k] = 0; | 132 raster_state_count_[i][j][k] = 0; |
| 131 } | 133 } |
| 132 } | 134 } |
| 133 } | 135 } |
| 134 | 136 |
| 135 TileManager::~TileManager() { | 137 TileManager::~TileManager() { |
| 136 // Reset global state and manage. This should cause | 138 // Reset global state and manage. This should cause |
| (...skipping 503 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 640 resource_pool_->AcquireResource(tile->tile_size_.size(), tile->format_); | 642 resource_pool_->AcquireResource(tile->tile_size_.size(), tile->format_); |
| 641 resource_pool_->resource_provider()->acquirePixelBuffer(resource->id()); | 643 resource_pool_->resource_provider()->acquirePixelBuffer(resource->id()); |
| 642 | 644 |
| 643 managed_tile_state.resource_is_being_initialized = true; | 645 managed_tile_state.resource_is_being_initialized = true; |
| 644 managed_tile_state.can_be_freed = false; | 646 managed_tile_state.can_be_freed = false; |
| 645 | 647 |
| 646 DidTileRasterStateChange(tile, RASTER_STATE); | 648 DidTileRasterStateChange(tile, RASTER_STATE); |
| 647 | 649 |
| 648 ResourceProvider::ResourceId resource_id = resource->id(); | 650 ResourceProvider::ResourceId resource_id = resource->id(); |
| 649 | 651 |
| 652 if (use_cheapness_estimator_ && | |
| 653 tile->picture_pile()->IsCheapInRect(tile->content_rect_, | |
| 654 tile->contents_scale())) { | |
| 655 RunRasterTask(resource_pool_->resource_provider()->mapPixelBuffer( | |
|
Sami
2013/02/04 13:37:48
Just checking: do I need to clone the picture for
vangelis
2013/02/04 22:33:50
You're already on the impl thread here. It doesn't
reveman
2013/02/04 22:53:24
You shouldn't need that. All other threads possibl
| |
| 656 resource_id), | |
| 657 tile->content_rect_, | |
| 658 tile->contents_scale(), | |
| 659 tile->picture_pile(), | |
| 660 &rendering_stats_); | |
| 661 TileManager::OnRasterTaskCompleted(tile, resource.Pass(), | |
|
reveman
2013/02/04 22:53:24
nit: TileManager:: is unnecessary.
Sami
2013/02/05 12:26:23
Done.
| |
| 662 manage_tiles_call_count_); | |
| 663 return; | |
| 664 } | |
|
reveman
2013/02/04 22:53:24
I don't think all this belongs in DispatchOneRaste
Sami
2013/02/05 12:26:23
Agreed, it is a little misleading. I've now split
| |
| 665 | |
| 650 raster_worker_pool_->PostRasterTaskAndReply( | 666 raster_worker_pool_->PostRasterTaskAndReply( |
| 651 tile->picture_pile(), | 667 tile->picture_pile(), |
| 652 base::Bind(&TileManager::RunRasterTask, | 668 base::Bind(&TileManager::RunRasterTask, |
| 653 resource_pool_->resource_provider()->mapPixelBuffer( | 669 resource_pool_->resource_provider()->mapPixelBuffer( |
| 654 resource_id), | 670 resource_id), |
| 655 tile->content_rect_, | 671 tile->content_rect_, |
| 656 tile->contents_scale()), | 672 tile->contents_scale()), |
| 657 base::Bind(&TileManager::OnRasterTaskCompleted, | 673 base::Bind(&TileManager::OnRasterTaskCompletedByWorker, |
| 658 base::Unretained(this), | 674 base::Unretained(this), |
| 659 tile, | 675 tile, |
| 660 base::Passed(&resource), | 676 base::Passed(&resource), |
| 661 manage_tiles_call_count_)); | 677 manage_tiles_call_count_)); |
| 662 } | 678 } |
| 663 | 679 |
| 664 void TileManager::OnRasterTaskCompleted( | 680 void TileManager::OnRasterTaskCompleted( |
| 665 scoped_refptr<Tile> tile, | 681 scoped_refptr<Tile> tile, |
| 666 scoped_ptr<ResourcePool::Resource> resource, | 682 scoped_ptr<ResourcePool::Resource> resource, |
| 667 int manage_tiles_call_count_when_dispatched) { | 683 int manage_tiles_call_count_when_dispatched) { |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 699 | 715 |
| 700 bytes_pending_set_pixels_ += tile->bytes_consumed_if_allocated(); | 716 bytes_pending_set_pixels_ += tile->bytes_consumed_if_allocated(); |
| 701 DidTileRasterStateChange(tile, SET_PIXELS_STATE); | 717 DidTileRasterStateChange(tile, SET_PIXELS_STATE); |
| 702 tiles_with_pending_set_pixels_.push(tile); | 718 tiles_with_pending_set_pixels_.push(tile); |
| 703 } else { | 719 } else { |
| 704 resource_pool_->resource_provider()->releasePixelBuffer(resource->id()); | 720 resource_pool_->resource_provider()->releasePixelBuffer(resource->id()); |
| 705 resource_pool_->ReleaseResource(resource.Pass()); | 721 resource_pool_->ReleaseResource(resource.Pass()); |
| 706 managed_tile_state.resource_is_being_initialized = false; | 722 managed_tile_state.resource_is_being_initialized = false; |
| 707 DidTileRasterStateChange(tile, IDLE_STATE); | 723 DidTileRasterStateChange(tile, IDLE_STATE); |
| 708 } | 724 } |
| 725 } | |
| 709 | 726 |
| 727 void TileManager::OnRasterTaskCompletedByWorker( | |
| 728 scoped_refptr<Tile> tile, | |
| 729 scoped_ptr<ResourcePool::Resource> resource, | |
| 730 int manage_tiles_call_count_when_dispatched) { | |
| 731 OnRasterTaskCompleted(tile, resource.Pass(), | |
|
vangelis
2013/02/04 22:33:50
In the "cheap tile" case, don't you still need to
| |
| 732 manage_tiles_call_count_when_dispatched); | |
| 710 DispatchMoreTasks(); | 733 DispatchMoreTasks(); |
| 711 } | 734 } |
| 712 | 735 |
| 713 void TileManager::DidFinishTileInitialization(Tile* tile) { | 736 void TileManager::DidFinishTileInitialization(Tile* tile) { |
| 714 ManagedTileState& managed_tile_state = tile->managed_state(); | 737 ManagedTileState& managed_tile_state = tile->managed_state(); |
| 715 DCHECK(managed_tile_state.resource); | 738 DCHECK(managed_tile_state.resource); |
| 716 managed_tile_state.resource_is_being_initialized = false; | 739 managed_tile_state.resource_is_being_initialized = false; |
| 717 managed_tile_state.can_be_freed = true; | 740 managed_tile_state.can_be_freed = true; |
| 718 } | 741 } |
| 719 | 742 |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 774 decode_begin_time = base::TimeTicks::Now(); | 797 decode_begin_time = base::TimeTicks::Now(); |
| 775 pixel_ref->Decode(); | 798 pixel_ref->Decode(); |
| 776 if (stats) { | 799 if (stats) { |
| 777 stats->totalDeferredImageDecodeCount++; | 800 stats->totalDeferredImageDecodeCount++; |
| 778 stats->totalDeferredImageDecodeTime += | 801 stats->totalDeferredImageDecodeTime += |
| 779 base::TimeTicks::Now() - decode_begin_time; | 802 base::TimeTicks::Now() - decode_begin_time; |
| 780 } | 803 } |
| 781 } | 804 } |
| 782 | 805 |
| 783 } // namespace cc | 806 } // namespace cc |
| OLD | NEW |