Index: cc/tiles/tile_manager.cc |
diff --git a/cc/tiles/tile_manager.cc b/cc/tiles/tile_manager.cc |
index cec859ff6299cec34f0213c2af97cb21ef744994..74f1707eb6bf2e8fd7724a2d571e348f033fd9c2 100644 |
--- a/cc/tiles/tile_manager.cc |
+++ b/cc/tiles/tile_manager.cc |
@@ -42,7 +42,7 @@ DEFINE_SCOPED_UMA_HISTOGRAM_AREA_TIMER( |
"Compositing.%s.RasterTask.RasterUs", |
"Compositing.%s.RasterTask.RasterPixelsPerMs"); |
-class RasterTaskImpl : public RasterTask { |
+class RasterTaskImpl : public TileTask { |
public: |
RasterTaskImpl(const Resource* resource, |
scoped_refptr<RasterSource> raster_source, |
@@ -59,8 +59,8 @@ class RasterTaskImpl : public RasterTask { |
uint64_t resource_content_id, |
int source_frame_number, |
const base::Callback<void(bool)>& reply, |
- ImageDecodeTask::Vector* dependencies) |
- : RasterTask(dependencies), |
+ TileTask::Vector* dependencies) |
+ : TileTask(true, dependencies), |
resource_(resource), |
raster_source_(std::move(raster_source)), |
content_rect_(content_rect), |
@@ -156,15 +156,18 @@ void InsertNodeForTask(TaskGraph* graph, |
} |
void InsertNodeForDecodeTask(TaskGraph* graph, |
- ImageDecodeTask* task, |
+ TileTask* task, |
uint16_t category, |
uint16_t priority) { |
uint32_t dependency_count = 0u; |
- auto* dependency = task->dependency().get(); |
- if (dependency && !dependency->HasCompleted()) { |
- InsertNodeForDecodeTask(graph, dependency, category, priority); |
- graph->edges.push_back(TaskGraph::Edge(dependency, task)); |
- dependency_count = 1u; |
+ if (task->dependencies().size()) { |
+ DCHECK_EQ(task->dependencies().size(), 1u); |
+ auto* dependency = task->dependencies()[0].get(); |
+ if (!dependency->HasCompleted()) { |
+ InsertNodeForDecodeTask(graph, dependency, category, priority); |
+ graph->edges.push_back(TaskGraph::Edge(dependency, task)); |
+ dependency_count = 1u; |
+ } |
} |
InsertNodeForTask(graph, task, task->SupportsConcurrentExecution() |
? category |
@@ -173,8 +176,8 @@ void InsertNodeForDecodeTask(TaskGraph* graph, |
} |
void InsertNodesForRasterTask(TaskGraph* graph, |
- RasterTask* raster_task, |
- const ImageDecodeTask::Vector& decode_tasks, |
+ TileTask* raster_task, |
+ const TileTask::Vector& decode_tasks, |
size_t priority, |
bool use_gpu_rasterization, |
bool high_priority) { |
@@ -198,9 +201,9 @@ void InsertNodesForRasterTask(TaskGraph* graph, |
high_priority ? TASK_CATEGORY_FOREGROUND : TASK_CATEGORY_BACKGROUND; |
// Insert image decode tasks. |
- for (ImageDecodeTask::Vector::const_iterator it = decode_tasks.begin(); |
+ for (TileTask::Vector::const_iterator it = decode_tasks.begin(); |
it != decode_tasks.end(); ++it) { |
- ImageDecodeTask* decode_task = it->get(); |
+ TileTask* decode_task = it->get(); |
// Skip if already decoded. |
if (decode_task->HasCompleted()) |
@@ -242,7 +245,8 @@ class TaskSetFinishedTaskImpl : public TileTask { |
explicit TaskSetFinishedTaskImpl( |
base::SequencedTaskRunner* task_runner, |
const base::Closure& on_task_set_finished_callback) |
- : task_runner_(task_runner), |
+ : TileTask(true), |
+ task_runner_(task_runner), |
on_task_set_finished_callback_(on_task_set_finished_callback) {} |
// Overridden from Task: |
@@ -779,7 +783,7 @@ void TileManager::ScheduleTasks( |
if (!tile->raster_task_) |
tile->raster_task_ = CreateRasterTask(prioritized_tile); |
- RasterTask* task = tile->raster_task_.get(); |
+ TileTask* task = tile->raster_task_.get(); |
DCHECK(!task->HasCompleted()); |
if (tile->required_for_activation()) { |
@@ -845,7 +849,7 @@ void TileManager::ScheduleTasks( |
ScheduledTasksStateAsValue()); |
} |
-scoped_refptr<RasterTask> TileManager::CreateRasterTask( |
+scoped_refptr<TileTask> TileManager::CreateRasterTask( |
const PrioritizedTile& prioritized_tile) { |
Tile* tile = prioritized_tile.tile(); |
@@ -872,7 +876,7 @@ scoped_refptr<RasterTask> TileManager::CreateRasterTask( |
prioritized_tile.priority().resolution == LOW_RESOLUTION; |
// Create and queue all image decode tasks that this tile depends on. |
- ImageDecodeTask::Vector decode_tasks; |
+ TileTask::Vector decode_tasks; |
std::vector<DrawImage>& images = scheduled_draw_images_[tile->id()]; |
images.clear(); |
if (!playback_settings.skip_images) { |
@@ -883,7 +887,7 @@ scoped_refptr<RasterTask> TileManager::CreateRasterTask( |
// We can skip the image hijack canvas if we have no images. |
playback_settings.use_image_hijack_canvas = !images.empty(); |
for (auto it = images.begin(); it != images.end();) { |
- scoped_refptr<ImageDecodeTask> task; |
+ scoped_refptr<TileTask> task; |
bool need_to_unref_when_finished = |
image_decode_controller_->GetTaskForImageAndRef( |
*it, prepare_tiles_count_, &task); |