| 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>
|
|
|