Index: cc/tiles/gpu_image_decode_controller.cc |
diff --git a/cc/tiles/gpu_image_decode_controller.cc b/cc/tiles/gpu_image_decode_controller.cc |
index ab683d69abc698c0a9435187e0c3e707ed953f31..b6aa1a611b71e1b4e66250c2870f690936068e45 100644 |
--- a/cc/tiles/gpu_image_decode_controller.cc |
+++ b/cc/tiles/gpu_image_decode_controller.cc |
@@ -57,12 +57,13 @@ SkImage::DeferredTextureImageUsageParams ParamsFromDrawImage( |
// Task which decodes an image and stores the result in discardable memory. |
// This task does not use GPU resources and can be run on any thread. |
-class ImageDecodeTaskImpl : public ImageDecodeTask { |
+class ImageDecodeTaskImpl : public TileTask { |
public: |
ImageDecodeTaskImpl(GpuImageDecodeController* controller, |
const DrawImage& draw_image, |
uint64_t source_prepare_tiles_id) |
- : controller_(controller), |
+ : TileTask(true), |
+ controller_(controller), |
image_(draw_image), |
image_ref_(skia::SharePtr(draw_image.image())), |
source_prepare_tiles_id_(source_prepare_tiles_id) { |
@@ -97,18 +98,19 @@ class ImageDecodeTaskImpl : public ImageDecodeTask { |
// Task which creates an image from decoded data. Typically this involves |
// uploading data to the GPU, which requires this task be run on the non- |
// concurrent thread. |
-class ImageUploadTaskImpl : public ImageDecodeTask { |
+class ImageUploadTaskImpl : public TileTask { |
public: |
ImageUploadTaskImpl(GpuImageDecodeController* controller, |
const DrawImage& draw_image, |
- scoped_refptr<ImageDecodeTask> decode_dependency, |
+ scoped_refptr<TileTask> decode_dependency, |
uint64_t source_prepare_tiles_id) |
- : ImageDecodeTask(std::move(decode_dependency)), |
+ : TileTask(false), |
controller_(controller), |
image_(draw_image), |
image_ref_(skia::SharePtr(draw_image.image())), |
source_prepare_tiles_id_(source_prepare_tiles_id) { |
DCHECK(!SkipImage(draw_image)); |
+ dependencies_.push_back(std::move(decode_dependency)); |
} |
// Override from Task: |
@@ -123,9 +125,6 @@ class ImageUploadTaskImpl : public ImageDecodeTask { |
controller_->UploadTaskCompleted(image_); |
} |
- // Override from ImageDecodeTask: |
- bool SupportsConcurrentExecution() const override { return false; } |
- |
protected: |
~ImageUploadTaskImpl() override {} |
@@ -174,7 +173,7 @@ GpuImageDecodeController::~GpuImageDecodeController() { |
bool GpuImageDecodeController::GetTaskForImageAndRef( |
const DrawImage& draw_image, |
uint64_t prepare_tiles_id, |
- scoped_refptr<ImageDecodeTask>* task) { |
+ scoped_refptr<TileTask>* task) { |
if (SkipImage(draw_image)) { |
*task = nullptr; |
return false; |
@@ -202,7 +201,7 @@ bool GpuImageDecodeController::GetTaskForImageAndRef( |
// We didn't have a pre-uploaded image, so we need an upload task. Try to find |
// an existing one. |
- scoped_refptr<ImageDecodeTask>& existing_task = |
+ scoped_refptr<TileTask>& existing_task = |
pending_image_upload_tasks_[image_id]; |
if (existing_task) { |
// We had an existing upload task, ref the image and return the task. |
@@ -387,9 +386,9 @@ void GpuImageDecodeController::UploadTaskCompleted( |
// Checks if an existing image decode exists. If not, returns a task to produce |
// the requested decode. |
-scoped_refptr<ImageDecodeTask> |
-GpuImageDecodeController::GetImageDecodeTaskAndRef(const DrawImage& draw_image, |
- uint64_t prepare_tiles_id) { |
+scoped_refptr<TileTask> GpuImageDecodeController::GetImageDecodeTaskAndRef( |
+ const DrawImage& draw_image, |
+ uint64_t prepare_tiles_id) { |
lock_.AssertAcquired(); |
const uint32_t image_id = draw_image.image()->uniqueID(); |
@@ -408,7 +407,7 @@ GpuImageDecodeController::GetImageDecodeTaskAndRef(const DrawImage& draw_image, |
} |
// We didn't have an existing locked image, create a task to lock or decode. |
- scoped_refptr<ImageDecodeTask>& existing_task = |
+ scoped_refptr<TileTask>& existing_task = |
pending_image_decode_tasks_[image_id]; |
if (!existing_task) { |
// Ref image decode and create a decode task. This ref will be released in |