Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(202)

Side by Side Diff: cc/tile_manager.cc

Issue 12194015: cc: Rasterize cheap tiles immediately (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« cc/tile_manager.h ('K') | « cc/tile_manager.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
OLDNEW
« cc/tile_manager.h ('K') | « cc/tile_manager.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698