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

Unified Diff: cc/resources/tile_manager.cc

Issue 165603002: cc: Move GPU raster to DirectRasterWorkerPool. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: remove rastertaskqueue changes and refactor worker pool delegate Created 6 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 side-by-side diff with in-line comments
Download patch
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,

Powered by Google App Engine
This is Rietveld 408576698