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 |