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 b7dbd55f116d1900fca133a64d710abf086376a3..69a3327e385edfd4b7b068563bb4316d578efeb7 100644 |
--- a/cc/tiles/gpu_image_decode_controller.cc |
+++ b/cc/tiles/gpu_image_decode_controller.cc |
@@ -62,7 +62,7 @@ class ImageDecodeTaskImpl : public TileTask { |
ImageDecodeTaskImpl(GpuImageDecodeController* controller, |
const DrawImage& draw_image, |
const ImageDecodeController::TracingInfo& tracing_info) |
- : TileTask(true), |
+ : TileTask(TileTask::Type::IMAGE_DECODE, true), |
controller_(controller), |
image_(draw_image), |
tracing_info_(tracing_info) { |
@@ -76,16 +76,12 @@ class ImageDecodeTaskImpl : public TileTask { |
controller_->DecodeImage(image_); |
} |
- // Overridden from TileTask: |
- void ScheduleOnOriginThread(RasterBufferProvider* provider) override {} |
- void CompleteOnOriginThread(RasterBufferProvider* provider) override { |
- controller_->DecodeTaskCompleted(image_); |
- } |
- |
protected: |
~ImageDecodeTaskImpl() override {} |
private: |
+ friend class GpuImageDecodeController; |
+ |
GpuImageDecodeController* controller_; |
DrawImage image_; |
const ImageDecodeController::TracingInfo tracing_info_; |
@@ -102,7 +98,7 @@ class ImageUploadTaskImpl : public TileTask { |
const DrawImage& draw_image, |
scoped_refptr<TileTask> decode_dependency, |
const ImageDecodeController::TracingInfo& tracing_info) |
- : TileTask(false), |
+ : TileTask(TileTask::Type::IMAGE_UPLOAD, false), |
controller_(controller), |
image_(draw_image), |
tracing_info_(tracing_info) { |
@@ -120,15 +116,12 @@ class ImageUploadTaskImpl : public TileTask { |
controller_->UploadImage(image_); |
} |
- void ScheduleOnOriginThread(RasterBufferProvider* provider) override {} |
- void CompleteOnOriginThread(RasterBufferProvider* provider) override { |
- controller_->UploadTaskCompleted(image_); |
- } |
- |
protected: |
~ImageUploadTaskImpl() override {} |
private: |
+ friend class GpuImageDecodeController; |
+ |
GpuImageDecodeController* controller_; |
DrawImage image_; |
const ImageDecodeController::TracingInfo tracing_info_; |
@@ -367,6 +360,32 @@ void GpuImageDecodeController::SetShouldAggressivelyFreeResources( |
} |
} |
+void GpuImageDecodeController::OnImageDecodeTaskCompleted(TileTask* 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::OnImageUploadTaskCompleted(TileTask* 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_); |
+} |
+ |
bool GpuImageDecodeController::OnMemoryDump( |
const base::trace_event::MemoryDumpArgs& args, |
base::trace_event::ProcessMemoryDump* pmd) { |
@@ -442,30 +461,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<TileTask> GpuImageDecodeController::GetImageDecodeTaskAndRef( |