Index: cc/resources/tile_manager.cc |
diff --git a/cc/resources/tile_manager.cc b/cc/resources/tile_manager.cc |
index cd9adfaac1206a5b80d0f6ad18ae894beb086355..b7cb5acc88fe06d5426563ce8db1ce7b3ced1d46 100644 |
--- a/cc/resources/tile_manager.cc |
+++ b/cc/resources/tile_manager.cc |
@@ -13,14 +13,14 @@ |
#include "base/logging.h" |
#include "base/metrics/histogram.h" |
#include "cc/debug/traced_value.h" |
+#include "cc/resources/direct_raster_worker_pool.h" |
#include "cc/resources/image_raster_worker_pool.h" |
#include "cc/resources/pixel_buffer_raster_worker_pool.h" |
+#include "cc/resources/raster_worker_pool_delegate.h" |
#include "cc/resources/tile.h" |
-#include "third_party/skia/include/core/SkCanvas.h" |
#include "ui/gfx/rect_conversions.h" |
namespace cc { |
- |
namespace { |
// Memory limit policy works by mapping some bin states to the NEVER bin. |
@@ -157,13 +157,12 @@ scoped_ptr<TileManager> TileManager::Create( |
return make_scoped_ptr(new TileManager( |
client, |
resource_provider, |
- use_map_image |
- ? ImageRasterWorkerPool::Create( |
- resource_provider, context_provider, map_image_texture_target) |
- : PixelBufferRasterWorkerPool::Create( |
- resource_provider, |
- context_provider, |
- max_transfer_buffer_usage_bytes), |
+ context_provider, |
+ use_map_image ? ImageRasterWorkerPool::Create(resource_provider, |
+ map_image_texture_target) |
+ : PixelBufferRasterWorkerPool::Create( |
+ resource_provider, max_transfer_buffer_usage_bytes), |
+ DirectRasterWorkerPool::Create(resource_provider, context_provider), |
max_raster_usage_bytes, |
rendering_stats_instrumentation, |
use_rasterize_on_demand)); |
@@ -172,7 +171,9 @@ scoped_ptr<TileManager> TileManager::Create( |
TileManager::TileManager( |
TileManagerClient* client, |
ResourceProvider* resource_provider, |
+ ContextProvider* context_provider, |
scoped_ptr<RasterWorkerPool> raster_worker_pool, |
+ scoped_ptr<RasterWorkerPool> direct_raster_worker_pool, |
size_t max_raster_usage_bytes, |
RenderingStatsInstrumentation* rendering_stats_instrumentation, |
bool use_rasterize_on_demand) |
@@ -182,6 +183,7 @@ TileManager::TileManager( |
raster_worker_pool->GetResourceTarget(), |
raster_worker_pool->GetResourceFormat())), |
raster_worker_pool_(raster_worker_pool.Pass()), |
+ direct_raster_worker_pool_(direct_raster_worker_pool.Pass()), |
prioritized_tiles_dirty_(false), |
all_tiles_that_need_to_be_rasterized_have_memory_(true), |
all_tiles_required_for_activation_have_memory_(true), |
@@ -195,7 +197,12 @@ TileManager::TileManager( |
did_initialize_visible_tile_(false), |
did_check_for_completed_tasks_since_last_schedule_tasks_(true), |
use_rasterize_on_demand_(use_rasterize_on_demand) { |
- raster_worker_pool_->SetClient(this); |
+ RasterWorkerPool* raster_worker_pools[NUM_RASTER_WORKER_POOL_TYPES] = { |
+ raster_worker_pool_.get(), direct_raster_worker_pool_.get(), }; |
vmpstr
2014/02/14 23:47:24
nit: No need for the trailing comma.
reveman
2014/02/15 00:02:45
Done.
|
+ raster_worker_pool_delegate_ = RasterWorkerPoolDelegate::Create( |
+ this, |
+ raster_worker_pools, |
+ raster_worker_pools + arraysize(raster_worker_pools)); |
vmpstr
2014/02/14 23:47:24
nit: Maybe pass NUM_RASTER_WORKER_POOL_TYPES inste
reveman
2014/02/15 00:02:45
Done. Passing arraysize.
|
} |
TileManager::~TileManager() { |
@@ -206,13 +213,13 @@ TileManager::~TileManager() { |
CleanUpReleasedTiles(); |
DCHECK_EQ(0u, tiles_.size()); |
- RasterWorkerPool::RasterTask::Queue empty; |
- raster_worker_pool_->ScheduleTasks(&empty); |
+ RasterWorkerPool::RasterTask::Queue empty[NUM_RASTER_WORKER_POOL_TYPES]; |
+ raster_worker_pool_delegate_->ScheduleTasks(empty); |
// This should finish all pending tasks and release any uninitialized |
// resources. |
- raster_worker_pool_->Shutdown(); |
- raster_worker_pool_->CheckForCompletedTasks(); |
+ raster_worker_pool_delegate_->Shutdown(); |
+ raster_worker_pool_delegate_->CheckForCompletedTasks(); |
DCHECK_EQ(0u, bytes_releasable_); |
DCHECK_EQ(0u, resources_releasable_); |
@@ -275,7 +282,7 @@ void TileManager::DidFinishRunningTasks() { |
if (all_tiles_that_need_to_be_rasterized_have_memory_) |
return; |
- raster_worker_pool_->CheckForCompletedTasks(); |
+ raster_worker_pool_delegate_->CheckForCompletedTasks(); |
did_check_for_completed_tasks_since_last_schedule_tasks_ = true; |
TileVector tiles_that_need_to_be_rasterized; |
@@ -470,7 +477,7 @@ void TileManager::ManageTiles(const GlobalStateThatImpactsTilePriority& state) { |
// We need to call CheckForCompletedTasks() once in-between each call |
// to ScheduleTasks() to prevent canceled tasks from being scheduled. |
if (!did_check_for_completed_tasks_since_last_schedule_tasks_) { |
- raster_worker_pool_->CheckForCompletedTasks(); |
+ raster_worker_pool_delegate_->CheckForCompletedTasks(); |
did_check_for_completed_tasks_since_last_schedule_tasks_ = true; |
} |
@@ -499,7 +506,7 @@ void TileManager::ManageTiles(const GlobalStateThatImpactsTilePriority& state) { |
bool TileManager::UpdateVisibleTiles() { |
TRACE_EVENT0("cc", "TileManager::UpdateVisibleTiles"); |
- raster_worker_pool_->CheckForCompletedTasks(); |
+ raster_worker_pool_delegate_->CheckForCompletedTasks(); |
did_check_for_completed_tasks_since_last_schedule_tasks_ = true; |
TRACE_EVENT_INSTANT1( |
@@ -776,7 +783,8 @@ void TileManager::ScheduleTasks( |
DCHECK(did_check_for_completed_tasks_since_last_schedule_tasks_); |
- raster_tasks_.Reset(); |
+ for (size_t i = 0; i < NUM_RASTER_WORKER_POOL_TYPES; ++i) |
+ raster_queue_[i].Reset(); |
// Build a new task queue containing all task currently needed. Tasks |
// are added in order of priority, highest priority task first. |
@@ -794,8 +802,12 @@ void TileManager::ScheduleTasks( |
if (tile_version.raster_task_.is_null()) |
tile_version.raster_task_ = CreateRasterTask(tile); |
- raster_tasks_.Append(tile_version.raster_task_, |
- tile->required_for_activation()); |
+ size_t pool_type = tile->use_gpu_rasterization() |
+ ? RASTER_WORKER_POOL_TYPE_DIRECT |
+ : RASTER_WORKER_POOL_TYPE_DEFAULT; |
+ |
+ raster_queue_[pool_type] |
+ .Append(tile_version.raster_task_, tile->required_for_activation()); |
} |
// We must reduce the amount of unused resoruces before calling |
@@ -805,7 +817,7 @@ void TileManager::ScheduleTasks( |
// Schedule running of |raster_tasks_|. This replaces any previously |
// scheduled tasks and effectively cancels all tasks not present |
// in |raster_tasks_|. |
- raster_worker_pool_->ScheduleTasks(&raster_tasks_); |
+ raster_worker_pool_delegate_->ScheduleTasks(raster_queue_); |
did_check_for_completed_tasks_since_last_schedule_tasks_ = false; |
} |
@@ -863,14 +875,14 @@ RasterWorkerPool::RasterTask TileManager::CreateRasterTask(Tile* tile) { |
tile->layer_id(), |
static_cast<const void*>(tile), |
tile->source_frame_number(), |
- tile->use_gpu_rasterization(), |
rendering_stats_instrumentation_, |
base::Bind(&TileManager::OnRasterTaskCompleted, |
base::Unretained(this), |
tile->id(), |
base::Passed(&resource), |
mts.raster_mode), |
- &decode_tasks); |
+ &decode_tasks, |
+ context_provider_); |
} |
void TileManager::OnImageDecodeTaskCompleted(int layer_id, |