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 91f0a33ed78f15ca110375ecea76d8f8a308d6ae..ce494063699f53f2a25094edf640e1b4e79ba175 100644 |
--- a/cc/tiles/gpu_image_decode_controller.cc |
+++ b/cc/tiles/gpu_image_decode_controller.cc |
@@ -67,6 +67,7 @@ class ImageDecodeTaskImpl : public ImageDecodeTask { |
image_ref_(skia::SharePtr(draw_image.image())), |
source_prepare_tiles_id_(source_prepare_tiles_id) { |
DCHECK(!SkipImage(draw_image)); |
+ SetTaskTypeId(TASK_TYPE_IMAGE_DECODE); |
} |
// Overridden from Task: |
@@ -76,16 +77,12 @@ class ImageDecodeTaskImpl : public ImageDecodeTask { |
controller_->DecodeImage(image_); |
} |
- // Overridden from TileTask: |
- void ScheduleOnOriginThread(TileTaskClient* client) override {} |
- void CompleteOnOriginThread(TileTaskClient* client) override { |
- controller_->DecodeTaskCompleted(image_); |
- } |
- |
protected: |
~ImageDecodeTaskImpl() override {} |
private: |
+ friend class GpuImageDecodeController; |
+ |
GpuImageDecodeController* controller_; |
DrawImage image_; |
skia::RefPtr<const SkImage> image_ref_; |
@@ -108,6 +105,7 @@ class ImageUploadTaskImpl : public ImageDecodeTask { |
image_(draw_image), |
image_ref_(skia::SharePtr(draw_image.image())), |
source_prepare_tiles_id_(source_prepare_tiles_id) { |
+ SetTaskTypeId(TASK_TYPE_IMAGE_UPLOAD); |
DCHECK(!SkipImage(draw_image)); |
} |
@@ -118,11 +116,6 @@ class ImageUploadTaskImpl : public ImageDecodeTask { |
controller_->UploadImage(image_); |
} |
- void ScheduleOnOriginThread(TileTaskClient* client) override {} |
- void CompleteOnOriginThread(TileTaskClient* client) override { |
- controller_->UploadTaskCompleted(image_); |
- } |
- |
// Override from ImageDecodeTask: |
bool SupportsConcurrentExecution() const override { return false; } |
@@ -130,6 +123,8 @@ class ImageUploadTaskImpl : public ImageDecodeTask { |
~ImageUploadTaskImpl() override {} |
private: |
+ friend class GpuImageDecodeController; |
+ |
GpuImageDecodeController* controller_; |
DrawImage image_; |
skia::RefPtr<const SkImage> image_ref_; |
@@ -344,6 +339,32 @@ void GpuImageDecodeController::SetShouldAggressivelyFreeResources( |
} |
} |
+void GpuImageDecodeController::ImageDecodeTaskCompleted(Task* task) { |
+ base::AutoLock lock(lock_); |
+ ImageDecodeTaskImpl* decode_task = static_cast<ImageDecodeTaskImpl*>(task); |
+ DCHECK(decode_task); |
+ // Decode task is complete, remove it from our list of pending tasks. |
+ pending_image_decode_tasks_.erase(decode_task->image_.image()->uniqueID()); |
+ |
+ // While the decode task is active, we keep a ref on the decoded data. |
+ // Release that ref now. |
+ UnrefImageDecode(decode_task->image_); |
+} |
+ |
+void GpuImageDecodeController::ImageUploadTaskCompleted(Task* task) { |
+ base::AutoLock lock(lock_); |
+ ImageUploadTaskImpl* upload_task = static_cast<ImageUploadTaskImpl*>(task); |
+ DCHECK(upload_task); |
+ // Upload task is complete, remove it from our list of pending tasks. |
+ pending_image_upload_tasks_.erase(upload_task->image_.image()->uniqueID()); |
+ |
+ // While the upload task is active, we keep a ref on both the image it will be |
+ // populating, as well as the decode it needs to populate it. Release these |
+ // refs now. |
+ UnrefImageDecode(upload_task->image_); |
+ UnrefImageInternal(upload_task->image_); |
+} |
+ |
void GpuImageDecodeController::DecodeImage(const DrawImage& draw_image) { |
base::AutoLock lock(lock_); |
auto found = image_data_.Peek(draw_image.image()->uniqueID()); |
@@ -361,30 +382,6 @@ void GpuImageDecodeController::UploadImage(const DrawImage& draw_image) { |
UploadImageIfNecessary(draw_image, found->second.get()); |
} |
-void GpuImageDecodeController::DecodeTaskCompleted( |
- const DrawImage& draw_image) { |
- base::AutoLock lock(lock_); |
- // Decode task is complete, remove it from our list of pending tasks. |
- pending_image_decode_tasks_.erase(draw_image.image()->uniqueID()); |
- |
- // While the decode task is active, we keep a ref on the decoded data. |
- // Release that ref now. |
- UnrefImageDecode(draw_image); |
-} |
- |
-void GpuImageDecodeController::UploadTaskCompleted( |
- const DrawImage& draw_image) { |
- base::AutoLock lock(lock_); |
- // Upload task is complete, remove it from our list of pending tasks. |
- pending_image_upload_tasks_.erase(draw_image.image()->uniqueID()); |
- |
- // While the upload task is active, we keep a ref on both the image it will be |
- // populating, as well as the decode it needs to populate it. Release these |
- // refs now. |
- UnrefImageDecode(draw_image); |
- UnrefImageInternal(draw_image); |
-} |
- |
// Checks if an existing image decode exists. If not, returns a task to produce |
// the requested decode. |
scoped_refptr<ImageDecodeTask> |